Gdańsk, 2017 1
Wyświetlacz LCD Zawierają zazwyczaj scalone kontrolery, stąd też procesor nie steruje bezpośrednio matrycą LCD, ale komunikuje się z wyspecjalizowanym sterownikiem, który realizuje jego polecenia. Wyświetlacze LCD mogą być łączone z mikrokontrolerem przy pomocy różnych magistrali najczęściej są to magistrale SPI lub równoległe (w wersji 4-, 8- i 16-bitowej). Same wyświetlacze ze względu na budowę i możliwości możemy podzielić na dwie grupy: Wyświetlacze alfanumeryczne umożliwiają one wyświetlanie cyfr, liter i innych symboli. Jednak w tym typie nie mamy możliwości sterowania poszczególnymi pikselami. Wyświetlacze graficzne w tym typie sterować możemy stanem każdego piksela. 2
Wyświetlacz LCD Obsługa wyświetlaczy alfanumerycznych Wyświetlacze alfanumeryczne zbudowane są z matryc pikseli, zwykle o wielkości 5 8 pikseli, pogrupowanych razem. Ponieważ nie sterujemy poszczególnymi pikselami, do kontrolera wysyłamy tylko kod znaku, który ma zostać wyświetlony na danej pozycji. Kontroler na podstawie kodu znaku generuje adres do specjalnego obszaru pamięci, tzw. tablicy znaków, w której znajduje się bajtowa reprezentacja poszczególnych pikseli tworzących znak. Zwykle jednak kontrolery udostępniają możliwość definicji kilku własnych znaków. Najpopularniejszym kontrolerem stosowanym w wyświetlaczach alfanumerycznych jest HD44780. 3
Wyświetlacz LCD Obsługa wyświetlaczy alfanumerycznych Sposób podłączenia modułu LCD z mikrokontrolerem: podłączone wszystkie 8 linii danych (D0 D7), albo tylko 4 najstarsze (D4 D7). W trybie 4-bitowym najpierw transferowana jest starsza, a potem młodsza tetrada. Układ HD44780 wyposażony jest w 64 bajty pamięci CGRAM (ang. CharacterGenerator RAM), która może przechowywać mapy bitowe 8 znaków o matrycy 5 8 pikseli lub 4 znaków o matrycy 5 10 pikseli. 4
Wyświetlacz LCD 5
Wyświetlacz LCD Inicjalizacja wyświetlacza LCD Krok 1 zerowanie wyświetlacza. Flaga zajętości BF jest ustawiana w stan 1 i może być testowana dopiero po wysłaniu pierwszego słowa operacyjnego. 6
Wyświetlacz LCD Inicjalizacja wyświetlacza LCD Krok 2 wysłanie słowa operacyjnego ustawiającego parametry wyświetlacza. Przed wysłaniem każdego kolejnego słowa (danej, lub instrukcji) należy sprawdzić flagę gotowości BF. 7
Wyświetlacz LCD Inicjalizacja wyświetlacza LCD Krok 3 włączenie / wyłączenie wyświetlacza. 8
Wyświetlacz LCD Inicjalizacja wyświetlacza LCD Krok 4 zerowanie wyświetlacza Krok 5 ustawianie trybu pracy wyświetlacza 9
Wyświetlacz LCD Zestawienie instrukcji sterujących 10
Wyświetlacz LCD Definicja nowego znaku Krok 1 wpisanie adresu CGRAM (D7 = 0, D6 = 1, D5..D0 = adres) Adresy początków definicji znaków dla matrycy 5 7 są wielokrotnością ośmiu (np. 00H, 08H, 10H,...), a dla matrycy 5 10 są wielokrotnością szesnastu (np. 00H, 10H, 20H...). Krok 2 wpisanie danych definiujących symbol Od tej pory zdefiniowany znak jest dostępny jako znak o kodzie 01H 11
Wyświetlacz LCD 12
Wyświetlacz LCD 13
Interfejs 1-wire Interfejs 1-wire jest bardzo prostym interfejsem, stworzonym do łączenia urządzeń na duże odległości (nawet do kilkuset metrów), przy czym transmisja odbywa się stosunkowo wolno. Interfejs ten składa się tylko z jednego przewodu sygnałowego, po którym przesyłane są dane dwukierunkowo, oraz linii masy łączącej urządzenia. Urządzenia slavepodłączone do tego interfejsu mogą mieć własne zasilanie lub mogą być zasilane przez linię danych (tzw. tryb pasożytniczy, ang. parasitepower). Dzięki temu do podłączenia urządzeń slavewymagane są tylko dwa przewody (masa oraz przewód sygnałowy, który jednocześnie pełni rolę przewodu zasilającego). Urządzenia mogą być łączone ze sobą przy pomocy dowolnego kabla, lecz jego lepsza jakość zapewnia możliwość tworzenia bardziej rozległych sieci. 14
Interfejs 1-wire W skład dostępnych urządzeń slave wchodzą: termometry cyfrowe, np. popularne DS1820, 18S20, 18B20, przetworniki ADC, ekspandery magistrali 1-wire, pamięci, układy IO. Interfejs 1-wire zakłada istnienie tylko jednego urządzenia master i dowolnej liczby urządzeń slave. Urządzenia slave identyfikowane są przy pomocy unikalnego 8- bajtowego identyfikatora, nadawanego urządzeniu w czasie produkcji. Wszelkie transfery na magistrali inicjowane są przez urządzenie master, urządzenia slave same nie wykazują żadnej aktywności. Wymiana danych odbywa się szeregowo, począwszy od najmniej znaczącego bitu. 15
Interfejs 1-wire W stanie spoczynku magistrala utrzymywana jest w stanie 1 przez rezystor podciągający (typowo o wartości 4,7 kω), natomiast stan 0 wymuszany jest przez urządzenie master lub slave. Jeśli jednocześnie dwa lub więcej urządzeń slavepróbują nadawać, wygrywa to urządzenie, które nadaje wartość 0 (stan wysoki magistrali jest stanem recesywnym). Typowo dla magistrali 1-wire uzyskuje się prędkość do ok. 16 kbps, przy czym istnieją specjalne tryby (ang. overdrive), w których prędkość można kilkakrotnie zwiększyć (do ok. 125 kbps). Każdą operację na magistrali inicjuje urządzenie master. Operacje dzielą się na operacje odczytu (w efekcie jeden bit przesyłany jest z urządzenia slavedo urządzenia master) i operacje zapisu (urządzenie master przesyła jeden bit danych do urządzenia slave). 16
Interfejs 1-wire Schemat protokołu komunikacyjnego 17
Interfejs 1-wire Schemat protokołu komunikacyjnego Każda transakcja na magistrali rozpoczyna się od zainicjowania podłączonych do niej urządzeń przy pomocy specjalnej sekwencji nazywanej RESET PULSE. Sekwencja ta jest generowana przez urządzenie master i polega na wymuszeniu na magistrali niskiego poziomu logicznego przez okres 480 960 μs. Po tym czasie urządzenie master zwalnia magistralę i oczekuje na tzw. PRESENCE PULSE. Jest to ujemny impuls, generowany przez urządzenia slave o długości ok. 60 240 μs, rozpoczynający się ok. 15 60 μspo zakończeniu RESET PULSE. Dzięki temu urządzenie master wie, że do magistrali przyłączone są inne urządzenia (przynajmniej jedno urządzenie). 18
Interfejs 1-wire Schemat komunikacji Lista poleceń (dla wszystkich urządzeń slave) 19
Interfejs 1-wire Każdy układ 1-wire ma swój unikalny numer identyfikacyjny. Jest on nadawany na etapie produkcji układu i nie można go zmienić. Gwarantuje to, że na magistrali nie znajdą się dwa układy o takim samym identyfikatorze. Kod rodziny układu to 8-bitowe pole informujące o typie zastosowanego układu. ID kończy się wartością CRC obliczoną na podstawie poprzedzających 7 bajtów, co umożliwia stwierdzenie poprawności odczytanego kodu. 20
Interfejs 1-wire Realizacja master 1-wire na AVR Co prawda mikrokontrolery AVR nie dysponują sprzętowo realizowanym interfejsem 1-wire, lecz jego programowa emulacja jest niezwykle prosta. Do realizacji transmisji 1-wire można wykorzystać różne interfejsy (UART, timery, interfejs IO). Realizację układu master można podzielić na dwa etapy realizację procedur niskopoziomowego dostępu do magistrali (funkcje inicjujące wykorzystywany interfejs, inicjujące magistralę, wysyłające i odbierające bit danych) oraz funkcje wysokopoziomowe, umożliwiające realizację całych transakcji. Takie podzielenie funkcji umożliwia łatwą zmianę interfejsu sprzętowego wykorzystywanego do realizacji interfejsu 1-wire, bez konieczności wprowadzania daleko idących zmian w pozostałych funkcjach obsługi. 21
Timery Liczniki (timery) są elementem wchodzącym w skład każdego procesora z rodziny AVR. W najprostszej postaci timerjest licznikiem, który potrafi zliczać od 0 do pewnej maksymalnej wartości, zależnej od długości licznika. Dla liczników 8-bitowych zlicza od 0 do 255, dla liczników 16-bitowych od 0 do 65 535. Tempo zliczania można określić, wybierając źródło sygnału taktującego licznik. Po osiągnięciu przez licznik wartości maksymalnej zliczanie jest kontynuowane od zera (licznik przekręca się ). Zliczanie to jest niezależne od wykonywania przez procesor programu i może zostać wstrzymane tylko przez odłączenie sygnału taktującego licznik. 22
Timery Mogą być użyte do: generowania przebiegu PWM, działania jako 8- lub 16-bitowe liczniki, precyzyjnego odmierzania czasu, zliczania impulsów zewnętrznych, mierzenia czasu pomiędzy impulsami, generowania przebiegów o określonej częstotliwości pomiarów wypełnienia przebiegu zewnętrznego, tworzenia zegarów RTC, sterowania przebiegiem wykonywanego programu, generowania impulsów inicjujących pracę innych układów, np. ADC i wielu innych rzeczy. 23
Timery Sygnał taktujący Wewnętrzny Najprostszą możliwością jest wykorzystanie do taktowania timerasygnału zegarowego taktującego procesor. Sygnał ten może zostać doprowadzony bezpośrednio do timera lub poprzez specjalny dzielnik, tzw. preskaler. Zewnętrzny Timermoże być taktowany zewnętrznym sygnałem doprowadzonym do pinu procesora (zwykle oznaczonym jako Tn, gdzie n to numer timera). Sygnał ten musi mieć częstotliwość nie większą niż częstotliwość taktowania procesora/2, przy założeniu, że ma on współczynnik wypełnienia równy 50%. Zewnętrzny sygnał taktujący nie może być dzielony przy pomocy preskalera. Jest on bezpośrednio używany do taktowania licznika. 24
Timery Licznik Licznik może być 8-lub 16-bitowy. Jego wartość zmienia się po każdym okresie zegara taktującego timeri w zależności od konfiguracji może ulec zwiększeniu lub zmniejszeniu o 1. Po osiągnięciu wartości maksymalnej (ang. Top) licznik może zawijać się lub może zacząć liczyć w dół. Analogicznie dzieje się po osiągnięciu wartości minimalnej (ang. Bottom). Sposób zachowania się licznika po osiągnięciu skrajnych pozycji określony jest przez tryb pracy timera. Osiągnięcie wartości skrajnych (przepełnienie licznika) sygnalizowane jest poprzez ustawienie bitu TOVn(ang. Timer/Countern OverflowFlag) rejestru TIFR (ang. Timer/Countern InterruptFlag Register). 25
Timery Licznik Flaga ta może być traktowana jako dodatkowy bit rejestru licznika. Jest ona kasowana programowo, poprzez wpisanie do niej wartości 1, lub automatycznie po skoku do procedury obsługi przerwania przepełnienia licznika (TIMERn_OVF_vect). Przerwanie przepełnienia licznika można odblokować poprzez ustawienie bitu TOIEn(ang. Timer/Counter n Overflow Interrupt Enable)rejestru TIMSK (ang. Timer/Countern InterruptMaskRegister). Licznik można programowo inicjować dowolną wartością, można także w każdej chwili rejestr licznika odczytywać. Operacji tych dokonuje się poprzez rejestr TCNTn(ang. Timer/Counter Register). 26
Timery Układ porównywania danych Z każdym licznikiem timerazwiązany jest jeden lub więcej rejestrów, których zawartość jest stale porównywana z licznikiem. Są to rejestry OCRn(ang. OutputCompareRegister). Pozytywny wynik porównania rejestru TCNTn z danym rejestrem OCRn powoduje ustawienie flagi OCFn(ang. Timer/Counter n Output Compare MatchFlag) w rejestrze TIFRn każdy z rejestrów OCR ma własną flagę. Jej zerowanie odbywa się programowo, poprzez wpisanie na odpowiednią pozycję rejestru wartości 1, lub automatycznie, po wykonaniu skoku do procedury obsługi przerwania TIMERn_COMPx_vect. Aby wywołanie takiego przerwania było możliwe, należy ustawić odpowiednią flagę zezwolenia na przerwanie OCIEn(ang. Timer/Counter Output Compare Match Interrupt Enable) w rejestrze TIMSKn. 27
Timery Wpływ na piny I/O Zdarzenie CompareMatchmoże także służyć do generowania przebiegów na pinach IO procesora. Jego wpływ na generowany sygnał określany jest kombinacją bitów COM0:1 rejestru kontrolnego timera. Znaczenie bitów COM w przypadku pracy timeraw trybach innych niż PWM. 28
Timery Wpływ na piny I/O Znaczenie bitów COM w przypadku pracy timeraw trybie FAST PWM. Znaczenie bitów COM w przypadku pracy timeraw trybie PWM z korekcją fazy. 29
Timery Tryby pracy 30
Timery Tryb prosty Jest to najprostszy i domyślny tryb pracy licznika. W tym trybie licznik liczy od 0 do wartości maksymalnej (255 lub 65 535), po czym rozpoczyna liczenie od nowa. Każde przekręcenie się licznika generuje przerwanie TIMn_OVF_vect (o ile oczywiście ustawiono odpowiednią flagę zezwolenia na przerwanie), w każdej sytuacji ustawiany jest bit TOV. Tryb CTC W tym trybie licznik zlicza aż do uzyskania wartości określonej w rejestrze OCR lub ICR. Po doliczeniu do wartości określonej rejestrami OCR lub ICR licznik jest zerowany, a liczenie odbywa się od początku. W tym trybie nie jest generowane przerwanie przepełnienia licznika TIMn_OVF_vect. Zamiast tego należy używać wektora TIMn_COMP_vect lub TIMn_CAPT_vect, w zależności od tego, czy używany jest do porównania rejestr OCR, czy ICR. 31
Timery Tryby PWM PWM (ang. PulseWidthModulation) jest metodą polegającą na modulacji szerokości impulsu (zmianie współczynnika wypełnienia przebiegu) przy zazwyczaj jego stałej częstotliwości i amplitudzie. Technika PWM jest wykorzystywana do kontroli układów analogowych przy pomocy układu cyfrowego. Zmieniając współczynnik wypełnienia impulsów, można regulować moc dostarczaną do układu, dzięki czemu w zależności od konfiguracji reguluje się amplitudę sygnału, prąd lub oba parametry jednocześnie. PWM znajduje także zastosowanie w regulacji obrotów silników, jasności diod LED. i wielu innych. 32
Timery Tryb Fast PWM W trybie szybkiego PWM (ang. Fast PWM) licznik liczy od zera do wartości maksymalnej, która może być ustawiona na stałe (zazwyczaj rozdzielczość wtedy wynosi 8, 9 lub 10 bitów), lub do wartości określonej przez rejestr OCRnA lub ICPn. W trybie tym licznik zlicza tylko w górę. W zależności od konfiguracji licznika osiągnięcie wybranego stanu sygnalizowane jest ustawieniem flagi TOV, ICF lub OCF. W przypadku odblokowania stosownych przerwań generowane są także przerwania o wektorach TIMn_OVF_vect, TIMn_CAPT_vectlub TIMn_COMP_vect. Jednak wraz ze zmianą współczynnika wypełnienia zmienia się faza generowanego przebiegu. 33
Timery Tryb PWM z korektą fazy Tryby PWM z korekcją fazy lub korekcją fazy stosowane są w sytuacjach, w których zmiana współczynnika wypełnienia nie powinna wpływać na fazę sygnału. W tym trybie licznik timeraodlicza od wartości najniższej do najwyższej, po jej osiągnięciu zaczyna odliczać ponownie do wartości najniższej, a następnie cały cykl się powtarza W chwili zaistnienia zdarzenia CompareMatchpomiędzy rejestrem TCNT a OCR, w chwili gdy licznik zlicza w górę, wyjście OCnjest zerowane. Przy ponownym zajściu tego zdarzenia, przy odliczaniu w dół, wyjście to jest ustawiane. Dodatkowo dostępny jest pin reprezentujący zanegowaną wartość stanu pinu OCn. 34
Timery Różnica pomiędzy zwykłym trybem PWM a trybem z korekcją fazy. A) i B) tryb Fast PWM z różnym współczynnikiem wypełnienia, C) i D) tryb PWM z korekcją fazy sygnału 35
Interfejs USART Mikrokontrolery AVR posiadają zwykle kilka takich interfejsów. W tym typie interfejsu sygnały Rxi Txdwóch urządzeń są skrzyżowane. Mikrokontrolery AVR nie implementują wszystkich sygnałów interfejsu RS232 do dyspozycji mamy tylko sygnały Rxoraz Tx, umożliwiające asynchroniczne nadawanie i odbiór znaków. Istnieje możliwość skonfigurowania mikrokontrolera w sposób pozwalający na transmisję synchroniczną z wykorzystaniem dodatkowej linii zegarowej. Dodatkowe linie DTR, DCD, DSR, RI, RTS i CTS nie są wspierane sprzętowo przez mikrokontroler. Ponieważ standard elektryczny interfejsu RS232 odbiega od standardu TTL, aby poprawnie połączyć dwa urządzenia, wymagany jest specjalny układ transceivera, np. MAX232. 36
Interfejs USART Sposób podłączenia interfejsu USART z komputerem klasy PC. 37
Interfejs USART Każda transmisja na magistrali RS232 rozpoczyna się nadaniem tzw. bitu startu. Wartość tego bitu zawsze wynosi 0, dzięki czemu odbiornik może rozpocząć odbieranie danych. Po bicie startu wysyłanych jest 5 9 bitów danych, po czym opcjonalnie wysyłany jest tzw. bit parzystości oraz 1 2 bity stopu. Bit parzystości dobierany jest tak, aby w zależności od konfiguracji interfejsu całkowita liczba nadanych bitów o wartości 1 była parzysta lub nieparzysta. Dzięki temu odbiornik może kontrolować poprawność przesyłanych danych, a ewentualna niezgodność sygnalizowana jest jako błąd parzystości. 38
Interfejs USART Całą transmisję kończą tzw. bity stopu definiują one odcinek czasowy, w jakim magistrala musi pozostać w stanie bezczynności po nadaniu ramki danych. Jeśli w tym okresie na magistrali pojawi się jakaś transmisja, odbiornik zinterpretuje ją jako błąd ramki. Transmisja asynchroniczna Transmisja synchroniczna 39
Interfejs USART Aby dwa urządzenia podłączone przez interfejs RS232 mogły pomiędzy sobą wymieniać dane, wszystkie parametry interfejsu, takie jak prędkość, liczba bitów danych, parzystość i liczba bitów stopu, muszą być identyczne. 40