LABORATORIUM TM Cel laboratorium

Podobne dokumenty
LABORATORIUM TM 5. Piotr Błędowski Maciej Pawlak. 1. Cel laboratorium

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

JTAG. Specjalną, darmową wersję (z ograniczeniem generowanego kodu), która nosi nazwę Kickstart,

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

TM Kolos 2 Cennik 05/10

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

ĆWICZENIE. TEMAT: OBSŁUGA PRZETWORNIKA A/C W ukontrolerze 80C535 KEILuVISON

Metody obsługi zdarzeń

Wskaźniki w C. Anna Gogolińska

Wstęp do informatyki- wykład 7

Instrukcja do ćwiczeń

Zasady programowania Dokumentacja

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Politechnika Warszawska

Instrukcja obsługi elektronicznego licznika typu 524. Model 524. Licznik sumujący i wskaźnik pozycji typu Opis. 1. Opis

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

STEROWANIE MASZYN I URZĄDZEŃ I. Laboratorium. 4. Przekaźniki czasowe

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

Instytut Teleinformatyki

2 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania w języku C i C++

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Instytut Teleinformatyki

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Listing_ $crystal = deklaracja

Pytania sprawdzające wiedzę z programowania C++

Programowanie komputerowe. Zajęcia 4

Timery w mikrokontrolerach STM32F3

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

Generator funkcyjny. Spis treści. Działanie. Interfejs. Adam Miarka Maksymilian Szczepanik

Lista instrukcji mikroprocesora Programowanie w assemblerze

while(wyrażenie) instrukcja

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Instytut Teleinformatyki

Programowanie mikrokontrolerów - laboratorium

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Temat: System przerwań, liczniki i wyświetlacz w STRC51. Ćwiczenie 3.

Zmienne i struktury dynamiczne

Instytut Teleinformatyki

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Technika mikroprocesorowa I Wykład 2

INSTRUKCJA OBSŁUGI TABLICY WYNIKÓW SPORTOWYCH SERIA PROFI

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Aplikacja Sieciowa wątki po stronie klienta

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Sterownik RO WS-01E opis działania, obsługa

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

INSTRUKCJA OBSŁUGI AUTOMATYCZNA STACJA UZDATNIANIA WODY. SERIA LOGIX i PERFORMA STEROWANIE OBJĘTOŚCIOWE STEROWANIE CZASOWE FILTR

Start Bity Bit Stop 1 Bit Par Rys. 1

Immobilizer samochodowy otwierający dostęp poprzez kod czteroznakowy.

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Mikrokontrolery wytyczne do projektów

Układy VLSI Bramki 1.0

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Tematem projektu jest oparty na Arduino zegar pokazujący godzinę oraz datę.

Mikrokontrolery AVR Wprowadzenie

Kompilator języka C na procesor 8051 RC51 implementacja

Język C zajęcia nr 11. Funkcje

Instytut Teleinformatyki

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Mikrooperacje. Mikrooperacje arytmetyczne

Wstęp. do języka C na procesor (kompilator RC51)

Przerwania, polling, timery - wykład 9

Przykładowe pytania DSP 1

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

ActionLab - oprogramowanie do tworzenia labiryntów interaktywnych V1.0.1

Instytut Teleinformatyki

INSTRUKCJA OBSŁUGI TABLICY WYNIKÓW SPORTOWYCH SERIA PROFI

Ćwiczenia podstawowe, zestaw 5, część 1

- - Ocena wykonaniu zad3. Brak zad3

Widok z przodu panelu sterującego. Seite 14. FIRMA SPARE

Menu główne FUNKCJE SERWISOWE

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Mechanizm zarządzania bazą towarową Quattro i kas firmy ELZAB Wersja RMC 1.9

Transkrypt:

