Instrukcja do laboratorium

Transkrypt

Instrukcja do laboratorium
Komputerowe Sterowanie w Elektronice Przemysłowej
Autor: Rafał
Kotas
LABORATORIUM
Komputerowe Sterowanie
w Elektronice Przemysłowej
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Niniejsza instrukcja nie jest kompletnym źródłem informacji niezbędnych do
wykonania zaproponowanych ćwiczeń. Zawarte są w niej jedynie wskazówki na co należy
zwrócić szczególną uwagę przy programowaniu mikrokontrolera. Podstawowymi źródłami
informacji, z których należy korzystać są: nota katalogowa mikrokontrolera oraz nota
katalogowa płyty dydaktycznej wyposażonej we wspomniany mikrokontroler oraz peryferia.
Potrzebna do wykonania poniższych ćwiczeń dokumentacja znajduje się we wskazanej
lokalizacji: C:\Atmel\Dokumentacja AVR\ lub na stronach internetowych:
1) www.atmel.com
2) www.kamami.pl
3) www.atmel.com
Literatura:
o Mikrokontrolery AVR ATmega w praktyce / Rafał Baranowski
o Wyświetlacze graficzne i alfanumeryczne w systemach mikroprocesorowych / Rafał
Baranowski
o Sztuka programowania mikrokontrolerów AVR : podstawy / Andrzej Pawluczuk
o Sztuka programowania mikrokontrolerów AVR : przykłady / Andrzej Pawluczuk
Mapa połączeń płyty dydaktycznej:
PA0
-> CON7 (P2) – potencjometr analogowy [zielony – 1]
PA1
-> CON7 (TEM) – termistor [zielony – 1]
PA2 – PA7
-> CON13 (D4, D5, D6, D7, E, RS) – char LCD [zielony – 6]
CON13 (RW) -> GND – char LCD [zielony – 1]
PB0-PB3
-> CON19 (SW0, SW1, SW2, SW3) – klawiatura [czerwony – 4]
PB4, PB6, PB7-> CON8 (CS, SIO, SCK) – termometr cyfrowy [czerwony – 3]
PB5
-> CON7 (SPK) – brzęczek [czerwony – 1]
PC6-PC7
-> CON9 (6, 7) – LED-y: LED6, LED7 [niebieski – 2]
PD0
-> CON7 (RxD) – transmisja szeregowa [niebieski – 1]
PD1
-> CON7 (TxD) – transmisja szeregowa [niebieski – 1]
PD2-PD6
-> CON9 (0, 1, 2, 3, 4, 5) – LED-y: LED0, LED1, LED2, LED3, LED4, LED5
[niebieski – 6]
PC0, PC1
-> CON7 (SCL,SDA) [niebieski – 2]
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczeń 1-5
Każdy mikrokontroler integruje w swojej strukturze kilka elementów, nazywanych
zasobami. Niemal w każdym mikrokontrolerze z rodziny AVR występuje pewna grupa
zasobów. Są to:
 pamięć RAM,
 pamięć programu,
 rejestry robocze,
 jednostka centralna CPU (Central Processing Unit),
 rejestry wejścia/wyjścia.