LABORATORIUM TM 4 07.05.2010 1. Cel laboratorium Zadaniem polegało na zaprojektowaniu oraz realizacji dynamicznego wyświetlania, na 8- pozycyjnym wyświetlaczu LED, przesuwanego napisu o stałej treści. Przy naciśnięciu przycisku kierunek ruchu ulega zmianie. 2. Schemat połączenia 3. Kod programu: #include <msp430x14x.h> Tablica odwzorowania kodu binarnego na litery short int _C_ = 0x4E; short int _O_ = 0x7E; short int _A_ = 0x77; short int _L_ = 0x0E; Tablica ktora przechowuje nasz napis w trakcie dzialania progamu nie ulega zmianie short int tablica[8]; Zmienna okreslajaca od ktorej litery tablicy zaczynamy wyswietlanie napisu na wyswietlaczu. short int d;

Zmienna przechowuje informacje o tym, ktora aktualnie litere mamy odswiezyc. Sluzy tylko do odswiezania napisu, nie do jego przesuwania short int litera; 8 bitowa zmienna ktora wskazuje, do ktorej pozycji wyswietlacza aktualnie piszemy unsigned char przesuniecie; Zmienna okresla czy w aktualnym cyklu timera odswiezamy pozycje wyswietlacza, czy piszemy do niej int wygaszanie; Licznik stanu wystapienia stanu niskiego na przycisku. Sluzy do odszumiania i probkowania w celu stwierdzenai, czy na pewno zostal wcisniety przycisk zmainy kierunku wyswietlacza int przycisk = 0; Zmienna przechowuje stan licznika programowego, sluzacego do przesuwania napisu int counter = 600; Zmienna przechowuje kierunek w ktorym sie poruszamy. 0 == prawo, 1 == lewo int kierunek = 0; Flaga, ktora jest podnoszona, kiedy program stwierdzi, ze przycisk jest wcisniety. Dopiero zwolnienie przycisku opuszcza te flage. Sluzy do tego, aby w przypadku trzymania przycisku, napis nie zmienial non-stop kierunku int flaga_zmiany = 0; Flaga stwierdzajaca, czy zostal zmieniony kierunek. Sluzy do zachowania plynnosci "animacji" int flaga_zm_kierunku = 0; int main( void ) WDTCTL = WDTPW + WDTHOLD; Ustawienie timera w tryb zliczania w gore TACTL = TASSEL_2 + MC_1; Wskazanie na pierwsza litere do wyswietlenia przesuniecie = 0x01; Zaczynamy wyswietlania od konca, tj od ostatniej litery d = 7; Ustawienie aktualnie odswiezanej litery na ostatnia litera = d; Aktualnie nie wygaszamu, tylko chcemy wyswietlic litere wygaszanie = 0; Ustawiamy porty 2 i 3 MSP jako wyjsciowe. Port 2 to wybor pozycji wyswietlacza Port 3 to dane wysylane na pozycje wyswietlacza P2DIR = 0xff; P2OUT = 0x01; P3DIR = 0xff; P3OUT = _A_; Ustawiamy port 1 jako wejsciowy P1DIR = 0x00; Ustawiamy ze kanal 0 timera A moze zglaszac przerwanoia

CCTL0 = CCIE; Okreslenie do jakiej wartosci ma zliczac timer w trybie UP CCR0 = 800; Wypelniamy tablice znakami tablica[0] = _C_; tablica[1] = _O_; tablica[2] = _C_; tablica[3] = _A_; tablica[4] = _C_; tablica[5] = _O_; tablica[6] = _L_; tablica[7] = _A_; Przechodzimy w tryb uspienia procesora i odblokowujemy przerwania _BIS_SR(LPM0_bits + GIE); return 0; #pragma vector=timera0_vector interrupt void Timer_A (void) Sekcja sluzaca do odszumiania przycisku i sprawdzania jego stanu wcisniecia. W przypadku stwierdzenia, ze przycisk zostal wcisniety, podnosimy flagi if(!(p1in & 1)) Czy przypadkiem nie trzymamy non stop wcisnietego przycisku? Jesli tak to nie liczymy wystapien if(flaga_zmiany == 0) przycisk++; if(przycisk > 50) przycisk = 0; flaga_zmiany = 1; flaga_zm_kierunku = 1; Przycisk nie jest wcisniety, lub zostal zwolniony Opuszczamy wiec flage i zerujemy licznik wystapien przycisk = 0; flaga_zmiany = 0; Sekcja odpowiedzialna za obsluge programowego licznika sluzacego do przesuwania napisu. Licznikiem zliczamy w dol. Dekrementujemy wpierw stan licznika counter--; if(counter <= 0) counter = 3000; Czy flaga zmiany kierunku jest podniesiona? Jesli tak to dopiero teraz mozemy zmienic kierunek if(flaga_zm_kierunku == 1)

if(kierunek == 0) Przesuwamy zmienna d w druga strone. Ma to na celu unikniecie efektu przeskoku w jeszcze starym kierunku d++; if(d > 7) d = 0; kierunek = 1; Przesuwamy zmienna d w druga strone. Ma to na celu unikniecie efektu przeskoku w jeszcze starym kierunku d--; if(d < 0) d = 7; kierunek = 0; Obsluzylismy zmiane kierunku, wiec opuszczamy flage flaga_zm_kierunku = 0; Przesuwamy napis w jedna ze stron zgodnie z aktualnym kierunkiem if(kierunek == 0) d--; if(d < 0) d = 7; d++; if(d > 7) d = 0; Sekcja odpowiedzialna za odswiezanie oraz wlasciwie przesuwanie napisu Wpierw sprawdzamy, czy w aktualnym cyklu mamy zgasic stara wartosc litery, czy juz pisac nowa if(wygaszanie == 0) wygaszanie = 1; Piszemy litere do aktualnej pozycji P3OUT = tablica[litera]; Zmieniamy aktualna pozycje na nastepna P2OUT = przesuniecie; Zmieniamy stan licznika okreslajacego na ktorej aktualnie pozycji jestesmy if(kierunek == 0) litera--; if(litera < 0) litera = 7; litera++; if(litera > 7) litera = 0; Wygaszamy stara wartosc na wskazanej pozycji wygaszanie = 0; P2OUT = 0x00;

Przesuwamy bitowo o jeden zmienna okreslajaca na ktorej aktualnie pozycji jestesmy if(kierunek == 0) przesuniecie = przesuniecie << 1; przesuniecie = przesuniecie >> 1; Jesli doszlismy do jednego z koncow i tym samym wartosc zmiennej zostala wyzerowana, ustawiamy stan licznika pozycji na przeciwlegly koniec if(przesuniecie == 0x00 ) litera=d; if(kierunek == 0) przesuniecie = 0x01; przesuniecie = 0x80; 4. Podsumowanie Opierając się na doświadczeniu zdobytym na laboratorium trzecim, oparliśmy kod programu na przerwaniach, pomiędzy obsługą których mikroprocesor pozostaje uśpiony w oczekiwaniu na przerwanie od timera A. Użyty przez nas w projekcie tryb zliczania Timera to tryb UP, dzięki czemu mogliśmy dokładnie określić interwał między kolejnymi zgłaszanymi przez licznik przerwaniami. Zrezygnowaliśmy z możliwości zgłaszania oddzielnego przerwania przez przycisk na porcie 1 na rzecz przeniesienia odszumiania przycisku do obsługi cyknięć timera, co naszym zdaniem jest metodą efektywniejszą. Sama obsługa wyświetlacza opiera się na odświeżaniu wyświetlanego napisu, naprzemienne pisząc na aktualnie ustawioną pozycję jak i gasząc następną. Ten zabieg jest wymagany do poprawnej pracy wyświetlacza dynamicznego i wynika z jego budowy. Przesuwanie napisu zorganizowanego zostało za pomocą programowego licznika, który zostaje zdekrementowany przy każdej obsłudze przerwania Timera A. Po dojściu do zera napis zostaje przesunięty o jedną pozycję zgodnie z aktualnym kierunkiem. Dość sporym utrudnieniem było zapewnienie stabilnej pracy wyświetlacza pomimo zmiany aktualnego kierunku. Ów problem rozwiązaliśmy za pomocą specjalnej flagi, która podniesiona zapewnia dopiero przy następnym cyklu przesunięcia zmianę kierunku przesuwania napisu.