Pamięć RAM jest ulotną pamięcią przewidzianą, do zapamiętywania informacji powstałej
podczas realizacji programu. W pierwszej chwili po włączeniu zasilania zawartość pamięci
RAM trzeba traktować jako przypadkową. Przed jej właściwym użyciem należy ją
zainicjować, czyli ustawić zmienne programu przy użyciu danych początkowych. Do tej
pamięci dostęp jest ograniczony i możliwy wyłącznie z poziomu programu. Wynika z tego, iż
jedynie program może zapisywać dane do pamięci oraz odczytywać z niej dane. Pamięć
programu nie jest pamięcią ulotną. Przewidziana jest ona do przechowywania kodu programu
w postaci binarnych kodów rozkazów programu. Wykonywanie tych rozkazów w ściśle
określonej kolejności, sprawia, że mikrokontroler spełnia zaprogramowane zadanie.
Najważniejszym elementem wchodzącym w skład struktury mikrokontrolerów jest jednostka
centralna. Element ten odpowiedzialny jest za realizację programu. Kody rozkazów pobierane
z pamięci programu dekodowane są przez CPU, a następnie są wykonywane czynności
związane z tą instrukcją. Bardzo ważnym fragmentem CPU jest rejestr nazywany licznikiem
rozkazów. Wskazuje on miejsce w programie, w którym obecnie znajduje się jego wykonanie.
Wszystkie mikrokontrolery posiadają również pewien zestaw wskaźników, nazywanych
inaczej rejestrem flag. Do tego rejestru należą m.in. flagi: przeniesienia C (carry flag)
i globalnego zezwolenia na przerwania I (interrupt enable flag). Zasobami mikrokontrolerów
AVR, które biorą udział w operacjach arytmetycznych i logicznych są tzw. rejestry robocze.
Wszystkie operacje realizowane przez mikrokontroler wykonywane są właśnie na tych
rejestrach.
Do zajęć przygotowano płyty dydaktyczne wyposażone w mikrokontroler ATmega32.
Główną jego cechą, która zadecydowała o takim wyborze jest dostępna ilość portów,
wbudowany przetwornik A/C, a także dostępność, niski koszt i łatwość programowania.
ATmega32 jest 8–bitowym mikrokontrolerem z rodziny AVR. Rdzeń mikrokontrolera AVR
posiada bogaty zestaw instrukcji z 32 rejestrami ogólnego przeznaczenia, które mają symbole
od R0 do R31. Rejestry te, z punktu widzenia programu, znajdują się na początku
wewnętrznej pamięci RAM. Bezpośrednie podłączenie wszystkich 32 rejestrów do jednostki
arytmetyczno-logicznej (ALU), pozwala na jednoczesny dostęp do dwóch niezależnych
rejestrów w jednej instrukcji wykonywaj w czasie jednego cyklu maszynowego. Taka
architektura zwana architekturą RISC jest zdecydowanie bardziej wydajna i efektywna, gdyż
pozwala na szybszą pracę w porównaniu z konwencjonalnymi mikrokontrolerami
o architekturze typu CISC. ATmega32 posiada wbudowane: 32K bajty wewnętrznej
programowalnej pamięci typu FLASH z możliwością odczytu podczas zapisu, 1K bajt
EEPROM, 2K bajty SRAM, 32 rejestry robocze, 8-kanałowy, 10-bitowy przetwornik ADC,
Watchdog – programowalny licznik z wewnętrznym oscylatorem, SPI - port równoległy,
JTAG, programowany szeregowo USART, dwa 8-bitowe liczniki, jeden licznik 16-bitowy,
4-kanałowy PWM oraz komparator analogowy. Możliwe są następujące częstotliwości pracy:
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
1, 2, 4, 8 albo 16 MHz. Istnieje również możliwość podłączenia do mikroprocesora kwarcu
w celu uzyskania precyzyjnej częstotliwości pracy. Do poprawnej pracy mikrokontroler
ATmega32 wymaga napięcia zasilającego od 4,5 do 5,5 V. Mikrokontroler posiada
wbudowane obwody, kontrolujące prawidłowość napięcia zasilającego. W przypadku, gdy
napięcie niespodziewanie obniży się poniżej wartości zadanej, mikrokontroler zostaje
zresetowany i pozostaje w tym stanie do czasu powrotu prawidłowego napięcia zasilającego.
Mikrokontroler ten wyposażony jest w 6 różnych trybów pracy w uśpieniu. Dzięki temu
posiada wiele niezbędnych konfiguracji, w których możliwe jest oszczędzanie energii.
Podczas aktywnej pracy mikrokontrolera pobiera on około 1,1 mA. Po przejściu w jeden
z trybów uśpienia pobór prądu spada poniżej 0,4 mA. Istnieje również ustawienie
mikrokontrolera do pracy w trybie niskiego poboru mocy (Power-Down). W trybie tym
mikrokontroler zapamiętuje zawartość rejestrów, ale zatrzymuje oscylator, uniemożliwiając
wykonywanie instrukcji, aż do wystąpienia następnego przerwania lub sprzętowego resetu.
ATmega32 produkowana jest w trzech rodzajach obudów (w tym SMD). Posiada 4 8-bitowe
porty wejścia/wyjścia A, B, C i D. Osobne wyprowadzenia są przydzielone do podłączenia
mikrokontrolera do zasilania, masy, zewnętrznego źródła odniesienia dla przetwornika ADC,
zewnętrznego kwarcu, a także do sprzętowego resetu. Rejestry wejścia/wyjścia są zbiorem
rejestrów przeznaczonych do komunikacji ze „światem zewnętrznym”. Służą one również do
kontroli i konfigurowania wbudowanych w mikrokontroler bloków funkcjonalnych.
Odpowiednie zapisy w poszczególnych rejestrach decydują o tym, które bity portów
równoległych spełniają rolę wejść, a które rolę wyjść.
W mikrokontrolerach AVR w przestrzeni rejestrów wejścia/wyjścia znajduje się wskaźnik
stosu SP (Stack Pointer). Przede wszystkim służy on do zachowania rejestrów
wykorzystanych w procedurze obsługi przerwania (instrukcja push i pop). Wskaźnik stosu
w mikrokontrolerach AVR jest rejestrem o charakterze adresowym. W przypadku
mikrokontrolerów z rodziny AVR wskaźnik stosu SP jest adresem pierwszego, wolnego do
zapisu miejsca w pamięci RAM. Do obsługi mikrokontrolerów ATmega32 stworzono wiele
programów, środowisk narzędziowych i oprogramowania. Są to m.in. kompilatory C,
debuggery i programatory.
Rys.1. Adresy rejestrów roboczych
mikrokontrolera ATmega32
Rys. 2. Adresy portów i rejestrów I/O
mikrokontrolera ATmega32
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Ćwiczenie 1
Temat: Obsługa rejestrów i portów mikrokontrolera – operacje podstawowe
Zadanie: Na porcie PB ustawić żądaną informację o dowolnej treści. Skontrolować działanie
przy użyciu symulatora wbudowanego w AVR Studio.
Język: Asembler
Zasoby: port PB
Ćwiczenie 2
Temat: Obsługa rejestrów i portów mikrokontrolera – operacje podstawowe
Zadanie:
1) Na odpowiednim porcie ustawić żądaną informację o dowolnej treści. Skontrolować
działanie przy użyciu diod LED na płycie dydaktycznej.
2) Odmierzanie czasu – pętla opóźniająca i wykorzystanie przerwań. Wyświetlić na
buforze LED dowolną dynamiczną informację – pulsowanie, miganie itp.
Język: Asembler
Zasoby: port PD2-PD7, port PC6-PC7
Ćwiczenie 3
Temat: Obsługa rejestrów i portów mikrokontrolera.
Zadanie: Obsługa klawiatury. W zależności od ustawienia klawiatury wyświetlać
odpowiednią informację na buforze LED.
Język: Asembler
Zasoby: port PB0-PB3, port PD2-PD7, port PC6-PC7
Ćwiczenie 4
Temat: Generacja dźwięków za pomocą brzęczyka.
Zadanie:
1) Wykorzystać programy do odmierzania czasu do generacji dźwięku w zakresie
słyszalnym.
2) Przyporządkować klawiszom różne dźwięki.
Język: Asembler
Zasoby: port PB5, port PB0-PB3
Ćwiczenie 5
Temat: Generacja dźwięków za pomocą brzęczyka oraz wyświetlanie informacji na diodach
LED.
Zadanie: Wygenerować dźwięk oraz ustawić dowolną informację na diodach LED. Napisać
obsługę klawiatury.
Język: C
Zasoby: port PB5, port PB0-PB3
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 6
Wszystkie mikrokontrolery z rodziny AVR wyposażone są w przetwornik analogowocyfrowy (ADC). Najczęściej jest to jeden przetwornik, który posiada kilka
multipleksowanych wejść. Programista posiada możliwość wyboru, z którego wejścia
w danym momencie chce korzystać. Przetwornik może pracować w dwóch trybach:
1. Tryb ciągły, konwersja wykonywana automatycznie co określony czas;
2. Wyzwalanie ręczne.
Mikrokontroler Atmega32, posiada jeden 10-bitowy przetwornik ADC. Wynik
konwersji przechowywany jest w rejestrach ADCH i ADCL. Istnieje możliwość odczytu
8-bitowego. Do konfiguracji przetwornika wykorzystywane są dwa rejestry:
• ADCMUX
• ADCSRA
Podłączanie przetwornika analogowo-cyfrowego
W układach elektronicznych, w których występują sygnały analogowe często
wprowadza się rozdział napięć zasilających na napięcia „analogowe” i „cyfrowe”. Tak samo
postępuje się z masą, prowadząc „masę cyfrową” i „masę analogową” osobno na płytce.
Zabiegi takie wynikają z faktu, że układy cyfrowe w których występuje częste kluczowanie są
źródłami szumu. Szum ten przedostający się na linie zasilania i masy może zakłócać sygnały
analogowe i wprowadzać błędy pomiaru.
Jednym z typowych rozwiązań oddzielenia zasilania analogowego od cyfrowego jest
układ pokazany na rysunku poniżej. Jak wiadomo, cewkę w przypadku prądu stałego można
rozpatrywać jako zwarcie. Dla prądów wysokiej częstotliwości jest ona „oporem”.
Kondensatory stanowią przerwę w obwodzie dla prądu stałego jednak są dogodną drogą dla
prądu zmiennego. Cały ten układ powoduje więc, że prąd stały może swobodnie płynąć od
źródła do odbiorników natomiast prąd zmienny (wynikający z zakłóceń) jest zwierany do
masy.
Rys. 3. Rozdzielenie zasilania analogowego i cyfrowego.
W przypadku masy nie wprowadza się elementów filtrujących pomiędzy masę
cyfrową i analogową. Prowadzi się natomiast te sygnały osobno na ścieżkach płytki
drukowanej zwierając je w tylko jednym miejscu na płytce drukowanej. Mikrokontrolery
z rodziny AVR posiadają oddzielne piny dla analogowych i cyfrowych sygnałów
zasilających. W wielu mikrokontrolerach napięcie z wejścia analogowego wykorzystywane
jest jako napięcie zasilające port A. (sprawdź w karcie katalogowej). Z tego powodu, jeśli nie
wykorzystujemy przetwornika ADC a zamierzamy korzystać z portu A, należy pin AVCC
połączyć z napięciem cyfrowym. Takiego połączenia można też dokonać jeśli nie zależy nam
na dużej dokładności konwersji analogowo-cyfrowej.
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Rys. 4. Przykładowe sygnały podane na wejście ADC
Mikrokontrolery z rodziny AVR posiadają wejście napięcia odniesienia do
przetwornika ADC (VREF). Podczas projektowania układu wykorzystującego przetwornik
ADC należy wziąć pod uwagę jakie będą sygnały podawane na jego wejście. Na rysunku 4
pokazano dwa przykładowe sygnały. Wartość sygnału o dużej amplitudzie (a) zmienia się w
zakresie około 0 – 5V. Dlatego, napięcie odniesienia dla przetwornika nie może być niższe
niż 5V. W przypadku niższego napięcia odniesienia przetwornik dawałby fałszywe wyniki
lub mógłby nawet zostać uszkodzony. W drugim przypadku, wartość sygnału nie przekracza
wartości 1V (b). Duża część zakresu pomiarowego przetwornika jest więc nie wykorzystana
a sygnał jest próbkowany z mniejszą rozdzielczością niż jest to dostępne. Z tego powodu, jeśli
mamy pewność, że sygnał nie będzie przekraczał wartości 1V, najlepszym rozwiązaniem jest
podanie napięcia odniesienia wynoszącego 1V. Istnieją trzy możliwości podania napięcia
odniesienia do przetwornika:
1. Zewnętrzne napięcie podane na pin VREF
2. VREF połączone wewnątrz mikrokontrolera do AVCC
3. Wewnętrzne źródło napięcia 2,56V
W dokumentacji zestawu startowego należy zwrócić uwagę na sposób podłączenia
pinu VREF. Jak widać, jest do niego podłączony kondensator. Należy też zwrócić uwagę jaki
sygnał może zostać podany na wejście przetwornika. Może on mieć wartość nawet 5V.
Dlatego jest tylko jedno ustawienie bitów REFS1, REFS0 właściwe dla zestawu
uruchomieniowego ZL15AVR.
Rejestr ADCMUX
Mikrokontrolery z rodziny AVR, najczęściej posiadają wiele wejść do przetwornika
ADC. W szczególności w mikrokontrolerze AtMega32 każdy pin portu A może być użyty
jako wejście przetwornika. Podczas konfiguracji przetwornika, musimy więc określić, który
z pinów ma być użyty jako wejście ADC. Do ustawienia wejścia używane są bity MUX[4..0].
Przetwornik ADC w mikrokontrolerze Atmega32 posiada rozdzielczość 10 bitów. Aby
zapisać wynik konwersji wykonanej przy użyciu tego przetwornika, potrzebne są dwa
8-bitowe rejestry (ADCH i ADCL). Ponieważ zapisujemy wartość 10-bitową do dwóch
rejestrów (16-bitów), pozostaje 6 bitów zbędnych, które uzupełniane są zerami. Istnieje
możliwość wyboru, czy wartość rejestrów za zostać wyjustowania do prawej lub lewej strony.
- ADLAR = 0, justowanie do prawej, odczyt 10-bitowy
ADCH 0 0 0 0 0 0 1 1
ADCL 1 1 1 1 1 1 1 1
- ADLAR = 1, justowanie do lewej, odczyt 8-bitowy
ADCH 1 1 1 1 1 1 1 1
ADCL 1 1 0 0 0 0 0 0
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Justowanie do prawej strony ma sens kiedy zależy nam na największej dostępnej
dokładności i odczytujemy pełen, 10-bitowy, wynik. Musimy odczytać oba rejestry
a następnie ich zawartość skleić ze sobą. Jeśli nie zależy nam na pełnej dokładności, możemy
odczytywać tylko wartość 8-bitową. W takim przypadku justujemy wynik do lewej
i odczytujemy jedynie wartość rejestru ADCH.
Rejestr ADCSRA
Jeśli chcemy używać przetwornika, musimy go najpierw włączyć. Służy do tego bit
ADEN. Przetwornik ADC w mikrokontrolerach AVR może pracować w dwóch trybach:
1. Wyzwalanie ręczne
2. Praca ciągła
W przypadku wyzwalanie ręcznego musimy ręcznie ustawić bit, który uruchomi
konwersję (ADSC), następnie sprawdzić flagę (ADIF), która mówi czy konwersja się
zakończyła. Następnie możemy odczytać wynik z rejestrów ADCH i ADCL.
Przykładowy program
Jest to przykładowe podejście przy wykorzystaniu jednego wejścia przetwornika ADC,
odczycie 10-bitowym i ręcznym wyzwalaniu:
int main()
{
ustawienie rejestru ADCMUX
while(1)
{
Ustawienie rejestru ADCSRA (uruchomienie konwersji)
Sprawdzenie flagi informującej o ukończeniu konwersji
Odczytanie zawartości rejestrów ADCH i ADCL
Przeliczenie wartości rejestrów na oczekiwane jednostki
Wyświetlenie wyniku
}
}
Ćwiczenie 6
Temat: Obsługa 10-bitowego przetwornika ADC wbudowanego w mikrokontroler.
Zadanie: W zależności od ustawienia pokrętła potencjometru analogowego P2 wyświetlić
wyskalowaną wartość tego napięcia na diodach LED.
Język: C
Zasoby: port PA0, port PD2-PD7, port PC6-PC7
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 7
Transmisja szeregowa RS- 232
Złącze RS-232 jest podstawowym złączem wykorzystywanym w transmisji
szeregowej. Znaki składające się z pięciu do ośmiu bitów mogą być przesyłane w sposób
szeregowy bit po bicie. Aby przesłać dane przez złącze RS-232 należy zaopatrzyć je w dwa
dodatkowe bity sterujące, mianowicie:
• Bit startu, który wyznaczy rozpoczęcie nadawania;
• Bit stopu, wyznacza koniec procesu nadawania pojedynczego znaku.
Wykorzystywany jest tutaj również bit parzystości, w celu detekcji błędów. Jest to
jednak czynność stosowana coraz rzadziej, ponieważ lepszym rozwiązaniem okazuje się być
algorytm sum kontrolnych, zapewnia on znacznie większy poziom detekcji błędów
w przesyłanym znaku. Bit parzystości kontroluje stosunek zer do jedynek w znaku. W
transmisji szeregowej asynchronicznej stosuj się dwa bity stopu, służy to zwiększeniu odstępu
pomiędzy przesyłanymi znakami. Urządzenia DCE (Data Communication Equipment ) są to
np. modemy lub też inne urządzenia, które służą w pośredniczeniu w transmisji szeregowej
danych. Urządzenia zaś DTE (Data Terminal Equipment) to komputery lub inne urządzenia,
które są nadawcami lub odbiorcami informacji.
Przesyłanie danych przez magistralę RS-232 zwykle za pomocą kabla. Przy tym
połączeniu może być realizowane jedno z kilku połączeń w zależności od złącza, które
zastosowane jest w komputerze (9 lub 25 pin):
- DB-9 BD-9
RDX(2) ------------- TDX(3)
TDX(3) ------------- RDX(2)
GND(5) ------------- GND(5)
- DB-9 DB-25
RDX(2) ------------ TDX(2)
TDX(3) ------------ RDX(3)
GND(5) ------------ GND(7)
- DB-25 DB-25
RDX(3) ------------ TDX(2)
TDX(2) ------------ RDX(3)
GND(7) ------------ GND(7)
Szybkość transmisji szeregowej
Nawet w transmisji asynchronicznej urządzenia nadawcze i odbiorcze muszą być
w jakiś sposób ,,zsynchronizowane'' – muszą więc pracować z ,,jednakową szybkością'' (to
znaczy wiedzieć ile ,,trwa'' transmisja pojedynczego bitu). Szybkość transmisji podawana jest
w bitach na sekundę - bps (ang. bits per second). Najczęściej używane szybkości w transmisji
szeregowej mieszczą się w następującym szeregu: 75, 110, 150, 300, 600, 1200, 2400, 4800,
9600, 19200, 38400, 57600 oraz 115200 bps. Urządzenia nadawcze i odbiorcze muszą zatem
pracować z jednakową szybkością. Zazwyczaj jest ona taka sama w obu kierunkach.
Szeregowa transmisja asynchroniczna
Transmisja rozpoczyna się od przesłania bitu startu (bit STB) następnie przesyłany jest
znak (oznaczony CB) – zwykle 7 lub 8 bitów danych, transmisję kończy bit stopu (STB). Po
czasie martwym procedura jest powtarzana.
Na początku transmisji przesyłany jest jednostkowy impuls (zero lub jeden), musi on
być przeciwny do sygnału zastosowanego w czasie martwym. Odbiorca takiego bitu
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
startowego wie że w takim odcinku czasu będą nadawane następne bity tworzące przesyłaną
informację następuje więc krótkie zsynchronizowanie nadawcy z odbiorcy. Bity stopu
w zależności od rodzaju zastosowanego rozwiązania trwają od jednej do kilku jednostek
czasu.
Do podstawowych wad transmisji asynchronicznej należą:
- istnienie czasu martwego, które ogranicza wydajność przesyłu nawet do 60% ;
- szybkość transmisji jest ograniczona do kilkudziesięciu Kb/s.
Zaletami takiej transmisji są:
- niezależność zegarów nadawcy i odbiorcy;
- zamknięcie transmisji w ścisłych ramach czasowych.
Transmisja nazywana jest asynchroniczną, gdyż zakłada się, że dane mogą pojawiać
się w dowolnej chwili i będą natychmiast transmitowane do odbiorcy. Z tego też powodu
rozpoczęcie transmisji danych musi być zasygnalizowane w jakiś sposób. W tym celu
używamy dodatkowych dwóch bitów:
- bit startu – 0
- bit stopu - 1.
Znak A wysyłany w sposób szeregowy ,,wygląda'' następująco:
1
_
__
0 __| |_____| |
SP 1 00000 1T
Oznaczenia użyte w powyższym wykresie to:
S - bit startu,
P - bit parzystości,
T - bit stopu.
Szeregowa transmisja synchroniczna
W transmisji synchronicznej ciąg znaków zerojedynkowych o ściśle określonym
czasie trwania i ilości dokonuje zsynchronizowania nadawcy i odbiorcy. Początek nadawania
to ciąg synchronizujący (zazwyczaj jest to nie więcej niż 25 impulsów) – SYNC. Po
synchronizacji następuje przesłanie danych (DATA). Synchronizacja jest powtarzana tylko
wtedy, gdy następuje rozsynchronizowanie – co może się objawiać wzrostem błędów
w transmisji.
Zalety transmisji synchronicznej to:
- brak przerw w transmisji;
- nielimitowana szybkość transmisji.
Wadami takiej transmisji są:
- konieczność synchronizowania zegarów nadawcy i odbiorcy;
- urządzenia nadawczo-odbiorcze muszą być wyposażone w bufory.
Sposób postępowania dla mikrokontrolera
Mikrokontroler ATmega32 wyposażony jest w USART (Universal Synchronous and
Asynchronous serial Receiver Transmitter), który może pracować jako RS232. Aby
skorzystać z portu szeregowego RS232, należy wcześniej odpowiednio skonfigurować
mikrokontroler. Do tego celu służą rejestry:
• UBRRH - USART Baud Rate Register High,
• UBRRL - USART Baud Rate Register Low,
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
- Bit URSEL (bit 7 w UBRRH) musi być ustawiony na 0.
- Bity 6:4 w UBRRH są zarezerwowane i należy je zerować.
- Szybkość transmisji wynosi:
- Wartość UBRR obliczamy ze wzoru:
• UCSRA - USART Control and Status Register A,
- Bit 7 – Ustawiony, gdy w buforze odbiorczym są nieprzeczytane dane. Może służyć
do wyzwolenia przerwania.
- Bit 6 – Ustawiany, gdy zakończy sie nadawanie ramki. Może służyć do wyzwolenia
przerwania. Zerowany przez wpisanie 1 lub przy wywołaniu przerwania.
- Bit 5 – Ustawiony, gdy rejestr nadawczy jest pusty. Może służyć do wyzwolenia
przerwania.
- Bit 4 – Błąd ramki.
- Bit 3 – Przepełnienie kolejki odbiorczej.
- Bit 2 – Błąd parzystości.
- Bit 1 – Podwojenie prędkości transmisji, tylko dla trybu asynchronicznego.
- Bit 0 – Włączenie trybu komunikacji wieloprocesorowej.
• UCSRB - USART Control and Status Register B,
- Bit 7 – Włączenie przerwania, gdy odebrano dane (ustawiony bit RXC).
- Bit 6 – Włączenie przerwania, gdy zakończono nadawanie (ustawiony bit TXC).
- Bit 5 – Włączenie przerwania, gdy rejestr nadawczy pusty (ustawiony bit UDRE).
- Bit 4 – Włączenie odbiornika, zmiana funkcji nogi PD0 na RxD.
- Bit 3 – Włączenie nadajnika, zmiana funkcji nogi PD1 na TxD.
- Bit 2 – Liczba przesyłanych bitów.
- Bit 1 – Dziewiąty odbierany bit.
- Bit 0 – Dziewiąty nadawany bit.
• UCSRC - USART Control and Status Register C,
- Bit 7 – musi być ustawiony na 1.
- Bit 6 – Tryb pracy:
- 0 – asynchroniczny
- 1 – synchroniczny
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
- Bity 5:4 – Tryb parzystości:
- 00 – bez bitu parzystości
- 01 – wartość zarezerwowana
- 10 – bit parzystości (ang. even parity)
- 11 – bit nieparzystości (ang. odd parity)
- Bit 3 – Liczba bitów stopu:
- 0 – jeden bit
- 1 – dwa bity
- Bity 2:1 – Liczba przesyłanych bitów.
- Bit 0 – Polaryzacja sygnału zegara, dotyczy trybu synchronicznego.
Po zainicjalizowaniu mikrokontrolera można używać transmisji
wykorzystując odpowiednie funkcje i polecenia operujące na rejestrze UDR.
szeregowej
• UDR - USART I/O Data Register:
- Są osobne rejestry nadawczy i odbiorczy (USART pracuje w trybie full duplex),
widziane pod tym samym adresem wejścia-wyjścia.
- Zapis dokonywany jest do rejestru nadawczego.
- Odczyt dotyczy bufora odbiorczego.
- Odbierane bity są gromadzone w rejestrze odbiorczym.
- Odebrane dane są dodatkowo buforowane w dwuelementowej kolejce FIFO.
Ćwiczenie 7
Temat: Komunikacja za pomocą portu szeregowego RS232.
Zadanie:
1) Należy uruchomić port szeregowy kontrolera.
2) Zrealizować funkcję echa dla konsoli: znaki wpisywane za pomocą klawiatury
komputerowej powinny być przesyłane za pośrednictwem portu szeregowego
mikrokontrolera i wyświetlane na ekranie komputera (okno terminala)
3) Echo buforowane: dane wpisane za pomocą klawiatury powinny być gromadzone w
buforze o wielości 128 bajtów w pamięci RAM kontrolera, zaś wysłane po wciśnięciu
klawisza ENTER lub przepełnieniu bufora.
Język: C
Zasoby: port PD0, port PD1
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 8-9
Alfanumeryczny wyświetlacz LCD, na którym są wyświetlane parametry w trakcie
pracy, składa się z dwóch linii po szesnaście znaków. Układ ten posiada wbudowany
sterownik zgodny z HD44780, który umożliwia pracę wyświetlacza w jednym z dwóch
trybów – magistrala danych może być ośmiobitowa lub czterobitowa. Na zajęciach
wykorzystywać będziemy magistralę czterobitową, która pozwala na oszczędzenie 4 portów
mikrokontrolera. Wadą tej magistrali jest bardziej rozbudowana i skomplikowana obsługa
programowa. Rysunek przedstawia rozmieszczenie wyprowadzeń wyświetlacza, a tabela
zawiera opis ich funkcji.
LCD 2x16
Rys. 5. Wyprowadzenia alfanumerycznego wyświetlacza LCD
Nr Symbol Funkcja
1 GND
Masa
2 Vcc
Zasilanie
3 Kontrast Regulacja kontrastu
4 RS
Wybór rejestru
5 R/W
1 – odczyt, 0 – zapis
6 E
Sygnał zezwalający enable
7 D0
Linia danych D0
8 D1
Linia danych D1
9 D2
Linia danych D2
10 D3
Linia danych D3
11 D4
Linia danych D4
12 D5
Linia danych D5
13 D6
Linia danych D6
14 D7
Linia danych D7
15 LED_A Anoda podświetlania
16 LED_C Katoda podświetlania
Tabela 1. Funkcje wyprowadzeń wyświetlacza LCD
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
W wykorzystanym wyświetlaczu jest wbudowane podświetlanie (linie 15 i 16), które
zrealizowano za pomocą diod LED. Podświetlanie wymagało dodania rezystora
ograniczającego prąd, którego nie ma w module wyświetlacza. Bez rezystora ograniczającego
wyświetlacz świeciłby bardzo jasno, wydzielając przy tym dużo ciepła. Prowadziłoby to do
nadmiernego nagrzewania się matrycy oraz skróciłoby jej żywotność, a także mogłoby
spowodować szybsze odparowanie ciekłego kryształu. Do linii CONTRAST dołączono
potencjometr tak jak na rysunku, co umożliwia regulację kontrastu. Standardowo kontrast
regulowany jest przyłożeniem napięcia z zakresu od 0 do napięcia zasilania, gdzie zero
odpowiada maksymalnemu kontrastowi, a napięcie zasilania - minimalnemu.
Wyświetlacz LCD posiada następujące rejestry:
- DataWR - rejestr danych przeznaczony do zapisu informacji;
- DataRD - rejestr danych przeznaczony do odczytu informacji;
- ControlRD - rejestr stanu wyświetlacza (Status) przeznaczony do odczytu;
- ControlWR - rejestr sterujący wyświetlacza (Control) przeznaczony do zapisu;
O wyborze, do którego rejestru nastąpi zapis lub odczyt decydują linie 4 i 5 (D/C
i R/W). Linia 6 (E-enable) uaktywnia wymianę informacji z wyświetlaczem. Wyświetlacz
zawiera dwa rodzaje wewnętrznej pamięci, które mogą być kontrolowane: pamięć DD
(Display Data) i pamięć CG (Character Generator). Dostęp do tych pamięci odbywa się przez
wymienione wyżej rejestry. Pamięć CG składa się z dwóch części: pamięci CG ROM
zawierającej przygotowane przez producenta kody znaków oraz pamięci CG RAM
przeznaczonej na kody znaków dowolnie zdefiniowane.
Aby wyświetlacz zaczął funkcjonować zawsze na początku programu po załączeniu
zasilania należy go zainicjować, czyli wysłać kilka rozkazów sterujących w ściśle
określonych odstępach czasu. Rozkazy oraz wszystkie zależności są zamieszczone w aplikacji
sterownika HD44780. Przykładowa sekwencja inicjalizacji wyświetlacza LCD znajduje się na
rysunku .
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Rys. 6. Przykładowa programowa inicjalizacja modułu LCD
Po prawidłowym zainicjowaniu startu wyświetlacza można przejść do komunikacji z
tym modułem, która odbywa się przy wykorzystaniu magistrali czterobitowej. Każde
wysyłane do LCD słowo składa się z ośmiu bitów, funkcja odpowiedzialna za wysyłanie
danych do modułu dzieli je na dwie części czterobitowe i wysyła najpierw cztery starsze bity,
a następnie cztery młodsze.
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Ćwiczenie 8
Temat: Obsługa wyświetlacza char LCD.
Zadanie:
1) Zainicjalizować wyświetlacz LCD.
2) Wyświetlić na wyświetlaczu LCD napis statyczny.
3) Zrealizować funkcję „reklamy świetlnej”: stopniowe wyświetlanie kolejnych liter
napisu, przewijanie w lewo i prawo, migotanie napisu (negatyw).
Język: C
Zasoby: port PA2 – PA7
Ćwiczenie 9
Temat: Obsługa 10-bitowego przetwornika ADC wbudowanego w mikrokontroler.
Zadanie: Pomiar temperatury przy użyciu termistora. Wyświetlenie przeliczonej wartości
temperatury na wyświetlaczu char LCD.
Język: C
Zasoby: port PA1, port PA2 – PA7
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 10
Jednym z dwóch najpopularniejszych magistral do podłączania urządzeń
peryferyjnych w systemach mikroprocesorowych jest magistrala Serial Peripherial Interface
(SPI). Pozwala ona w prosty sposób komunikować się mikrokontrolerowi z takimi
peryferiami jak przetworniki ADC i DAC, czujniki temperatury, drivery diod, pamięci
EEPROM itp. Mikrokontrolery z rodziny AVR posiadają wbudowaną obsługę tej magistrali
co znacznie ułatwia programowanie układów korzystających z SPI.
Część sprzętowa magistrali SPI
Magistrala SPI korzysta z architektury master-slave. Jedno w urządzeń (MASTER)
inicjalizuje transmisję i generuje sygnał zegarowy. Drugie (SLAVE) odpowiada. Transmisja
może toczyć się w trybie full-duplex, to znaczy jednoczesne nadawanie i odbieranie. Służą do
tego dwie linie sygnałowe:
• MOSI (Master Out, Slave In)
• MISO (Master In, Slave Out)
Sygnał zegara przesyłany jest linią SCK.
Do magistrali może być podłączonych wiele urządzeń. Wykorzystują one wspólnie
linie MISO, MOSI i SCK. Koniecznym jest poprowadzenie oddzielnych linii Chip Select
(CS), służących do wyboru, które urządzenie ma być w danej chwili aktywne. Przykładowy
układ wykorzystujący magistralę SPI pokazany jest na rysunku 7.
Rys. 7. Przykładowe połączenie SPI
SPI posiada kilka trybów pracy. Przed korzystaniem z tej magistrali należy ustawić:
1. Kolejność bitów (MSB pierwszy lub LSB pierwszy),
2. Polaryzację zegara,
3. Fazę zegara,
4. Częstotliwość pracy magistrali.
Różne układy peryferyjne mogą wymagać innych ustawień. Z tego powodu może się zdarzyć,
że ustawienia magistrali trzeba zmieniać przed odwołaniem się do kolejnego urządzenia
peryferyjnego.
Programowanie interfejsu SPI
Do konfiguracji SPI w mikrokontrolerach AVR służą rejestry:
• SPCR - aby używać SPI, należy je najpierw włączyć (bit SPE). Kolejne bity tego
rejestru pozwalają ustawić, kolejność bitów, fazę i polaryzację zegara, częstotliwość
transmisji oraz czy mikrokontroler ma być masterem czy slavem.
• SPSR - w tym rejestrze znajduje się bit informujący o zakończeniu transmisji.
Znajduje się tutaj też bit odpowiedzialny za uruchomienie podwajania częstotliwości zegara
magistrali.
Rejestr, do którego zapisywane są dane do wysłania oraz rejestr w którym
przechowywane są dane odebrane noszą tą samą nazwę (SPDR). Należy jednak pamiętać, że
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
są to tak naprawdę dwa oddzielne rejestry. Kiedy mikrokontroler pracuje w trybie master,
transfer inicjowany jest zapisaniem danej do rejestru SPDR. W tym samym czasie następuje
odbiór. Jeśli chcemy jedynie odebrać dane z zewnątrz, to co zostanie zapisane do rejestru
SPDR nie ma znaczenia.
Sposób programowania
int main()
{
ustawienie rejestru SPCR
ustawienie rejestru SPSR
zapisanie do rejestru SPDR (wykonanie transmisji)
Sprawdzenie flagi ukończenia transmisji
Odczytanie danej z rejestru SPDR
}
Ćwiczenie 10
Temat: Cyfrowy pomiar temperatury przy użyciu termometru cyfrowego TC77.
Zadanie: Zrobić pomiar temperatury i wyświetlić tę wartość na wyświetlaczu char LCD.
Porównać wartość tej temperatury z temperaturą pomierzoną przy użyciu termistora.
Język: C
Zasoby: port PA2 – PA7, port PB4, PB6, PB7
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 11
Wyświetlacze 7-segmentowe zbudowane są z diod LED. Składają się z siedmiu
segmentów + kropka (a, b, ..., g, dt), za pomocą których możemy przedstawić dowolną cyfrę
dziesiętną, a także niektóre litery.
Rys. 8. Wygląd zewnętrzny wyświetlacza 7-segmentowego
W celu zmniejszenia liczby wyprowadzeń, łączy się LED-y ( diody ) na dwa sposoby:
łącząc wszystkie katody ( wyświetlacz 7-segmentowy ze wspólną katodą ) albo wszystkie
anody ( wyświetlacz 7-segmentowy ze wspólną anodą ).
Rys. 9. Schematy podłączenia wyświetlaczy 7-segmentowych
Cyfry kodujemy tak, aby w siedmiobitowym słowie binarnym każdy bit odpowiadał
jednemu z segmentów. Tablica stanów linii portów układu wyświetlacza umożliwiająca
wyświetlanie cyfr:
Wspólna anoda
Wspólna katoda
cyfra
h g f e d c b a
cyfra
h g f e d c b a
0
0 0 1 1 1 1 1 1
0
1 1 0 0 0 0 0 0
1
0 0 0 0 0 1 1 0
1
1 1 1 1 1 0 0 1
2
0 1 0 1 1 0 1 1
2
1 0 1 0 0 1 0 0
3
0 1 0 0 1 1 1 1
3
1 0 1 1 0 0 0 0
4
0 1 1 0 0 1 1 0
4
1 0 0 1 1 0 0 1
5
0 1 1 0 1 1 0 1
5
1 0 0 1 0 0 1 0
6
0 1 1 1 1 1 0 1
6
1 0 0 0 0 0 1 0
7
0 0 0 0 0 1 1 1
7
1 1 1 1 1 0 0 0
8
0 1 1 1 1 1 1 1
8
1 0 0 0 0 0 0 0
9
0 1 1 0 1 1 1 1
9
1 0 0 1 0 0 0 0
.
1 0 0 0 0 0 0 0
.
0 1 1 1 1 1 1 1
Tabela 2. Stany linii portów układu wyświetlacza 7-segmentowego umożliwiająca
wyświetlanie cyfr.
Zaletą tych wyświetlaczy jest bardzo dobra czytelność nawet w całkowitych
ciemnościach. Wadą – duży pobór mocy (2..3 mW na segment dla najbardziej
energooszczędnych wyświetlaczy), co bardzo ogranicza ich zastosowanie w sprzęcie
zasilanym bateryjnie.
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wyświetlacze statyczne
Statyczne sterowanie wyświetlaczem informacji jest najprostszym sposobem
wykorzystania wyświetlacza LED (lub pojedynczych diod). Jednocześnie sposób ten jest
najrzadziej stosowany ze względu na konieczność zarezerwowania tylu linii wyjściowych
portu mikrokontrolera ile będzie wykorzystywanych niezależnie elementów wyświetlacza.
Sposób ten polega na ciągłym podtrzymywaniu (do momentu zmiany informacji)
odpowiednich stanów logicznych, którym odpowiada świecenie lub wygaszenie diod LED.
Z tego powodu obsługa wyświetlacza statycznego jest niezwykle prosta a sam mikrokontroler
obciążony jest tylko w momencie zmian przekazywanej informacji.
Stosowanie wyświetlaczy ze wspólnym wyprowadzeniem anod poszczególnych
segmentów jest dużo bardziej popularne, ponieważ zazwyczaj bardziej wydajnym prądowo
poziomem logicznym linii portów wejścia-wyjścia jest poziom niski. Gwarantuje to
prawidłowe zaświecenie wyświetlacza. Warto nadmienić, że dla miniaturowych wyświetlaczy
niskoprądowych jest wymagany niski prąd o wartości 2..3mA. Można też wykorzystać
wyświetlacz ze wspólną katodą, którą wówczas łączymy z masą. Jednak stosowany
mikrokontroler musi mieć wyjścia portów w układzie przeciwsobnym, tzn. o odpowiedniej
wydajności linii w stanie wysokim. Dla obu wariantów różna będzie interpretacja logiczna
stanu wyświetlacza: dla wspólnej anody zaświecenie danego segmentu uzyskamy ustawiając
poziom niski na odpowiadającej mu linii, natomiast dla wyświetlacza ze wspólną katodą
świeceniu odpowiada poziom wysoki na wyprowadzeniu mikrokontrolera.
Włączone szeregowo rezystory R1…R8 ograniczają maksymalny prąd płynący przez
wyświetlacz. Ich wartość dobieramy w zależności od wymagań stosowanego wyświetlacza
oraz z uwzględnieniem możliwości portu mikrokontrolera (470 – 1k).
Czasami zdarza się tak, że wydajność prądowa portu wykorzystywanego
mikrokontrolera jest niewystarczająca do bezpośredniego dołączenia wyświetlacza, wówczas
jedynym wyjściem z sytuacji jest zastosowanie pośredniczącego układu wzmacniającego,
mogącego obsłużyć kilka niezależnych linii.
Obsługa pojedynczego statycznego wyświetlacza 7segmentowego pociąga za sobą
konieczność rezerwacji ośmiu linii portu mikrokontrolera. Jeżeli stosowany mikrokontroler
ma niewiele wyprowadzeń lub też jest wykorzystywany w bardzo rozbudowanym systemie,
może się okazać, że nie jest możliwe gospodarowanie takiej liczby wyprowadzeń.
Rozwiązaniem tego problemu jest układ wyświetlacza statycznego sterowanego przy użyciu
trzech linii, z możliwością regulacji jasności świecenia.
Układem pośredniczącym może być wówczas rejestr szeregowo – równoległy
74LS164, który realizuje przekształcenie wyświetlanej informacji z postaci szeregowej,
przesyłanej z mikrokontrolera linią DATA w takt zegara CLK, do postaci równoległej,
wymaganej przez wyświetlacz. Układ ten nie jest w pełni statyczny, w skutek chwilowego
wygaszania wyświetlacza za pomocą tranzystora, co umożliwia wprowadzenie dodatkowej
cechy funkcjonalnej. Jest nią możliwość sterowania w sposób programowy jasnością
świecenia wyświetlacza. Regulację jasności można uzyskać poprzez dobór czasów włączania
i wyłączania wyświetlacza. W rozwiązaniu standardowym wyłączanie wyświetlacza następuje
na niezbędny do zapisania rejestru czas, co w praktyce jest nierozróżnialne dla oka. Jeżeli
jednak z odpowiednio dużą częstotliwością: 30…40Hz generowalibyśmy na wyprowadzeniu
ON przebieg prostokątny o zmieniającym się wypełnieniu , to uzyskalibyśmy efekt ciągłego
świecenia wyświetlacza o jasności zależnej właśnie od wypełnienia przebiegu sterującego.
Wyświetlacze multipleksowane (dynamiczne)
Zasada ich działania polega na współdzieleniu wyprowadzeń mikrokontrolera przez
połączone w grupy wyświetlacze siedmiosegmentowe i dołączeniu dodatkowych układów
sterujących zasilaniem poszczególnych grup. Odpowiednio szybkie zapalenie i gaszenie
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
kolejnych grup oraz bezwładność ludzkiego wzroku dają w efekcie złudzenie świecenia
całego wyświetlacza.
Rys. 10. Układ wyświetlacza multipleksowanego
Do portu mikrokontrolera zostają dołączone równolegle (za pośrednictwem
rezystorów ograniczających prąd) cztery jednakowe wyświetlacze siedmiosegmentowe ze
wspólną anodą. W przypadku sterowania statycznego (anody dołączone bezpośrednio do
plusa zasilania) działanie takiego układu byłoby co najmniej dyskusyjne – polegałoby na
wyświetlaniu tej samej informacji na wszystkich wyświetlaczach. Sytuacja taka nie będzie
jednak mieć miejsca, gdyż anody poszczególnych wyświetlaczy są dołączone do zasilania za
pośrednictwem niezależnych tranzystorów T1…T4, sterowanych czterema liniami
mikrokontrolera W1…W4. Włączenie napięcia zasilania konkretnego wyświetlacza (wraz
z wyłączeniem pozostałych) następuje wyłącznie wtedy, gdy na linie portu D0…D7 są
wystawiane dane przeznaczone dla danego wyświetlacza.
Sposób postępowania:
1. włączamy 1-szy wyświetlacz
2. wyświetlamy cyfrę tysięcy
3. wyłączamy 1-szy wyświetlacz
4. włączamy 2-gi wyświetlacz
5. wyświetlamy cyfrę setek
6. wyłączamy 2-gi wyświetlacz
7. włączamy 3-ci wyświetlacz
8. wyświetlamy cyfrę dziesiątek
9. wyłączamy 3-ci wyświetlacz
10. włączamy 4-ty wyświetlacz
11. wyświetlamy cyfrę jedności
12. wyłączamy 4-ty wyświetlacz
Gdy czas wyświetlania będzie odpowiednio krótki (rzędu kilku, kilkunastu milisekund)
będziemy mogli zobaczyć wszystkie 4 cyfry na raz, ponieważ ludzkie oko nie jest w stanie
zaobserwować tak szybkich zmian
Obsługa wszystkich pozycji następuje cyklicznie. Czas trwania pojedynczego cyklu
powinien być tak dobrany, aby częstotliwość świecenia każdego wyświetlacza nie była
mniejsza niż 30…40 Hz (aby przekroczyć możliwość rejestrowania zmian przez ludzkie oko).
Najlepszą sytuacją jest gdy częstotliwość ta wynosi 100Hz, co pozwala na wyświetlanie
informacji pozbawione efektu migotania znanego z ekranów monitorów i telewizorów. Dalsze
zwiększanie częstotliwości odświeżania nie poprawia już jakości wyświetlania, powoduje za
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
to wzrost zakłóceń radioelektrycznych generowanych przez wyświetlacz oraz niepotrzebnie
marnuje moc obliczeniową mikrokontrolera.
W układzie wyświetlacza dynamicznego ważny jest dobór wartości rezystorów
ograniczających. Najłatwiej jest przyjąć wartości czterokrotnie mniejsze niż w statycznym
układzie sterowania takiego wyświetlacza. Często jednak taki wybór daje w efekcie zbyt
jasne, oślepiające wręcz świecenie wyświetlaczy. Spowodowane jest to, tym , że chociaż
teoretycznie prąd płynący przez wyświetlacz ma czterokrotnie większa wartość i płynie
czterokrotnie krócej, dając taką samą wartość średnią jak przy sterowaniu statycznym, to
jednak efektywność wyświetlaczy LED pracujących przy większych prądach jest dużo
wyższa (więcej energii jest zamienianej na światło). W praktyce okazuje się, że wartość
rezystorów należy zwiększyć o 50 – 100%, aby uzyskana jasność była porównywalna z
jasnością świecenia wyświetlacza przy sterowaniu statycznym.
Cechy multipleksowanego sterowania wyświetlaczy:
Zalety:
- niewielka liczba wykorzystywanych wyprowadzeń mikrokontrolera
- duża jasność świecenia z możliwością regulacji
- prosty układ połączeń i łatwe projektowanie płytki drukowanej
Wady:
- konieczność zarezerwowania ciągłej mocy obliczeniowej mikrokontrolera do obsługi
takiego układu i znaczna komplikacja oprogramowania
- generacja zakłóceń radioelektrycznych związana z przełączaniem pozycji
wyświetlacza, co sprawia, że konfiguracja ta jest niezbyt chętnie stosowana w
urządzeniach zawierających precyzyjne podzespoły analogowe o dużej czułości
Ćwiczenie 11
Temat: Obsługa wyświetlacza 7-segmentowego.
Zadanie:
1) Uruchomić wyświetlacz 7-segmentowy i wyświetlić stałą wartość.
2) Zmieniać wartość (np. inkrementacja) wyświetlaną na wyświetlaczu 7-segmentowym
poprzez wciśnięcie przycisku SW0.
Język: C
Zasoby: port PB0, port P… - P...
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 12
Najpopularniejszymi magistralami do podłączania urządzeń peryferyjnych w
systemach mikroprocesorowych są magistrale Serial Peripherial Interface (SPI) oraz I2C.
Najczęściej spełniają one podobne funkcje i wykorzystywane są jako platforma komunikacji
mikrokontrolerów z urządzeniami peryferyjnymi. Może być również wykorzystana przy
komunikacji pomiędzy np. modułami bardziej rozbudowanego systemu. Mikrokontrolery z
rodziny AVR posiadają wbudowaną obsługę magistrali I2C. Ponieważ nazwa „I2C” jest
zastrzeżona przez firmę Philips, inni producenci często stosują inne nazwy. Firma Atmel
używa nazwy Two Wire (serial) Interface (TWI).
Część sprzętowa magistrali I2C
Magistrala I2C składa się jedynie z dwóch dwukierunkowych linii: Serial Data Line
(SDL) oraz Serial Clock Line (SCL). Linie te są wspólne dla wszystkich urządzeń
podłączonych do magistrali. W przeciwieństwie do SPI, nie jest konieczne prowadzenie
dodatkowych linii adresujących, ponieważ w I2C urządzenia są wybierane poprzez adresy
nadawane liniami danych. Do linii SDL i SCL muszą być podłączone rezystory podciągające.
Podobnie jak w przypadku SPI, tutaj również urządzenia dzielone są na master i slave.
W jednej chwili tylko jedno urządzenie może spełniać rolę mastera. Urządzenia mogą jednak
zmieniać swoją rolę. Magistrala ta nie pozwala na jednoczesne nadawanie i odbieranie.
Magistrala może pracować z różnymi prędkościami. Należy więc sprawdzić w dokumentacji
użytych podzespołów jaka jest ich maksymalna dopuszczalna prędkość zegara na magistrali.
Rys. 11. Przykładowy system oparty na magistrali I2C
Protokół I2C
Rys. 12. Przykładowa transmisja
Master generuje warunek startu. Następnie nadawany jest adres urządzenia, które ma
się komunikować z masterem. Po adresie występuje bit informujący, czy master zamierza do
slave'a zapisywać czy go odpytywać. Następnie slave generuje bit ACK, który informuje
o tym, że adres został poprawnie odebrany i slave jest gotowy do wykonania transmisji.
Następnie wysyłane są bity danych. Po każdym bajcie nadawany jest przez odbiornik bit
ACK. Transmisja kończona jest w momencie, kiedy podczas wysokiego stanu na linii zegara
wystąpi zbocze narastające na linii danych.
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Programowanie interfejsu I2C
Do konfiguracji interfejsu I2C w mikrokontrolerach AVR służą rejestry:
1. TWBR - liczba zapisana w tym rejestrze używana jest do obliczenia prędkości
transmisji.
2. TWCR - w tym rejestrze znajdują się bity odpowiedzialne za:
• Uaktywnienie interfejsu TWI (TWEN)
• Generację bitu ACK (TWEA)
• Generację sekwencji startu (TWSTA)
• Generację sekwencji stopu (TWSTO)
• Informowanie o zakończeniu transmisji i wywołujące przerwanie
(TWINT)
• Informujące o kolizji na magistrali (TWWC)
• Uaktywniające przerwanie (TWIE)
3. TWSR - w tym rejestrze znajdują sęi bity informujące o statusie interfejsu TWI oraz
ustawiające preskaler częstotliwości.
4. TWAR - w tym rejestrze przechowywany jest adres slave mikrokontrolera.
Dane znajdują się w rejestrze TWDR.
Porównanie interfejsów SPI i I2C
Poniżej przedstawione są ważniejsze zalety obu interfejsów.
Magistrala SPI
• Transmisja w trybie Full-Duplex
• Większa przepustowość niż w I2C
• Duża możliwość dopasowania protokołu do własnych potrzeb
• Możliwość przesyłania danych o dowolnej długości (nie tylko 8-bit)
• Mały pobór mocy
• Przy rozbudowanym systemie zabiera dużo pinów na sygnały Chip select
• Brak potwierdzeń i kontroli poprawności transmisji
• Tylko jeden master w systemie
Magistrala I2C
• Używa tylko dwóch linii
• Każe urządzenie może być masterem
• Sprzętowe sprawdzanie poprawności transmisji
Ćwiczenie 12
Temat: Obsługa RTC (zegar czasu rzeczywistego)
Zadanie:
1) Wysyłać datę / czas na wyświetlacz 7-segmentowy.
2) Rozszerzyć ppkt 1 o funkcję ustawiania czasu.
Język: C
Zasoby: port PC0, port PC1
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 13-14
System przerwań obecny jest prawdopodobnie w każdym mikrokontrolerze. Im
bardziej jest on złożony, tym bardziej rozbudowany będzie w nim system przerwań.
W mikrokontrolerze ATmega32 dostępnych jest 21 rodzajów przerwań, które mogą być
wywoływane na skutek jeszcze większej liczby zdarzeń. Pozwala to na sprawne
kontrolowanie pracą wbudowanych w układ urządzeń peryferyjnych, a dzięki przerwaniom
zewnętrznym także urządzeń zewnętrznych.
Opis konfiguracji przerwań jest związany ściśle z układami peryferyjnymi i jest
zawarty w opisie tych układów w kolejnych punkach. Globalna flaga przerwań znajduje się
w głównym rejestrze kontrolnym SREG.
Zawartość rejestru SREG nie jest automatycznie zapamiętywana przy wejściu w kod
obsługi przerwania i odzyskiwana po jego wykonaniu. Należy to wykonywać programowo.
Podczas przerwań i wywołań procedur podrzędnych adres powrotny licznika programu jest
przechowywany w pamięci stosu. Poniższa tabela zawiera zestawienie wektorów przerwań
dla ATmega32.
Tabela 3. Wektory przerwań i resetu
Rejestr GICR - Główny rejestr kontroli przerwań
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Bit odblokowujący zewnętrzne przerwanie 1. Ustawienie tego bitu na 1 oraz
ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Sposób
wykrywania przerwania wybiera się bitami ISC11 i ISC10 w rejestrze MCUCR.
Zdarzenie może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.
INT0 - Bit odblokowujący zewnętrzne przerwanie 0. Ustawienie tego bitu na 1 oraz
ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Sposób
wykrywania przerwania wybiera się bitami ISC01 i ISC00 w rejestrze MCUCR.
Zdarzenie może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.
INT2 - Bit odblokowujący zewnętrzne przerwanie 2. Ustawienie tego bitu na 1 oraz
ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Bitem ISC2
w rejestrze MCUCSR określa się rodzaj zbocza generującego przerwanie. Zdarzenie
może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.
IVSEL - Bit wyboru początku wektora przerwań. Wykorzystywanie tego bitu wiąże się
z korzystaniem z programów bootujących. Jego wartość zero oznacza że wektory
przerwań zaczynają się od początku obszaru pamięci flash. Wartość jeden przesuwa
początek do miejsca wybranego przez konfigurację bitów bezpiecznikowych
BOOTZS
IVCE - Bit odblokowujący wybór wektora przerwań. Zabezpiecza przed przypadkową
zmianą stanu bitu IVSEL. Musi być ustawiony na 1 zanim zostanie zmieniony
IVSEL. Bit ten jest sprzętowo kasowany po 4 cyklach zegara od ustawienia tego
bitu, lub po zmianie IVSEL.
INT1 -
Przerwania zewnętrzne
Przerwania zewnętrzne są wyzwalane pinami INT0, INT1 oraz INT2. Mogą być
wyzwalane niezależnie od tego czy te piny są skonfigurowane jako wyjściowe czy wejściowe.
Cecha ta może być wykorzystana do programowego generowania przerwań. Zależnie od
ustawień w rejestrach MCUCR oraz MCUCS, przerwanie zewnętrzne może być wyzwolone
zboczem narastającym, opadającym, lub niskim poziomem (INT2 tylko zboczem).
INT0 / INT1: Przerwanie skonfigurowane jako wyzwalane poziomem będzie trwało
tak długo, jak będzie ten stan się utrzymywał. Poziom jest wykrywany asynchronicznie
i może służyć do wybudzenia mikrokontrolera z trybu Power-Down. Stan niski wówczas
musi się utrzymać przez czas, jaki jest potrzebny na wybudzenie.
INT2: Przerwanie INT2 może być wyzwolone jednym ze zboczy, a zdarzenie to
wykrywane jest asynchronicznie. Aby zdarzenie synchroniczne zostało wykryte (np. z wejścia
INT1), przy wykrywaniu zbocza impuls nie może być zbyt krótki, natomiast przy
wykrywaniu poziomu, jego stan również nie może trwać zbyt krótko. Związane to jest
z próbkowaniem stanu pinu w takt zegara Watchdoga.
Rejestr MCUCR - Rejestr kontroli mikrokontrolera
Rejestr MCUCR zawiera między innymi bity kontrolne do wyboru sposobu
wykrywania przerwania.
Rejestr MCUCR
ISC10, ISC11 -
Bity wyboru sposobu wykrywania przerwania 1. Pin INT1 może być
źródłem przerwania jeśli ustawiona jest flaga I w SREG oraz odpowiednia
maska przerwań w GICR.
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
ISC11 ISC10 Opis
0
0
Niski poziom pinu INT1 spowoduje żądanie przerwania
0
1
Dowolna zmiana stanu logicznego na INT1 wywoła żądanie przerwania
1
0
Zbocze opadające na INT1 wywoła żądanie przerwania
1
1
Zbocze narastające na INT1 wywoła żądanie przerwania
Tabela 4. Opis bitów ISC11 i ISC10 rejestru MCUCR.
Bity wyboru sposobu wykrywania przerwania 0. Pin INT0 może być
źródłem przerwania jeśli ustawiona jest flaga I w SREG oraz odpowiednia
maska przerwań w GICR.
ISC01 ISC00 Opis
0
0
Niski poziom pinu INT0 spowoduje żądanie przerwania
0
1
Dowolna zmiana stanu logicznego na INT0 wywoła żądanie przerwania
1
0
Zbocze opadające na INT0 wywoła żądanie przerwania
1
1
Zbocze narastające na INT0 wywoła żądanie przerwania
Tabela 5. Opis bitów ISC01 i ISC00 rejestru MCUCR.
ISC00, ISC01 -
Rejestr MCUCSR - Rejestr kontroli i statusu mikrokontrolera
ISC2 -
Bity wyboru sposobu wykrywania przerwania 2. Pin INT2 (asynchroniczne
przerwanie zewnętrzne) może być źródłem przerwania jeśli ustawiona jest flaga
I w SREG oraz odpowiednia maska przerwań w GICR. Konfigurując ISC2
wybieramy rodzaj zbocza które wygeneruje przerwanie. Wpisanie 1 powoduje
reakcję na zbocze narastające, wpisanie 0 na zbocze opadające. Aby zmiana została
wychwycona, impuls powinien trwać typowo nie krócej niż 50ns. Zmiana bitu ISC2
może wywołać przerwanie, więc aby można było go zmienić, najpierw należy
wykasować bit odblokowujący w GICR, po czym można zmienić ISC2. Przed
ponownym odblokowaniem przerwania INT2, flaga tego przerwania powinna być
wykasowana przez wpisanie jedynki do INTF2 w GIFR.
Rejestr GIFR - Główny rejestr flag przerwań
INTF1 - Flaga zewnętrznego przerwania 1. Kiedy zdarzenie pinu INT1 wywoła przerwanie,
flaga INTF1 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz ustawiony
bit INT1 w GICR, CPU skoczy do odpowiedniego wektora przerwania. Flaga
INTF1 jest kasowana kiedy wykonywana jest procedura obsługi przerwania.
Możliwe jest „ręczne” jej wykasowanie przez wpisanie do niej 1. Jeśli ustawionej
jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje wyczyszczona.
INTF0 - Flaga zewnętrznego przerwania 0. Kiedy zdarzenie na pinie INT0 wywoła
przerwanie, flaga INTF0 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz
ustawiony bit INT0 w GICR, mikrokontroler skoczy do odpowiedniego wektora
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
przerwania. Flaga INTF0 jest kasowana kiedy wykonywana jest procedura obsługi
przerwania. Możliwe jest „ręczne” jej wykasowanie przez wpisanie do niej 1.
INTF2 - Flaga zewnętrznego przerwania 2. Kiedy zdarzenie na pinie INT2 wywoła
przerwanie, flaga INTF2 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz
ustawiony bit INT2 w GICR, CPU skoczy do odpowiedniego wektora przerwania.
Flaga INTF2 jest kasowana kiedy wykonywana jest procedura obsługi przerwania.
Jeśli ustawione jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje
wyczyszczona.
Ćwiczenie 13
Temat: Wykorzystanie przerwań zewnętrznych.
Zadanie:
1) Zainicjalizować wyświetlacz LCD oraz transmisję szeregową RS232.
2) Skonfigurować mikrokontroler do pracy z wykorzystaniem przerwań pochodzących
od transmisji szeregowej.
3) Możliwość inkrementacji licznika wyświetlanego na ekranie monitora PC (terminal)
oraz na wyświetlaczu LCD.
Język: C
Zasoby: porty PD0, PD1, PA2 – PA7
Ćwiczenie 14
Temat: Wykorzystanie przerwań zewnętrznych.
Zadanie:
1) Zainicjalizować wyświetlacz LCD.
2) Skonfigurować mikrokontroler do pracy z wykorzystaniem przerwań pochodzących
od przycisku (np.: INT0).
3) Program sekwencyjnego przeskakiwania tekstu (reklama) powinien być przerywany
przez krótką melodię brzęczka.
Język: C
Zasoby: porty PA2 – PA7, PB5
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ
Komputerowe Sterowanie w Elektronice Przemysłowej
Wstęp teoretyczny do ćwiczenia 15
Jako urządzenia wyjściowe wykorzystuje się najczęściej wyświetlacze alfanumeryczne
ze sterownikiem HD44780 ze względu na stosunkowo niską cenę oraz proste sterowanie.
Jednak ich możliwości są niewielkie w porównaniu do wyświetlaczy graficznych. Najtańsze
wyświetlacze graficzne zbudowane są w oparciu o sterownik KS0108 (HD61202/HD61203)
nie posiadający generatora znaków.
Wyświetlacz ten pozwala na wyświetlenie ośmiu linii po 21 znaków (typowa czcionka
5x7) co daje łączną liczbę 168 znaków. Brak wbudowanego generatora znaków wydaje się
być poważną wadą wyświetlacza, jednak w prosty sposób można tą wadę wyeliminować
poprzez programową generację znaków realizowaną przez docelowy mikrokontroler.
Wszystkie niezbędne funkcje realizujące wyświetlanie tekstu wraz z tablicą znaków zapisaną
w pamięci programu zajmują około 1KB pamięci.
Funkcje poszczególnych wyprowadzeń wyświetlacza o rozdzielczości 128x64
przedstawia poniższa tabela :
Nr Oznaczenie
Funkcja
1
/CS1
Wybór pierwszego kontrolera
2
/CS2
Wybór drugiego kontrolera
3
Vss
Masa
4
Vdd
+5V
5
Vee
Zasilanie LCD (regulowane)
6
RS
Wybór rejestru (0:instrukcje; 1:dane)
7
R/W
Kierunek przesyłu (0:zapis; 1:odczyt)
8
EN
Wykonanie operacji
9
DB0
Bit danych 0
10
DB1
Bit danych 1
11
DB2
Bit danych 2
12
DB3
Bit danych 3
13
DB4
Bit danych 4
14
DB5
Bit danych 5
15
DB6
Bit danych 6
16
DB7
Bit danych 7
Tabela 6. Opis wyprowadzeń wyświetlacza graficznego o rozdzielczości 128x64.
Do sterowania wyświetlaczem wymagane jest 13 wyprowadzeń mikrokontrolera. Nie
jest możliwa transmisja 4-bitowa, jak w przypadku wyświetlaczy alfanumerycznych ze
sterownikiem HD44780. Sterownik KS0108 zawiera szereg niezbędnych i jednocześnie
podstawowych funkcji, z którymi należy się zapoznać. Dodatkowo istnieje oprogramowanie,
które umożliwia zapis plików graficznych w postaci BitMap gotowych do zaprogramowania i
wyświetlania na tego typu wyświetlaczach graficznych.
Ćwiczenie 15
Temat: Obsługa wyświetlacza graficznego LCD.
Zadanie:
1) Zainicjalizować wyświetlacz graficzny LCD.
2) Wyświetlić na wyświetlaczu LCD napis statyczny.
3) Wyświetlić żądaną dowolną grafikę na wyświetlaczu LCD.
Język: C
Zasoby: porty PA0-PA7, PC0-PC3
© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Podobne dokumenty