Jarosław Doliński
Książka jest kompletnym przewodnikiem po rodzinie mikrokontrolerów AVR, ze szczególnym uwzględnieniem mikrokontrolera AT90S23I3. Czytelnik znajdzie w książce informacje o budowie i architekturze mikrokontrolerów AVR. sposobach ich programowania, zalecanych warunkach pra cy, budowie i działaniu modułów peryferyjnych, a także parametrach elektrycznych i czasowych. Szczegółowo przedstawiono listę rozkazów asemblera, programy narzędziowe (m.in. AVR Studio oraz VM Lab) i kompilatory (w tym bezpłatny kompilator języka C - AVR-GCC). Praktyków szczególnie zainteresują przykładowe projekty, opisane w ramach 11 ćwiczeń laboratoryjnych (wszystkie programy napisano w języku C). Oprócz przykładów klasycznych (jak np. obsługa alfa numerycznego wyświetlacza LCD, klawiatury, czy interfejsu RS232) przedstawiono także wiele przykładów nowoczesnych, jak choćby ilustrację sposobu dołączenia mikrokontrolera AVR do in terfejsu USB, współpracę mikrokontrolerów AVR z układami wyposażonymi w interfejs 1-Wire (iButtori), czy regulowanie obrotów silników DC za pomocą przebiegów PWM. W książce przedstawiono opis programatora ISP, który umożliwia programowanie pamięci mikro kontrolerów AVR po zainstalowaniu ich w docelowym urządzeniu oraz zestawu ewaluacyjnego, który służył do zweryfikowania wszystkich projektów opisanych w książce. Programy źródłowe do wszystkich przykładów opisanych w książce są dostępne na stronie interne towej http://wwwMc.pVindex.php?id-Qvr. Redaktor merytoryczny; Krzysztof Powala ISBN 83-910067-6-X © Copyright by Wydawnictwo BTC Warszawa 2003.
Wydawnictwo
V
btc
Wydawnictwo BTC ul. Inowłodzka 5 03-237 Warszawa fax: (22) 782-42-90 http://www.btc.pl e-mail:
[email protected] Wydanie 1. Warszawa 2003. Wszysikie znaki występujące w tekście są zaśnieżonymi znakami Firmowymi bądt towarowymi ich właścicieli. Autor oraz wydawnictwo BTC dołożyli wszelkich starań, by zawarte w lej książce informacje były kompletne i rzetelne. Nie biori| jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za zwiazune z lym ewentualne naruszenie praw patento wych lub autorskich. Aolor oraz wydawnictwo BTC nie ponoszi| również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wszelkie pruwa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fnigmeitto* niniejszej publikacji w jakiej kolwiek postaci JCM zabronione. Wykonywanie kopii metoda, kserograficzna., fotograficzna, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Druk i oprawa: Lodzka Drukarnia Dziełowa S.A.
Spis treści C z ę ś ć 1. I n f o r m a c j e p o d s t a w o w e Wstęp
8
1.
Trochę historii
2.
Charakterystyka mikrokontrolerów AVR
11
Rodzina A V R - podstawy
13
3.
3.1.
Funkcje wyprowadzeń
9
16
Część 2 . B u d o w a i działanie m i k r o k o n t r o l e r ó w A V R 4.
Architektura mikrokontrolerów AVR
20
4.1.
Generator taktujący
23
4.2.
Rejestry ogólnego przeznaczenia
24
4.3.
Jednostka arytmetyczno-Iogiczna (ALU)
26
4.4.
Pamięć programu
26
4.5.
Nieulotna pamięć danych EEPROM
26
4.6.
Pamięć danych SRAM
27
4.7.
Tryby adresowania pamięci danych i pamięci programu 28 4.7.1. Tryb bezpośredniego adresowania rejestrów wykorzystujący pojedynczy rejestr 28 4.7.2. Tryb bezpośredniego adresowania rejestrów wykorzystujący dwa rejestry 29 4.7.3. Tryb bezpośredniego adresowania obszaru wejścia/wyjścia 30 4.7.4. Tryb bezpośredniego adresowania pamięci danych 30 4.7.5. Tryb pośredniego adresowania danych z przemieszczeniem 31 4.7.6. Tryb adresowania pośredniego 32 4.7.7. Tryb adresowania pośredniego danych z predekrementacją.... 32 4.7.8. Tryb adresowania pośredniego danych z postinkrementacją 33 4.7.9. Tryb adresowania stałych z użyciem rozkazu LPM 34 4.7.10. Tryb adresowania pośredniego pamięci programu (UMP, ICALL) 34 4.7.11. Tryb adresowania względnego pamięci programu (RJMP i RCALL) 35 4.8. Przebiegi czasowe podczas dostępu do pamięci i wykonywania rozkazów 36
4.9.
Przestrzeń we/wy 4.9.1. Funkcje bitów w rejestrach funkcyjnych.... 4.10. Zerowanie i wektory przerwali 4.10.1. 4.10.2. 4.10.3. 4.10.4.
Źródła sygnału zerującego Uchwyty przerwań Przerwania zewnętrzne Czas odpowiedzi na zgłoszenie przerwania
38 40 42 44 47 53 54
5 6
4.11. Tryby oszczędzania energii 4.11.1. 4.11.2. 5.
6. 7.
9.
Tryb Ule Tryb Power-Down
5 7
5 9
Timery/liczniki 5.1. 8-bitowy Timer/LicznikO 5.2. 16-bitowy Timer/Licznikl
60 62
5.3.
71
Timer/Licznikl w trybie PWM
7
Watchdog Pamięć danych EEPROM 7.1. 7.2.
8.
5 7
5
?9
Zapis i odczyt pamięci Zapewnienie prawidłowych warunków pracy pamięci EEPROM
Układ transmisji szeregowej (UART)
79 84 85
8.1.
Budowa i działanie nadajnika UART
86
8.2.
Budowa i działanie odbiornika UART
87
8.3.
Sterowanie transmisją
90
8.4.
Generator podstawy czasu transmisji {Baud Rate Generator)
93
Komparator analogowy
96
10. Porty wejścia-wyjścia (I/O)
99
10.1. Budowa portu B 10.1.1. Port B jako cyfrowy port we/wy ogólnego przeznaczenia .... 10.1.2. Funkcje alternatywne portu B 10.1.3. Budowa linii portu B 10.2. Budowa portu D 10.2.1. Port Djako cyfrowy port we/wy ogólnego przeznaczenia.... 10.2.2. Funkcje alternatywne portu D 10.2.3. Budowa linii portu D 11. Pamięci nieulotne w mikrokontrolerach AVR
99 101 102 103 106 108 108 110 113
11.1. Bity zabezpieczające pamięć programu i danych 11.2. Bity konfiguracyjne 11.3. Sygnatury
114 115 116
11.4. Programowanie pamięci Flash i EEPROM 11.4.1. Programowanie równoległe 11.4.2. Programowanie szeregowe
116 116 123
,
Część 3 . Lista rozkazów 12. Zestawienie rozkazów mikrokontrolera AT90S2313 12.1. Opis działania rozkazów _
128 ]36
Część 4. Narzędzia i projekty przykładowe 13. Narzędzia projektowe
278
13.1. AVR Assembler for Windows
279
13.2. Kompilator języka C - AVR-GCC wersja 3.2 13.2.1. Instalacja kompilatora
283 284
13.3. AVR Studio wersja 3.56 13.3.1. Przygotowanie programów pisanych w asemblerze do symulacji w A V R Studio 3.56 13.3.2. Integracja programu AVR Studio 3.56 z kompilatorem AVR-GCC 13.3.3. Symulacja programów w AVR Studio V. 3.56 13.4. Symulator Visual Micro Lab 3.56 13.5. Programowanie pamięci programu w systemie (ISP) 13.5.1. Programator ZL2PRG 14. Przykładowe aplikacje 14.1. Zestaw uruchomieniowy ZL1AVR
284 285 287 290 295 300 300 303 304
14.1.1. Zasilanie zestawu 307 14.1.2. Taktowanie i zerowanie mikrokontrolera 307 14.1.3. Wykorzystywanie portów mikrokontrolera 308 14.1.4. Klawiatura 309 14.1.5. Interfejs RS232 310 14.1.6. Diody L E D 310 14.1.7. Wyświetlacz alfanumeryczny LCD 311 14.1.8. Interfejsy P C i 1-Wire 311 14.1.9. Przetwornik analogowo-cyfrowy 312 14.1.10. Programowanie mikrokontrolera w systemie (ISP) 315 14.2. Ćwiczenia praktyczne 317 14.2.1. Ćwiczenie 1 317 Sterowanie portami mikrokontrolera w trybie wyjściowym • efekt węża świetlnego i biegnącego punktu na linijce diod LED 14.2.2. Ćwiczenie 2 320 Wykorzystanie timera do odmierzania czasu w trybie odpytywa nia (generator przebiegu prostokątnego o częstotliwości 1 kHz) 14.2.3. Ćwiczenie 3 323 Sterowanie portami mikrokontrolera w trybie wejściowym, wyko rzystanie timera do odmierzania czasu z wykorzystaniem przerwań - obsługa przycisków dołączonych do portów mikrokontrolera 14.2.4. Ćwiczenie 4 328 „Hello World!", czyli sterowanie wyświetlaczem alfanumerycz nym LCD 16x2 i 16x1. Obsługa pojedynczego przycisku J4.2.5. Ćwiczenie 5 343 „Łapanie muchy", czyli obsługa klawiatury matrycowej z wykorzystaniem przerwań timera, obsługa wyświetlacza alfanumerycznego LCD 16 x2 14.2.6. Ćwiczenie 6 351 6-bitowy, binarny wskaźnik napięcia. Zastosowanie komparato ra analogowego do budowy przetwornika analogowo-cyfrowego. Wyzwalanie funkcji przechwytywania Timeral za pomocą komparatora. Przerwanie od przechwytywania Timeral. Obsłu ga wewnętrznej pamięci EEPROM
14.2.7.
Ćwiczenie 7 Regulacja obrotów silnika DC. Wykorzystanie Timeral modulatora PWM. Obsługa pojedynczych klawiszy
357 jako
14.2.8.
Ćwiczenie 8 >3 Sterowanie obrotami silnika DC z komputera PC. Wykorzysta nie Timeral jako modulatora PWM. Wykorzystanie UART-a mikrokontrolera do prowadzenia transmisji szeregowej pomiędzy płytką ZUAVR a komputerem PC
3f
14.2.9.
Ćwiczenie 9 374 Obsługa interfejsu 1-Wire. Odczyt pastylki identyfikacyjnej Dallasa - DS1990A. Obsługa wyświetlacza LCD 16x2 14.2.10. Ćwiczenie 10 388 Obsługa interfejsu fiC. Obsługa przerwania zewnętrznego. Wykorzystanie układu PCF8583 (RTC - Real Time Clock) do bu dowy zegara 24-godzinnego. Obsługa wyświetlacza LCD 16x2 14.2.11. Ćwiczenie 11 408 Podłączenie mikrokontrolera AVR do komputera PC przez port USB. Obsługa nadajnika i odbiornika UART z wykorzystaniem systemu przerwań. Obsługa wyświetlacza LCD 16x2
Dodatki Dodatek A. Podstawowe parametry mikrokontrolerów z rodziny AVR
420
Dodatek B. Zestawienie rejestrów mikrokontrolera AT90S2313
422
Dodatek C. Wybrane charakterystyki elektryczne i czasowe mikrokontrolera AT90S2313 Dodatek D
424
D . l . Dopuszczalne parametry elektryczne mikrokontrolera AT90S2313 D.2. Parametry czasowe zewnętrznego sygnału zegarowego Dodatek E. Wyprowadzenia typowych wyświetlaczy LCD i VFD z interfejsem równoległym
428 430 431
Dodatek F. Instalacja sterowników dla układu FT8U232BM w systemie operacyjnym Windows 432 Dodatek G G.l. Płytka drukowana zestawu ZL1AVR G.2. Płytka drukowana programatora ZL2PRG Dodatek H. Wybrane adresy internetowe związane z mikrokontrolerami AVR Dodatek I 1.1. Tablica kodów ASCII 1.2. Znaki zawarte w generatorze znaków sterownika HD44870 Skorowidz
439 442 443 445 447
Wstęp Postęp techniczny i technologiczny, jaki obserwujemy od wielu lat na świe cie, wymusza na konstruktorach konieczność ciągłego śledzenia
pojawiają
cych się nowości i uwzględniania ich w swojej pracy. Ilość informacji, przez jaką powinien przebrnąć n a co dzień każdy inżynier, aby b y ć „na bieżąco", coraz częściej sięga granic możliwości. D o s t ę p d o literatury technicznej, bez porównania lepszy niż choćby dziesięć lat temu, w d a l s z y m ciągu wydaje się j e d n a k daleki od wystarczającego. Świadczą o tym c h o ć b y c z ę s t o spotykane pytania „od czego zacząć, gdzie zdobyć p o d s t a w o w e n a r z ę d z i a " itp., bez ustannie pojawiające się n a różnych internetowych g r u p a c h
dyskusyjnych
oraz w Ustach d o czasopism o tematyce elektronicznej. Książka powstała w nadziei, że przynajmniej c z ę ś c i o w o z a s p o k o i takie właś nie potrzeby. O m ó w i o n o w niej b u d o w ę m i k r o k o n t r o l e r ó w A V R , przedsta wiono listę rozkazów, a w s z y s t k o to zilustrowano w i e l o m a
przykładami
praktycznymi. Zdając sobie sprawę z o l b r z y m i e g o ich z n a c z e n i a dla zrozu mienia tematu, przykłady umieszczono wszędzie t a m , gdzie m o g ą się poja wić wątpliwości z interpretacją tekstu. Konstruktorzy stosujący mikrokontrolery podzielili się n a zwolenników pro gramowania w asemblerze i językach wysokiego poziomu, j a k n p . C lub Bascom. Zalety programowania wjczykach wysokiego p o z i o m u są bezsporne. Trzeba jednak pamiętać, że pewnych problemów nie da się rozwiązać bez sięg nięcia po wstawki asemblerowe. Uważam, że także ci projektanci, którzy nasta wiają się na programowanie w którymś z j ę z y k ó w wysokiego p o z i o m u , powin ni znać asembler wykorzystywanego przez nich mikrokontrolera. Znajomość ta z pewnością przyczyni się d o poznania budowy mikrokontrolera, ułatwi także zrozumienie sposobu j e g o działania. Z powyższych względów dla części przy kładów zamieszczono kody źródłowe w języku C, dla pozostałych z a ś w wersji asemblerowej. Zdecydowałem się na język C, chociaż budzi on nieuzasadnione obawy wśród początkojących programistów, gdyż niepodważalną zaletą prze mawiającą za takim właśnie wyborem jest dostępność bezpłatnego kompilatora jakim jest A V R - G C C . Narzędzie to nie jest pozbawione p e w n y c h
wad
i ułomności, co nie oznacza jednak, że nie można za j e g o pomocą stworzyć op rogramowania realizującego poważne zadania. Myślę, że w dobie walki z pi ractwem takie podejście d o sprawy znajdzie zrozumienie Czytelników. Sposób pobrania kompilatora A V R - G C C z Internetu i j e g o instalacji opisałem w odręb nym rozdziale. Jestem przekonany, że Czytelnicy, którzy zostaną „zmuszeni" w ten sposób do nauki języka C nie będą tego żałować.
Od momentu wyprodukowania pierwszego mikrokontrolera A V R minęło już kilka lat. D o d z i ś firma A t m e l rozwinęła tę r o d z i n ę n a tyle, że nie s p o s ó b w j e d n e j książce o m ó w i ć wszystkich d o s t ę p n y c h o d m i a n m i k r o k o n t r o l e r ó w . D o c e l ó w d e m o n s t r a c y j n y c h w y b r a ł e m układ A T 9 0 S 2 3 I 3 , n a bazie k t ó r e g o będą o m ó w i o n e bloki funkcjonalne występujące r ó w n i e ż w innych m i k r o kontroierach rodziny A V R . D o d a t k o w y m c z y n n i k i e m decydującym o w y b o rze j e s t s t o s u n k o w o niska c e n a t e g o mikrokontrolera. T e a r g u m e n t y p o w i n n y z a c h ę c i ć k o n s t r u k t o r ó w d o sięgnięcia p o ten układ, n a inne - bardziej r o z b u d o w a n e - przyjdzie c z a s , gdy okaże się, ż e z a s o b y 2 3 1 3 nie są wystarczające. J a k j u ż w s p o m n i a ł e m , p r z y k ł a d a m dużą w a g ę d o p r a k t y c z n e g o o d n o s z e n i a p o r u s z a n y c h w książce z a g a d n i e ń . A b y ułatwić start początkującym, wszyst kie e k s p e r y m e n t y w y k o n a ł e m n a uniwersalnej p ł y t c e u r u c h o m i e n i o w e j dla m i k r o k o n t r o l e r a A T 9 0 S 2 3 1 3 (oznaczenie Z L 1 A V R ) o p r a c o w a n e j specjalnie n a potrzeby tej książki. Jej b u d o w ę d o k ł a d n i e o p i s a ł e m w rozdziale 14.
1.
Trochę historii Elektronika o d początku s w o j e g o istnienia p r z e c h o d z i ł a wiele m o m e n t ó w p r z e ł o m o w y c h . M o ż n a p o w i e d z i e ć , że c z ę s t o d e c y d o w a ł y o n e o otaczającym nas świecie. D z i ś trudno p o w i e d z i e ć , czy w a ż n i e j s z e b y ł o w y n a l e z i e n i e l a m py e l e k t r o n o w e j , tranzystora, czy s k o n s t r u o w a n i e p i e r w s z e g o układu scalo n e g o . Niemniej w i e k o p o m n y m d z i e ł e m było niewątpliwie o p r a c o w a n i e pier w s z e g o m i k r o p r o c e s o r a . T o , c o się dzieje w e w s p ó ł c z e s n e j
elektronice,
w w i ę k s z o ś c i p r z y p a d k ó w obraca się w ł a ś n i e wokół t e g o elementu. A ż trud n o uwierzyć, że w s z y s t k o zaczęło się zupełnie n i e d a w n o , b o na początku lat 7 0 . N i e w i n n i e wyglądające z a m ó w i e n i e na specjalizowany układ, który miał b y ć z a s t o s o w a n y w elektronicznych kalkulatorach, w p ł y n ę ł o na losy świata. O d z i w o , zlecającym była j a p o ń s k a firma B u s i c o m , a w y k o n a w c ą a m e r y k a ń s k i Intel. Ja p o ń c z y c y p o s t r z e g a n i byli w t a m t y c h c z a s a c h , j a k o b a r d z o z d o l n y naród, który potrafi zrobić niemal w s z y s t k o . T o „ n i e m a l " z d e c y d o w a ł o , że dzisiaj nikt nie p a m i ę t a n a z w y B u s i c o m , a s ł o w o Intel odmieniają na c a ł y m ś w i e c i e nawet przedszkolaki. T a k powstał pierwszy m i k r o p r o c e s o r - Intel 4 0 0 4 (wygląd j e d n e j przez firmę Intel w 1971 roku z j e g o wersji p o k a z a n o n a fotografii 1.1). B y - mikroprocesora 14004 w obudoł o t o w 1971 roku, w i ę c nie jest t o historia wie ceramicznej F o t
l
t
W i d o k
o
p
r
a
c
o
m
n
e
g
o
bardzo odległa. N a obszarze 3 na 4 m m u m i e s z c z o n o 2 3 0 0 tranzystorów P - M O S Układ mógł w y k o n a ć 100 000 instrukcji w ciągu s e k u n d y , a j e g o lis ta rozkazów liczyła 45 pozycji. C h o c i a ż ż y w o t układu nie był zbyt długi (na stępca pojawił się j u ż w 1972 roku), j e g o w y p r o d u k o w a n i e s t a n o w i ł o praw dziwą „iskrę zapalną" dla prac konstrukcyjnych nad n o w y m i wersjami. Dalej wydarzenia potoczyły się bardzo szybko. W k r ó t k i m czasie powstało wiele różnych odmian mikroprocesorów, ale tym, który n a p r a w d ę rozpoczął podbój świata był Intel 8080. W a r t o p r z y p o m n i e ć , że b y ł o n p r o d u k o w a n y także w Polsce w zakładach C E M I p o d o z n a c z e n i e m M C Y 7 8 8 0 . Swoją drogą zastanawiające jest j a k to b y ł o m o ż l i w e , z w a ż y w s z y że w h a l a c h produkcyj nych dawało się w y c z u w a ć pod n o g a m i drżenia posadzki, w y w o ł y w a n e przez przejeżdżający przed fabryką t r a m w a j . Rewolucyjną rolę mikroprocesorów zauważyli też inni p r o d u c e n c i . Jednym z nich był Zilog, którego Z 8 0 przez długi c z a s skutecznie
konkurował
z 8080. Można obiektywnie stwierdzić, że w p r o c e s o r z e t y m w i e l e rzeczy unowocześniono i ulepszono. Był wygodniejszy w użyciu z a r ó w n o w trakcie projektowania części elektronicznej, j a k i w pisaniu o p r o g r a m o w a n i a . Cha rakteryzował się również większą niż 8 0 8 0 wydajnością. Jedną z cech ówcześnie p r o d u k o w a n y c h m i k r o p r o c e s o r ó w b y ł o to, że wyma gały stosunkowo r o z b u d o w a n e g o otoczenia, t w o r z o n e g o na b a z i e wyspecjali zowanych układów scalonych. Mikroprocesory były p o z b a w i o n e także ja kichkolwiek peryferiów (w postaci c h o ć b y interfejsu U A R T , wewnętrznej pamięci programu, niektóre wymagały nawet z e w n ę t r z n y c h
kontrolerów
przerwań). Dlatego właśnie kolejnym p r z e ł o m e m b y ł o o p r a c o w a n i e mikro kontrolera, czyli mikroprocesora zintegrowanego w j e d n e j o b u d o w i e z modu łami peryferyjnymi. W ten sposób powstała b a r d z o p o d o b n a d o pierwowzo ru, j e d n a k zupełnie n o w a klasa układów. N a z y w a n o j e p i e r w o t n i e mikrokom puterami j e d n o u k ł a d o w y m i , później przyjęła się n a z w a m i k r o k o n t r o l e r . Wbrew powszechnemu mniemaniu, twórcą p i e r w s z e g o na świecie mikrokon trolera jest firma T e x a s Instruments, która na początku 1975 r o k u wprowa dziła d o masowej produkcji 4-bitowe mikrokontrolery
TMS1000
(jedną
z wersji pokazano na fotografii 1.2). Z trudnych d o ustalenia o b e c n i e przy czyn mikrokontrolery te nie zdobyły wystarczająco d u ż e g o r y n k u , co - mię dzy innymi - spowodowało, że niedługo później zaczęły d o m i n o w a ć mikro kontrolery produkowane przez firmę Intel (8042, 8 0 4 8 ) . P r a w d z i w ą furorę zrobiły jednak mikrokontrolery 8051 i j e g o p o c h o d n e . U k i a d ten, c h o ć często krytykowany, niepodzielnie króluje na rynku d o dziś. N i e w ą t p l i w i e powo d e m tego jest fakt, że wielu producentów m i k r o k o n t r o l e r ó w p r o d u k u j e dzie siątki różnorodnych o d m i a n tego układu, dzięki c z e m u p r a k t y c z n i e d o każdej
aplikacji m o ż n a d o b r a ć układ z o d p o w i e d n i m i peryferiami. D o d a t k o w y m p o w o d e m p o p u l a r n o ś c i u k ł a d ó w z rodziny M C S - 5 1 j e s t to, że konstruktorzy znają architekturę zgromadzili
8051
„na
pamięć"
odpowiednie
oraz
narzędzia
sprzętowe i programowe. Co więcej, mi m o u p ł y w u wielu lat o d pojawienia się p i e r w s z y c h u k ł a d ó w z rodziny M C S - 5 1 , wciąż są o p r a c o w y w a n e n o w e , u d o s k o n a l o n e wersje 8 0 5 1 . Z p o w y ż s z y c h p o
Fot. 1.2. Jedna z wersji 4-bitowego
w o d ó w jest on często stosowany nawet
mikrokontrolera TMS1000 firmy Texas
w takich projektach, d o których m o ż n a
Instruments
znaleźć bardziej o d p o w i e d n i e o d m i a n y m i k r o k o n t r o l e r ó w , z 8 0 5 1 nie mają c y c h nic w s p ó l n e g o . Czy d o m i n a c j a ta będzie j e d n a k trwać w i e c z n i e ? Z a p e w n e nie. P o w a ż n y m k o n k u r e n t e m dla 8 0 5 1 stały się ostatnio m i k r o k o n t r o l e r y z rodziny A V R , o p r a c o w a n e zresztą przez firmę, która r o z p o c z y n a ł a swą karierę od produkcji „ k l o n ó w " 8 0 5 1 . W s z y s c y j u ż o c z y w i ś c i e wiedzą, że c h o d z i tu o firmę A t m e l , która t a k j a k Intel w latach 80., o b e c n i e staje się j e d n y m z największych n a świecie d o s t a w c ó w m i k r o k o n t r o l e r ó w 8-bitowych, a j u ż na p e w n o bije rekor dy p o p u l a r n o ś c i w P o l s c e .
2.
Charakterystyka mikrokontrolerów AVR B u d o w a m i k r o k o n t r o l e r ó w A V R opiera się na architekturze h a r w a r d z k i e j . Jedną z g ł ó w n y c h cech charakterystycznych architektury harwardzkiej j e s t rozdzielenie przestrzeni adresowej pamięci p r o g r a m u i przestrzeni adresowej p a m i ę c i d a n y c h , c o u z y s k a n o poprzez z a s t o s o w a n i e o d d z i e l n y c h magistrali a d r e s o w y c h . Dzięki t e m u m o ż l i w e było z a s t o s o w a n i e s ł o w a o różnej szero kości dla p a m i ę c i p r o g r a m u i pamięci d a n y c h , a t a k ż e uchronienie się o d p r z y p a d k ó w , w których dane m o g ł y b y b y ć interpretowane j a k o instrukcje. M i k r o k o n t r o l e r y A V R , w przeciwieństwie d o 8 0 5 1 , należą d o grupy u k ł a d ó w o architekturze R I S C (Reduced
Instruction
j e s t o k r e ś l a n a nazwą C I S C (Complex
Set Computer).
Instruction
Architektura 8051
Set Computer).
Wykonanie
j e d n e g o rozkazu C I S C w y m a g a zazwyczaj w y k o n a n i a wielu operacji, co zwykle trwa kilka taktów zegarowych. W i ę k s z o ś ć r o z k a z ó w R I S C j e s t reali z o w a n a w j e d n y m takcie zegara, co - p o m i m o krótszej listy r o z k a z ó w - za pewnia szybsze w y k o n y w a n i e programu. W b r e w p o z o r o m , p r o g r a m y pisane dla procesorów RISC charakteryzują się większą spójnością, a c o za tym idzie mniejszym kodem w y n i k o w y m . Cechą wyróżniającą
mikrokontrolery
A V R jest również to, że z a i m p l e m e n t o w a n o w nich wiele rejestrów wewnęt rznych, z których każdy m o ż e pełnić funkcję akumulatora p o d c z a s wykony wania operacji arytmetycznych i logicznych. Dzięki temu minimalizuje się liczbę wewnętrznych przesłań międzyrejestrowych, c o korzystnie w p ł y w a na szybkość wykonywania programu i j e g o wielkość. Projektanci rodziny A V R przewidzieli możliwość wykorzystywania trzech par rejestrów j a k o rejestrów indeksowych używanych w niektórych trybach adresowania. Na uwagę zasługuje j e s z c z e j e d e n fakt, który m o ż e na początku w y d a ć się nieco dziwny. Mikrokontrolery A V R są zaliczane d o grupy u k ł a d ó w 8-bitowych, lecz słowo instrukcji jest 16-bitowe. T a k a , a n i e i n n a klasyfikacja wy nika z długości rejestrów wewnętrznych i szerokości w e w n ę t r z n e j szyny da nych. Jeśli więc m ó w i m y , że np. A T 9 0 S 2 3 1 3 m a 2 kB pamięci w e w n ę t r z n e j , to oznacza, że m o ż e m y napisać p r o g r a m o wielkości 1 k s ł ó w . T y c h , u któ rych wystąpił w t y m m o m e n c i e g r y m a s na twarzy - p r z e d e w s z y s t k i m miłoś ników 8051 - pragnę uspokoić, że wszystkie w y m i e n i o n e c e c h y procesorów RISC powodują, że analogiczne programy p o w i n n y się z m i e ś c i ć b e z więk szych problemów zarówno w 8051 z pamięcią p r o g r a m u o pojemności 2 kB, j a k i w A V R z pamięcią programu o wielkości I k s l ó w . Z wymienionych p o w o d ó w , mikrokontrolery A V R nadają się d o s k o n a l e do pisania programów w j ę z y k a c h wysokiego p o z i o m u , szczególnie w j ę z y k u C. Korzyści z tego wynikające z pewnością docenią ci, którzy spróbują swych sił w tej dziedzinie. N i e j e s t j e d n a k bezzasadna opinia mówiąca, że d o wydaj nego pisania programów w C nieodzowne jest poznanie architektury używa n e g o mikrokontrolera oraz j e g o listy rozkazów. O c z y w i s t e jest, że przyjdzie to łatwiej t y m Czytelnikom, którzy do tej pory nie mieli d o c z y n i e n i a z mik rokontrolerami innych rodzin. Przyzwyczajenia nabyte p o d c z a s prac z nimi mogą czasami przeszkadzać w poznawaniu rodziny A V R . J u ż na wstępie wątpliwość mogą budzić obco brzmiące mnemoniki r o z k a z ó w . Są o n e - jak się bliżej przyjrzeć - logiczne i konsekwentne, nie mniej d o ś ć t r u d n e d o za pamiętania. W efekcie pisząc program w asemblerze c z ę s t o trzeba sięgać po jakąś „ściągawkę". Dużą pomocą powinna być dołączona d o książki wkładka zawierająca m i n . skrócony opis listy r o z k a z ó w .
3.
Rodzina AVR - podstawy W rodzinie A V R z a s t o s o w a n o klasyczny s p o s ó b b u d o w a n i a m i k r o k o n t r o l e r ó w o r ó ż n y c h m o ż l i w o ś c i a c h , które powstają w w y n i k u integrowania w s p ó l n e g o dla rodziny A V R rdzenia z r ó ż n y m i b l o k a m i peryferyjnymi. M i k r o k o n trolerem o najmniejszych m o ż l i w o ś c i a c h w tej r o d z i n i e j e s t A T 9 0 S 1 2 0 0 , k t ó ry m a ograniczoną d o 3 liczbę o b s ł u g i w a n y c h p r z e r w a ń i, p o z a j e d n y m 8-bit o w y m t i m e r e m i k o m p a r a t o r e m a n a l o g o w y m , nie m a w b u d o w a n y c h żad n y c h innych peryferii. P o m i m o prostej b u d o w y nadaje się o n d o s k o n a l e d o stosowania
w poważnych
aplikacjach
przemysłowych
(wbrew
w i ę k s z o ś ć aplikacji tego typu nie w y m a g a s t o s o w a n i a
pozorom
mikrokontrolerów
o o g r o m n y c h m o ż l i w o ś c i a c h i dużej wydajności), a szczególnie
atrakcyjny
j e s t dla początkujących, którzy - właśnie z e w z g l ę d u na j e g o prostotę - m o g ą szybko go poznać.
Zestawienie
najważniejszych
parametrów
mikrokontrolerów
z rodziny A V R znajduje się w dodatku A .
Ć w i c z e n i a p r e z e n t o w a n e w rozdziale 14 o p r a c o w a n o n a nieco bardziej roz b u d o w a n ą wersję mikrokontrolera - A T 9 0 S 2 3 1 3 - który w y p o s a ż o n o m i n . w s z e r e g o w y interfejs s p r z ę t o w y U A R T o r a z 128 B pamięci danych S R A M . Dzięki t e m u w przykładach zostaną p o k a z a n e także s p o s o b y
komunikacji
mikrokontrolera z k o m p u t e r e m P C ( m i n . p o p r z e z interfejs U S B ) . N i e b a g a telnym atutem mikrokontrolerów AT90S2313 jest zgodność rozmieszczenia ich w y p r o w a d z e ń z p r o d u k o w a n y m i przez A t m e l a m i k r o k o n t r o l e r a m i z ro dziny 8 0 5 1 : A T 8 9 C 1 0 5 1 / 1 0 5 1 U , A T 8 9 C 2 0 5 1 / 2 0 5 1 i A T 8 9 C 4 0 5 1 . Na
rysunku
3.1
przedstawiono
budowę
wewnętrzną
mikrokontrolera
A T 9 0 S 2 3 1 3 . Programista m a dostęp d o 3 2 rejestrów o g ó l n e g o przeznaczenia, w ś r ó d których występują m i n . trzy rejestry i n d e k s o w e . Są o n e w y k o r z y s t y w a n e w niektórych trybach a d r e s o w a n i a , w s p o m a g a j ą c operacje przesyłania d a n y c h . W s z y s t k i e rejestry są dołączone b e z p o ś r e d n i o d o j e d n o s t k i a r y t m e tyczno-logicznej A L U (Arithmetic
Logic Unit) i m o g ą pełnić funkcję a k u m u
latora. T a c e c h a znacząco w p ł y w a na z w i ę k s z e n i e wydajności m i k r o k o n t r o l e ra. Z w r ó ć m y u w a g ę na to, że znaczną część czasu pracy mikrokontrolera zaj muje w y k o n y w a n i e operacji logicznych lub a r y t m e t y c z n y c h . W tradycyjnych rozwiązaniach w s z y s t k i e operacje musiały b y ć w y k o n y w a n e w w y d z i e l o n y m
1
XTAL1 B-bitowa magistrala danych Wewn. generator taKtujący
Wskaźnik stosu
Watchdog
Pamięć programu Flash
SRAM
Blok sterowania MCU
Rejestr instrukcji
Rejestry ogólnego przeznaczenia
Linie sterujące
X
ALU
Wzmacniacz generatora zewn.
Blok generacji sygnałów zegar.
Licznik programu
Dekoder instrukcji
XTA XTAL2
'RESET
Timer/ liczniki
Blok obsługi przerwań
/
EEPROM
Rejestr statusu
Blok programowania pamięci Flash
Wzmacniacze PORT B
I
Wzmacniacze PORT D
L
I PB0...PB7
PD0...PD6
Rys. 3.1. Budowa wewnętrzna mikrokontrolera AT90S2313
akumulatorze dołączonym d o A L U , zatem jeśli p r o g r a m korzystał z wielu da nych, bezustannie musiał w y k o n y w a ć przesłania m i e d z y r e j e s t r o w e . Ilustruje to przykład 3.1.
Przykład 3.1. Porównanie operacji dodawania dwóch 2-bajtowych liczb, wykonywanej przez mikrokontrolery rodziny '51 iAVR ;Program dla mikrokontrolera '51 ;danal - R1R0, dana2 - R3R2, wynik R1R0 MOV A,R0 ADD A,R2 MOV RO,A MOV A,R1 ADDC A,R3 MOV Rl,A ;Program ;danal ADD ADDC
dla mikrokontrolera AVR R1R0, dana2 - R3R2, wynik R1R0 R0,R2 R1.R3
Z w r ó ć m y u w a g ę na to, że mikrokontroler '51 na wykonanie każdego z powyż szych rozkazów potrzebuje 12 cykli zegara, natomiast A V R wykonuje j e w jed n y m cyklu. Biorąc pod uwagę częstotliwości oscylatorów równe odpowiednio 12 M H z i 4 M H z , czas wykonania pierwszego fragmentu programu będzie rów ny 6 L I S , drugiego zaś tylko 0,5 us. Kod dla 8051 zajmie 6 bajtów pamięci pro gramu, dla A V R - a natomiast jedynie d w a słowa. Ten prosty przykład z całą bez względnością pokazuje przewagę wydajności rnikrokontrolera A V R nad 8 0 5 1 . J a k widać n a r y s u n k u 3.1, w i ę k s z o ś ć b l o k ó w funkcjonalnych m i k r o k o n t r o ł e r ó w A V R k o m u n i k u j e się między sobą za p o ś r e d n i c t w e m w e w n ę t r z n e j 8-bitowej magistrali. D o d a t k o w o p r o w a d z o n e są p o m i ę d z y n i m i n i e z b ę d n e syg nały sterujące. O p r ó c z t y p o w y c h i na ogół d o b r z e z n a n y c h u k ł a d ó w peryferyjnych
można
w y r ó ż n i ć b l o k i , d o których u ż y t k o w n i k nie m a b e z p o ś r e d n i e g o dostępu. Są to: rejestr instrukcji, d e k o d e r instrukcji, w e w n ę t r z n y oscylator i układ g e n e r u j ą c y w e w n ę t r z n e sygnały z e g a r o w e . Rejestr instrukcji p r z e c h o w u j e k o d aktu alnie w y k o n y w a n e g o r o z k a z u . Jest to w w i ę k s z o ś c i p r z y p a d k ó w
16-bitowa
liczba. W y j ą t k i e m są rozkazy w y m a g a j ą c e p o d a n i a a r g u m e n t u , n p . w y w o ł a nia p o d p r o g r a m ó w lub skoki. K o d y te są p o d a w a n e n a liście r o z k a z ó w , c h o ć w i ę k s z e g o z n a c z e n i a p r a k t y c z n e g o dla u ż y t k o w n i k a nie mają. N a p o d s t a w i e zawartości rejestru instrukcji, d e k o d e r instrukcji generuje o d p o w i e d n i e syg nały sterujące dla automatu realizującego funkcje p r o c e s o r a . A u t o m a t ten jest u k ł a d e m s y n c h r o n i c z n y m . D o pracy w y m a g a o d p o w i e d n i e g o przebiegu zega r o w e g o ( j e d n e g o lub wielu). O d strony w y p r o w a d z e ń (na styku m i k r o k o n t r o ler-otoczenie) niezbędny j e s t j e d y n i e zegar j e d n o f a z o w y . N a s c h e m a c i e z r y s u n k u 3.1 nie w i d a ć stosu j a k o w y d z i e l o n e g o bloku. W m i k r o k o n t r o l e r z e A T 9 0 S 2 3 1 3 stos został u m i e j s c o w i o n y w wewnętrznej p a m i ę c i d a n y c h ( S R A M ) . O z n a c z a to, że j e g o g ł ę b o k o ś ć j e s t u w a r u n k o w a n a
jedynie dostępnym obszarem tej pamięci. Pamiętajmy, że są tu lokowane również zmienne wykorzystywane przez program. N i e w y k o r z y s t a n y obszar pamięci S R A M kompilator przeznacza na stos. Większość aktualnie produkowanych mikrokontrolerów dysponuje mechani zmami oszczędzania energii. Wyposażono w nie również układ A T 9 0 S 2 3 1 3 . Podczas normalnej pracy wszystkie bloki mikrokontrolera pracują bez żad nych ograniczeń pobierając
ze źródła zasilającego
prąd
o wartości
ok.
2,8 rnA. W trybie Idle zostaje wstrzymana praca j e d n o s t k i centralnej (CPU Central
Processing
-
Unit), pozostałe bloki (pamięć S R A M , timery/Iiczniki,
port SPI, system przerwań) pracują normalnie. W t y m trybie układ pobiera prąd o wartości ok. 0,8 m A . Istnieje j e s z c z e trzeci tryb o s z c z ę d z a n i a energii power-down,
w którym wszystkie wewnętrzne bloki są w y ł ą c z o n e (łącznie
z generatorem taktującym). Zostają j e d n a k z a c h o w a n e stany rejestrów. Jedy ną metodą „obudzenia" mikrokontrolera jest w t y m p r z y p a d k u zgłoszenie przerwania zewnętrznego lub w y z e r o w a n i e mikrokontrolera. W t y m trybie prąd zasilający jest mniejszy od 1 u A . Firma Atmel była jedną z pierwszych, która o p a n o w a ł a t e c h n o l o g i ę wytwa rzania pamięci Flash i od s a m e g o początku stosowała ją j a k o p a m i ę ć progra mu w swoich mikrokontrolerach. M o ż n a wręcz p o w i e d z i e ć , że zrewolucjoni zowało to światowy rynek w tej branży. P a m i ę ć Flash m o ż n a wielokrotnie programować, d o tego j e s t możliwe jej p r o g r a m o w a n i e p o z a m o n t o w a n i u mikrokontrolera w systemie. Dzięki temu znacznie uprościły się p r a c e kon strukcyjne i s k o m p l i k o w a n e (drogie) programatory stały się z b ę d n e . D o za programowania pamięci wystarczy jedynie prosty interfejs. D l a amatorów jest to bardzo cenna cecha, gdyż wejście w świat m i k r o k o n t r o l e r ó w nie wy maga inwestowania dużych kwot w specjalistyczne o p r z y r z ą d o w a n i e . W In ternecie można znaleźć schematy wielu rozwiązań interfejsów
programują
cych możliwych do wykonania niemal w p r z y s ł o w i o w e „pięć m i n u t " , w do datku z elementów, jakich na ogół jest pełno w szufladzie. W dalszej części książki zostaną zaprezentowane adresy internetowe, pod k t ó r y m i m o ż n a zna leźć wiele bardzo pomocnych informacji, a nawet p o b r a ć d a r m o w e oprogra mowanie wspomagające projektowanie urządzeń z m i k r o k o n t r o l e r a m i A V R .
3.1.
Funkcje wyprowadzeń Na r y s u n k u 3.2 p r z e d s t a w i o n o r o z m i e s z c z e n i e w y p r o w a d z e ń m i k r o k o n t r o lera A T 9 0 S 2 3 1 3 w o b u d o w i e P D I P lub S O I C . F u n k c j e w y p r o w a d z e ń są na stępujące:
V C C - p l u s napięcia zasilającego.
AT90S2313 RESET
G N D - m a s a zasilania.
Wszystkie
[T
Tj>]
PB7(SCK)
\T
TTj
PB6 (MISO)
XTAI-2
fT
77]
PS5 (MOSI)
XTAL1
\T
7J]
PB4
plusa
(INTO) P D 2
fT
7s]
PB3(OC1)
13
PB2
linie
portu mają i n d y w i d u a l n i e konfigurowa n e w e w n ę t r z n e podciąganie d o napięcia zasilania (pull-up).
\iijj V C C
PDO
k i e r u n k o w y port wejścia/wyjścia ogól przeznaczenia.
^
(TXD)PD1
(BXD)
P o r t B ( P B 0 . . . P B 7 ) - 8-bitowy, d w u nego
I fT
Maksymal
(INT1)PD3
[T
ny prąd w e j ś c i o w y (w kierunku od plu
0*0) P D 4
[T
sa zasilania d o m a s y ) każdej linii w y n o
(T1)PD5
[T
Tf]
PBO(AINO)
fjo
TTJ
PD6(ICP)
si 2 0 m A , c o u m o ż l i w i a b e z p o ś r e d n i e
GND
sterowanie n p . d i o d a m i ś w i e c ą c y m i . P o zerowaniu m i k r o k o n t r o l e r a w y p r o w a dzenia portu B ustawiają się w stan w y -
7 5 ] PBl
(AIN1)
PDIP/SOIC
Rys. 3.2. Rozmieszczenie wyprowadzeń mikrokontrolera AT90S2313
sokiej impedancji, także w t e d y , gdy nie jest g e n e r o w a n y sygnał z e g a r o w y .
Jeśli linie p o r t ó w P B i P D są s k o n f i g u r o w a n e j a k o wejścia
ufGA
i z zewnątrz mają dołączone p o d c i ą g a n i e d o masy oraz w ł ą c z o n e w e w n ę t r z n e rezystory podciągające (pull-up),
t o stanowią
o n e źródła prądu.
N i e k t ó r e linie portu B mogą pełnić też d o d a t k o w e funkcje (będą o n e dokład nie o m ó w i o n e w rozdziale 10.): PBO (AINO) - wejście nieodwracąjące w e w n ę t r z n e g o k o m p a r a t o r a . P B l ( A I N 1 ) - wejście odwracające w e w n ę t r z n e g o k o m p a r a t o r a . P B 3 ( O C 1 ) - wyjście w y n i k u p o r ó w n a n i a T i m e r a / L i c z n i k a l . P B 5 ( M O S I ) - s z e r e g o w e wejście d a n y c h w trybie
programowania
i weryfikacji. P B 6 ( M I S O ) - s z e r e g o w e wyjście danych w trybie
programowania
i weryfikacji. P B 7 ( S C K ) - wejście z e g a r o w e dla trybu p r o g r a m o w a n i a i weryfikacji. P o r t D ( P D 6 . . . P D 0 ) - 7-bitowy, d w u k i e r u n k o w y p o r t wejścia/wyjścia ogól nego przeznaczenia. W s z y s t k i e linie portu mają i n d y w i d u a l n i e konfigurowa n e w e w n ę t r z n e podciąganie d o plusa zasilania (pulf-up).
M a k s y m a l n y prąd
wejściowy każdej linii wynosi 2 0 m A . Po zerowaniu mikrokontrolera w y p r o w a d z e n i a portu D ustawiają się w stan wysokiej i m p e d a n c j i , także wtedy, gdy nie j e s t g e n e r o w a n y sygnał z e g a r o w y .
Linie portu D mogą pełnić też d o d a t k o w e funkcje (będą o n e d o k ł a d n i e omó wione w rozdziale 10.): PDO ( R X D ) - wejście szeregowe układu U A R T . P D 1 ( T X D ) - wyjście szeregowe układu U A R T . P D 2 (INTO) - wejście przerwania z e w n ę t r z n e g o . P D 3 (INT1) - wejście przerwania z e w n ę t r z n e g o . P D 4 (TO) - wejście z e w n ę t r z n e g o przebiegu z e g a r o w e g o licznika TO. P D 5 ( T l ) - wejście z e w n ę t r z n e g o przebiegu z e g a r o w e g o licznika T l . P D 6 (ICP) - wejście przechwytywania zegara. R E S E T - wejście z e r o w a n i a mikrokontrolera. D o w y g e n e r o w a n i a prawidło wego sygnału zerującego konieczne jest, aby stan niski n a t y m w y p r o w a d z e niu trwał c o najmniej 5 0 n s . Sygnał zerowania wystąpi nawet, g d y nie pracu j e zegar. Impulsy krótsze niż 5 0 ns nie gwarantują w y g e n e r o w a n i a prawidło wego sygnału zerującego. X T A L 1 - wejście odwracające wzmacniacza oscylatora m o g ą c e p e ł n i ć funk cję wejścia zewnętrznego przebiegu z e g a r o w e g o . X T A L 2 - wyjście wzmacniacza oscylatora (odwracającego fazę).
Architektura mikrokontrolerów AVR Wszystkie bloki funkcjonalne mikrokontrolera A T 9 0 S 2 3 1 3 komunikują się z jednostką arytmetyczno-logiczną (ALU) za p o ś r e d n i c t w e m
wewnętrznej
8-bitowej magistrali danych. J e d n y m z ważniejszych e l e m e n t ó w architektury (rysunek 4.1) jest zestaw 3 2 8-bitowych rejestrów o g ó l n e g o przeznaczenia. Gwarantują one szybki dostęp d o podręcznych d a n y c h . W s z y s t k i e rejestry mają bezpośredni dostęp d o A L U , mogą więc pełnić rolę o p e r a n d ó w działań arytmetyczno-logicznych b e z pośrednictwa d o d a t k o w y c h rejestrów przejścio wych i specjalnego akumulatora. Rezultat wykonywanej operacji jest umieszczany w d o w o l n y m rejestrze, któ rym nie zawsze musi być akumulator, j a k ma to miejsce w n i e k t ó r y c h innych rodzinach mikrokontrolerów. Spośród 32 rejestrów, 6 w y d z i e l o n o d o specjal nych zadań, chociaż nada] pozostają
rejestrami o g ó l n e g o
przeznaczenia.
Tworzą one trzy 16-bitowe rejestry indeksowe, w y k o r z y s t y w a n e w trybach adresowania pośredniego, stanowiąc bardzo wydajny m e c h a n i z m obliczania adresu. Duża liczba rejestrów ułatwia pracę k o m p i l a t o r o m j ę z y k ó w wysokie.
8-t»itowa magistrala danych
Pamięć programu Flash Ikx16
Rejestr statusu i testowy
Rejestr instrukcji
Dekoder instrukcji
r ~ Unie sterujące
128 x a EEPROM
Rys. 4.1. Architektura rdzenia mikrokontrolerów A W?
g o p o z i o m u , umożliwiając przyspieszenie w y k o n y w a n i a p r o g r a m u . Jeden z rejestrów i n d e k s o w y c h m o ż e być w y k o r z y s t y w a n y j a k o w s k a ź n i k na stale u m i e s z c z o n e w tablicy t z w . look-up.
(pointer)
D o r o z r ó ż n i a n i a rejestrów sto
suje się o z n a c z e n i a od RO d o R 3 1 . Trzy 16-bitowe rejestry i n d e k s o w e zostały n a z w a n e : X~register,
Y-register
i Z-register.
Jednostka arytmetyczno-logicz-
na w y k o n u j e obliczenia na parze d a n y c h u m i e j s c o w i o n y c h w d w ó c h rejest rach lub n a danej umieszczonej w rejestrze i stałej umieszczonej w tablicy. M o ż l i w e są też operacje na j e d n y m rejestrze. T y p o w e tryby a d r e s o w a n i a pa mięci mogą b y ć s t o s o w a n e r ó w n i e ż d o a d r e s o w a n i a z e s t a w u rejestrów. D z i e j e się tak, g d y ż rejestry są u l o k o w a n e w j e d n e j przestrzeni adresowej z pa mięcią d a n y c h , zajmując najmłodsze adresy ($00...$ 1F). Kolejne 6 4 lokacje ($20...$5F) w m i k r o k o n t r o l e r a c h A V R p r z e z n a c z o n o dla urządzeń peryferyj nych:
rejestrów
sterujących,
timerów/liczników,
przetworników
A/C
(w A T 9 0 S 2 3 I 3 ich nie ma!) i innych. Będziemy j e n a z y w a ć obszarem we/wy.
W książce przyjęto k o n w e n c j ę zapisu liczb h e k s a d e c y m a l n y c h , z g o d n i e z którą są o n e p o p r z e d z a n e z n a k i e m dolara ($). Liczby dziesiętne są z a p i s y w a n e w sposób s t a n d a r d o w y . W przykła d a c h p r o g r a m ó w pisanych w j ę z y k u C , liczby h e k s a d e c y m a l n e są z a p i s y w a n e w obowiązującym w n i m formacie z przedrost k i e m 0x. N a przykład: 1 6 = $ 1 0 = 0 x l 0 .
M i k r o k o n t r o l e r y A V R mają architekturę harwardzką. Przestrzeń a d r e s o w a pamięci p r o g r a m u i pamięci d a n y c h j e s t w niej r o z d z i e l o n a ( r y s u n e k 4.2). W y k o n y w a n i e r o z k a z ó w j e s t r e a l i z o w a n e p o p r z e z 2 - s t o p n i o w e przetwarzanie potokowe
(pipeline).
Wykonanie
instrukcji
odbywa
się z j e d n o c z e s n y m
w s t ę p n y m p o b r a n i e m kodu następnej instrukcji. K o n c e p c j a ta u m o ż l i w i a w y k o n a n i e w k a ż d y m cyklu j e d n e g o rozkazu. P a m i ę ć p r o g r a m u to p r o g r a m o w a n a w systemie p a m i ę ć typu Flash. C a ł y o b szar 1 k s ł ó w jest dostępny b e z p o ś r e d n i o dla instrukcji s k o k ó w w z g l ę d n y c h i w y w o ł a ń p o d p r o g r a m ó w . W i ę k s z o ś ć instrukcji m i k r o k o n t r o l e r a A V R m i e ś ci się w 1 6 - b i t o w y m słowie, ale zdarzają się t a k ż e instrukcje 32-bitowe. W w y n i k u przyjęcia przerwania, a także p o d c z a s w y w o ł y w a n i a p o d p r o g r a m ó w , adres p o w r o t u , j a k i m jest aktualny stan licznika p r o g r a m u Counter
(Program
- PC) jest automatycznie z a c h o w y w a n y na stosie. Stos jest umiejs
c o w i o n y w o b s z a r z e pamięci d a n y c h S R A M , w związku z c z y m j e g o p o j e m n o ś ć j e s t l i m i t o w a n a tylko jej d o s t ę p n y m o b s z a r e m . D o s t ę p d o danych z a c h o w a n y c h na stosie j e s t m o ż l i w y za p o m o c ą w s k a ź n i k a stosu (Stack Pointer
-
Pamięć S R A M
Pamięć programu $000
32 rejestry ogólnego przeznaczenia
rejestry *>lne soo SOF
1
rejestry e*" *
JIF SCO
64 rejestry we/wy (dostęp za pomocą rozkazów IN i OUT)
rejestry dobie
rejestry górne Pamięć Flash (1kx16)
Pamięć danych (128 x 8)
Jeśli rejestry we/wy są adresowane jako pamięć SRAM należy do ich adresu dodać $20
$DF
J$3FF
Rys. 4.2. Mapa pamięci mikrokontrolera AT90S2313 (pamięć EEPROM leży poza standardo wym obszarem adresowym, dostęp do niej jest możliwy poprzez rejestry EEADR i EEDR)
SP). Należy bezwzględnie pamiętać o o d p o w i e d n i m ustawieniu j e g o wartoś ci, w przeciwnym przypadku może dojść d o nadpisania d a n y c h l u b utraty za wartości stosu przez nadpisanie g o d a n y m i , co w k o n s e k w e n c j i m o ż e dopro wadzić do błędnego działania programu. U s t a w i e n i e S P p o w i n n o odbywać się na s a m y m początku programu, j a k o j e d n a z p i e r w s z y c h c z y n n o ś c i , ko niecznie przed wywołaniami procedur i włączeniem p r z e r w a ń . W przypadku jednoczesnego wystąpienia d w ó c h przerwań, w pierwszej kolejności jest ob sługiwane to o wyższym priorytecie. Wskaźnik stosu w mikrokontrolerze A T 9 0 S 2 3 1 3 t o 8-bitowy rejestr dostępny w przestrzeni adresowej we/wy. Umiejscowienie stosu w obszarze pamięci da nych jest z jednej strony korzystne, b o nie ogranicza j e g o wielkości. Jednak przy rozrzutnym gospodarowaniu zmiennymi w y k o r z y s t y w a n y m i przez pro gram może się okazać, że na stos pozostaje mało miejsca. N a d o m i a r złego nie m a żadnego mechanizmu kontrolującego j e g o przekroczenie. M o ż e to prowa dzić do niełatwych w wykryciu błędów. Z drugiej strony dane odłożone na sto sie, j a k o dane w pamięci danych są również dostępne poprzez z w y k l e tryby ad resowania. Stwarza to możliwość wykorzystywania wyrafinowanych trików polegających na podmianie danych odłożonych na stosie z i n n y m i . Można w ten sposób przekazywać np. argumenty d o procedur.
Cała przestrzeń adresowa o d $00 d o $ D F , d o której należy 128 bajtów danych pamięci S R A M , 6 4 bajty przestrzeni w e / w y oraz zbiór rejestrów roboczych m o ż e być w prosty sposób udostępniona poprzez pięć trybów adresowania ob sługiwanych w architekturze mikrokontrolerów A V R . Jest to przestrzeń linio wa i regularna, czyli dostęp d o każdej z k o m ó r e k jest m o ż l i w y za p o m o c ą każ dego polecenia wykonującego operację na rejestrach (rysunek 4.2). System przerwań mikrokontrolera A V R wykorzystuje niektóre rejestry sterują c e znajdujące się w przestrzeni we/wy. Każde z przerwań m a indywidualny wektor przerwania, czyli adres skoku d o procedury obsługi przerwania. Tablica wektorów przerwań jest z a w s z e umieszczana na początku pamięci programu. Wszystkie przerwania charakteryzują się przypisanym priorytetem obsługi. I m jest niższy adres danego wektora przerwania, t y m w y ż s z y m a on priorytet.
4.1.
Generator taktujący W
mikrokontroler
wbudowano
wzmac
niacz odwracający fazę, przeznaczony d o g e n e r o w a n i a przebiegu z e g a r o w e g o chronizującego
pracę
syn
mikrokontrolera.
Maksymalne obciążenie odpowiada 1 wejściu bramki HC e HC C2
W y p r o w a d z e n i a X T A L I i X T A L 2 pełnią funkcje o d p o w i e d n i o j e g o wejścia i w y j ścia. Po dołączeniu z e w n ę t r z n e g o rezona tora w z m a c n i a c z pracuje j a k o
generator
T ci -II
-r i-
XTAL2
XTAL1
2 x 24...33pF
sygnału taktującego mikrokontroler. S p o
GND
s ó b dołączenia rezonatora p o k a z a n o na ry s u n k u 4 . 3 . M o ż n a stosować z a r ó w n o r e z o Rys. 4.3. Zalecany sposób dołączenia natory k w a r c o w e , j a k i c e r a m i c z n e . zewnętrznego rezonatora kwarcowego do wyprowadzeń mikrokontrolera AVR
Przewidziano także możliwość pracy mik (sygnat z wyjścia XTAL2 może być wy rokontrolera z z e w n ę t r z n y m przebiegiem korzystywany - po dodaniu bufora z e g a r o w y m . W y p r o w a d z e n i e X T A L 2 p o także przez obwody zewnętrzne) w i n n o w takim przypadku pozostać niepodNC-
łączone, natomiast d o X T A L 1 j e s t d o p r o wadzany sygnał zegarowy (rysunek 4.4). Bardzo w a ż n e dla p o p r a w n e g o
działania
mikrokontrolera jest, aby sygnał
zewnę
trzny
zawarte
spełniał
warunki c z a s o w e
Zewnętrzny sygnałtaktujący (parametry w tab. 4 . 1 }
XTAL2
XTAL1
GND
w tablicy 4.1 i miał amplitudę dostosowaną Rys. 4.4. Dołączenie zewnętrznego ge d o napięcia zasilającego mikrokontroler.
neratora taktującego do mikrokontrolera
Tab. 4.1. Zalecane przez producenta warunki czasowe wymagane od zewnętrznego sygnału taktującego We=2,7.-6,0 V
Parametr
Częstotliwość
Min.
Maks.
0
4
V =4,0...6,0 V cc
Min.
Maks.
0
10
Jednostka
MHz
Czas trwania poziomu H
100
40
ns
Czas trwania poziomu L
100
40
ns
Czas narastania
1.6
0,5
US
Czas opadania
1.6
0.5
JiS
Sygnał wytwarzany przez wewnętrzny generator m i k r o k o n t r o l e r a m o ż e być również wykorzystywany d o sterowania i n n y m i u k ł a d a m i
zewnętrznymi,
Wyjście X T A L 2 musi b y ć w ó w c z a s buforowane za p o m o c ą b r a m k i serii HC.
4.2.
Rejestry ogólnego przeznaczenia Prawie wszystkie rozkazy należące do listy o b s ł u g i w a n y c h p r z e z mikrokon trolery A V R umożliwiają w y k o n y w a n i e operacji na rejestrach o g ó l n e g o prze znaczenia. Zapewniają o n e bezpośredni dostęp d o k a ż d e g o z nich i są wyko nywane w j e d n y m cyklu. Wyjątkiem j e s t pięć r o z k a z ó w operacji arytmetyczo
7 RO
Adres $00
R1
$01
R2
$02
R13
SOD
R14
$0E
Rejestry ogólnego przeznaczenia
R15
SOF
R16
$10
R17
$11
R26
$1A Dolny rejestr X (mniej znaczący bajt)
R27 R28 R29 R30 R31
$1B Górny rejestr X (bardziej znaczący bajt) $1C Dolny rejestr Y (mniej znaczący bajt) $1D Gómy rejestr Y (bardziej znaczący bajt) $1E Dolny rejestr 2 (mniej znaczący bajt) $1F Górny rejestr Z (bardziej znaczący bajt)
Rys. 4.5. Rozmieszczenie rejestrów ogólnego przeznaczenia w mikrokontrolerze AVR
15 Rejestr X | 7
O °l
»l
|* R26 ($1A)
R27($1B) 15
0
Rejestr Y | ?
°l
°l R28 ($1C)
R29 ($10)
0
15 Rejestr Z | 7
°l R31 (S1F)
R30 ($1E)
°l
Rys. 4.6. Budowa logiczna rejestrów indeksowych X, YiZ
n o - l o g i c z n y c h wykorzystujących stałe j a k o p a r a m e t r y - SBCI, SUBI, CPI, ANDI i ORI o r a z rozkaz b e z p o ś r e d n i e g o ł a d o w a n i a stałej - LDI. T e rozkazy wykorzystują j e d y n i e drugą p o ł ó w k ę z e s t a w u rejestrów, czyli R 1 6 . . . R 3 1 . R o z k a z y SBC, SUB, CP, AND, OR i inne w y m a g a j ą c e j e d n e g o l u b d w ó c h ar g u m e n t ó w pracują n a c a ł y m zestawie rejestrów. W s z y s t k i e rejestry są w i d o c z n e w przestrzeni a d r e s o w e j pamięci S R A M zaj mując p i e r w s z e 3 2 lokacje. Dzieje się tak m i m o t e g o , że rejestry te nie są fi zycznie z a i m p l e m e n t o w a n e j a k o p a m i ę ć S R A M . T a k a organizacja pamięci p o z w a l a na b a r d z o elastyczny dostęp d o rejestrów, także p o p r z e z rejestry in d e k s o w e X, Y i 2 . Rejestry R 2 6 . . . R 3 1 są rejestrami o g ó l n e g o p r z e z n a c z e n i a , pełnią j e d n a k d o d a t k o w e funkcje. M o g ą b y ć w y k o r z y s t y w a n e j a k o l ó - b i t o w e rejestry indek s o w e (wskaźniki), pozwalające n a a d r e s o w a n i e p o ś r e d n i e pamięci d a n y c h . Umożliwiają
w i ę c a d r e s o w a n i e pośrednie rejestrów r o b o c z y c h ,
rejestrów
w e / w y , j a k i p a m i ę c i S R A M ( d a n y c h ) . Ich organizację p r z e d s t a w i o n o na r y
sunku 4,6. B a r d z o interesującym t r y b e m adresowania z w y k o r z y s t a n i e m rejestrów in d e k s o w y c h j e s t a d r e s o w a n i e r ó ż n i c o w e . Rejestry X , Y i Z pełnią w t y m przy padku rolę w s k a ź n i k ó w p r z e m i e s z c z e n i a w z g l ę d e m adresu b a z o w e g o , a i c h z a w a r t o ś ć m o ż e b y ć a u t o m a t y c z n i e d e k r e m e n t o w a n a lub i n k r e m e n t o w a n a przed lub p o w y k o n a n i u określonej operacji. Z a i m p l e m e n t o w a n i e kilku rejestrów i n d e k s o w y c h zostało p o d y k t o w a n e ukie r u n k o w a n i e m architektury rdzenia m i k r o k o n t r o l e r ó w A V R n a j ę z y k i w y s o k i e g o p o z i o m u . Rejestry te są i n t e n s y w n i e w y k o r z y s t y w a n e d o i n d e k s o w a n i a argumentów
i wyniku
operacji
arytmetyczno-logicznych
wykonywanych
przez A L U . D z i ę k i t a k i e m u rozwiązaniu uzyskuje się z n a c z n e przyspieszenie w y k o n y w a n i a obliczeń.
4.3.
Jednostka arytmetyczno-logiczna (ALU) Mikrokontrolery A V R są w y p o s a ż o n e w bardzo wydajną j e d n o s t k ę arytmetyczno-logiczną współpracującą bezpośrednio z 32 rejestrami o g ó l n e g o prze znaczenia. Operacje w y k o n y w a n e przez A L U m o ż n a podzielić na trzy kate gorie: arytmetyczne, logiczne i operacje b i t o w e . Listę r o z k a z ó w w r a z z ich dokładnym opisem przedstawiono w rozdziale 12.
4.4.
Pamięć programu Mikrokontroler A T 9 0 S 2 3 1 3 w y p o s a ż o n o w 2 k B pamięci Flash p r o g r a m o w a nej w systemie, która pełni funkcję pamięci programu. C h o c i a ż w danych technicznych jej wielkość jest określana j a k o 2 k B , t o trzeba pamiętać, że wszystkie instrukcje mikrokontrolera A T 9 0 S 2 3 1 3 są 16- lub 32-bitowe. Pa mięć programu ma organizację l k x 16 bitów. S z a c o w a n a w y t r z y m a ł o ś ć pa mięci wynosi 1000 cykli zapisu/kasowania. D o c a ł k o w i t e g o zaadresowania obszaru 1 ksłów jest potrzebny 10-bitowy licznik p r o g r a m u , taki też zaimple m e n t o w a n o w mikrokontrolerze A T 9 0 S 2 3 1 3 . D o k ł a d n i e j s z e informacje doty czące programowania pamięci Flash p o d a n o w rozdziale 1 1 .
4.5.
Nieulotna pamięć danych EEPROM Współczesne
urządzenia
budowane
w oparciu
o mikrokontrolery
bardzo
często wymagają przechowywania j a k i c h ś p a r a m e t r ó w t a k i e p o zaniku zasi lania. Najczęściej są t o dane określające konfigurację u k ł a d ó w peryferyjnych mikrokontrolera lub n p . ostatnią konfigurację c y f r o w y c h e l e m e n t ó w regula cyjnych. D o przechowywania danych tego typu p r z e w i d z i a n o
128-bajtową
p a m i ę ć typu E E P R O M . Jest ona widoczna j a k o w y d z i e l o n y o b s z a r adresowy, do którego można zapisywać lub odczytywać p o j e d y n c z e bajty. Żywotność pamięci E E P R O M jest szacowana na c o najmniej 100000 cykli zapisu/kaso wania. Dostęp d o niej j e s t realizowany p o p r z e z w y d z i e l o n e rejestry: adreso wy, danych i sterujący. Dokładniejsze informacje d o t y c z ą c e wykorzystywa nia pamięci E E P R O M p o d a n o w rozdziale 1 1 .
4.6.
Pamięć danych SRAM Na rysunku 4 . 7 przedstawiono organizację pamięci S R A M (Static Random cess Memory)
Ac
nioykrokontrolera A T 9 0 S 2 3 1 3 . Wewnętrzna pamięć danych S R A M
zajmuje lokacje od adresu $60 d o $DF. Łącznie jest więc d o wykorzystania 128 bajtów tej pamięci. Młodsze adresy zajmują: zestaw rejestrów roboczych (od $ 0 0 d o $ 1 F - 3 2 lokacje) oraz rejestry we/wy (od $20 d o $ 5 F - 6 4 lokacje). W y m i e n i o n e obszary tworzą przestrzeń adresową d a n y c h . Z a p i s lub o d c z y t tego obszaru m o ż e b y ć r e a l i z o w a n y w j e d n y m z pięciu t r y b ó w a d r e s o w a n i a : bezpośrednim, pośrednim z przemieszczeniem, pośrednim, pośrednim z predekrementacją, p o ś r e d n i m z postinkrementacją. Z o s t a n ą o n e d o k ł a d n i e o m ó Rejestry robocze
Pamiac SRAM
R0
$00
R1
SOI
R2
$02
R29
S1D
R30
$1E
R3I
$1F
Rejestry we/wy $00
$20
$01
$21
$02
$22
$3D
$50
$3E
$5E
$3F Adresowanie, gdy dostęp odbywa się z a pomocą r w z m m j w I I I i u u i Jeśli rejestry we/wy są adresowane jako pamięć SRAM należy do adresu dodać $20
$5F /
Wewnętrzna pamięć danych S60 "$61* $62
$DD SDE $DF
Rys. 4.7. Organizacja pamięci danych SRAM. Rejestry we/wy do których dostęp odbywa się za pomocą rozkazów IN i OUT muszą być określane adresami od $00 do $3F mimo tego, że w pamięci SRAM zajmują lokacje od $20 do $5F
wionę w dalszej części rozdziału. D o indeksowania d a n y c h w t r y b a c h pośred nich są wykorzystywane rejestry R 2 6 d o R 3 1 . W trybie a d r e s o w a n i a bezpo średniego jest dostępna cała przestrzeń adresowa d a n y c h . A d r e s u j ą c dane po średnio z przemieszczeniem uzyskuje się dostęp d o 6 3 lokacji począwszy od przyjętego adresu b a z o w e g o . D o indeksowania danych w t y m trybie wyko rzystywane są rejestry Y i Z. Tryby pośredni z predekrementacją i pośredni z postinkrementacją wykorzystują rejestry X, Y, i Z .
4.7.
Tryby adresowania pamięci danych i pamięci programu Mikrokontrolery A V R dysponują b o g a t y m z e s t a w e m t r y b ó w adresowania pa mięci programu oraz danych, gwarantując
t y m s a m y m dużą
wydajność
i efektywność dostępu d o obu rodzajów pamięci. W rozdziale t y m zostaną wyjaśnione szczegóły dotyczące zasad adresowania s t o s o w a n y c h w mikro kontrolerach A V R . Umieszczony na kilku kolejnych rysunkach s y m b o l OP o z n a c z a część kodu operacji słowa rozkazu.
W dalszej części rozdziału przyjęto następujące oznaczenia: Rd - rejestr źródłowy i przeznaczenia u l o k o w a n y w obszarze Register File, Rs - rejestr źródłowy ulokowany w o b s z a r z e R e g i s t e r File, n
- 6-bitowy adres rejestru ź r ó d ł o w e g o lub d o c e l o w e g o ,
a
- 6-bitowe przesunięcie,
k
- adres względny zapisany w kodzie u z u p e ł n i e n i a d o 2
P
- 6-bitowy adres d o c e l o w e g o rejestru w e / w y .
(U2), m o ż e przybierać wartości o d - 2 0 4 8 d o 2 0 4 7 ,
4.7.1. Tryb bezpośredniego adresowania rejestrów wykorzystujący pojedynczy rejestr Operand - rejestr Rd - j e s t wskazany b e z p o ś r e d n i o w k o d z i e rozkazu po przez podanie j e g o numeru d.
Rejestry robocze
Rys. 4.8. Bezpośrednie adresowanie pojedynczego rejestru
Przykład 4.1. Inkrementacja rejestru RB
INC
RO
4.7.2. Tryb bezpośredniego adresowania rejestrów wykorzystujący dwa rejestry Rejestry robocze
OP
Rys. 4.9. Bezpośrednie adresowanie dwóch rejestrów
O p e r a n d y znajdują się w rejestrach Rs i Rd, które są w s k a z y w a n e b e z p o ś r e d n i o w kodzie r o z k a z u (s i d). Rezultat operacji jest u m i e s z c z a n y w rejestrze Rd. Przykład 4.2. Suma logiczna rejestrów RO i R1. Wynik umieszczony w RO
OR
R0,R1
4,7.3, Tryb bezpośredniego adresowania obszaru wejścia/wyjścia Rejestry we/wy
n
OP
P
Reiestry we/wy 0
63
63
Rys. 4.10. Bezpośrednie adresowanie obszaru wejścia/wyjścia
Rezultat operacji j e s t u m i e s z c z a n y w rejestrze w e / w y , k t ó r e g o adres jest bezpośrednio w s k a z y w a n y w k o d z i e r o z k a z u . A d r e s o p e r a n d u ( P ) zajmuje 6 bitów słowa r o z k a z o w e g o . Pole n określa adres rejestru ź r ó d ł o w e g o lub docelowego. Przykład 4.3. Przepisanie zawartości rejestru RO do portu B
OUT
PORTB,R0
4.7,4. Tryb bezpośredniego adresowania pamięci danych Pamięć danych
soo OP
Rs/Rd
16-bitowy adres ts
0
Uwaga! W AT90S2313 osiem najstarszych bitów 16-bitowego adresu ma wartość "O"
$DF
Rys. 4.11. Bezpośrednie adresowanie pamięci danych
R o z k a z wykorzystujący a d r e s o w a n i e b e z p o ś r e d n i e s k ł a d a się z d w ó c h słów. Pierwsze słowo zawiera kod operacji i określenie rejestru źródłowego lub d o c e l o w e g o (RaYRs). Szesnastobitowy adres jest zawarty w drugim słowie rozkazu. Przykład 4.4. Przepisanie zawartości komórki pamięci danych o adresie $65 do rejestru RO
LDS
R0,$65 '
4.7.5. Tryb pośredniego adresowania danych z przemieszczeniem Pamięć danych
$DF
I
163 Rejestry robocze
Rys. 4.12. Adresowanie pośrednie z przemieszczeniem
A d r e s o p e r a n d u j e s t obliczany poprzez dodanie z a w a r t o ś c i rejestrów Y lub Z s t a n o w i ą c y c h adres b a z o w y oraz przesunięcia p o d a n e g o na sześciu bitach w słowie r o z k a z u . M e c h a n i z m ten p o z w a l a na w y d a j n e przetwarzania rekor d ó w i tablic. Jest w y k o r z y s t y w a n y przez kompilatory j ę z y k ó w w y s o k i e g o p o ziomu. Przykład 4.5. Umieszczenie w rejestrze RO danej z 8-bitowej tablicy zaczynającej się od adresu $65. Pobierany jest 6. element tablicy (przemieszczenie wskazuje przesunięcie względem pierwszego elementu o indeksie 0) LDI LDD
R28,$65 ;adres bazowy tablicy danych 8-bitowych R0,Y+5 /umieszczenie szóstego bajtu tablicy ;w rejestrze RO
4.7.6. Tryb adresowania pośredniego Pamięć danych
Rys. 4.13. Adresowanie pośrednie
A d r e s operandu jest u m i e s z c z o n y w rejestrze i n d e k s o w y m X , Y i u b Z. Rejes try te pełnią w i ę c funkcję w s k a ź n i k a n a o p e r a n d . M e c h a n i z m t e n j e s t po wszechnie wykorzystywany np. w języku C. Przykład 4.6. Umieszczenie zawartości rejestru R16w pamięci SRAM LDI ST
R28,$65 Y.R16
,-adres pośredni umieszczony w rejestrze indeksowym Y .•umieszczenie zawartości rejestru R16 w pamięci .-adresowanej przez rejestr Y (w tym przypadku ;w komórce o adresie $65)
4.7.7. Tryb adresowania pośredniego danych z predekrementacją
Pamięć danych $00 15
Rejestr X, Y lub Z
$DF
Rys. 4.14. Adresowanie pośrednie z predekrementacją
W t y m t r y b i e rejestry i n d e k s o w e X , Y i Z są d e k r e m e n t o w a n e p r z e d w y k o n a n i e m o p e r a c j i . T a k i e a d r e s o w a n i e d o s k o n a l e nadaje sie d o p r z e t w a r z a n i a d ł u gich struktur danych. Przykład 4.7. Fragment pętli zapełniającej tablicę danych zawartością rejestru R16. Do wskazywania elementów tablicy wykorzystywany jest rejestr X, do którego przed wejściem do pętli powinien być wpisany odpowiedni adres (następny po ostatnim elemencie tablicy)
ST
-X,R16
/wypełnianie kolejnych elementów tablicy
...
/ewentualne inne operacje i rozkazy realizujące pętlę
4.7.8. Tryb adresowania pośredniego danych z postinkrementacją Pamięć danych 15 r-*j
0 Rejestr X, Y lub Z
1
P $DF
Rys. 4.15. Adresowanie pośrednie z postinkrementacją Tryb adresowania z postinkrementacją
jest podobny
do opisanego
wyżej.
R ó ż n i c a p o l e g a n a t y m , ż e rejestry i n d e k s o w e X , Y , i Z są i n k r e m e n t o w a n e p o w y k o n a n i u operacji. Przykład 4.8. Pobieranie do rejestru RO kolejnych elementów z obszaru pamięci danych wskazywanych przez rejestr Z
LD ...
R0,z+
/pobranie elementu z automatycznym przesunięciem /wskaźnika na kolejny /ewentualne inne operacje i rozkazy realizujące
;pętle
4.7.9. Tryb adresowania stałych z użyciem rozkazu LPM Pamięć programu $000 1
15
O
Rejestr Z
I
1 $3FF
Rys. 4.76. Adresowanie statej umieszczonej w pamięci programu z użyciem rozkazu LMP
T e n tryb adresowania służy d o obsługi struktur zawierających stałe, umiesz czanych w pamięci programu. Adres statej j e s t u m i e s z c z a n y w rejestrze Z. Adres słowa pamięci p r o g r a m u (0...1023) jest w y b i e r a n y p r z e z piętnaście najstarszych bitów rejestru. Bit najmłodszy decyduje o t y m , c z y odczytywa ny jest młodszy ( L S B = 0 ) , czy starszy ( L S B = 1 ) bajt s ł o w a p r o g r a m u . Przykład 4.9. Pobranie do rejestru RO elementu tablicy umieszczonej w pamięci programu LDi
R30, (TABP J O™ trybie, to pr> i wyzwalającego na wejście I C P powoduje przepisa nie aktualnego stanu licznika T C 1 d o rejestrów [ICR1H][ICR1L] (czyli [ICR1H][ICR1L]=ITCNT1H][TCNT1L]). T a k więc, po wyzwoleniu licznik zlicza w u s t a l o n y m cyklu, a jego stan w chwili w y z w o l e n i a został zatrzaśnięty w 16-bitowym rejest rze I C R 1 . Impuls w y z w a l a n i a m o ż e b y ć pobierany także z wyj. ścia komparatora a n a l o g o w e g o .
( J a n i e
i
m
p
u
s
u
Układ TC1 oprócz typowych trybów pracy j a k o zwykły t i m e r lub licznik, umożliwia dodatkowo realizację funkcji p o r ó w n y w a n i a wyjścia (Output Com pare),
modulacji P W M (Pulse Width Modułation
- modulacja szerokości im
pulsu) i przechwytywania wejścia (Input Capture).
Funkcja Output
wykorzystuje rejestry O C R 1 A H i O C R 1 A L (Output Compare
Compare
Register
JA) ja
ko źródło danej porównywanej ze stanem T i m e r a / L i c z n i k a l . W przypadku wy stąpienia równości rejestrów: O C R 1 A H = T C N T 1H i O C R 1 A L = T C N T 1 L może nastąpić opcjonalne zerowanie Timera/Licznikal oraz akcja na wyjściu (OCl) Output
Comparel.
Sposób reakcji
zależy
od
i C O M 1 A 0 w rejestrze T C C R 1 A (Timer/Counterl
ustawień
bitów
COM1A1
Control Register
A). Szcze
gółowy opis zamieszczono w dalszej części rozdziału. Rejestry O C R 1 A H i O C R I A L są r ó w n i e ż w y k o r z y s t y w a n e podczas pracy Timera/Licznikal j a k o 8-, 9- lub 10- bitowy m o d u l a t o r P W M . Funkcja prze chwytywania jest związana z rejestrem ICR1 (Input Capture de facto
Register).
Jest to
rejestr 16-bitowy składający się z I C R I H (starszy bajt) i ICR1L
(młodszy bajt). Przechwytywanie jest w y z w a l a n e z e w n ę t r z n y m sygnałem po jawiającym się na w y p r o w a d z e n i u I C P (Input Capture Funkcję
przechwytywania
T C C R 1 B (Timer/Counterl
konfiguruje Control
wania m o ż e być wykorzystany
ICP
się
Register).
Pin) mikrokontrolera.
poprzez
ustawienia
D o w y z w a l a n i a przechwyty
ponadto k o m p a r a t o r a n a l o g o w y
0 Eliminator szumów 1
rejestru
Selektor zbocza
t
—
t
ICNC1
ICES1
ACIC: COMPARATOR IC ENABLE ACO: COMPARATOR OUTPUT
Rys. 5.4. Schemat układu obrabiającego sygnał z wejścia ICP
zawarty
w strukturze mikrokontrolera. N a r y s u n k u S.4 p r z e d s t a w i o n o b u d o w ę układu obrabiającego
sygnał
z wyprowadzenia
ICP
i wyprowadzeń
związanych
z komparatorem analogowym. Z funkcją p r z e c h w y t y w a n i a związany j e s t p o n a d t o u k ł a d eliminacji s z u m ó w (Noise
Canceler).
Jeśli j e s t włączony, to w a r u n e k w y z w o l e n i a dla funkcji
p r z e c h w y t y w a n i a zostanie przyjęty d o p i e r o p o w y k r y c i u czterech kolejnych p r ó b e k sygnału wyzwalającego o j e d n a k o w e j wartości. Timer/Licznikl
jest konfigurowany
poprzez rejestry
sterujące
TCCR1A
i T C C R I B . Flagi zdarzeń związanych z T i m e r e m / L i c z n i k i e m l znajdują w rejestrze T I F R (Timer/Counter pełnienia
Interrupt
T O V l (Timer/Counterl
O C F 1 A (Output
Compare
Flag Register).
Overflow
Flag),
się
Są to: flaga p r z e flaga
porównania
Flag) i flaga p r z e c h w y c e n i a I C F 1 (Input
Capture
Flag).
TCCR1A [Timer/Counterl Control Register A) - rejestr sterujący A Timera/Licznikal - $2F 8 1 1
7
6
5
$2F($4F) [COM1A1 | COM1A0 | Odczyt/Zapis R/W R/W R Wartość początkowa 0 0 0 R - oznacza odczyt, R/W - oznacza odczyt/zapis
|
4 R
3
|
R 0
B 7 , B 6 - C O M 1 A 1 , C O M 1 A 0 (Compare
2 |
R
0
Output
1
0
| PWM11 | PWM 10 [ T C C R 1 A R/W R/W 0 0 0
Model,
bity: 1,0): bity
k o n f i g u r u j ą c e T i m e r / L i c z n i k l w trybie p o r ó w n a n i a . Bity C O M 1 A 1 i C O M I A O określają zachowanie się w y p r o w a d z e n i a m i k r o kontrolera O C 1 (Output
Compare
1 - a l t e r n a t y w n a funkcja
wyprowadzenia
P B 3 ) , następującego p o wykryciu p o z y t y w n e g o p o r ó w n a n i a w układzie T i m e r a / L i c z n i k a l . Wyjście to może w takich przypadkach z a c h o w y w a ć się zgodnie z opisem z tablicy 5.2. W przypadku wykorzystywania funkcji
porównania
w y p r o w a d z e n i e O C 1 / P B 3 p o w i n n o b y ć skonfigurowane j a k o wyjście.
736. 5.2 Konfiguracja Timera/Licznikal w trybie porównaniaWM C0M1A1 COM1A0 0
Opis
£y ;
0
Wyjście 0C1 jest odłączone od układu Timera/Licznikal
0
1
Zmiana stanu na wyjściu 0C1 w wyniku pozytywnego porównania
1
0
Wyzerowanie („U") wyjścia ÓG1 w wyniku pozytywnego porównania
1
1
Ustawienie („1") wyjścia 0C1 w wyniku pozytywnego porównania
Uwagi: 1. W trybie PWM powyższe bity zmieniają znaczenie (patrz tablica 5.6). 2 . Początkowy stan wyjścia 0 C 1 jest nieokreślony.
l
_ •
Tab. 5.3. Konfiguracja modulatora PWM PWM11
PWM10
opis
0
0
Funkcja PWM dla Timera/Licznikal zablokowana
0
1
Timer/Licznikl pracuje jako 8-bitowy PWM
1 1
0
Timer/Licznikl pracuje jako 9-brtowy PWM
1
Timer/Licznikl pracuje jako 10-bitowy PWM
B5...2 - zarezerwowane. T e bity są z a r e z e r w o w a n e w układzie A T 9 0 S 2 3 I 3 i z a w s z e odczytywane ja k o zero. BI, BO - P W M 1 1 , P W M 1 0 (Pułse
Width Modulator
Select Bits):
bity wy
boru trybu pracy modulatora PWM. Bity te ustalają tryb pracy modulatora P W M wykorzystującego Timer/Licz n i k l zgodnie z tablicą 53. TCCR1B (Timer/Counterl Control Register B) - rejestr sterujący B Timera/Licznikal - $2E Btt S2E ($4E) Odczyt/Zapia
7 6 | ICNC1 | ICES1 R/W R/W
5 |
R
Wartość początkowa 0 0 0 R - oznacza odczyt, R/W - oznacza odczyt/zapis
B 7 - I C N C 1 (Input Capture
|
R
4 3 2 1 | CTC1 | CS12 | CS11 | R/W R/W R/W 0
1 Noise Canceler):
0
0
0
0 CS10 | TCCH1B R/W 0
bit włączający/wyłączają
cy układ eliminacji szumu dla Timera/Licznikal pracującego w trybie porównania. Jeśli bit I C N C 1 jest w y z e r o w a n y , układ eliminacji s z u m u j e s t wyłączony. Przechwytywanie jest w ó w c z a s w y z w o l o n e n a p i e r w s z y m narastającym lub opadającym zboczu (w zależności od konfiguracji) s p r ó b k o w a n y m na wej ściu I C P przez C P U . G d y bit I C N C 1 j e s t ustawiony ( w p i s a n o „ 1 " ) , wyzwole nie przechwycenia nastąpi dopiero p o wykryciu czterech kolejnych, jednako w y c h próbek (o wartości określonej konfiguracją) n a wejściu I C P . Konfigu racje wyzwalania określa bit I C E S 1 rejestru T C C R 1 B . C z ę s t o t l i w o ś ć próbko wania jest równa fxTAL- Funkcja eliminacji s z u m u przydaje się, gdy wejście wyzwalające I C P współpracuje n p . z wyjściem k o m p a r a t o r a analogowego. Na skutek niestabilności źródeł referencyjnych i s a m e g o sygnału mierzonego w stanach równowagi n a wejściach komparatora m o ż e d o c h o d z i ć d o wielo krotnych przerzutów na wyjściu komparatora. Sytuacja taka m o g ł a b y zakłó cić pracę T i m e r a / L i c z n i k a l z włączoną funkcją p o r ó w n a n i a .
B 6 - I C E S 1 (Input Capturel
Edge Select):
bit o k r e ś l a j ą c y z b o c z e s y g n a ł u
wyzwalającego przechwytywanie. Jeśli bit I C E S 1 j e s t w y z e r o w a n y ( „ 0 " ) , t o zawartość rejestrów T i m e r a / L i c z n i k a l j e s t p r z e p i s y w a n a d o rejestru I C R 1 (Input Capture
Register)
na opadają
c y m z b o c z u w e j ś c i o w e g o sygnału I C P . Jeśli bit I C E S 1 jest ustawiony ( „ 1 " ) , t o z a w a r t o ś ć rejestrów T i m e r a / L i c z n i k a l jest p r z e p i s y w a n a d o rejestru I C R 1 (Input Capture
Register)
na narastającym zboczu w e j ś c i o w e g o sygnału I C P .
B5, B4 - zarezerwowane. T e bity są z a r e z e r w o w a n e w układzie A T 9 0 S 2 3 1 3 i z a w s z e o d c z y t y w a n e j a k o zero. B 3 - C T C 1 (Clear Timer/Counterl
on Compare
Match)'.
bit z e r o w a n i a Ti
m e r a / L i c z n i k a l p o spełnieniu w a r u n k u p o r ó w n a n i a . Jeśli bit C T C 1 j e s t u s t a w i o n y
( „ 1 " ) , to T i m e r / L i c z n i k l
jest
zerowany
( T C N T I H = $ 0 0 i T C N T l L = $ 0 0 ) w najbliższym cyklu z e g a r o w y m p o speł nieniu
warunku
porównania.
Warunek
porównania
następuje,
gdy
T C N T l H = O C R l A H i T C N T l L = O C R l A L . Jeśli bit C T C 1 jest w y z e r o w a n y („0"), to wystąpienie w a r u n k u p o r ó w n a n i a nie w p ł y w a n a stan Timera/Licz n i k a l . K o n t y n u u j e o n zliczanie. W a r u n e k p o r ó w n a n i a jest w y k r y w a n y przez C P U w najbliższym cyklu z e g a r o w y m p o j e g o wystąpieniu. Dzieje się tak dla wartości podziału preskalera równej 1. Dla w i ę k s z y c h wartości stopnia p o działu funkcja p o r ó w n a n i a będzie działała inaczej. Najlepiej zilustruje to p o niższy p r z y k ł a d . Jeśli stopień podziału preskalera j e s t r ó w n y 1, d o rejestru p o r ó w n a n i a wpisa n o wartość C , a bit C T C 1 j e s t u s t a w i o n y , to T i m e r / L i c z n i k l będzie liczył w cyklu: ....IC-2IC-1IC10I1L.. G d y stopień podziału preskalera będzie u s t a w i o n y n p . na 8, Timer/Licz n i k l będzie liczył w cyklu: ....IC-2, C - 2 , C-2, C-2, C-2, C-2, C-2, C - 2 I C - 1 , C - l , C - l , C - l , C - l , C - l , C - I , C-1IC, 0 , 0, 0, 0, 0 , 0, 01.... Bit C T C 1 w trybie P W M nie m a znaczenia.
W a r u n e k p o r ó w n a n i a j e s t w y k r y w a n y przez C P U w najbliż s z y m cyklu z e g a r o w y m p o j e g o wystąpieniu. Dzieje się tak dla wartości podziału preskalera równej 1. D l a w i ę k s z y c h wartości stopnia podziału funkcja p o r ó w n a n i a b ę d z i e działała inaczej.
Tałt. 5.4. Konfiguracja układu Timera/Licznikal
l
Opis
.
C$12
CS11
CS 10
0
0
0
0
0
1
0
1
0
Sygnał taktujący CK/8
0
1
1
Sygnał taktujący CK/64
1
0
0
Sygnał taktujący CK/256
1
0
1
Sygnał taktujący CK/1024
1
1
0
Sygnał taktujący: zewnęlrzny sygnał T 1 . zbocze opadające
1
1
1
Sygnał taktujący: zewnętrzny sygnał 7 1 , zbocze narastające
,
' '-j
Stop - układ TC1 jest zatrzymany Sygnał taktujący CK
B 2 . . . B 0 - C S 1 2 , C S U , C S 1 0 (Clock
Selectl,
bity: 2 , 1, 0 ) : bity wyboru
stopnia podziału preskalera oraz źródła s y g n a ł u t a k t u j ą c e g o i jego zbo cza a k t y w n e g o dla licznika T C 1 . Wszystkie możliwe kombinacje bitów w y b o r u dla T i m e r a / L i c z n i k a l przed stawiono w tablicy 5.4. Występujący w tablicy 5.4 sygnał C K p o c h o d z i z w e w n ę t r z n e g o oscylatora i jest to ten sam sygnał, który taktuje C P U . S k o n f i g u r o w a n i e układu TC1 ja k o licznik powoduje - j a k j u ż w i a d o m o - zliczanie i m p u l s ó w z wejścia T l . Dzieje się tak nawet wtedy, gdy w y p r o w a d z e n i e m i k r o k o n t r o l e r a PD5/T1 jest ustawione j a k o wyjście. Rozwiązanie takie u m o ż l i w i a p r o g r a m o w ą kontrolę zliczania. N a skutek przepełnienia T i m e r a / L i c z n i k a l m o ż e b y ć wygenerowa ne przerwanie, którego procedura obsługi j e s t u m i e s z c z o n a w pamięci pro gramu pod adresem $ 0 0 5 .
TCNT1H i TCNT1L {Timer/Counterl) - rejestr Timera/Licznikal - $2D/$2C Bit $2D (S4D) $2C ($4C)
15 USB 7
6
5
4
3
Odczyt/Zapis
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
O
0
0
Wartość początkowa 0 0
14
13
12
11
10
9
8
2
1
LSB D
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0 0
0 0
TCNT1H TCHT1L
R/W - oznacza odczyt/zapis
16-bitowy rejestr T C N T 1 p r z e c h o w u j e a k t u a l n y stan T i m e r a / L i c z n i k a l T C N T 1 H starszy bajt, T C N T 1 L m ł o d s z y bajt. Jest d o s t ę p n y zarówno do zapisu j a k i odczytu, j e d n a k w p e w n e j specyficznej sytuacji m o g ł o b y do c h o d z i ć d o niejednoznaczności operacji o d c z y t u . P r z y p a d e k taki mógłby wystąpić, gdyby m o m e n t odczytu nastąpił, g d y rejestr p r z e c h o w y w a ł war t o ś ć $ F F F F i stopień podziału preskalera był r ó w n y 1. P o odczytaniu np.
m ł o d s z e g o bajtu z T C N T I L nastąpiłoby z w i ę k s z e n i e s t a n u rejestru, w w y niku c z e g o o d c z y t a n a n a s t ę p n i e w a r t o ś ć T C N T 1 H b y ł a b y r ó w n a $ 0 0 , z a miast s p o d z i e w a n e j $ F F . Z p r o b l e m e m t y m m u s z ą s o b i e r a d z i ć s p e c j a l n y m i zabiegami
programowymi
użytkownicy
mikrokontrolerów
rodziny
'51,
w A V R - a c h p r o b l e m został r o z w i ą z a n y p r z e z w p r o w a d z e n i e d o d a t k o w e g o 8-bitowego rejestru t y m c z a s o w e g o T E M P (nie j e s t o d o s t ę p n y d l a u ż y t k o w nika b e z p o ś r e d n i o ) , w s p o m a g a j ą c e g o operacje d o s t ę p u d o rejestru T C N T 1 . Z a p e w n i a o n j e d n o c z e s n y d o s t ę p d o rejestrów T C N T 1 H i T C N T I L i j e s t r ó w n i e ż w y k o r z y s t y w a n y przy d o s t ę p i e d o r e j e s t r ó w O C R 1 A i I C R 1 . G d y C P U d o k o n u j e z a p i s u d o bardziej z n a c z ą c e g o rejestru T C N T 1 H , z a p i s y w a na d a n a j e s t u m i e s z c z a n a p o c z ą t k o w o w rejestrze t y m c z a s o w y m T E M P . N a s t ę p n i e , w t y m s a m y m m o m e n c i e , w k t ó r y m o d b y w a się zapis m n i e j zna c z ą c e g o rejestru T C N T I L , d o rejestru T C N T 1 H j e s t p r z e p i s y w a n y rejestr T E M P . Konsekwencją takiego rozwiązania jest konieczność
wpisywania
najpierw starszej ( T C N T 1 H ) , p ó ź n i e j m ł o d s z e j ( T C N T I L ) c z ę ś c i rejestru p o d c z a s operacji 1 6 - b i t o w e g o zapisu. A n a l o g i c z n i e w y g l ą d a o p e r a c j a od czytu rejestru T C N T 1 . G d y C P U d o k o n u j e o d c z y t u m n i e j z n a c z ą c e g o rejes tru T C N T I L , p o b i e r a n a d a n a j e s t p r z e s y ł a n a b e z p o ś r e d n i o d o C P U i j e d n o cześnie z a w a r t o ś ć bardziej z n a c z ą c e g o rejestru ( T C N T 1 H ) j e s t u m i e s z c z a n a w rejestrze
tymczasowym
TEMP.
Kiedy
teraz
CPU
odczytuje
rejestr
T C N T 1 H , d a n a j e s t p o b i e r a n a z rejestru T E M P . K o n s e k w e n c j ą t a k i e g o roz wiązania j e s t k o n i e c z n o ś ć o d c z y t y w a n i a najpierw
młodszej
p ó ź n i e j starszej ( T C N T 1 H ) c z ę ś c i rejestru p o d c z a s operacji
(TCNTIL), 16-bitowego
odczytu. G d y zapis d o rejestru T C N T 1 następuje w chwili wystąpienia impulsu zega r o w e g o , najpierw będzie w y k o n a n e zliczenie, później zaś rejestr zostanie ustawiony zgodnie z zapisaną daną.
Jeśli p r o g r a m g ł ó w n y i procedury obsługi p r z e r w a ń w y k o r z y s tują operacje z u d z i a ł e m rejestru T E M P , t o przerwania p o w i n ny b y ć z a b l o k o w a n e na czas dostępu d o tego rejestru.
0CR1AH i 0CR1AL [Timer/Counterl Output Compare Register A) - starszy i młodszy rejestr wartości porównywanej - $2B/$2A 14
13
g
8
2
1
LSB 0
R/W
R/W
R/W
RM
R/W
R7W
0
0
0
0
0
0
0
0
11
12
Bit S3B (S4B) UMS4A)
15 MSB 7
6
5
4
3
Odczyt/Zapis
RAM
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0 0
a 0
0 0
Wartość początkowa 0 0
10
0CR1AH OCR1AL
R/W - oznacza odczyt/zapis
Wartość p o r ó w n y w a n a przez układ T C 1 j e s t p r z e c h o w y w a n a w 16-bitowym rejestrze
OCR1A
składającym
się
z rejestru
OCR1AH
(starszy
bajt)
i O C R 1 A L (młodszy bajt). W a r t o ś ć zapisana w n i m j e s t bezustannie porów n y w a n a z w a r t o ś c i ą T i m e r a / L i c z n i k a l . W p r z y p a d k u wystąpienia warunku równości obu rejestrów, tzn. gdy O C R 1 A H = T C N T 1H i 0 C R 1 A L = T C N T 1 L , w y k o n y w a n a jest akcja określona w rejestrze sterującym Timera/Licznikal ( T C C R 1 A) i rejestrze statusu ( S R E G ) . A b y z a p e w n i ć j e d n o c z e s n o ś ć odczytu d w ó c h 8-bitowych rejestrów składających się na rejestr 16-bitowy, zastoso w a n o podobny m e c h a n i z m j a k w przypadku rejestru T C N T 1 . W operacjach dostępu do O C R 1 A korzysta się z rejestru t y m c z a s o w e g o T E M P . Gdy CPU dokonuje zapisu do bardziej znaczącego rejestru O C R 1 A H , zapisywana dana jest umieszczana początkowo w rejestrze t y m c z a s o w y m T E M P . Następnie, w t y m s a m y m m o m e n c i e , w którym o d b y w a się z a p i s mniej znaczącego re jestru O C R 1 A L , do rejestru O C R 1 A H p r z e p i s y w a n y j e s t rejestr T E M P . Kon sekwencją takiego rozwiązania j e s t k o n i e c z n o ś ć w p i s y w a n i a najpierw star szej ( O C R 1 A H ) , później młodszej ( O C R 1 A L ) c z ę ś c i rejestru podczas opera cji
16-bitowego zapisu. Analogicznie w y g l ą d a operacja odczytu rejestru
O C R 1 A . Gdy C P U dokonuje odczytu mniej z n a c z ą c e g o rejestru OCR1AL, pobierana dana jest przesyłana bezpośrednio d o C P U i j e d n o c z e ś n i e zawar tość bardziej znaczącego rejestru ( O C R 1 A H ) j e s t u m i e s z c z a n a w rejestrze t y m c z a s o w y m T E M P . Kiedy teraz C P U odczytuje rejestr O C R 1 A H , dana jest pobierana z rejestru T E M P . Konsekwencją takiego r o z w i ą z a n i a jest koniecz ność
odczytywania
najpierw
młodszej
(OCR1AL),
później
starszej
( O C R 1 A H ) części rejestru podczas operacji 1 6 - b i t o w e g o o d c z y t u . Jeśli pro gram główny i procedury obsługi przerwań wykorzystują operacje z udziałem rejestru T E M P , przerwania powinny b y ć z a b l o k o w a n e na czas dostępu do te g o rejestru.
ICR1H i ICR1L {Timer/Counterl Input Capture Register) - starszy i młodszy rejestr przechwytywania - $ 2 5 / $ 2 4 15 MSB
BA $25 ($45) $ 2 4 ($44)
14
13
12
11
10
S
9
LSB
ICR1H ICR1L
7 R
Odczyt/Zapis
R Wartość początkowa
0 0
R - oznacza odczyt
16-bitowy rejestr p r z e c h w y t y w a n i a j e s t p r z e z n a c z o n y tylko d o
odczytu.
W chwili, w której na wejściu I C P zostanie w y k r y t e narastające lub opadają ce zbocze
sygnału
(w zależności
od
ustawień bitu
ICES1
w rejestrze
T C C 1 B ) , aktualna w a r t o ś ć T i m e r a / L i c z n i k a l jest p r z e p i s y w a n a d o rejestru I C R 1 A (Input Capture put Capture
Registerl).
W t y m s a m y m m o m e n c i e flaga I C F 1 (In-
Flag) jest ustawiana. I w t y m p r z y p a d k u , aby z a p e w n i ć j e d n o -
czesność odczytu d w ó c h 8-bitowych rejestrów składających się na rejestr 16bitowy I C R I A , z a s t o s o w a n o rejestr t y m c z a s o w y T E M P . G d y C P U dokonuje odczytu mniej z n a c z ą c e g o rejestru I C R 1 L , pobierana dana j e s t przesyłana b e z p o ś r e d n i o d o C P U i j e d n o c z e ś n i e zawartość bardziej znaczącego rejestru ( I C R 1 A H ) j e s t u m i e s z c z a n a w rejestrze t y m c z a s o w y m T E M P . Kiedy teraz C P U odczytuje rejestr O C R 1 A H , d a n a j e s t pobierana z rejestru T E M P . K o n sekwencją
takiego rozwiązania jest
konieczność
odczytywania
najpierw
młodszej (1CR1AL), później starszej ( I C R 1 A H ) c z ę ś c i rejestru p o d c z a s o p e racji 16-bitowego odczytu. Jeśli p r o g r a m g ł ó w n y i p r o c e d u r y obsługi p r z e r w a ń wykorzystują operacje z u d z i a ł e m rejestru T E M P , to p r z e r w a n i a p o w i n ny b y ć z a b l o k o w a n e na czas dostępu d o tego rejestru.
5.3.
Timer/Licznikl w trybie PWM D o realizacji 8-, 9 - lub 1 0 - b i t o w e g o m o d u l a t o r a P W M (Pulse lation) Compare
Width
w y k o r z y s t y w a n y j e s t T i m e r / L i c z n i k l o r a z rejestr O C R 1 A Register
Modu(Output
I). W y j ś c i e m m o d u l a t o r a j e s t w y p r o w a d z e n i e O C 1 / P B 3
m i k r o k o n t r o l e r a . M o d u l a t o r j e s t u k ł a d e m s a m o d z i e l n y m , c o o z n a c z a , że p o z a ł a d o w a n i u p a r a m e t r ó w g e n e r o w a n e g o sygnału, d a l s z a p r a c a o d b y w a się bez ingerencji p r o g r a m u u ż y t k o w e g o . P a r a m e t r o d p o w i a d a j ą c y w s p ó ł c z y n nikowi wypełnienia może być oczywiście w d o w o l n y m momencie zmienia ny b e z g e n e r o w a n i a z a k ł ó c e ń typu glitch
(niepożądane impulsy). Zmiany
Tab. 5.5. Wartość zliczania licznika TC1 w trybie PWM (JOP) i częstotliwość generowanego przebiegu Wartość zliczania (TOP)
: Rozdzielczość PWM
Częstotliwość generowanego sygnału PWM
S00FF(255)
fici/510
9 bitów
$01FF (511)
W1022
10 bitów
$03FF (1023}
fTci/2046
8 bitów
Tab. 5.6. Znaczenie bitów COM1A1 i COM1A0 rejestru TCCP.1A w trybie PWM(V CDM1A1 CUM 1 AU 0
0
Akcja podejmowana na wyjściu 0C1
.
.••--...••.„..--..;,--,>.'.•'..
Nie występuje
0
1
Nie występuje
1
0
Wyjście 0C1 jest zerowane („0") po osiągnięciu warunku równości podczas zliczania w górę i ustawiane (.1") po osiągnięciu warunku równości podczas zliczania w dół (normalny tryb PWM)
1
1
Wyjście 0C1 jest zerowane (.0") po osiągnięciu warunku równości podczas zliczania w dót i ustawiane (.1") po osiągnięciu warunku równości podczas zliczania w górę (odwrócony tryb PWM)
Uwaga: 1. Stan początkowy wyjścia 0C1 jest nieokreślony.
w s p ó ł c z y n n i k a w y p e ł n i e n i a przebiegają b e z z a k ł ó c e n i a fazy generowanego sygnału. W trybie P W M T i m e r / L i c z n i k l pracuje j a k o licznik rewersyjny zliczający od $ 0 0 0 0 d o wartości maksymalnej ( T O P - patrz t a b l i c a 5.5), p o c z y m kierunek zliczania zostaje zmieniony i licznik odlicza z p o w r o t e m d o zera. W tym mo mencie następuje p o n o w n a zmiana kierunku liczenia i c y k l p o w t a r z a się. Gdy licznik osiągnie stan, w którym 8, 9 lub 10 najmniej z n a c z ą c y c h bitów będzie miało taką samą wartość j a k odpowiadające i m bity w rejestrze OCR1A, wy prowadzenie O C 1 / P B 3 jest ustawiane lub z e r o w a n e , z g o d n i e z ustawieniami bitów C O M 1 A 1 i C O M 1 A 0 znajdujących się w rejestrze T C C R 1 A . Szczegó ły p o d a n o w t a b l i c y 5.6. Zapis wartości p o r ó w n y w a n i a d o rejestru O C R 1 A w trybie P W M przebiega pośrednio - poprzez rejestr T E M P . Operacja ta j e s t w y k o n y w a n a na 10 naj młodszych bitach rejestru O C R 1 A , które są z a t r z a s k i w a n e , kiedy Timer/Licz n i k l osiągnie stan T O P . Zapobiega to p o w s t a w a n i u s z k o d l i w y c h impulsów (glitches)
w przypadku niesynchronicznego zapisu rejestru O C R 1 A . Sytuację
tę zilustrowano na r y s u n k u 5.5. W przedziale czasu p o m i ę d z y zapisem i zatrzaśnięciem danej, odczyt z rejes tru O C R 1 A powoduje pobieranie zawartości rejestru T E M P . W ten sposób dane zapisywane ostatnio d o rejestru O C R 1 A są z a w s z e c z y t a n e spoza niego. Jeśli O C R 1 A zawiera wartość $ 0 0 0 0 lub T O P , to wyjście O C 1 jest aktualizo w a n e d o stanu niskiego lub w y s o k i e g o (w zależności od ustawień bitów
Wartość zliczona Wartość oflnWsianie
Wyjścia PWM OC1 Zsynchronizowany prze rzutnik OCR1A
Wartość zliczona Wartość odniesienia
Niezsynchronizowany orzerzutnlk OCH1A
Rys. 5.5. Przyczyna powstawania impulsów glitches na wyjściu generatora PWM w mikrokont rolerach AVR
C O M 1 A 1 i C O M 1 A 0 w rejestrze T C C R 1 A ) w chwili spełnienia następnego w a r u n k u p o r ó w n a n i a . Zilustrowano to w t a b l i c y 5,7.
Jeśli rejestr p o r ó w n a n i a ( O C R 1 ) z a w i e r a w a r t o ś ć T O P i preskaler nie j e s t u ż y w a n y ( C S 1 2 . . . C S 1 0 = 0 0 1 ) , na wyjściu P W M n i e jest g e n e r o w a n y ż a d e n przebieg. Dzieje się tak, g d y ż w a r tości p o r ó w n a n i a p o d c z a s zliczane w g ó r ę i w dół są osiągane j e d n o c z e ś n i e . Z a s t o s o w a n i e preskalera ( C S 1 2 . . . C S 1 0 = 001 lub 0 0 0 ) powoduje
uaktywnienie wyjścia
PWM
kiedy
licznik
osiągnie wartość T O P , ale p o d c z a s odliczania w dół w a r u n e k p o r ó w n a n i a nie j e s t interpretowany. W t y m p r z y p a d k u zostanie w y g e n e r o w a n y j e d y n i e pojedynczy i m p u l s .
Tab. 5.7. Zachowanie się wyjścia 0C1 w trybie PWM, gdy rejestr porównywania jest równy $0000 lub TOP C0M1A1
COM1A0
0CR1A
1
0
$0000
U
1
0
TOP
H
1
1
$0000
H
1
1
TOP
L
Wyjście 0C1
F l a g a przepełnienia T i m e r a / L i c z n i k a l - T 0 V 1 w t r y b i e P W M j e s t ustawiana, g d y licznik znajdzie się w stanie $ 0 0 0 0 p o d c z a s z l i c z a n i a w g ó r ę . Nie doty czy to j e d n a k p i e r w s z e g o c y k l u p o j e g o w ł ą c z e n i u . Przykład S. 1. Zachowanie się (lagi T0V1 i 0CF1A w tryb/e PWM ;W pętli LOOP są wykonywane kolejne rozkazy programu (wykonywane ;w jednym cyklu), w tym przypadku nie jest istotne jakie, gdyż ; interesują nas tylko stany licznika i flag ,-definicja rejestru tmp tmp=rl7 def org $0000 cseg rjmp RESET ;inicjowanie zmiennych ;programu ... ;w tym SPL
RESET:
sei ldi out ldi ldi out out ldi ouc
tmp,0x81 tccrla,tmp tmp,0x32 tmp, 0 ocrlah,tmp ocrlal,tmp tmp,0x01 cccrlb,tmp
LOOP:
,-globalne włączenie przerwań ;8-bitowy PWM normalny
;0CR1AL=$32, przykładowa wartość ;preskaler=l, start timera ;TCNTl=0, TOV1=0, OCFlA=0 ;kolejne ro2kazy (nieistotne}
TCNT1=$32 TCNT1=$33, OCFlA=l (wystąpił pozytywny wynik porównania)
TCNT1=$FE TCNTl=$FF TCNT1=SFE TCNT1=$FD
TCNT1=$01 TCNT1=$00, T0V1=1 TCNT1=$01
P r z e r w a n i a od p r z e p e ł n i e n i a licznika m o g ą n o r m a l n i e , muszą
(przepełnienie)
w trybie P W M
być oczywiście ustawione
odpowiednie
funkcjonować bity
sterujące:
T O I E 1 w rejestrze T I M S K i I w rejestrze S R E G . A n a l o g i c z n i e można ko rzystać z p r z e r w a n i a o d spełnienia w a r u n k u p o r ó w n a n i a , g d y tylko będzie u s t a w i o n y bit O C I E 1 A w rejestrze T I M S K i I w r e j e s t r z e S R E G .
6.
Watchdog Stale rosnące w y m a g a n i a n i e z a w o d n o ś c i o w e s t a w i a n e przez u ż y t k o w n i k ó w sprzętu e l e k t r o n i c z n e g o - i to nie tylko profesjonalnego - powodują, że k o n struktorzy projektując urządzenia muszą w y k a z a ć dużą staranność w t y m za kresie. N i e z a w o d n o ś ć sprzętu zależy od wielu c z y n n i k ó w , n p . odporności na zakłócenia e l e k t r y c z n e czy p o p r a w n o ś c i o p r o g r a m o w a n i a mikrokontrolera. N a skutek p r z y p a d k o w e g o zakłócenia w y k o n y w a n i e p r o g r a m u m o ż e zostać przeniesione w p r z y p a d k o w e miejsce w p a m i ę c i p r o g r a m u ,
powodując
n i e p r z e w i d y w a l n e działanie systemu. Niedostateczne p r z e t e s t o w a n i e progra m u m o ż e r ó w n i e ż d o p r o w a d z i ć n p . d o p o w s t a w a n i a m a r t w y c h pętli, p o w o d u jąc w efekcie zawieszenie się systemu. C z ę s t o sytuacje takie są trudne d o w y krycia, g d y ż na pierwszy rzut oka p r o g r a m wygląda na p o z b a w i o n y b ł ę d ó w . N a przykład poniższa pętla napisana w j ę z y k u C wydaje się b y ć p o p r a w n a i p o sześciu iteracjach p o w i n n a zostać z a k o ń c z o n a . J e d n a k ż e na skutek za okrąglania wartości zmiennej sterującej typu float, w a r u n e k x = 0 nigdy nie zostanie w niej osiągnięty i pętla będzie n i e p r z e r w a n i e w y k o n y w a n a . Przykład 6.1. Z pozoru poprawna pętla programowa, okazuje się pętlą nieskończoną Binclude <wdt.h> łłinclude
float x;
//Uwaga! Z uwagi na zbyt duże biblioteki //operacji zmiennoprzecinkowych, ten program //nie zmieści się do układu AT90S2313 //deklaracja
wdt_enable(2) ; lor (x = S./3.;x!=0.;x- = l./3
zmiennej
typu float
// .) //zmienna x jest zmniejszana f/bfi
do
0 co
od wartości
1/3
{
wdt_reset{);
//umieszczenie rozkazu zerowania rejestrów //watchdoga w tym miejscu jest błędem, nie //spełni on tu swej funkcji. Mikrokontroler //powinien być wyzerowany, jeśli będzie za //długo przebywał w tej pętli
Aby zapobiec podobnym przypadkom opracowano dość prosty mechanizm s p r z ę t o w o - p r o g r a m o w y . W wielu w s p ó ł c z e s n y c h m i k r o k o n t r o l e r a c h , m . in. w A T 9 0 S 2 3 1 3 , z a w a r t o w strukturze układu w y d z i e l o n y t i m e r - w a t c h d o g , k t ó r e g o z a d a n i e m j e s t o d m i e r z a n i e specjalnych i n t e r w a ł ó w c z a s o w y c h (rime-out),
po przekroczeniu których mikrokontroler jest zerowany. Progra
mista pisząc p r o g r a m nie m o ż e d o p u ś c i ć d o tego, a b y p r z e k r o c z y ć c z a s ti-
me-out,
gdyż s p o w o d u j e to w y g e n e r o w a n i e s y g n a ł u z e r u j ą c e g o przez układ
w a t c h d o g a . W t y m c e l u w r ó ż n y c h p u n k t a c h p r o g r a m u u m i e s z c z a rozkazy zerujące rejestry timera i rozpoczynające t y m s a m y m c y k l liczenia od po czątku. Punkty takie m u s z ą b y ć starannie d o b r a n e . C z a s p r z e j ś c i a pomiędzy d w o m a sąsiednimi (ze w z g l ę d u n a k o l e j n o ś ć p r z e c h o d z e n i a , a nie miejsce w p r o g r a m i e ) nie m o ż e b y ć dłuższy niż time-out
w a t c h d o g a . Jednocześnie
um ie s z c z e ni e rozkazu zerującego w a t c h d o g w pętli p r o g r a m u podejrzanej o to, że m o ż e b y ć pętlą n i e s k o ń c z o n ą (jak w p r z y k ł a d z i e 6.1), nie spełni swojego zadania. W mikrokontrolerze A T 9 0 S 2 3 1 3 w a t c h d o g j e s t t i m e r e m t a k t o w a n y m z wy dzielonego generatora, zawartego w strukturze układu i pracującego z częs totliwością
1 MHz.
Jest
to
typowa
wartość
dla
napięcia
zasilające
g o V c c = 5 V. Watchdog m a swój własny preskaler, dzięki c z e m u progra mista może ustawiać odpowiednią dla siebie w a r t o ś ć time-outu
(tablica 6.1).
Na liście rozkazów mikrokontrolera A T 9 0 S 2 3 1 3 znajduje się specjalny roz kaz - WDR (Watchdog Reset)
- zerujący rejestr timera w a t c h d o g a . Długość
cyklu odmierzanego przez w a t c h d o g m o ż e przybierać j e d n ą z ośmiu różnych wartości. Doliczenie d o końca p o w o d u j e w y g e n e r o w a n i e sygnału zerującego (rysunek 4.26) i skok p o d adres wektora Reset Vector.
Programista, który
świadomie chce zablokować układ w a t c h d o g a m u s i w y k o n a ć specjalną sek wencję wyłączającą.
Zabezpieczenie takie m a n a celu uchronienie się od
p r z y p a d k o w e g o zablokowania w a t c h d o g a .
WDTCR [Watchdog Timer Control Register) - rejestr sterujący watchdoga - $21 BU
S21 ($41) Odczyt/Zapis
I
7 ~ R
1
6 •R
1
5 R
3 WOE R/W
A
| WDTOE | FtyW
Wartość początkowa 0 0 0 H - oznacza <x)czył. R/W - oznacza, odczyt/zapis
0
2 1 O 1 WOP2 | WDP1 | WDPO | WDTCR R/W R/W R/W 0
0
0
0
B7...5 - Z a r e z e r w o w a n e . T e bity są z a r e z e r w o w a n e w układzie A T 9 0 S 2 3 1 3 i z a w s z e odczytywane ja k o zero. B 4 - W D T O E (Watchdog watchdoga.
Turn-off
Enable):
bit z e z w o l e n i a n a wyłączenie
Bit ten musi być ustawiony („1") przed w y z e r o w a n i e m bitu W D E . Jeśli się tego nie zrobi, zablokowanie w a t c h d o g a nie zostanie w y k o n a n e . Po ustawie niu bitu W D T O E zostaje on sprzętowo w y z e r o w a n y a u t o m a t y c z n i e p o 4 cyk lach zegarowych. Wyłączenie w a t c h d o g a m u s i w i ę c nastąpić w tym czasie.
Preskaler waichodga
Generator 1MHz
03 i: 5 CM s CM o CO 3 ov> D O W to
(O O O O
O
OSO OSO
WATCHDOG RESET
O O
^| " |
WDPO WDP1 W0P2 WDE
Rys. 6.1. Schemat blokowy watchdoga
B 3 - W D E (Watchdog
Zerowanie MCU
Enable) - bit włączający/wyłączający układ watchdoga.
W a t c h d o g j e s t włączony, jeśli bit W D E jest u s t a w i o n y („1")- Jeśli W D E j e s t w y z e r o w a n y ( „ 0 " ) , to w a t c h d o g jest wyłączony. W D E m o ż e b y ć z e r o w a n y tylko w t e d y , g d y j e d n o c z e ś n i e W D T O E jest u s t a w i o n y („1")- W celu zablo k o w a n i a pracującego w a t c h d o g a m u s i b y ć w y k o n a n a poniższa procedura: 1. Zapisać j e d n o c z e ś n i e „ I " d o bitów W D T O E i W D E . L o g i c z n a „ 1 " musi b y ć zapisana d o W D E podczas procedury b l o k o w a n i a w a t c h d o g a n a w e t w t e d y , g d y bit ten był ustawiany wcześniej. 2. W ciągu n a s t ę p n y c h czterech cykli z e g a r o w y c h zapisać „ 0 " d o bitu W D E . W t y m m o m e n c i e w a t c h d o g zostanie z a b l o k o w a n y . B2...0 - W D P 2 , W D P 1 , WDPO (Watchdog
Timer
Preskaler)
- bity konfi
gurujące preskaler watchdoga. Bity W D P 2 , W D P 1 , WDPO określają parametry preskalera w a t c h d o g a , gdy jest on a k t y w n y . Ustawienie preskalera w p ł y w a na d ł u g o ś ć time-outu
watch
d o g a (tablica 6.1). Tab. 6.1. Ustawienie preskalera watchdogaW WDP2
WDP1
WDPO
Liczba cykli oscylatora WDT
Typowa długość time-outu Typowa długość time-outu Ula V = 3 V dlaV =5V w
cc
0
0
0
16 kcykli
47 ms
15 ms
0
0
1
32 kcyKli
94 ms
30 ms 60 ms
0
1
0
64 kcykli
0.19 S
0
1
1
128 kcykli
0,38 s
0,12 S
1 1
0
0
256 kcykli
0,75 s
0,24 S
0
1
512 kcykli
1.5 S
0.49 s
1
1
0
1024 kcykli
3.0 s
0,97 s
1
1
1
2048 kcykli
6,0 S
1.9 S
Uwaga: " i Częstotliwość oscylatora watchdoga jest uzależniona od wartości napięcia zasilającego.
"
R o z k a z WDR (Watchdog
Reset)
p o w i n i e n być z a w s z e w y k o n a n y przed włą
c z e n i e m w a t c h d o g a . T y m s a m y m m a m y p e w n o ś ć , ż e o k r e s z e r o w a n i a będzie z g o d n y z u s t a w i e n i a m i preskalera. Jeśli w a t c h d o g j e s t w ł ą c z o n y bez wcześ niejszego zerowania, to j e g o stan p o c z ą t k o w y m o ż e b y ć r ó ż n y o d zera. Dla uniknięcia n i e z a m i e r z o n e g o z e r o w a n i a M C U , w a t c h d o g p o w i n i e n być bloko w a n y lub z e r o w a n y p r z e d zmianą p a r a m e t r ó w j e g o p r e s k a l e r a . Przykład 6.2. Obsługa watchdoga (wersja programu w asemblerze) .def .def
temp=r20 templ=r21 ldi in cli wdr out out
temp,SOS templ,sreg
wdtcr,temp sreg,templ
wdr
;przygotowanie wpisu do WDTCR ;zapamiętanie statusu CPU ;zablokowanie przerwań reset watchdoga ;start watchdoga z minimalnym timeoutem jodtworzenie statusu CPU
.•zerowanie watchdoga w takim miejscu programu, ;przez który licznik rozkazu musi przechodzić ,-w odstępach czasu nie dłuższych niż wartość ;time-outu
ldi ldi cli wdr out ldi out
temp,$18 templ,sreg
,-procedura wyłączenia watchdoga ; zapamiętanie statusu CPU ;zablokowanie przerwań
wdtcr,temp temp,$10 wdtcr,temp
;WDT0E=1 i WDE=1
out
sreg,templ
WDTOE=l i WDE=0 - stop watchdoga, gdyby nie było powyższego wpisu do wdtcr, watchdog nie zatrzymałby sie odtworzenie statusu CPU
Przykład 6.3. Obsługa watchdoga (wersja programu w języku C)
wdt_reset(); wdt_enable void czekaj(unsigned long zt) ( unsigned char ztl; for l;zt>0;zt — ) { for(zt1=255;ztl!=0;ztl--ł ;
//procedura pomocnicza
} }
int main[void) { unsigned char dana; PORTB=0xff; DDRB=0xf£; czekaj(10000L); eeprom_wb(l,0x7f); eeprom_wb(2,Oxbf); dana=eeprom_rb(l); PORTE-dana; czekaj(10000L); dana=eeprom_rb(2); PORTB=dana; czekaj (10000D ; while (1);
//gaś LED-y //PORTB w całości jako wyjściowy //czekaj ok. 1 s //zapisz dana 0x7F do EEPROM-u pod adres = 1 //zapisz dana OxbF do EEPROM-u pod adres = 2 //czytaj EEPR0M[1] //i wyświetl na LED-ach //czekaj ok. 1 s //czytaj EEPROM[2] //i wyświetl na LED-ach //czekaj ok. 1 s //zapetl program
}
J a k w i d a ć , rozwiązanie tego s a m e g o p r o b l e m w j ę z y k u C j e s t znacznie prost sze. O d p a d a ż m u d n e o p e r o w a n i e na pojedynczych bitach rejestrów, spraw dzanie w a r u n k ó w gotowości E E P R O M - u d o zapisu itp. O c z y w i ś c i e wszyst kie te operacje są w y k o n y w a n e w p r o c e d u r a c h bibliotecznych j ę z y k a C.
M i k r o k o n t r o l e r y A V R nie są niestety p o z b a w i o n e
pewnych
p r z y k r y c h dla u ż y t k o w n i k a w a d . Jedną z nich j e s t brak z a b e z pieczenia przed sytuacją, w której w takcie w y k o n y w a n i a zapi su d o E E P R O M - u nastąpi z e r o w a n i e mikrokontrolera. Cykl za p i s u zostanie d o k o ń c z o n y normalnie, ale rejestr adresu zostanie w y z e r o w a n y . D a n a zostanie zapisana pod adres
wskazany
i p o d adres Ó, c o oczywiście j e s t z a c h o w a n i e m n i e p o p r a w n y m . Z tego p o w o d u zaleca się n i e w y k o r z y s t y w a n i e z e r o w e g o adre su pamięci E E P R O M , m i m o że o p i s y w a n a sytuacja wydaje się b y ć mało p r a w d o p o d o b n a .
Zapewnienie prawidłowych warunków pracy pamięci EEPROM Pamięć E E P R O M d o p r a w i d ł o w e g o działania w y m a g a stabilnego napięcia zasilającego o wartości mieszczącej się w d o p u s z c z a l n y m przedziale. 2 jed nej strony zależy od tego prawidłowe w y t w o r z e n i e napięć programujących, z drugiej zaś obniżone napięcie zasilające m o ż e mieć s z k o d l i w y wpływ na działanie mikrokontrolera. W efekcie mogą
powstawać
nieprawidłowości
pracy, w szczególności związane z d o s t ę p e m d o pamięci E E P R O M . Aby uchronić się od opisanych p r o b l e m ó w zaleca się s t o s o w a n i e j e d n e j z następu jących zasad: 1. U t r z y m y w a ć a k t y w n y stan linii R E S E T mikrokontrolera p r z e z czas ustala nia się napięcia zasilającego. Najpopularniejszą metodą j e s t wykorzystywa nie w aplikacjach specjalizowanych układów z e r o w a n i a (np. D S 1 8 1 3 ) . Przy ich doborze trzeba pamiętać, aby miały o d p o w i e d n i p o z i o m a k t y w n y sygnału zerującego. Mikrokontrolery A V R są z e r o w a n e p o z i o m e m niskim. Układy takie są n a z y w a n e Brown-out
Detector
( B O D ) i zapewniają prawidłowe ge
nerowanie sygnału zerującego oraz kontrolę obniżenia n a p i ę c i a zasilającego. Wiele dodatkowych informacji m o ż n a znaleźć w n o c i e A V R 1 8 0 dostępnej na internetowej stronie Atmela
(www.atmel.com).
2. G d y napięcie zasilające jest o b n i ż o n e , należy u t r z y m y w a ć mikrokontroler w stanie uśpienia. Rozwiązanie takie zapobiegnie n i e p r a w i d ł o w e m u wykona niu rozkazów, skutecznie zabezpieczając k o m ó r k i p a m i ę c i E E P R O M przed niekontrolowanymi z m i a n a m i . 3. Stałe w y k o r z y s t y w a n e przez p r o g r a m należy p r z e c h o w y w a ć w pamięci Flash (w pamięci p r o g r a m u ) , chroniąc j e t y m s a m y m przed jakimikolwiek zmianami w y w o ł a n y m i przez źle działający p r o g r a m . P a m i ę ć Flash nie może być b o w i e m m o d y f i k o w a n a przez C P U (nie d o t y c z y mikrokontrolerów ATmega).
8.
Układ transmisji szeregowej (UART) W wielu przypadkach system oparty na mikrokontrolerze musi k o m u n i k o w a ć się z j a k i m ś urządzeniem zewnętrznym. Aktualnie c o r a z powszechniej w y k o rzystuje się d o tego celu interfejs U S B , ale w dalszym ciągu klasyczny interfejs - j a k i m jest R S 2 3 2 - cieszy się ogromną popularnością wśród użytkowników. Dlatego też, wiele współczesnych mikrokontrolerów m a w b u d o w a n e odpo wiednie bloki funkcjonalne d o realizacji asynchronicznej (niekiedy również synchronicznej) transmisji szeregowej. Określane są o n e m i a n e m U A R T (Universal Asynchronous
Receiver
and Transmitter).
Stanowią one kompletne roz
wiązanie interfejsu pod w z g l ę d e m logicznym, j e d n a k gdy transmisja m a b y ć prowadzona
na większe odległości wymagają
układów dopasowujących
zastosowania
zewnętrznych
poziom sygnałów d o standardu R S 2 3 2 .
Można
z nich r e z y g n o w a ć w przypadku wieloprocesorowych aplikacji, w których po szczególne jednostki pracują w swoim bezpośrednim sąsiedztwie. Większość urządzeń obsługujących transmisję szeregową wykorzystuje interfejs R S 2 3 2 , w którym logicznej j e d y n c e przypisano wartość napięcia z przedziału od - 3 d o - 1 2 V, zaś logicznemu zeru przypisano wartość napięcia z przedziału od 3 d o 12 V. Sygnały na liniach transmisyjnych nie p o w i n n y osiągać wartości od - 3 d o + 3 V. Najpopularniejszym
układem d o realizacji takiego interfejsu jest
M A X 2 3 2 lub j e g o odmiany. W niektórych przypadkach zadowalające może być wykonanie konwertera poziomów na tranzystorze. M i m o popularności te g o typu transmisji nie wszystkie mikrokontrolery A V R wyposażono w U A R T (patrz porównanie parametrów w dodatku A ) . W takich przypadkach konieczna jest niestety całkowicie programowa j e g o implementacja. Stanowi to p e w n e utrudnienie,
ale nie jest niemożliwe d o zrobienia.
Opisywany
tu
układ
A T 9 0 S 2 3 1 3 na szczęście m a w swojej architekturze dupleksowy blok U A R T u, d o którego dostęp zapewniają wydzielone rejestry nadajnika i odbiornika. P o d s t a w o w e cechy U A R T - u w b u d o w a n e g o w mikrokontrolery A V R to: - w b u d o w a n y generator p o d s t a w y czasu dla transmisji szeregowej, - m o ż l i w o ś ć uzyskiwania w y s o k i c h prędkości transmisji dla niskich częstot liwości rezonatora k w a r c o w e g o , - d a n a o długości 8 lub 9 bitów, - układ redukcji s z u m ó w zakłócających transmisję, - detekcja nadpisania zawartości bufora odbiornika, - detekcja błędu ramki, - detekcja b ł ę d n e g o bitu startu, - trzy w y d z i e l o n e przerwania d o obsługi zdarzeń: z a k o ń c z e n i a transmisji da nej, opróżnienia bufora n a d a w c z e g o , zapełnienia bufora odbiorczego.
8.1.
Budowa i działanie nadajnika UART Schemat b l o k o w y układu nadajnika p r z e d s t a w i o n o na r y s u n k u 8 . 1 . Nadawa nie jest inicjowane przez zapisanie wysyłanej danej d o rejestru nadajnika U D R (UART l/O Register).
Dana ta jest następnie p r z e n o s z o n a d o wyjścio
w e g o rejestru przesuwającego. Jeśli zapis d o U D R nastąpi p o t y m , gdy bit stopu poprzedniego znaku opuści rejestr przesuwający, to rejestr ten jest ła d o w a n y bezpośrednio nową daną. Jeśli zapis d o U D R nastąpi przed w y s ł a n i e m bitu stopu p o p r z e d n i e g o znaku, to n o w a dana czeka w rejestrze U D R na przepisanie d o w y j ś c i o w e g o rejestru przesuwającego d o m o m e n t u , gdy bit stopu p o p r z e d n i e g o znaku zostanie wy słany. Rejestr przesuwający m a długość 10 (lub 11) bitów (8 lub 9 bitów da nej + znak startu + znak stopu). W chwili, g d y rejestr przesuwający nadajnika jest pusty, n o w a dana j e s t przenoszona d o niego z rejestru U D R i jednocześ nie zostaje ustawiony bit U D R E (UART Data Register w rejestrze U S R (UART Status Register), Magistrata danych
XTAL-
BAUOxl6 Generator prędkości transm.
1:16
Rys. 8.1. Schemat blokowy nadajnika układa UART
Empty)
znajdujący się
c o j e s t s y g n a ł e m g o t o w o ś c i nadaj-
Rejestr danych UART (UDR)
nika d o przyjęcia nowej danej. Jednocześnie z przenoszeniem znaku z rejestru U D R d o rejestru przesuwającego bit 0 tego rejestru j e s t zerowany (będzie to bit startu), a bit 9 (lub 10) jest ustawiany (będzie to bit stopu). Jeśli wybrano 9-bitową długość słowa, to bit T X B 8 z rejestru U C R (UART Control Register)
jest
przenoszony d o bitu 9 rejestru przesuwającego. D ł u g o ś ć słowa określa się na dając odpowiednią wartość bitowi C H R 9 znajdującemu się w rejestrze U C R . Dla słowa 9-bitowego bit ten powinien b y ć ustawiony („1"). Przesuwanie bi tów w rejestrze wyjściowym jest taktowane zegarem transmisyjnym (Baud Ra tę Clock). Jest on niezależny od zegara taktującego C P U . Bity nadawanego znaku pojawiają się na wyprowadzeniu T X D mikrokontrolera. Najpierw bit startu, potem bity danej począwszy od najmniej znaczącego (LSB). N a końcu jest wysyłany bit stopu. Kiedy bit stopu opuści rejestr przesuwający, zostaje do niego załadowana n o w a dana z rejestru U D R (jeśli wcześniej została t a m umieszczona). Podczas ładowania bit U D R E jest ustawiony. Jeśli w rejestrze U D R nie m a kolejnego znaku d o wysiania, to bit U D R E zostaje ustawiony w chwili wyjścia poprzedniego bitu stopu z rejestru przesuwającego i pozostaje w t y m stanie d o momentu kolejnego wpisu d o rejestru U D R . Jeśli nie nastąpi zapisanie nowej danej, gdy bit stopu występuje na wyjściu T X D przez czas trwania transmisji j e d n e g o bitu, to zostanie ustawiona flaga TX Compiete
Fłag
(TXC) znajdująca się w rejestrze USR. Nadajnik m o ż e b y ć włączany lub w y łączny za pomocą bitu T X E N z rejestru U C R . Jego ustawienie („1") uaktywnia nadajnik. Jeśli bit ten będzie wyzerowany („0"), wyprowadzenie P D 1 może b y ć wykorzystywane j a k o wejście/wyjście ogólnego przeznaczenia. Ustawienie T X E N powoduje c a ł k o w i t e p r z e c h w y c e n i e funkcji w y p r o w a d z e n i a P D 1 przez nadajnik, niezależnie o d ustawienia bitu D D D 1 w rejestrze D D R D .
Ustawienie bitu C H R 9 w rejestrze U C R p o w o d u j e , że n a d a w a n e i o d b i e r a n e znaki mają długość 9 b i t ó w , plus bit startu i bit stopu. M u s i m u b y ć n a d a n a o d p o w i e d n i a wartość przed zainicjowaniem transmisji. Dziewiąty bit d o w y słania, t o T X B 8 znajdujący się w rejestrze U C R .
8.2.
Budowa i działanie odbiornika UART S c h e m a t b l o k o w y układu odbiornika przedstawiono na r y s u n k u 8.2. Wejście odbiornika transmisji szeregowej jest połączone za p o m o c ą o d p o w i e d n i c h układów przełączających z w y p r o w a d z e n i e m P D 0 / R X D . W e w n ę t r z n a logika próbkuje sygnał
16 razy w c i ą g u czasu t r w a n i a transmisji j e d n e g o bitu.
W czasie, gdy linia znajduje się w stanie idle ( o c z e k i w a n i e na bit startu), po j e d y n c z a p r ó b k a o wartości „ 0 " j e s t interpretowana j a k o opadające zbocze sygnału wejściowego. Powoduje to zainicjowanie sekwencji działań związa nych z wykryciem bitu startu. Przyjmijmy, ż e p r ó b k a ta m a n u m e r 1. Tak więc p o zmianie stanu linii odbiorczej ( R X D ) z 1 n a 0 o d b i o r n i k analizu j e 8, 9 i 10 próbkę. Jeśli c o najmniej dwie z nich będą miały wartość' „ 1 " , wy krycie bitu startu jest a n u l o w a n e . Sytuację taką uznaje się za zakłócenie im pulsowe i cała powyższa procedura jest w z n a w i a n a od początku. W przeciw n y m razie uznaje się, że odebrano bit startu. P r ó b k o w a n i e kolejnych bitów od bywa się w podobny sposób. Wartości c o najmniej d w ó c h j e d n a k o w y c h próbek spośród 8, 9 i 10 decydują o wartości odebranego bitu. J e d n a k o w e próbki nie muszą przy tym występować kolejno p o sobie. Sekwencja n p . 101 j e s t interpre towana j a k o bit o wartości „ 1 " . Odebrany bit „ w c h o d z i " d o rejestru przesuwa jącego. Próbkowanie wejścia R X D zilustrowano na r y s u n k u 8.3.
Magistrala danych
XTAL-
Generaior prędkości transm.
8AUDx16 1:16
Rejestr danych UART (UDR)
BAUD STORĘ UDR
Bufor wejściowy PDO
RXD
Blok detekcji bitów
Rejestr sterujący UART (UCR)
Magistrala danych
Rys. 8.2. Schemat blokowy odbiornika układu UART
>
10(H)-bitowyrejestr przesuwny odbiornika
RXD
sygnału przez 11M11liiiItllllllltlllllllllltllllliri 111 illllllllJlllltlllllllllllinIII•lllllllltItllllMiritlllJIllfllilllJlItllJIllIllIJJJJIlItlłJlIlllIłlllllltlllIIII• IL11 odbiornik UART Rys. 8.3. Próbkowanie danych odbieranych przez odbiornik UART-u
U k ł a d o d b i o r n i k a liczy o d b i e r a n e bity. O s t a t n i m b i t e m ramki jest bit stopu, który p o w i n i e n mieć wartość „ 1 " . Jest o n r o z p o z n a w a n y w z n a n y j u ż sposób. Jeśli o k a ż e się, ż e d w i e l u b trzy próbki (spośród 8, 9 i 10) bitu stopu są r ó w n e „ 0 " , p o d e j m o w a n a jest decyzja o wystąpieniu błędu ramki i ustawiana j e s t flaga Framing
Error ( F E ) w rejestrze statusu U S R (UART Status
Register).
Przed o d c z y t e m danej z rejestru U D R programista powinien z a w s z e spraw dzić, stan tej flagi, a b y u p e w n i ć się, czy nie wystąpi! błąd transmisji. P o pra w i d ł o w y m l u b b ł ę d n y m odebraniu bitu stopu dana j e s t p r z e p i s y w a n a z rejest r u przesuwającego d o rejestru U D R . J e d n o c z e ś n i e j e s t ustawiana flaga R X C w rejestrze U S R . Rejestr U D R to de facto
fizycznie d w a oddzielne rejestry
dla nadajnika i odbiornika. P o d c z a s odczytu U D R j e s t udostępniany odbior czy rejestr d a n y c h , podczas z a p i s y w a n i a natomiast j e s t udostępniany n a d a w czy rejestr d a n y c h . Jeśli w y b r a n o 9-bitowe s ł o w o d a n y c h (bit C H R 9 w rejes trze U C R m a wartość „ 1 " ) , bit R X B 8 w rejestrze U C R jest ładowany 9 b i t e m z rejestru przesuwającego. Dzieje się to w tej samej chwili, c o przepisywanie danej z rejestru przesuwającego d o rejestru U D R . T a k s k o m p l e t o w a n a d a n a p o w i n n a b y ć odczytana z rejestru U D R przed o d e b r a n i e m następnej. Jeśli t a k się nie stanie, to w rejestrze U S R jest ustawiana flaga OverRun
( O R ) , sygna
lizując błąd nadpisania danej. W takiej sytuacji ostatnia dana s k o m p l e t o w a n a w rejestrze przesuwającym nie p o w i n n a b y ć (teoretycznie) przenoszona d o U D R . Flaga O R j e s t buforowana i z a w s z e a k t u a l i z o w a n a p o odczytaniu pra widłowej danej z rejestru U D R . Programista p o w i n i e n z a w s z e s p r a w d z a ć stan flagi O R p o odczytaniu rejestru U D R . W y s t ę p o w a n i e b ł ę d ó w nadpisania m o że b y ć konsekwencją zbyt dużej prędkości transmisji lub n a d m i e r n y m obcią ż e n i e m j e d n o s t k i centralnej i n n y m i zadaniami o w y ż s z y m priorytecie. W y z e rowanie ( „ 0 " ) bitu R X E N w rejestrze U C R p o w o d u j e z a b l o k o w a n i e odbiorni ka. W y p r o w a d z e n i e P D 0 / R X D m o ż e b y ć w ó w c z a s w y k o r z y s t y w a n e j a k o wejście/wyjście o g ó l n e g o przeznaczenia. W p r z y p a d k u ustawienia („1") bitu C H R 9 w rejestrze U C R , dziewiąty bit o d e b r a n e g o z n a k u to R X B 8 znajdujący się w rejestrze U C R .
Włączenie
odbiornika
powoduje
całkowite
przechwycenie
funkcji w y p r o w a d z e n i a PDO przez odbiornik, niezależnie o d ustawienia bitu DDDO w rejestrze D D R D .
8.3.
Sterowanie transmisją D o obsługi transmisji szeregowej poprzez U A R T służą cztery rejestry specjalne.
UDR (UART HO Dała Register) - rejestr danych nadawanych/odbieranych przez UART - $0C Bit S0C($2C)
I
MSB
|
Otoyt/Zapis WW Wartość początkowa o R/W - oznacza odczyt/zapis
I R/W 0
I
I
RM 0
I
R/W
R/W
I R/W
0
0
1 R/W 0
0
L
S
B
i
"DR
0
Rejestr U D R to fizycznie d w a oddzielne rejestry występujące p o d tym sa m y m adresem w przestrzeni I/O. P o d c z a s zapisu d a n e są k i e r o w a n e do rejes tru danych wysyłanych (UART
Transmit
Dała
z rejestru danych odbieranych (UART Receive
Register). Data
O d c z y t następuje
Register).
USR (UART Status Register) - rejestr stanu UART-u - $0B Bit 7 6 $0B($2S) | RXC | TXC | UORE Odczyt/Zapis R R/W R Wartość początkowa 0 0 1 R -oznacza odczyt. R/W - oznacza od czyi/zapis
5 |
FE
4 |
3 OR R
0
0
2
l R
1 I
-
R 0
I R
0
0 R 0
l USR
Rejestr U S R może być tylko o d c z y t y w a n y . Sygnalizuje stan układu UART. B 7 - R X C (UART Receive
Comptete):
flaga
s y g n a l i z u j ą c a o d e b r a n i e zna
ku przez odbiornik. Znacznik ten jest ustawiany („1") w c h w i l i , g d y o d e b r a n a d a n a jest przeno szona z odbiorczego rejestru przesuwającego d o rejestru U D R . Ustawienie bitu R X C o d b y w a się niezależnie od e w e n t u a l n e g o w y k r y c i a błędów trans misji. Jeśli bit R X C I E z rejestru U C R jest u s t a w i o n y ( „ 1 " ) , to ustawienie fla gi R X C będzie o z n a c z a ł o zgłoszenie przerwania UART Receive
Complete,
oznaczającego, że w rejestrze U D R znajduje się d a n a d o o d c z y t u . Bit RXC jest automatycznie k a s o w a n y w chwili odczytu rejestru U D R . Jeśli transmisje prowadzi się wykorzystując system przerwań, to p r o c e d u r a obsługi przerwa nia UART Receive
Complete
p o w i n n a odczytać rejestr U D R w c e l u skasowa
nia flagi R X C . W p r z e c i w n y m razie, z a n i m zostanie z a k o ń c z o n a aktualna procedura obsługi wystąpi kolejne przerwanie. B 6 - T X C (UART Transmit Complete): wysyłania danej przez nadajnik.
flaga
s y g n a l i z u j ą c a zakończenie
Znacznik ten jest ustawiany („1") w chwili, gdy cała n a d a w a n a d a n a (włączając bit stopu) zostanie wysunięta z nadawczego rejestru przesuwającego i nie ma
nowej danej zapisanej w rejestrze U D R . Znacznik ten jest szczególnie przydat ny podczas obsługi transmisji półdupleksowej, w której bezpośrednio po wy słaniu znaku trzeba przechodzić „na odbiór" i zwalniać Unię transmisyjną. Jeśli bit T X C I E z rejestru U C R jest ustawiony („1"), t o ustawienie flagi T X C będzie oznaczało zgłoszenie przerwania UART Transmit Complete,
oznaczającego, ż e
w rejestrze U D R nie ma danej d o wysłania. Bit T X C jest automatycznie zero wany w chwili wykonania skoku d o odpowiedniego wektora przerwania. Moż na też g o z e r o w a ć poprzez wpisanie logicznej j e d y n k i („1") d o tego bitu: sbi
uci".txc
; zeru j flagę TXC w rejestrze UCR
B 5 - U D R E ( U A R T Data Register
Empty);
flaga
sygnalizująca opróżnie
nie bufora U A R T . Bit U D R E jest ustawiany („1") w chwili przenoszenia danej z rejestru U D R d o nadawczego rejestru przesuwającego. Sygnalizowana jest tym s a m y m gotowość nadajnika do wczytania nowej danej przeznaczonej d o wysiania. Jeśli bit U D R I E w rejestrze U C R jest ustawiony („1"), t o przerwanie UART Transmit Complete będzie m o g ł o być obsługiwane dopóty, dopóki bit U D R E jest ustawiony. Flaga U D R E jest zerowana przez zapisanie rejestru U D R . Jeśli transmisję prowadzi się wykorzystując system przerwań, to procedura obsługi przerwania UART Data Register Empty musi zapisywać rejestr U D R w celu skasowania flagi U D R E . W p r z e c i w n y m razie, zanim zostanie zakończona aktualna procedura obsługi wystąpi kolejne przerwanie. Po restarcie mikrokontrolera flaga U D R E jest ustawiana („1") sygnalizując gotowość nadajnika. B 4 - F E (Framming
Error): flaga s y g n a l i z u j ą c a b)ąd r a m k i .
R a g a F E j e s t ustawiana, g d y zostanie wykryty błąd r a m k i (np. w p r z y p a d k u r o z p o z n a n i a zerowej wartości bitu stopu), z e r o w a n a z a ś automatycznie p o odebraniu p r a w i d ł o w e g o bitu stopu. B 3 - O R (OverRun):
flaga
sygnalizująca n a d p i s a n i e d a n y c h w rejestrze
odbiornika. Flaga O R j e s t ustawiana, jeśli zostanie w y k r y t e nadpisanie danych w rejest rze o d b i o r n i k a ( n p . gdy d a n a znajdująca się aktualnie w rejestrze U D R nie zostanie o d c z y t a n a przed w p r o w a d z e n i e m n a s t ę p n e g o znaku d o odbiorczego rejestru przesuwającego). Z n a c z n i k O R jest z e r o w a n y p o przesianiu odebra nej danej d o rejestru U D R . B2...0 - z a r e z e r w o w a n e . T e bity są z a r e z e r w o w a n e w układzie A T 9 0 S 2 3 1 3 i z a w s z e o d c z y t y w a n e j a k o zero.
UCR [UART Control Register) -rejestr sterujący UART-u - $ 0 A s
4
7 6 A(S2A) l RXCIE | TXCIE | UDR1E I Odczyt/Zapis R W R / W R / W R Wartość początkowa 0 0 0 R - oznacza odczyt. W - oznacza zapis, R/W - oznacza S0
B 7 - R X C I E (RX Compłete
3
2
1
. . , , RXSN 1 TXEN I CHR9 | RXB8 / W R / W R / W R 0 0 0 1 odczyt/zapis
B i t
Interrupt
Enable):
. |
0
TXB8 W 0
, | UCR
bit z e z w o l e n i a n a przerwa
nie od odbiornika ( p o o d e b r a n i u danej). Ustawienie („1") bitu R X C I E zezwala na przyjęcie p r z e r w a n i a Receive plete Interrupt,
Com
zgłaszanego automatycznie przez U A R T p o odebraniu danej
i sygnalizowanego ustawieniem flagi R X C w rejestrze U S R . Przerwanie zo stanie obsłużone pod w a r u n k i e m g l o b a l n e g o z e z w o l e n i a na przerwania. B6 - T X C I E (TX Complete
Interrupt
Enable):
bit z e z w o l e n i a n a przerwa
nie od nadajnika (po w y s i a n i u danej). Ustawienie („1") bitu T X C I E zezwala na przyjęcie przerwania Transmit
Comple
te Interrupt, zgłaszanego automatycznie przez U A R T p o zakończeniu nadawania danej i sygnalizowanego ustawieniem flagi T X C w rejestrze USR. Przerwanie zostanie obsłużone pod warunkiem globalnego zezwolenia na przerwania. B 5 - UDRJJE (UART Data Register
Empty Interrupt
Enable):
bit zezwolenia
na przerwanie od nadajnika (po opróżnieniu bufora n a d a j n i k a U D R ) . Ustawienie („1") bitu U D R I E zezwala na przyjęcie p r z e r w a n i a UART Data Register
Empty Interrupt,
zgłaszanego a u t o m a t y c z n i e p r z e z U A R T p o opróż
nieniu bufora nadajnika i s y g n a l i z o w a n e g o u s t a w i e n i e m flagi U D R E w rejes trze U S R . Przerwanie zostanie obsłużone p o d w a r u n k i e m g l o b a l n e g o zezwo lenia na przerwania. B 4 - R X E N (Receher
Enable): bit włączający/wyłączający odbiornik UART.
Ustawienie („1") bitu R X E N powoduje włączenie o d b i o r n i k a U A R T - u . Jeśli bit R X E N m a wartość „ 0 " odbiór jest n i e m o ż l i w y , a flagi R X C , O R i FE nie mogą stawać się a k t y w n e (są ustawiane a u t o m a t y c z n i e p o wystąpieniu odpo wiednich zdarzeń). Jeśli flagi te zostały w czasie pracy u s t a w i o n e , to wyzero wanie bitu R X E N nie w p ł y w a na nie (są nadal u s t a w i o n e ) . B 3 - T X E N (Transmitter Enable): bit włączający/wyłączający odbiornik UART. Ustawienie („1") bitu T X E N powoduje włączenie nadajnika U A R T . Jeśli bit T X E N zostanie w y z e r o w a n y w chwili, gdy nie została j e s z c z e zakończona transmisja, to nadajnik nie zostanie w y ł ą c z o n y natychmiast, lecz dopiero po c a ł k o w i t y m zakończeniu wysyłania bieżącej danej ( w y c h o d z ą c e j z szerego w e g o rejestru przesuwającego nadajnika) i danej znajdującej s i ę w rejestrze U D R (oczekującej na wysłanie).
B 2 - C H R 9 (9 Bit Characters):
bit ustalający d ł u g o ś ć d a n e j n a d a w a n e j /
odbieranej. Ustawienie („1") bitu C H R 9 powoduje przyjęcie 9-bitowej długości danej na dawanej i odbieranej plus bit stopu i bit startu. Dziewiąty bit odebranego znaku jest odczytywany z rejestru U C R (bit R X B 8 ) . Dziewiąty bit transmitowanego znaku jest zapisywany w rejestrze U C R (bit T X B 8 ) . B I - R X B 8 (Receive
Data Bit 8)t ó s m y ( n a j b a r d z i e j z n a c z ą c y ) bit o d e b r a
nej danej. Kiedy bit C H R 9 j e s t ustawiony ( „ 1 " ) , R X B 8 zawiera najstarszy bit odebranej danej. BO - T X B 8 (Transmit
Data Bit 8): ó s m y ( n a j b a r d z i e j z n a c z ą c y ) bit n a d a
wanej danej. Kiedy bit C H R 9 j e s t ustawiony ( „ 1 " ) , T X B 8 z a w i e r a najstarszy bit n a d a w a nej danej.
8.4.
Generator podstawy czasu transmisji [Baud Rate Generator) Z e g a r synchronizujący pracę U A R T jest wytwarzany przez o d p o w i e d n i e p o dzielenie częstotliwości oscylatora s y s t e m o w e g o . D o obliczenia j e g o para m e t r ó w stosuje się poniższą formułę: BAUD = f gdzie:
CK
/16-(UBRR+1)
B A U D - p r ę d k o ś ć transmisji [b/s], fcK - częstotliwość oscylatora taktującego C P U , U B R R - wartość rejestru U B R R zapewniająca transmisję z ustaloną prędkością ( m o ż e p r z y j m o w a ć wartości o d 0 d o 255).
J a k w i d a ć , ustawianie prędkości tylko poprzez zapisanie rejestru U B R R p o ciąga za sobą p e w n e niedogodności. T a k a dyskretna forma regulacji z 2 5 6 (tylko) m o ż l i w y m i k r o k a m i m o ż e budzić o b a w y c o d o jej skuteczności. Istot nie, nie da się w ten sposób uzyskać dowolnej prędkości transmisji dla do wolnej wartości z a s t o s o w a n e g o kwarcu. Pamiętajmy j e d n a k , że najczęściej j e s t s t o s o w a n a j e d n a z kilku standardowych prędkości transmisji przewidzia nych dla interfejsu R S 2 3 2 . Z a s a d a prowadzenia transmisji
asynchronicznej
dopuszcza r ó w n i e ż pewną tolerancję częstotliwości zegara transmisyjnego. Z a k ł a d a się, że 1% błąd określenia tej prędkości nie powinien p o w o d o w a ć praktycznych p r o b l e m ó w . G d y b y p o m i m o tego nie u d a ł o się obliczyć para-
m e t r u U B R R , należy p r ó b o w a ć d o b r a ć c z ę s t o t l i w o ś ć r e z o n a t o r a kwarcowe g o . Wiąże się to niestety z e w e n t u a l n y m i p ó ź n i e j s z y m i p r o b l e m a m i z obli c z e n i a m i czasu w p r o g r a m i e , j e ś l i z o b l i c z e ń w y n i k n i e „ n i e r ó w n a " wartość k w a r c u . Z e s t a w i e n i e z t a b l i c y 8.1 ułatwi o d p o w i e d n i d o b ó r w s z y s t k i c h para m e t r ó w określających p r ę d k o ś ć transmisji,. W y t ł u s z c z o n o w s z y s t k i e pozycje, w których obliczony błąd j e s t mniejszy n i ż
2%.
Tab. 8.1. Dobór parametru UBRR dla standardowych prędkości transmisji i kilku typowych rezonatorów kwarcowych Prędkość
1 MHz
transmisji
Stąd
1.8432 MHz
Błąd [%]
2 MHz
Btąd t%]
2,4576 MHz
f%]
Btąd [%]
2400
UBRR=25
0,2
UBRR=47
0,2
UBRR=12
0.2
UBRR=23
0.0 0,0
UBRR=51
4800
UBRR=25
0,2
UBRfi=63 UBRR=31
0.0
9600
UBRR=6
7.5
UBRR=11
0,0
UBRR=12
0,2
UBRR=15
0,0
14400
UBRR=3
7,8
UBRR=7
0,0
UBRR=8
3,7
UBRR=10
3,1
19200
UBRR=2
7,8
UBRR=5
0,0
UBRR=6
7.5
UBRR=7
0,0
28800
UBRR=1
7,8
UBRR=3
0,0
UBRR=3
7,8
UBRR=4
6,3
38400
UBRR=1
22,9
U8RR=2
0.0
UBRR=2
7,8
UBRR=3
0.0
57600
UBRR=0
7,8
UBRR=1
0,0
UBRR = 1
7.8
UBRR=2
12,5
76800
UBRR=0
22.9
UBRR=1
33,3
UBRR = 1
22.9
UBRR=1
0.0
115200
U8RR-0
84.3
U8RR=0
0,0
UBRR=0
7,8
NBRR=0
25,0
3,2768 MHz
Błąd
3.6864 MHz
Błąd 1%1
4 MHz
Błąd
4,608 MHz
Btąd !%]
Prędkość transmisji
l%]
m
2400
UBRR=84
0,4
UBRR=95
0,0
UBRR=103
0,2
UBRR=42
0,8
UBRR=47
0.0
0,2
9600
UBRR=20
1,6
UBRR=23
0,0
UBRR=51 U8RR=25
UBRR=119 UBRR=59
0,0
4800
0,2
UBRR=29
0,0
14400
UBRR=13
1.6
UBRR=15
0,0
UBRR=16
2.1
UBRR=19
D.O
19200
U8RR = 10
3.1
UBRR=11
0.0
UBRR=12
0,2
UBRR=14
0,0
0,0
28800
UBRR=6
1.6
UBRR=7
0,0
U8RR=8
3,7
UBRR=9
0,0
38400
U8RR=4
6.3
UBRR=5
0,0
NBRR=6
7.5
UBRR=7
6.7
0,0
57600
UBRR = 3
12,5
UBRR=3
7.8
UBRR ==4
UBRR=2
12,5
UBRR=3 UBRR=2
0,0
76800
0,0
UBRR=2
7,8
UBRR=3
6.7
115200
UBRR=1
12.5
UBRR=1
o.o
UBRR = 1
7,8
UBRR=2
20,0
Prędkość transmisji
7,3728 MHz
Błąd [%]
8 MHz
Błąd [%]
9,216 MHz
Błąd [%]
11.059 MHz
Błąd
2400
UBRR=191
0,0
UBRR=207
0,2
UBRR=239
0,0
UBRR=287
_
4800
UBRR=95
0,0
0,0
UBRR-143
U8RR=47
0,0
0,2 0.2
UBRR=119
9600
U8RR=103 U BRR=51
UBRR=S9
UBRR=71
14400
UBRR=31
UBRR=34
0,8
UBRR=39
UBRR=47
0,0
19200
UBRR=23
0.0 0,0
0,0 0,0
0,0 0,0
UBRR=25
0,2
UBRR=29
0,0
UBRR=35
0,0
28800
UBRR=15
0,0
UBRR=16
2,1
UBRR=19
0,0
U8HR=23
0.0
38400
UBRR=11
0.0
UBRR=12
0,2
0,0
UBRR=17
0,0
57600
UBRR=7
0.0
UBRR=8
3.7
UBRR=14 UBRR=9
0,0
UBRR=11
0,0
76800
UBRR=5
0,0
UBRR=6
7,5
UBRR=7
6,7
UBRR=8
0,0
115200
UBRR=3
0,0
UBRR=3
7,8
UBRR=4
0.0
UBRR=5
0,0
UBRR (UART Baud Rate Register) - rejestr wyboru prędkości transmisji UART-u - $09 7 Bit S09(S29) | MSB | R/W Odczyt/Zapis Wartość początkowa 0 R/W - oznacza odczyt/zapis
6
5
4
3
Z
1
RAN
R/W
R/W
R/W
R/W
R/W
0 LSB R/W
0
0
0
0
0
0
0
Rejestr U B R R zawiera 8-bitowy p a r a m e t r określający p r ę d k o ś ć transmisji szeregowej, z g o d n i e z p r z e d s t a w i o n y m i wyżej obliczeniami.
U k ł a d U A R T mikrokontrolera A T 9 0 S 2 3 1 3 m o ż e utracić syn chronizację, jeśli podczas wyłączenia odbiornika na linii R X D b ę d z i e w y s t ę p o w a ! stan niski. Dzieje się tak, g d y ż w e w n ę t r z n a logika bloku U A R T w y k r y w a rozpoczęcie transmisji (bit star tu) nawet w ó w c z a s , gdy U A R T nie j e s t włączony. W takiej sy tuacji pierwszy odebrany bajt p o włączeniu
UART
będzie
błędny. A b y uchronić się o d takiego p r z y p a d k u należy z a p e w nić u t r z y m y w a n i e linii R X D w stanie w y s o k i m podczas wyłą czenia interfejsu U A R T .
9.
Komparator analogowy M a r z e n i e m k a ż d e g o konstruktora j e s t mikrokontroler w y p o s a ż o n y w prze twornik analogowo-cyfrowy. Niestety, często okazuje się, że wykonanie ta k i e g o układu chociaż m o ż l i w e , nie j e s t proste. Z a i m p l e m e n t o w a n i e dobrego przetwornika A/C w strukturze mikrokontrolera jest na o g ó ł okupione dość z n a c z n y m wzrostem kosztu wykonania układu. Minimalizacja wzajemnego o d d z i a ł y w a n i a na siebie b l o k ó w analogowych i cyfrowych w j e d n y m układzie stanowi niemałe w y z w a n i e dla biur konstruk cyjnych producentów. Rezygnacja z tego k o m p o n e n t u znajduje uzasadnienie, g d y ż w wielu p r z y p a d k a c h problem braku p r z e t w o r n i k a m o ż n a obejść pew n y m i metodami. W p r a w d z i e specjalizowane, „ a n a l o g o w e " aplikacje nie obędą się bez p r a w d z i w e g o przetwornika A / C , lecz w mniej wymagających sys temach można d o c e l ó w przetwarzania a n a l o g o w o - c y f r o w e g o
zastosować
komparator analogowy. Okazuje się to na tyle p r o s t y m i tanim rozwiązaniem, że jest stosowane w wielu b a r d z o p o p u l a r n y c h m i k r o k o n t r o l e r a c h . Kompara tor taki m o ż e być oczywiście również w y k o r z y s t y w a n y d o i n n y c h zadań. Większość mikrokontrolerów A V R - w t y m A T 9 0 S 2 3 1 3 -
m a w swojej
strukturze komparator analogowy (patrz zestawienie w d o d a t k u A ) . Jego za daniem jest p o r ó w n y w a n i e d w ó c h napięć d o p r o w a d z o n y c h d o wejścia nieodwracającego A1N0 (PBO) i wejścia odwracającego A I N 1 ( P B l ) (rysunek 9.1). Wyjście komparatora A C O (Analog
Comparator
Output)
jest w stanie
w y s o k i m („1"), jeśli napięcie na wejściu n i e o d w r a c a j ą c y m AINO jest większe od napięcia na wejściu odwracającym A I N 1 . Wyjście k o m p a r a t o r a może być wykorzystywane do w y z w a l a n i a funkcji p r z e c h w y t y w a n i a Timera/Licznikal. W systemie przerwań mikrokontrolera A T 9 0 S 2 3 1 3 p r z e w i d z i a n o specjalny wektor przerwania przydzielony dla k o m p a r a t o r a a n a l o g o w e g o , równy $00A.
PBO (AINO)
ACIE
ACD ACO
Przerwanie od komparatora analogowego
Wybór warunków zgłoszenia przerwania
1 ACIS1
T
ACl ACIC
ACISO Do mulitpleksera TC1 CAPTURE TRIGGER
Rys. 9.1. Schemat blokowy komparatora analogowego
Przerwanie j e s t g e n e r o w a n e na wyjściu k o m p a r a t o r a , przy c z y m zgłoszenie przerwania m o ż e n a s t ę p o w a ć p o zmianie stanu na j e g o wyjściu z niskiego na w y s o k i , z w y s o k i e g o na niski, lub dowolną zmianą stanu (przerzutem). K o m parator m o ż e b y ć p r o g r a m o w o wyłączany w celu zmniejszenia poboru prądu zasilającego p r z e z mikrokontroler.
ACSR {Analog Comparator Control and Status Register) - rejestr sterujący i statusu komparatora analogowego - $08 B i t
7
$08 ($28)
|
ACD
CWczytCapis
6 | •
-
RAW
S :
|
4
ACO
R
R
|
3
ĄCI
|
ACIE
R/W
R/W
Wartość początkowa o 0 N/A 0 R - oznacza odczyt. R/W - oznacza odczyt/zapis. N/A - nieustalona
B7-ACD
(Analog
Comparator
Disable):
2
1
0
| ACIC | ACISl ] AC1S0 | ACSR R/W 0
bit
R/W 0
RAW 0
0
włączający/wyłączający
komparator analogowy. Ustawienie ( „ 1 " ) bitu A C D p o w o d u j e wyłączenie komparatora. Bit ten m o ż e b y ć u s t a w i o n y w d o w o l n y m m o m e n c i e . W y ł ą c z e n i e k o m p a r a t o r a wyraźnie zmniejsza p o b ó r prądu zasilającego w trybie n o r m a l n y m i Idle. zmiany bitu A C D musi b y ć w y ł ą c z o n e p r z e r w a n i e k o m p a r a t o r a Comparator
Interrupt)
W chwili (Analog
przez w y z e r o w a n i e bitu A C I E w rejestrze A C S R . Jeś
li się nie z a p e w n i tego w a r u n k u , m o ż e wystąpić n i e k o n t r o l o w a n e w y g e n e r o wanie p r z e r w a n i a . B 6 - zarezerwowany. T e n bit j e s t z a r e z e r w o w a n y w układzie A T 9 0 S 2 3 1 3 i z a w s z e o d c z y t y w a n y j a k o zero. B 5 - A C O (Analog Comparator
Output):
wyjście komparatora analogowego.
Bit A C O j e s t b e z p o ś r e d n i m odzwierciedleniem s t a n u wyjścia k o m p a r a t o r a analogowego. B 4 - A C l (Analog tora.
Comparator
Interrupt):
flaga
p r z e r w a n i a od k o m p a r a
Bit A C l j e s t ustawiany („1") w m o m e n c i e wystąpienia zdarzenia n a wyjściu komparatora a n a l o g o w e g o zdefiniowanego za p o m o c ą bitów A C I S l i ACISO j a k o zgłoszenie przerwania. Procedura obsługi p r z e r w a n i a od k o m p a r a t o r a (Analog wiony
Comparator
Interrupt)
jest w y k o n y w a n a , jeśli bit A C I E jest usta
(„1") i włączone j e s t globalne zezwolenie n a p r z e r w a n i a (bit I w re
jestrze S R E G jest ustawiony). Flaga A C l j e s t z e r o w a n a sprzętowo w chwili skoku d o w e k t o r a przerwania o d komparatora. M o ż e b y ć także z e r o w a n a p o przez w p i s a n i e j e d y n k i („1") d o tego bitu. Jeśli w p r o g r a m i e pozostałe bity
rejestru U C S R są m o d y f i k o w a n e r o z k a z a m i S B I lub C B I , t o bit A C l powi nien być wyzerowany przed w y k o n a n i e m tych modyfikacji. B 3 - A C I E (Analog
Comparator
Interrupt
Enable):
flaga
zezwolenia na
przerwanie od k o m p a r a t o r a . Ustawienie bitu A C I E („1") przy w ł ą c z o n y m g l o b a l n y m zezwoleniu na prze rwania (bit I w rejestrze S R E G j e s t u s t a w i o n y ) , z e z w a l a n a generowanie przerwania od komparatora. Jeśli A C I E = 0, to p r z e r w a n i a komparatora są zablokowane. B 2 - A C I C (Analog
Comparator
Input Capture
Enable):
bit zezwolenia na
wyzwalanie funkcji p r z e c h w y t y w a n i a T i m e r a / L i c z n i k a l p r z e z kompara tor a n a l o g o w y . Ustawienie („1") bitu A C I C powoduje, że funkcja p r z e c h w y t y w a n i a Timera/ Licznikal jest w y z w a l a n a przez k o m p a r a t o r a n a l o g o w y . W y j ś c i e komparato ra zostaje w ó w c z a s dołączone b e z p o ś r e d n i o d o układu sterującego funkcją przechwytywania. W t y m trybie m o ż n a n o r m a l n i e w y k o r z y s t y w a ć eliminator s z u m u i wybierać z b o c z e generujące p r z e r w a n i e Timer/Counterl ture Interrupt
Input Cap
(patrz opis L i c z n i k a / T i m e r a l ) . Jeśli bit A C I C j e s t wyzerowany
(„0"), opisanego wyżej połączenia nie m a . A b y w y z w a l a n e komparatorem przerwanie Timer/Counterl
Input Capture Interrupt
m o g ł o b y ć wygenerowa
ne, bit T I C I E 1 w rejestrze T I M S K m u s i b y ć ustawiony ( „ 1 " ) . B I , BO - A C I S l , ACISO (Analog
Comparator
Interrupt
Modę
Select): bity
w y b o r u w a r u n k u zgłaszania p r z e r w a n i a przez k o m p a r a t o r . Powyższe bity określają które zdarzenie na wyjściu k o m p a r a t o r a analogowego powoduje zgłoszenie przerwania. Możliwości są przedstawione w tablicy 9.1. Przykład wykorzystania komparatora a n a l o g o w e g o j a k o ź r ó d ł a wyzwalania funkcji przechwytywania T i m e r a / L i c z n i k a l z a m i e s z c z o n o w rozdziale 14.1 (ćwiczenie 6). Tab. 9.1 Tryby wyzwalania przerwania komparatora ustawiane bitami ACIS1, ACISOH) ACISl
ACISO
0
0
Przerwanie komparatora wyzwalane zmianą stanu na jego wyjściu
0
1
Zarezerwowane
1
0
Przerwanie komparatora wyzwalane opadającym zboczem sygnału wyjściowego komparatora
1
1
Przerwanie komparatora wyzwalane narastającym zboczem sygnału wyjściowego komparatora
Tryb przerwania
?:
Uwaga: " i Podczas zmian bitów ACIS1 i ACISO przerwanie od komparatora analogowego powinno być zablokowa ne przez wyzerowanie bilu ACIE w rejestrze ACSR. W przeciwnym razie może wystąpić niekontrolowane zgłoszenie przerwania komparatora.
t
10. Porty wejścia-wyjścia (l/O) D o czego może być wykorzystany mikrokontroler? Jak sama nazwa wska zuje d o s t e r o w a n i a , a j e ś l i tak, to p o w i n i e n b y ć w y p o s a ż o n y w o d p o w i e d n i ą liczbę u n i w e r s a l n y c h wejść i w y j ś ć . U w z g l ę d n i e n i e t e g o postulatu m o ż e niekorzystnie wpływać na wielkość obudowy mikrokontrolera. Aby zmini malizować liczbę wyprowadzeń układu scalonego, wymyślono wielofunk cyjne p o r t y w e / w y . W z a l e ż n o ś c i o d u s t a w i e ń b i t ó w k o n f i g u r a c y j n y c h m o gą o n e p e ł n i ć rolę p o r t ó w w e / w y o g ó l n e g o p r z e z n a c z e n i a w y k o r z y s t y w a nych do sterowania urządzeniami zewnętrznymi lub mogą współpracować z w e w n ę t r z n y m i b l o k a m i f u n k c j o n a l n y m i . Z e w z g l ę d u na b u d o w ę w e w n ę t rzną C P U , a w szczególności długość rejestrów i s z e r o k o ś ć szyny danych porty te mają najczęściej b u d o w ę 8-bitową. N i e k t ó r e z nich m o g ą nawet pra c o w a ć j a k o a n a l o g o w e lub cyfrowe. W zależności o d typu mikrokontrolera j e s t w n i m z a i m p l e m e n t o w a n a mniejsza lub w i ę k s z a liczba p o r t ó w (patrz z e stawienie p a r a m e t r ó w w dodatku A ) . W układzie A T 9 0 S 2 3 1 3 u ż y t k o w n i k m a d o dyspozycji 8-bitowy port w e / w y - P O R T B i 7-bitowy P O R T D . Kieru n e k k a ż d e g o w y p r o w a d z e n i a d o w o l n e g o portu m o ż e ustalany niezależnie o d pozostałych i zmieniany w d o w o l n y m m o m e n c i e bez w p ł y w u na pozostałe li nie portów. S t o s o w n ą konfigurację m o ż n a zrealizować przy użyciu r o z k a z ó w S B I lub C B I . T e s a m e rozkazy mogą służyć d o ustawienia o d p o w i e d n i e g o p o z i o m u na porcie w y j ś c i o w y m lub włączenia/wyłączenia podciągania pullup linii portu w e j ś c i o w e g o .
10.1. Budowa portu B Jak j u ż w i e m y , P O R T B j e s t 8-bitowym, d w u k i e r u n k o w y m p o r t e m w e / w y . Jest on dostępny poprzez 3 lokacje w przestrzeni w e / w y
mikrokontrolera.
D l a c z e g o j e d e n port zajmuje aż trzy adresy? Praktycznie j e d e n adres wystar czy, ale rozwiązania z a s t o s o w a n e w A V R - a c h pozwalają na bardziej efek t y w n e konfigurowanie i w y k o r z y s t y w a n i e portów. Jak się t o z a t e m o d b y w a ? Pierwsza lokacja to rejestr danych (Data
Register)
P O R T B - adres $18 w przestrzeni w e / w y mikrokontrolera lub $ 3 8 w obsza rze pamięci w e w n ę t r z n e j . Następna, to rejestr konfiguracji kierunku Direction
Register)
(Data
D D R B mający o d p o w i e d n i e adresy: $ 1 7 ($37) i ostatni -
rejestr wejściowy (Input Pius) P1NB o adresach $16 ($36). Rejestr P I N B m o że b y ć tylko o d c z y t y w a n y , P O R T B i D D R B mogą b y ć z a r ó w n o czytane j a k
i z a p i s y w a n e . Ważną cechą portu B j e s t to, że każda je
AT90S2313
g o linia m a i n d y w i d u a l n i e w y b i e r a n y rezystor podcią gający d o „plusa" zasilania (pull-up).
D o wszystkich
w y p r o w a d z e ń P O R T B m o ż n a dołączać diody LED j .
LED
e
d y n i e p o p r z e z rezystor ograniczający.
Dopuszczalna
obciążalność k a ż d e g o w y p r o w a d z e n i a P O R T B wynosi
Rys. 10.1. Przykład bezpośredniego stero
2 0 m A w stanie niskim (dla V
wania diodą LED przez
p a m i ę t a ć o tym, ż e s u m a w s z y s t k i c h prądów z portów
mikrokontroler AVR
wyjściowych nie m o ż e p r z e k r o c z y ć wartości 200 mA.
c
c
= 5 V), trzeba jednak
Bezpośrednio sterowane diody L E D p o w i n n y b y ć w ł ą c z o n e poprzez rezystor ograniczający pomiędzy plusem zasilania a p o r t e m w y j ś c i o w y m (przykłado w e sterowanie diodą L E D przedstawiono na r y s u n k u 10.1). Zaświecenie dio dy następuje p o ustawieniu na wyjściu portu n i s k i e g o p o z i o m u logicznego.
Jeśli w y p r o w a d z e n i a PBO d o P B 7 są w y k o r z y s t y w a n e jako wejścia i są zewnętrznie p o d c i ą g a n e d o dołu, t o stanowią źród ło prądu wypływającego z portu, jeśli t y l k o są uaktywnione w e w n ę t r z n e rezystory podciągające.
Jak j u ż wiemy większość Unii p o r t ó w o g ó l n e g o p r z e z n a c z e n i a pełni dodatko w e funkcje wykorzystywane d o obsługi urządzeń peryferyjnych. Znaczenie funkcji alternatywnych portu B p r z e d s t a w i o n o w t a b l i c y 10.1. Tab. 10.1. Alternatywne funkcje portu B Wyprowadzenie portu
Funkcja alternatywna
PBO
AINO (wejście nieodwracające komparatora analogowego)
PBl
AIN1 (wejście odwracające komparatora analogowego)
P83
OCi (wyjście porównania dla Timera/Licznikal)
PB5
MOSI (wejście danych dla programowania szeregowego)
PB6
MISO (wyjście danych dla programowania szeregowego)
PB7
SCK (wejście zegarowe dla programowania szeregowego)
PORTB [Port B Bata Register) - rejestr danych portu B - $ 1 8 Bit
, Z . 6 5 4 2 1 0 > I PORTB7 | PORTB6 I PORTB5 | P0RTB4 I PORTB3 | PORTB21 PORTB1 I PORTBp] PORTU Odczyttfapis R/W R/W R/W RAW RAW R/W RAW RW WartoM początkowa 0 0 o O o o n o R/W-ojnaoza odczyt/zapis u 0 0 0 o 3
S 1 S ( E 3 8
Rejestr P O R T B może b y ć zapisywany i o d c z y t y w a n y . Z a w i e r a dane we/wy.
DDRB (Port B Bata Direction Register) - rejestr kierunku portu B - $17 8 i t
7
$17 ($37) | DDB7 | Odczyt/Zapis R/W Wartość początkowa 0 R/W - oznacza odczyt/zapis
DDB6 R/W 0
6 |
5 DDB5 R/W 0
j
4 DDB4 R/W
3
2
1
0
| DDB3 | DDB2 | DDB1 ] ODBO | DDRB R/W R/W R/W R/W 0 0 0 0 0
Rejestr D D R B określa typ każdej linii portu B . Linie m o g ą b y ć skonfiguro w a n e j a k o w e j ś c i o w e lub wyjściowe. D o d a t k o w o ustawia się opcje związane z podciąganiem. Szczegóły są p o d a n e w dalszej części niniejszego rozdziału.
PINB (Port B Input Pin Address) - rejestr wejściowy portu B - $ 1 6 7 Bit $16 ($36) | PINB7 ; R Odczyt/Zapis Wartość początkowa WA P. - oznacza odczyt
6 PINB6 R
5 PINB5 R
4 PINB4 R
3 PINB3 R
2 PINB2 R
PINB1 R
0 PINBO R
N/A
N/A
N/A
N/A
N/A
N/A
N/A
1
Rejestr PINB może b y ć tylko odczytywany. J e g o zawartość odzwierciedla bez pośrednio stan wyprowadzeń mikrokontrolera przypisanych d o portu B . Fi zycznie nie j e s t to więc rejestr. Inaczej jest podczas bezpośredniego odczytu P O R T B . W ó w c z a s czytany j e s t stan zatrzasków portu B (Port B Data
Latch).
10.1.1. Port B jako cyfrowy port we/wy ogólnego przeznaczenia Jeśli poszczególne linie portu B są wykorzystywane j a k o wyprowadzenia cyfro w e ogólnego przeznaczenia, to są wzajemnie równoważne. Przyjmijmy oznacze nie PBn d o określenia n-tego wyprowadzenia portu B . Stosując dalej tę konwen cję, bit D D B n w rejestrze D D R B będzie określał kierunek wyprowadzenia PBn. Jeśli D D B n będzie ustawiony („1"), to wyprowadzenie P B n będzie skonfiguro wane j a k o wyjściowe. Jeśli D D B n będzie wyzerowany („0"), wyprowadzenie PBn będzie skonfigurowane jako wejściowe. Wyprowadzenie P B n skonfiguro wane jako wejściowe będzie się zachowywało różnie, w zależności od stanu P O R T B n . Jeśli bit P O R T B n będzie ustawiony („1"), to linia wejściowa PBn bęTab. 10.2. Wpływ ustawienia bitów DDBn i PORTBn na wyprowadzenia portu B DDBn
PORTBn
1/0
0
0
Wejście
Brak
Wysoka impedancja (high-Z)
0
1
Wejście
Jest
PBn jest źródłem prądu, jeśli jest zewnętrznie podcią gany do masy zasilania ipull-Iow)
1
0
Wyjście
Brak
Wyjście typu push-pull stan niski
1
1
Wyjście
Brak
Wyjście typu push-pull stan wysoki
Kt
;
Podciąganie pull-up
Uwagi
r
3
:
dzie miała uaktywniony M O S - o w y rezystor podciągający (pull-up). Taka konfi guracja świetnie nadaje się d o obsługi np. zewnętrznej klawiatury, różnego ro dzaju przełączników. Trzeba jednak pamiętać o ograniczonych możliwościach wewnętrznego podciągania. D o wyłączenia wewnętrznego rezystora podciągają cego należy wyzerować („0") bit P O R T B n lub skonfigurować linię PBn jako wyjściową. Po zerowaniu rnikrokontrolera port B jest ustawiany w stan wysokiej impedancji, nawet wówczas, gdy nie jest aktywny zegar systemowy. Konfigurowanie
portów
w języku
C
było
przedstawione
„przy
okazji"
w przykładzie 9 . 1 . Poniżej m o ż n a z o b a c z y ć , j a k robi się to w asemblerze. Przykład 10.1. Konfigurowanie portów mikrokontrolera w asemblerze. W charakterze ćwiczenia, dla lepszego zrozumienia programu warto rozpisać poszczególne bity w rejestrach PORTB i DDRB .include "2313def.inc" -def temp=rl7 ldi
temp,$af
out
ddrb,temp
ldi out
temp,0xc£ portb,temp
;PB0 do PB3 oraz PBS i PB7 - wyjścia PBO PB5 PB4 PB6
do PB3 wyjście wejście wejście
i PB7 wyjście w stanie wysokim w stanie niskim w stanie High-Z podciągnięte do- plusa
10.1.2. Funkcje alternatywne portu B Wyprowadzenie portu B mogą spełniać także następujące funkcje alternatywne: B 7 - S C K : wejście z e g a r o w e dla p r o g r a m o w a n i a s z e r e g o w e g o . D o tego wejścia jest doprowadzany zewnętrzny przebieg zegarowy taktujący trans ferem danych podczas szeregowego p r o g r a m o w a n i a pamięci rnikrokontrolera. B 6 - M I S O : wyjście d a n y c h d l a p r o g r a m o w a n i a s z e r e g o w e g o . Z tego wyjścia są p r z e k a z y w a n e informacje z m i k r o k o n t r o l e r a d o programa tora podczas s z e r e g o w e g o p r o g r a m o w a n i a p a m i ę c i . B 5 - M O S I : wejście danych dla programowania szeregowego. D o tego wejścia są p r z e k a z y w a n e informacje z p r o g r a m a t o r a d o mikrokont rolera podczas s z e r e g o w e g o p r o g r a m o w a n i a p a m i ę c i . B 3 - O C 1 : wyjście p r z e c h w y t y w a n i a . Wyjście O C 1 j e s t w y k o r z y s t y w a n e , gdy j e s t a k t y w n a funkcja porównywania T i m e r a / L i c z n i k a l . Pojawia się na n i m stan w y s o k i , jeśli stan Timera/Liczni kal
zrówna
się
z rejestrem
OCRIA
(tzn.
gdy
TCNTlH=OCRIAH
i T C N T l L = O C R l A L ) . W y p r o w a d z e n i e P B 3 p o w i n n o b y ć w takim p r z y p a d ku skonfigurowane j a k o wyjście. Więcej informacji p o d a n o w rozdziale 5.2. B I - A I N 1 : wejście odwracające komparatora analogowego. Jeśli w y p r o w a d z e n i e t o jest skonfigurowane j a k o wejście z w y ł ą c z o n y m p o d ciąganiem ( D D B 1 jest w y z e r o w a n e („0") i P B l j e s t w y z e r o w a n e („0")), wy p r o w a d z e n i e A I N 1 j e s t b e z p o ś r e d n i o dołączone d o odwracającego
wejścia
komparatora a n a l o g o w e g o z a w a r t e g o w strukturze mikrokontrolera. BO - AINO: w e j ś c i e n i e o d w r a c a j ą c e k o m p a r a t o r a a n a l o g o w e g o . Jeśli w y p r o w a d z e n i e to jest skonfigurowane j a k o wejście z w y ł ą c z o n y m pod ciąganiem (DDBO j e s t w y z e r o w a n e („0") i PBO j e s t w y z e r o w a n e („0")), t o w y p r o w a d z e n i e AINO j e s t b e z p o ś r e d n i o dołączone d o nieodwracającego w e j ścia k o m p a r a t o r a a n a l o g o w e g o zawartego w strukturze mikrokontrolera.
10.1.3. Budowa linii portu B N a r y s u n k a c h 10.2 d o 10.7 p r z e d s t a w i o n o schematy poszczególnych linii portu B . Ich b u d o w a w e w n ę t r z n a różni się ze w z g l ę d u na funkcje alternatyw ne. W s z y s t k i e w y p r o w a d z e n i a portu są s y n c h r o n i z o w a n e , j e d n a k ż e na rysun kach nie p o k a z a n o zatrzasków synchronizujących. Tranzystor MOS (pull-up) J r
WP; zapis do PORTB WD: zapis do DDRB RL: odczyt rejestru PORTO RP; odczyt wyprowadzenia PORTB RD: odczyt DDRB n: 0. i
Do komparatora
nu
Tran^jstof '—•] tpuTHjp}
RESET I Q R D DDB3 C
~~1 WD RESET Q f* 0 PORT63 C WP
WP: zapis do PORTB WD: zapis do DDRB P.L: odczyt rsjastnj PORTB RP: odczyt wyprowadzenia PORTB RD:: odczyt DDRB
Rys. 10.3. Schemat linii 3 portu B
(pun-up) |-J
WP; WO: RL RP: RD; n;
zapis do PORTB zapis do DDRB odczyt rejestru PORTB odczyt wyprowadzenia PORTB odczyt DDRfl 2.4
• COM1A0 Selektor trybu pracy wyjścia
• COM1A1 COMP. MATCH1
nu T
r
a
r
L
« H > (pun-op) r-lr
RESET 1
Q R D PORTBS C
t
WP
WP: WD: RL RP: RD; SPIGN:
zapis do PORTB zapis do DDRB odczyt rejestru PORTB odczyt wyprowadzenia PORTB odczyt DDRB SPI ENABLE
SPI MOSI SPIEN
Rys. 10.5. Schemat linii 5 portu B
(ptHI-up)-'
WP: zapis do PORTB WO: zapis do DDRB flL: odczyt rejestru PORTB RP: odczyt wyprowadzenia PORTB RO: odczyt DDRB SPIEN: SPI ENABLE
SPIEN SPI MISO
T
r
a
n
^ h L
< ~ t ~ l
RESET I O R D PORTB7 C WP
SPI SCK WP: zapis do PORTB WD: zapis do DDRB RL: odczy! rejestru PORTB RP: odczyl wyprowadzenia PORTB RD: odczyl DDRB SPIEN: SPI ENABLE
SPIEN
Rys. 10.7. Schemat linii 7portu B
10.2. Budowa portu D P O R T D zawiera 7 dwukierunkowych linii w e / w y . Jest o n dostępny poprzez 3 lokacje w przestrzeni w e / w y mikrokontrolera. Pierwsza lokacja to rejestr da nych (Data Register)
P O R T D - adres $ 1 2 w przestrzeni w e / w y mikrokontrole
ra lub $ 3 2 w obszarze pamięci w e w n ę t r z n e j . Następna, t o rejestr konfiguracji kierunku (Data Direction
Register)
D D R D mający o d p o w i e d n i e adresy: $11
($31) i ostatni - rejestr wejściowy (Input Pins) P I N D o adresach $10 ($30). Re jestr P I N D m o ż e być tylko odczytywany, P O R T D i D D R D m o g ą być zarówno czytane j a k i zapisywane. K a ż d a linia portu D m a indywidualnie wybierany re zystor podciągający d o góry (pull-up).
D o wszystkich w y p r o w a d z e ń PORTD
można dołączać diody L E D , jedynie poprzez rezystor ograniczający. Dopusz czalna obciążalność każdego w y p r o w a d z e n i a P O R T D w y n o s i 2 0 m A w stanie niskim (dla V
c c
= 5 V), trzeba j e d n a k p a m i ę t a ć o t y m , że s u m a wszystkich prą
dów z portów wyjściowych nie m o ż e przekroczyć wartości 200 m A . Bezpo średnio sterowane diody L E D powinny b y ć w ł ą c z o n e p o p r z e z rezystor ograniJeśli w y p r o w a d z e n i a PDO d o P D 6 są w y k o r z y s t y w a n e jako wejścia i są zewnętrznie p o d c i ą g a n e d o dołu, t o stanowią źród ł o prądu wypływającego z portu, jeśli t y l k o są uaktywnione w e w n ę t r z n e rezystory podciągające.
Tab. 10.3. Funkcje alternatywne portu D
• -CS
Wyprowadzenie portu
Funkcja alternatywna
PDO
RXD (wejście danych odbiornika UART)
PD1
TXD (wyjście danych nadajnika UART)
PD2
INTO (wejście zgłoszenia przerwania zewnętrznego INTO)
PD3
INT1 (wejście zgłoszenia przerwania zewnętrznego INT1)
PD4
TO (wejście zewnętrznego sygnału dla licznika TCO)
PD6
T1 (wejście zewnętrznego sygnału d!a licznika TC1)
PD7
iCP (wejście przechwytywania dla timera/licznika TC1)
czający p o m i ę d z y plusem zasilania a portem wyjściowym (przykład sterowania diodami L E D przedstawiono n a r y s u n k u 10.1). Dioda świeci p o wysterowaniu linii portu niskim p o z i o m e m logicznym. W s z y s t k i e linie portu D pełnią d o d a t k o w e funkcje w y k o r z y s t y w a n e d o obsłu gi urządzeń peryferyjnych, które zestawiono w t a b l i c y 1 0 3 . W p r z y p a d k u w y k o r z y s t y w a n i a poszczególnych linii portu D d o obsługi fun kcji alternatywnych, odpowiadające
i m bity konfiguracyjne
w rejestrach
D D R D i P O R T D p o w i n n y b y ć ustawione zgodnie z o p i s e m tych funkcji. PORTD [Port D Data Register) - rejestr danych portu D - $12 6 5 7 | PORTD6 PORTD5 $12 (S321 I n/w R/W Odczyt/Zapis Wartość początkowa 0 0 0 R - oznacza odczyt. R/w - oznacza odczyt/zapis
e«
R
4 PORTD4 R/W 0
1 3 2 0 P0RTD3 PORTD2 PORTD 1 PORTDO R/W R/W R/W R/W 0
0
0
0
Rejestr P O R T D m o ż e b y ć zapisywany i o d c z y t y w a n y . Z a w i e r a dane w e / w y . DDRD [Port D Data Direction Register) - rejestr kierunku portu D - $11 Btt 7 6 5 | DDD6 DDDS $11 ($31) |R/W R/W R Odczyt/Zapis Wartość początkowa 0 0 0 R - oznacza odczyt. R/W - oznacza odczyt/zapis
4 DDD4 R/W
3 DDD3 R/W
2 DDD2 R/W
1 DDD1 R/W
0 DDDO R/W
0
0
0
0
0
Rejestr D D R D określa typ każdej linii portu D . Linie m o g ą b y ć skonfiguro w a n e j a k o w e j ś c i o w e l u b wyjściowe. D o d a t k o w o ustawia się opcje związane z p o d c i ą g a n i e m . Szczegóły są p o d a n e w dalszej części rozdziału. PIND [Port D Input Pins Address) - rejestr wejściowy portu D Bit S10(S30)
7 |
-R
Odczyt/Zapis Wartość początkowa 0
]
6 PIND6 R
5 PIND5 R
4 PIND4 R
N/A
N/A
N/A
fi - oznacza odczyl, N / A - nieustalona
$10
3 PIND3 R
2 PIND2 R
1 PIND1 R
0 P1ND0 R
N/A
N/A
N/A
N/A
PIND
Rejestr P I N D może b y ć t y l k o o d c z y t y w a n y . J e g o z a w a r t o ś ć odzwierciedla b e z p o ś r e d n i o stan w y p r o w a d z e ń m i k r o k o n t r o l e r a p r z y p i s a n y c h do portu D. Fizycznie nie jest to w i ę c rejestr. Inaczej j e s t p o d c z a s
bezpośredniego
odczytu P O R T D . W ó w c z a s c z y t a n y j e s t s t a n z a t r z a s k ó w p o r t u D (Port D Dała
Latek).
10.2.1. Port D jako cyfrowy port we/wy ogólnego przeznaczenia Jeśli poszczególne linie portu D są w y k o r z y s t y w a n e j a k o wyprowadzenia cyfrowe o g ó l n e g o przeznaczenia, to są w z a j e m n i e r ó w n o w a ż n e . Przyjmijmy oznaczenie P D n do określenia n-tego w y p r o w a d z e n i a portu D . Stosując dalej tę konwencję, bit D D D n w rejestrze D D R D b ę d z i e określał kierunek wypro wadzenia P D n . Jeśli D D D n b ę d z i e u s t a w i o n y ( „ 1 " ) , t o w y p r o w a d z e n i e PDn będzie skonfigurowane j a k o wyjściowe. Jeśli D D D n b ę d z i e wyzerowany („0"), to w y p r o w a d z e n i e P D n będzie s k o n f i g u r o w a n e j a k o wejściowe. Wy prowadzenie P D n skonfigurowane j a k o w e j ś c i o w e b ę d z i e się zachowywało różnie, w zależności od stanu P O R T D n . Jeśli bit P O R T D n będzie ustawiony („1"), to linia wejściowa P D n będzie miała u a k t y w n i o n y M O S - o w y rezystor podciągający (pull-up).
Taka konfiguracja ś w i e t n i e nadaje się do obsługi np.
zewnętrznej klawiatury, r ó ż n e g o rodzaju p r z e ł ą c z n i k ó w . T r z e b a jednak pa miętać o ograniczonych m o ż l i w o ś c i a c h w e w n ę t r z n e g o podciągania. Do wy łączenia w e w n ę t r z n e g o rezystora podciągającego n a l e ż y w y z e r o w a ć („0") bit P O R T D n lub skonfigurować linię P D n j a k o wyjściową. P o zerowaniu mikro kontrolera port D j e s t ustawiany w s t a ń w y s o k i e j i m p e d a n c j i , nawet wów czas, gdy nie j e s t aktywny zegar s y s t e m o w y .
10.2.2. Funkcje alternatywne portu D W y p r o w a d z e n i e portu D m o g ą spełniać t a k ż e następujące funkcje alterna tywne: B 6 - I C P : wejście p r z e c h w y t y w a n i a d l a T i m e r a / L i c z n i k a l . Wejście ICP jest wykorzystywane, gdy jest a k t y w n a funkcja przechwytywania Timera/Licznikal. Pojawienie się na t y m w y p r o w a d z e n i u z b o c z a określonego ustawieniem bitu ICES1 w rejestrze T C C R 1 B powoduje przepisanie stanu Ti mera/Licznikal d o rejestru ICR1 (tzn. I C R 1 H = T C N T 1 H i ICR1L=TCNT1L). W y p r o w a d z e n i e P D 6 p o w i n n o b y ć w takim p r z y p a d k u skonfigurowane jako wejście. Więcej informacji p o d a n o w rozdziale 5.2.
Tab. 10.4. Wpfyw ustawienia bitów DDDn i PORTDn na wyprowadzenia portu D PORTDn
l/O
Podciąganie putl-up
0
0
Wejście
Brak
0
1
Wejście
Jest
' DDDn
Uwagi
'
Wysoka impedancja (high-Z) PDn jest źródłem prądu, jeśli jest zewnętrznie podcią gany do masy zasilania (pull-low)
1
0
Wyjście
Brak
Wyjście typu push-pull stan niski
1
1
Wyjście
Brak
Wyjście typu push-pull stan wysoki
B 5 - T l : w e j ś c i e z e g a r o w e dla T i m e r a / L i c z n i k a l . Jeśli układ Timera/Licznikal pracuje w konfiguracji licznika, zliczane są zewnęt rzne impulsy podawane do wejścia T l . Więcej informacji podano w rozdziale 5.2. B 4 - TO: wejście z e g a r o w e d l a Timera/LicznikaO. Jeśli układ Timera/LicznikaO pracuje w konfiguracji Ucznika, zliczane są zewnęt rzne impulsy podawane do wejścia TO. Więcej informacji podano w rozdziale 5.1. B 3 - I N T 1 : wejście zgłoszenia z e w n ę t r z n e g o p r z e r w a n i a I N T 1 . D o wejścia I N T 1 jest d o p r o w a d z a n y sygnał zgłoszenia przerwania zewnętrz n e g o I N T 1 . S p o s ó b g e n e r o w a n i a zgłoszenia jest określony bitami I S C 1 1 i I S C 1 0 w rejestrze M C U C R . Więcej informacji p o d a n o w rozdziale 4 . 1 0 . 2 . B 2 - INTO: wejście zgłoszenia z e w n ę t r z n e g o p r z e r w a n i a INTO. D o wejścia INTO j e s t d o p r o w a d z a n y sygnał zgłoszenia przerwania zewnętrz nego INTO. S p o s ó b g e n e r o w a n i a zgłoszenia jest określony bitami I S C 0 1 i ISCOO w rejestrze M C U C R . Więcej informacji p o d a n o w rozdziale 4.10.2. B I - T X D : wyjście danych nadajnika U A R T . Jeśli jest włączony nadajnik U A R T , to na wyjściu T X D pojawiają się szerego w o bity transmitowanych danych wraz z bitami startu i stopu. D a n e są wysyła ne od najmłodszego do najstarszego bitu, w takt zegara transmisyjnego. Pozio m y napięciowe (0...+5 V) nie nadają się d o bezpośredniego wykorzystania w interfejsie R S 2 3 2 . Wyprowadzenie T X D zostaje automatycznie skonfiguro w a n e j a k o wyjściowe, gdy tylko zostanie włączony nadajnik U A R T , niezależ nie od ustawienia bitu D D D 1 . Więcej informacji p o d a n o w rozdziale 8. BO - R X D : w e j ś c i e d a n y c h o d b i o r n i k a U A R T . Jeśli jest włączony odbiornik U A R T , d o wejścia R X D należy d o p r o w a d z i ć przebieg odbierany. Poziomy napięciowe p o w i n n y z a w i e r a ć się w przedziale 0...+5 V (dla V
c
c
= 5 V ) . O d e b r a n y przebieg z interfejsu R S 2 3 2 powinien
w i e c b y ć p o d d a n y odpowiedniej konwersji. Bity d a n y c h są odbierane w ko lejności od najmłodszego d o najstarszego, w takt zegara transmisyjnego. Wy p r o w a d z e n i e R X D zostaje a u t o m a t y c z n i e s k o n f i g u r o w a n e j a k o wejściowe, gdy tylko zostanie włączony odbiornik U A R T , niezależnie o d ustawienia bitu DDDO. Ustawienie bitu P O R T D 0 s p o w o d u j e włączenie podciągania (p f/. U
w/?)- Więcej informacji p o d a n o w rozdziale 8.
10.2.3. Budowa linii portu D N a r y s u n k a c h 10.8 d o 10.12 p r z e d s t a w i o n o schematy poszczególnych wy p r o w a d z e ń portu D . Ich b u d o w a w e w n ę t r z n a różni się ze w z g l ę d u na funkcje alternatywne. Wszystkie w y p r o w a d z e n i a p o r t u są s y n c h r o n i z o w a n e , jednakże na rysunkach nie p o k a z a n o z a t r z a s k ó w synchronizujących.
Tranzystor MOS (pull-up)
WP: zapis do PORTD WD: zapia do DDRD W.: odczyt rejestru FORTO [_ RP: odczyl wyprowadzenia PORTD RD: odczyl DDRD RXD: dane odbierano poez UART RK6N: włącza odbiór danytfi UART
Rys. 10.8. Schemat linii 0 portu D
RXEN RX0
WP: WD: RL' RP: RO: FtXD: RXEN:
zapis *> PORTD zapis do DDRD odczyl rejestru PORTD odczyt wyprowadzenia PORTD odczyt ODRO dane nadawane przez UART wtacza nadawanie danych UART
Rys. 10.9. Schemat linii 1 portu D
anzystor —u MOS |p (puH-upJ
WP; zapis do PORTO WD. zapis do DDRD RL: odczyt rejestru PORTD RP: odczyt wyprowadzania PORTD RO: odczyt DORD n: 2.3 m: 0.1
ISCml
isCmO
nu T W B
Bg>
(puii-up) r
RESET R
Q D PORTDn C
•a
— f -
Sygnał zapis do PORTD |Wybor współczynnika "zagarowy zapis do DDRD podziału dla TIMERm odczyt rejestru PORTD odczyt wyprowadzania PORTO odczyt DDRD *• CSm2 CSml CSmO m: 0,1
WP: WD: RU RP: RD; n :
5
Rys. 10.11. Schemat linii 4 i PD5 portu 0
(pull-up)
WP: WD: RL: RP: RD. ACIC: ACO:
zapis do PORTD zapis do DDRD odczytrajestruPORTD odczyl wyprowadzania PORTD odczyt DDRO sygnał włączający komparator wyjścia komparatora
Eliminator szumów
Selektor zbocza
ICNC1
ICESt
-ICF1
-ACIC -ACO
1 1 . Pamięci nieuiotne w mikrokontrolerach AVR Z a p e w n e c z ę ś ć C z y t e l n i k ó w p a m i ę t a p i e r w s z e w e r s j e m i k r o k o n t r o l e r ó w i pa mięci
stosowanych
w systemach
mikroprocesorowych.
Najpowszechniej
s z y m r o d z a j e m p a m i ę c i b y ł y w ó w c z a s układy typu U V E P R O M (Ultra EPROM).
Violet
M o ż n a je było wielokrotnie zapisywać w specjalnym programato
rze i k a s o w a ć za p o m o c ą p r o m i e n i ultrafioletowych. B y ł y w i ę c w użyciu n i e zbyt w y g o d n e , a i ich c e n a nie b y ł a niska. Pomijając p a m i ę c i O T P (One Programmable
Time
- p r o g r a m o w a n e j e d n o r a z o w o ) , nie b y ł o j e d n a k specjalnego
w y b o r u . C e n a p a m i ę c i O T P b y ł a na o g ó ! z n a c z ą c o n i ż s z a od U V E P R O M , lecz ze w z g l ę d u n a m o ż l i w o ś ć j e d n o r a z o w e g o z a p i s u zupełnie nie n a d a w a ł y się o n e d o p r a c konstrukcyjnych. W a d ą U V E P R O M - ó w b y ł a k o n i e c z n o ś ć s t o s o w a n i a n i e ł a t w e g o d o z d o b y c i a k a s o w n i k a (zawierającego l a m p ę ultra fioletową emitującą
p r o m i e n i o w a n i e o o d p o w i e d n i e j długości fali) i długi
czas k a s o w a n i a , na ogół nie krótszy niż kilkanaście d o kilkudziesięciu minut. Dzięki spopularyzowaniu pamięci Flash wszystkie te zmartwienia praktycz nie poszły w z a p o m n i e n i e . Z d o m i n o w a ł y o n e w i ę k s z o ś ć o b e c n i e p r o d u k o wanych
mikrokontrolerów,
a także
nieulotnych
pamięci
zewnętrznych.
T e c h n o l o g i a ta u m o ż l i w i a w i e l o k r o t n y z a p i s i k a s o w a n i e na d r o d z e e l e k t rycznej. Informacja zapisana w pojedynczej komórce pamięci jest reprezen t o w a n a p r z e z ilość ł a d u n k u w s t r z y k n i ę t e g o d o o b s z a r u t z w .
pływającej
bramki zmodyfikowanego nieco - w stosunku do rozwiązań typowych
-
t r a n z y s t o r a M O S ( r y s u n e k 11.1). W s t r z y k n i ę t y ł a d u n e k j e s t z a t r z y m y w a n y Pływająca bramka
\
?
1
\
9* !e@©i ? iseea
Rys. 11.1. Zasada działania komórki pamięciowej w technologii Flash
na stale w s k u t e k pułapki p o t e n c j a ł o w e j . M ó w i ą c p r o ś c i e j „nie m a siły", aby u w o l n i ć się o d otaczającej g o bariery p o t e n c j a ł u . D o p r o w a d z a j ą c dostatecz nie w y s o k i e i o d p o w i e d n i o
spolaryzowane
napięcie d o
poszczególnych
elektrod tranzystora m o ż n a j e d n a k s p o w o d o w a ć o d p ł y w ł a d u n k u z obszaru pływającej bramki, t y m s a m y m s k a s o w a ć p a m i ę ć (lub z a p r o g r a m o w a ć , zależy od przyjętej k o n w e n c j i ) . N a świecie - j a k w i e m y - n i e m a rzeczy ide alnych. Z a w s z e p o d c z a s k a s o w a n i a m o ż e w o b s z a r z e pływającej bramki p o z o s t a w a ć p e w i e n s z c z ą t k o w y ł a d u n e k . Z drugiej s t r o n y , m i m o bariery potencjałów p o j e d y n c z e ładunki m o g ą w p e w n y c h o k o l i c z n o ś c i a c h opusz czać o b s z a r pływającej b r a m k i . S k u m u l o w a n i e t y c h e f e k t ó w spowoduje, że p o p i e r w s z e kolejny cykl k a s o w a n i a / p r o g r a m o w a n i a p a m i ę c i Flash może się nie udać, p o drugie z a p r o g r a m o w a n a p a m i ę ć r o z p r o g r a m u j e się sama po p e w n y m czasie. Liczba cykli k a s o w a n i a / z a p i s u oraz c z a s utrzymywania za wartości pamięci są na szczęście wystarczające d o p r a k t y c z n y c h zastosowań. Trzeba tu w s p o m n i e ć o j e s z c z e i n n y m rodzaju p a m i ę c i nieulotnej jakim jest p a m i ę ć E E P R O M . T e n rodzaj pamięci r ó w n i e ż p o z w a l a n a zachowanie da nych p o wyłączeniu zasilania i nie w y m a g a d o d a t k o w y c h urządzeń do kaso wania. W mikrokontrolerach, w t y m w A V R - a c h , p a m i ę ć E E P R O M jest wy korzystywana j a k o pamięć d a n y c h , które p o w i n n y b y ć z a c h o w a n e po wyłą czeniu zasilania. T y p o w e jej zastosowania to p r z e c h o w y w a n i e parametrów konfiguracyjnych, opcji p r o g r a m u itp. R e a s u m u j ą c : w m i k r o k o n t r o l e r a c h A V R z a s t o s o w a n e są j e d n o c z e ś n i e dwa rodzaje p a m i ę c i nteulotnych. P a m i ę ć F l a s h - pełniąca r o l ę pamięci progra m u i pamięć E E P R O M - służąca d o p r z e c h o w y w a n i a p a r a m e t r ó w programu, a także p e w n y c h informacji d o t y c z ą c y c h k o n f i g u r a c j i s a m e g o mikrokontro lera. P r o g r a m o w a n i e obu r o d z a j ó w p a m i ę c i m o ż e się o d b y w a ć bezpośred nio w s y s t e m i e (bez k o n i e c z n o ś c i p r z e n o s z e n i a m i k r o k o n t r o l e r a d o progra matora).
11.1. Bity zabezpieczające pamięć programu i danych W mikrokontrolerze
AT90S2313
zastosowano
dwa
bity
zabezpieczające
(Lock Bits), za pomocą których ustawia się stopień o c h r o n y danych zapisa nych w pamięci nieulotnej mikrokontrolera, czyli w p a m i ę c i Flash oraz E E P R O M . P o d c z a s p r o g r a m o w a n i a p a m i ę c i m i k r o k o n t r o l e r a bity zabezpie czające m o ż n a pozostawić n i e z a p r o g r a m o w a n e („1") lub zaprogramować je
Tab. 11.1. Ochrona pamięci mikrokontrolera za pomocą bitów zabezpieczających Tryb
Bity zabezpieczające Typ zabezpieczenia L81 L82
1
1
1
Pamięć niezabezpieczona
2
0
1
Zapis pamięci Flash i EEPROM zablokowany' '
3
0
0
Zapis i weryfikacja pamięci Flash i EEPROM zablokowana
1
Uwaga: b a PC*-PC +C127 + 1 Z=1 = > PC«-PC + 1
-
1 lub 2
BRCS
cl27
Skok względny. Jeśli Haga przeniesienia
C=1 = > PC PC*-PC + 1
-
1 lub 2
jest ustawiona BRCC
Cl 27
Skok względny, jeśli flaga przeniesienia jest wyzerowana
BRSH
C127
C=0 = > PC PC t - PC + 1
Skok względny, jeśli większy lub równy (dotyczy liczb bez znaku)
C=0 = > PC*-PC +cl27 + 1 C=1 = > PCt-PC + 1
1lut>2
-
llubz
BULO
C127
Skok względny, jeśli mniejszy (dotyczy liczb bez znaku)
C=1 = > P C * - P C + c 1 2 7 + 1
BRMI
Cl 27
Skok względny, jeśli ujemny
N=t = > PC+-PC +C127 + f N = 0 = > PC*-PC + 1
-
Hub 2
8RPL
C127
Skok względny, jeśli dodatni
N=0=>PC«-PC+Ci27 + 1
-
1lub2
C=0=>PC*-PC + 1
N=1 = > P C * - P C + 1 BRGE
C127
Skok względny, jeśli większy lub równy (dotyczy liczb ze znakiem)
S=0 = > PC*- PC +C127 + 1 S=1 = > PC*~PC + 1
-
1 lub 2
BRLT
C127
Skok względny, jeśli mniejszy niż zero (dotyczy liczb ze znakiem)
S=1 = > PC*- PC +C127 + 1
-
1lub2
S=0 = > PC«-PC + 1
BRHS
C127
Skok względny, jeśli (laga przeniesienia pomocniczego ustawiona
H=1 = > PC«- PC +C127 + 1 H=0=>PC*-PC + 1
-
i lub 2
BRHC
Cl 27
Skok względny, jeśli Haga przeniesienia pomocniczego wyzerowana
H=0 = > PC*-PC +C127 + 1 H=1 = > P C t - P C + 1
-
1 lub 2
BRTS
Cl 27
Skok względny, jeśli znacznik T jest ustawiony
T=1 = > PC*-PC +C127 - M T=0=>PC*-PC + 1
-
Hub 2
BRiC
Cl 27
Skok względny, Jeśli znacznik T |est wyzerowany
T=0=>PC^PC+c127 + 1
-
1 lub E
Skok względny, jeśli tlaga przepełnienia ustawiona
V=1 = > PC*-PC +C127 + 1
-
1 lub 2
8RVS
C127
T=1 = > P C * - P C + 1 V=0=>PC*-PC + t
BRVC
C127
Skok względny, jeśli tlaga przepełnienia wyzerowana
V = 0 = > P C < - P C +C127 + 1 V=f = > PC PC*-PC +C127 + 1
-
1 lub 2
-
1lub2
1=0 = > PC * - PC + 1 BR1D
C127
Skok względny, jeśli przerwania zablokowane
1=0 = > PC*-PC +C127 + 1 1=1 = > PC*-PC + 1
Rozkazy transferu danych MOV MOVW
Rd.Rs Rd+1:Rd,
Kopiuj zawartość rejestru Rs do rejestru Rd Kopiuj zawartość sfowa z rejestrów
R d * - Rs
-
1
Rd+-t:RrJ*-Rs4-t:Rs
-
t
Rs+1:RS
Rs+l:Rs do rejestrów Rd+1:Rd
LOI
Rh,c255
Ładuj rejestr bezpośrednio stalą
Rh *- C255
1
LD
Rd,X
tadu) rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X
Rd*-(X)
-
2
LO
Rd,X+
taduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X z postinkrementacją
Rd«-(X) X*-X + 1
-
2
Ląduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X z predekrementacją
X*-X-1 Rd*-(X)
-
2
Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y
Rd*-(Y)
-
2
LD
LD
Rd.-X
Rd,Y
Mnemonik
Operantfy
Opis
Operacja
Modyflkowaoe flagi
Uczto' taktów
zegara , LD
LD
LDD
Rd,Y+
Rd,-Y
Rd,Y+c63
Ląduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z postinkrementacją
Rd«- (Y) Y*-Y+ 1
2
Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z predekrementacją
Ył-Y-1 Rd*-(Y)
2
Rd «- (Y + C63)
2
Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z przemieszczeniem
LD
Rd.Z
Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Z
Rd«-(Z)
2
LD
Rd,Z+
Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Z z postinkrementacją
Rd R s , to P C « - P C + c l 2 7 + 1 w p r z e c i w n y m p r z y p a d k u P C =0)
BRSH - skok względny jeśli większy lub równy (rozpatrywane są liczby bez znaku) W a r u n k o w e rozgałęzienie p r o g r a m u . S p r a w d z a flagę przeniesienia (C). Jeśli j e s t w y z e r o w a n a , to nastąpi s k o k w z g l ę d e m b i e ż ą c e g o adresu w s k a z y w a n e g o przez P C . G d y r o z k a z ten j e s t w y k o n y w a n y b e z p o ś r e d n i o p o C P , C P I , SUB lub S U B I , s k o k zostanie w y k o n a n y wtedy i t y l k o w t e d y , gdy b i n a r n a liczba bez z n a k u u m i e s z c z o n a w rejestrze R d j e s t w i ę k s z a lub r ó w n a o d tak s a m o reprezentowanej
liczby
zapisanej
w rejestrze
R s . Z a s i ę g skoku
PC-63 < adres_skoku < PC+64. Parametr c l 2 7 jest przesunięciem n y m w k o d z i e uzupełnienia d o d w ó c h . R o z k a z ten j e s t BRBC Operacja:
0,0127.
Jeśli C = 0 , czyli R d > R s , to P C i- P C + c l 2 7 + 1 w p r z e c i w n y m p r z y p a d k u P C «— P C + 1
Składnia:
Kod:
BRSH 1
r i
1
cl27 t
1
i
1
i
1
1
0
i
I
1
i
c
1 I
1
r
c
c
I
c 1
1 c
1
-1 1 1 c c 0 0 0 1 i . t
Liczba słów: 1 ( 2 bajty) Liczba cykli: 1, jeśli w a r u n e k niespełniony 2 , jeśli w a r u n e k spełniony
Flagi:
I
T
H
S
V
N
Z
C
Przykład: subi brsh większy;
nop
rl9,4 większy
;odejmij liczbę 4 od rl9 ;skocz, jeśli rl9>=4 ;tu skocz
wynosi: zapisa
odpowiednikiem
BRTC - skok względny, jeśli flaga T jest wyzerowana W a r u n k o w e rozgałęzienie p r o g r a m u . S p r a w d z a flagę p o m o c n i c z ą (T). Jeśli j e s t ona w y z e r o w a n a , to nastąpi skok w z g l ę d e m b i e ż ą c e g o adresu wskazywa n e g o przez P C . Z a s i ę g skoku w y n o s i : P C - 6 3 < a d r e s _ s k o k u £ PC+64. Para m e t r c l 2 7 j e s t p r z e s u n i ę c i e m z a p i s a n y m w k o d z i e u z u p e ł n i e n i a d o dwóch R o z k a z ten j e s t o d p o w i e d n i k i e m BRBC 6 , c l 2 7 . Operacja:
Jeśli T = 0 , to P C < - P C + c l 2 7 + 1 w p r z e c i w n y m przypadku P C 0L l?A'
kow ustawtone pułapki programu pojedynczego \ Pfoownu ™ Wykonania programu od aktualne] wartości PC do instrukcji wskazywanej przez kursor
\ «i
n
(
( a 2 u
Rys. 13.11. Ikony paska narzędziowego AVR Studio służące do prowadzenia symulacji programu
jednostki czasu. Dodatkową korzyścią jest możliwość zerowania wskazań tego licznika, c o umożliwia realizacje precyzyjnego pomiaru czasu w y k o n y w a n i a poszczególnych fragmentów programu. Piąta ikona służy d o otwarcia o k n a komunikatów symulatora (Messages),
a ostatnia umożliwia wyświetlenie zaso
b ó w mikrokontrolera (stan C P U , ustawienia przerwań, rejestry Umerów/liczni k ó w , w a t c h d o g a , E E P R O M - u , U A R T - u , komparatora analogowego, a także stany rejestrów związanych z portami w e / w y ) . Sposób prezentowania danych z a p e w n i a w y g o d n ą interpretację poszczególnych bitów każdego rejestru (rysu nek 13.10). Są one wyświetlane n a c z e r w o n o w przypadku, gdy w wyniku w y konania pojedynczego rozkazu (praca krokowa) ulegną modyfikacji. Wszystkie zasoby mikrokontrolera mogą b y ć ręcznie modyfikowane przez użytkownika. N a r y s u n k u 13.11 p o k a z a n o ikony związane bezpośrednio z przebiegiem sy mulacji. P i e r w s z a od lewej p o w o d u j e dołączenie podświetlonej w oknie p r o g r a m u symulacji zmiennej d o listy Watches,
dzięki c z e m u stan tej zmiennej
jest ś l e d z o n y w trakcie w y k o n y w a n i a się p r o g r a m u . D r u g a i k o n a służy d o k a s o w a n i a z m i e n n e j z listy podglądu. M u s i b y ć o n a wcześniej podświetlona w oknie Watches.
N a s t ę p n e ikonki uruchamiają symulację w różnych try
bach. P i e r w s z a z nich p o w o d u j e ciągłe w y k o n a n i e p r o g r a m u , w związku z c z y m najczęściej będzie współpracowała z wcześniej u s t a w i o n y m i pułapka mi. Stosuje się ją, g d y n i e c h c e m y śledzić w y k o n y w a n i a p r o g r a m u instrukcja p o instrukcji, g d y ż s a m przebieg n a s n i e interesuje, natomiast m o ż e on m i e ć w p ł y w n a resztę p r o g r a m u - np. pętle opóźniające. Naciśnięcie tej ikony p o woduje d e z a k t y w a c j ę pozostałych. N i e są też w i d o c z n e z m i a n y licznika pro g r a m u . D ł u ż s z a praca w t y m trybie m o ż e n a s u w a ć wątpliwości, c z y p r o g r a m gdzieś się n i e zawiesił. Kolejna i k o n a (czwarta od lewej n a r y s u n k u 13.11) powoduje przerwanie w y k o n y w a n i a p r o g r a m u . W y ś w i e t l o n y w t y m m o m e n c i e stan mikrokontrole-
r a o d p o w i a d a takiemu, j a k i wystąpił p o ostatnim r o z k a z i e . Kolejne ikony słu żą do: w y k o n a n i a p o j e d y n c z e g o rozkazu z wejściem d o ciała procedury (jeśli jest to np. RCALL), w y k o n a n i a rozkazu traktując napotkaną p r o c e d u r ę j a k o pojedynczy k r o k p r o g r a m u . S i ó d m a od lewej strony i k o n a z r y s u n k u 13.11 służy d o o p u s z c z e n i a procedury. Jej naciśnięcie p o w o d u j e ciągłe w y k o n y w a n i e p r o g r a m u , aż d o n a p o t k a n i a rozkazów RET lub R E T I . Kolejna i k o n a p o w o d u j e ciągłe w y k o n a n i e p r o g r a m u o d adresu wynikającego z aktualnej wartości licznika p r o g r a m u P C d o miejsca w s k a z y w a n e g o przez kursor w o k n i e p r o g r a m u . W niektórych sytuacjach b a r d z o przydatne m o g ą b y ć kolejne d w i e ikonki. P i e r w s z a z nich inicjuje automatyczną p r a c ę k r o k o wą. M i ę d z y p o s z c z e g ó l n y m i k r o k a m i p r o g r a m u w s t a w i a n a j e s t p r z e z symula tor p r z e r w a , której długość w milisekundach określa się p o l e c e n i e m menu Debug>Options>Single
step delay (ms). Kolejna ikona powoduje ciągłe w y
k o n a n i e /i k r o k ó w p r o g r a m u b e z p o d g l ą d a n i a z a s o b ó w . W a r t o ś ć » jest usta w i a n a w poleceniu Debug>Options>Number
of Single
Steps.
D o o m ó w i e n i a pozostały j e s z c z e trzy ostatnie ikony p r z e d s t a w i o n e na r y s u n k u 1 3 . 1 1 . Ikona z „łapką" ustawia/kasuje pułapkę p r o g r a m o w ą w miejscu p r o g r a m u w s k a z y w a n y m przez kursor w postaci żółtej strzałki w o k n i e pro g r a m u . Jeśli pułapka j e s t ustawiona p o lewej stronie instrukcji p r o g r a m u z o stanie w y ś w i e t l o n y
m a ł y k w a d r a c i k . Ikona z d w i e m a
„łapkami"
usuwa
wszystkie pułapki ustawione w p r o g r a m i e . Pułapki m o g ą być t y m c z a s o w o b l o k o w a n e . O d p o w i e d n i e d o tego polecenia znajdują points>Show
List>Enable
lub Breakpoints>Show
się w m e n u
List>Disable.
BreakOstatnia
i k o n a służy d o w y z e r o w a n i a s y m u l o w a n e g o mikrokontrolera. 1
'A"" "
'
'
d[u.li''afl
Hys. 13.12. Ikony paska narzędziowego informu-
P o d c z a s symulacji programu w i e l o m o d u ł o w e g o nazwa a k t y w n e g o modułu jest wyświetlana w oknie przedstaw i o n y m na r y s u n k u 13.12. Krok w y k o n y w a n i a pronapisanego w C p o k r y w a się domyślnie z i n -
jące o aktywnym modu-
lei przetaczające tryb pracy okna programu
, s
t
r
u
k
. c
. , e
, 2
„ 8
C
z
. a
s
a
n
u
z
a
c
h
o
d
z
i
e d n a k
k o
^ S ° J* ** " J " nieczność pracy na poziomie k o d u m a s z y n o w e g o . Jest t o m o ż l i w e p o naciśnięciu ikonki z n a w i a s a m i klamro w y m i przedstawionej na r y s u n k u 13.12. Zostaje w ó w c z a s otwarte o k n o zawie rające zdeasemblowaną postać programu. O d tego m o m e n t u praca k r o k o w a od b y w a się na p o z i o m i e r o z k a z ó w mikrokontrolera ( r y s u n e k 13.13). P r o g r a m A V R Studio stwarza m o ż l i w o ś ć uruchamiania programu b e z koniecz ności wielokrotnego p r o g r a m o w a n i a pamięci mikrokontrolera. Wirtualna jed nostka centralna nie zachowuje j e d n a k pełnej kompatybilności z jej rzeczywis tym odpowiednikiem. Przykładowo A V R Studio 3.56 nie potrafi symulować watchdoga, nie radzi sobie też dobrze z k o m p a r a t o r e m a n a l o g o w y m .
Nie
• •."•V. i.xnr «7,>n
urn i jt.mi ^łi»j t p l j
FT11 *0OOO00;9. coor *QOQttQ0; CFM łr
I
-I.
• H I I ™
O
11(1 •oooooozc; O M • a o o o o c : ? 0401
LEI » P W ?5 : T » L I - T ^ T P I - - ] ;
K5. H
ŁIJODOTUŁ^C.
lOtKrOCort*. trJOOMOJI;
ł Jłl
• 000000 W : łOOOOOOJl. łOOOO0Qli: ULCULLH-L>JLLCAILLL4L.0JL.ŁCNUJT4H
. WW.L* H»hti,
Ai^tt*
-Onp; u; oiai U l . OlOO kf.o ijft : o oo ooio: - • oo oo rr ix 00W: u oo w " OOiO: 00 • 0-, CO fO PO 00 nfl 00 00ŁOI CCi C D 00 0056: '.JD 00 uQ UO D 7 15 0040: os oo oo oo yj 77 ?? t? ooń8: yy yy 7? ii ?? ?? ?? 7? oo70t 77 7? 7? j ? 77 ?? ?> ł? ooiai ?? 17 77 77 77 77 77 7? 0060: >ł I? 77 77 77 77 77 77 C C G O t 77 77 77 77 77 77 77 77 OOSOi 77 77 77 77 77 77 77 77
Dt-Jan* łff
HJOMSOW OOODOOW rb J W D
USR OOIOMCO Ufjł OOCOOCCO UflRfl O W O O W e
Gnw^ >\iW l - ł w j ifl' (lii , i : J11J11 1 gq:u0DO2 3 JKilKOM jcwceoK lJttWOHtt
9vm«m«
UsCOWCO' ISJOWOOMT
JJ >K"EXW £1 WWCCSO< £ > W » O 0 &1110J11L.
FORT aocooooc' AG*
GOJ
fefarPLCf
i om Torf*
-111:111
IttoOttK.
5D»»kco; H.-mowOft
Zj fTOOf-lOOCi
DcidlJlWJ 21 oommoj.
0^000000' DC ĆMOM'
tc-ia»7 iłtf& KWiOlOi;
/rys. 73.14. Okno programu Visual Micro Lab
wyświetlacz L C D o r a z terminal komunikacyjny T T Y . V M L A B w wielu sy tuacjach uwalnia u ż y t k o w n i k a od konieczności b u d o w a n i a układu prototypo w e g o i stosowania e m u l a t o r ó w sprzętowych. O p r ó c z p o d z e s p o ł ó w , z których m o ż n a z b u d o w a ć system, w programie V M L A B z a i m p l e m e n t o w a n o również wielokanałowy o s c y l o s k o p wirtualny. Opis u r u c h a m i a n e g o układu p r z y p o m i na n i e c o standard, j a k i m j e s t Spice. Z a p o m o c ą Visual M i c r o L a b m o ż n a uru c h a m i a ć urządzenia, w których wykorzystuje się z a i m p l e m e n t o w a n y w mik rokontrolerze przetwornik analogowo-cyfrowy l u b komparator, z c z y m j a k p a m i ę t a m y miał p r o b l e m y symulator A V R Studio. Visual Micro L a b t o p r o g r a m typu I D E . Integruje o n asembler, zewnętrzny kompilator n p . A V R - G C C , linker i debuger, przy c z y m integracja poszcze gólnych e l e m e n t ó w j e s t znacznie lepsza n i ż w A V R Studio. D e b u g e r w y świetla i wykonuje p r o g r a m z a r ó w n o n a poziomie kodu m a s z y n o w e g o j a k i j ę z y k a w y s o k i e g o p o z i o m u . W i d a ć przy t y m współzależność o b u postaci programu. W V M L A B użytkownik r ó w n i e ż w każdej chwili m o ż e podejrzeć lub zmienić stan d o w o l n e g o k o m p o n e n t u mikrokontrolera lub zmiennej pro gramu. Prezentacja wszystkich zasobów mikrokontrolera jest zrealizowana w sposób b a r d z o czytelny ( r y s u n e k 13.14), lecz rozmieszczenie wszystkich okien w y m a g a z a s t o s o w a n i a dużego monitora, pracującego w wysokiej roz dzielczości.
Instalacja p r o g r a m u j e s t b a r d z o prosta. P r z e d z a k u p e m pełnej wersji m o ż n a w y p r ó b o w a ć działanie p r o g r a m u n a 2 I - d n i o w e j wersji ewaluacyjnej. Pliki m o ż n a p o b r a ć ze strony http://www.amtools.net.
Z a i n s t a l o w a n i e wersji peł
nej w y m a g a w y p e ł n i e n i a o d p o w i e d n i e g o f o r m u l a r z a i d o k o n a n i a opłaty. P o w y k o n a n i u t y c h c z y n n o ś c i , drogą e l e k t r o n i c z n ą są d o s t a r c z a n e k o d y d l a wersji p e ł n e j . Instalator
zakłada
n a dysku
domyślnym
katalog c:\VMLAB,
w którym
u m i e s z c z a w s z y s t k i e n i e z b ę d n e d o pracy pliki. K o m p i l a t o r y j ę z y k a C m u szą b y ć z a i n s t a l o w a n e na k o m p u t e r z e n i e z a l e ż n i e od V M L A B - a . Nadają się j e d y n i e te, k t ó r e generują pliki *.cof. S y m u l a c j a u r u c h a m i a n e g o urządzenia m u s i b y ć p o p r z e d z o n a z d e f i n i o w a n i e m projektu. Z m e n u w y b i e r a m y p o l e cenie Project>New
project.
P o j a w i a się o k n o k r e o w a n i a projektu, w k t ó
r y m n a l e ż y w y p e ł n i ć o d p o w i e d n i e pola. T r z y m a j ą c się p o p r z e d n i e g o przy kładu n a d a j e m y n a z w ę n p . cwiczl.prj,
wybieramy jako docelowy mikro
k o n t r o l e r A T 9 0 S 2 3 1 3 , d e c y d u j e m y się na p r o g r a m w j ę z y k u C. Przyjmuje m y w e r s j ę G N U C i z g a d z a m y się na a u t o m a t y c z n e w y g e n e r o w a n i e pliku makefile,
c o j e s t d u ż y m u d o g o d n i e n i e m , g d y ż zwalnia n a s z k o n i e c z n o ś c i
k o p i o w a n i a t e g o pliku z i n n y c h k a t a l o g ó w lub ż m u d n e g o , s a m o d z i e l n e g o w p i s y w a n i a . A u t o m a t y c z n e t w o r z e n i e pliku nie z a m y k a o c z y w i ś c i e m o ż l i wości p ó ź n i e j s z e j j e g o e d y c j i . P r z y k ł a d o w e u s t a w i e n i a projektu przedsta wiono na r y s u n k u 13.15. Przed przystąpieniem d o symulacji przydatne będzie określenie konfiguracji całego u r u c h a m i a n e g o s y s t e m u , w t y m e w e n t u a l n e dołączenie wirtualnych peryferiów, zdefiniowanie p a r a m e t r ó w śledzenia, określenie p u n k t ó w syste-
£tppl ^dnthqni fhtnp^yutrcffi
i
Ewiun/ bron* /
dwtory J
' P Cnmt
U C C F 1 T K
OZCHWX
i
PCUER STORĘ 2 5 0 .
VSS-0
Power nod*i Kiero ciot*. Tr»to (nicitwiigM
to) «lorw« um
D; UDO PBO D; UCD PBl DC VIC PB»
flys. 73.75. 0*/w parame/rówpnyeWu ffys. 73.76. Konfiguracja uruchamianego systemu
m u , d o których będzie dołączony wielokanałowy oscyloskop wirtualny. Ustawień tych dokonuje się w oknie w y w o ł a n y m poleceniem View>Project File ( r y s u n e k 13.16). Szczegóły dotyczące użycia d o s t ę p n y c h elementów m o ż n a znaleźć w d o b r z e opracowanej p o m o c y programu. Zaletą V M L A B - a j e s t możliwość zdefiniowania pięciu r ó ż n y c h organizacji ekranu. Z a p a m i ę t y w a n i e kilku w i d o k ó w pozwoli szybko przechodzić pomię dzy ekranami zawierającymi istotne w d a n y m m o m e n c i e informacje. Znacz nie zwiększa się t y m s a m y m czytelność, c o m a znaczenie szczególnie wtedy, gdy monitor nie jest zbyt duży. Widoki zmienia się wybierając odpowiednią pozycję listy rozwijanej umieszczonej na końcu paska n a r z ę d z i o w e g o poka zanego na r y s u n k u 13.14. Pierwsza faza uruchamiania p r o g r a m u najczęściej będzie polegała n a częstym sięganiu d o źródła, k o m p i l o w a n i u programu, przeglądaniu
komunikatów
kompilatora i ponownej edycji źródła. W a r t o więc w j e d n y m z w i d o k ó w po dzielić ekran tylko na d w a okna: edycyjne i k o m u n i k a t ó w . Z a p e w n i to duży komfort podczas prac na t y m etapie. D o przeprowadzenia kompilacji progra m u należy wybrać polecenie Project>Build.
M o ż n a też u ż y ć klawisza F 9 lub
ikony Build (środkowa ikona na pasku n a r z ę d z i o w y m ) . W o k n i e
Messages
pojawią się wszystkie komunikaty generowane przez kompilator. Jeśli wystą pi choćby j e d e n błąd, kursor edycyjny zostanie ustawiony w podejrzanym o to miejscu. C z a s a m i j e d n a k błąd m o ż e b y ć ulokowany gdzie indziej. Na przykład, brak średnika kończącego linię p r o g r a m u C spowoduje wystąpienie błędu dopiero p o d c z a s kompilacji dalszej części programu. W s z y s t k i e miejs ca, na które trzeba zwrócić uwagę, są sygnalizowane w y k r z y k n i k a m i umiesz c z o n y m i przed treścią komunikatu. Kolor żółty oznacza, ż e chodzi tylko o ostrzeżenie, p r o g r a m będzie k o m p i l o w a n y . P r z y k ł a d o w o V M L A B ostrzega w ten sposób przed z a d e k l a r o w a n i e m zmiennej, która nie jest używana dalej w ż a d n y m miejscu p r o g r a m u . Gorzej, gdy wykrzyknik m a k o l o r czerwony. W takiej sytuacji kompilator nie tworzy pliku w y k o n y w a l n e g o , a więc uru chomienie programu nie będzie możliwe. T e g o typu błędy trzeba bezwzględ nie poprawić. C z a s a m i zdarza się, że j e d n a nieprawidłowość w źródle p o w o duje wygenerowanie całej listy błędów. Ż m u d n y etap eliminacji błędów for malnych kończy się wyświetleniem komunikatu: Success! Ali ready to run. O d tego momentu r o z p o c z y n a się kolejna faza uruchamiania aplikacji - sy mulacja. Teraz w s k a z a n e będzie stworzenie sobie kolejnych e k r a n ó w robo czych wynikających ze specyfiki u r u c h a m i a n e g o układu. N a p e w n o warto umieścić na n i m c h o ć b y niewielkie o k n o źródła programu. Wykorzystując krokowy tryb pracy, będzie w n i m zaznaczana aktualnie w y k o n y w a n a in strukcja na poziomie odpowiadającym wersji źródłowej (język C lub asemb-
ler). Jeśli p r o g r a m j e s t napisany w C a c h c e m y w y k o n y w a ć g o na poziomie t
rozkazów
m i k r o k o n t r o l e r a , konieczne b ę d z i e dołożenie o k n a Program
me-
mory i u c z y n i e n i e g o a k t y w n y m . P o lewej s t r o m e każdej instrukcji widnieją niewielkie p r z y c i s k i e k r a n o w e . Ich naciśnięcie powoduje wstawienie w da n y m miejscu p r o g r a m u p u ł a p k i (breakpoint).
Kolor klawisza zmienia się
w ó w c z a s n a c z e r w o n y . A k t y w n y c h p u ł a p e k m o ż e b y ć wiele. Podczas prac u r u c h o m i e n i o w y c h c z ę s t o z a c h o d z i konieczność pomiaru czasu w y k o n y w a nia się n p . o k r e ś l o n e j p r o c e d u r y . Tu niestety trzeba przyznać w y ż s z o ś ć pro g r a m u A V R S t u d i o nad V i s u a l M i c r o L a b . Atrakcyjna m o ż e b y ć natomiast graficzna interpretacja c z a s u p r z e b y w a n i a j e d n o s t k i centralnej w o k r e ś l o n y m miejscu p r o g r a m u . Rolę w s k a ź n i k ó w spełniają żółte paski nałożone na po s z c z e g ó l n e instrukcje. T r z e b a przy t y m pamiętać, że skala czasu jest logaryt miczna! P o s z c z e g ó l n e k o m p o n e n t y mikrokontrolera są z g r u p o w a n e w kilku niezależ nych o k n a c h , n p . ; rejestry, p a m i ę ć p r o g r a m u , pamięć danych S R A M , pamięć E E P R O M , porty oraz U A R T , timery, w a t c h d o g . Zawartość k a ż d e g o z nich m o ż e b y ć w y ś w i e t l a n a w postaci binarnej, h e x a d e c y m a l n e j , całkowitoliczbowej, a n a w e t w kodach A S C I I . N a wszystkie pola jest nałożony półprzeźro czysty p a s e k graficzny, który w postaci analogowej pokazuje stan d a n e g o k o m p o n e n t u . K a ż d y z rejestrów m o ż e b y ć w dowolnej chwili zmieniony. Niestety n i e d o t y c z y to licznika programu, c o oznacza, że p r o g r a m m o ż e b y ć w y k o n a n y t y l k o w takiej kolejności, j a k w układzie rzeczywistym. U ż y t k o w nik m a też m o ż l i w o ś ć podglądania z m i e n n y c h programu. Bywają z t y m nie stety p r o b l e m y , z m i e n n e te nie z a w s z e są dostępne. Nie m o ż n a też modyfiko w a ć w prosty s p o s ó b ich wartości. W t y m zakresie A V R Studio wykazuje p r z e w a g ę n a d Visual M i c r o L a b . P e w n y m wyjściem z sytuacji jest podejrze nie miejsca p r z e c h o w y w a n i a zmiennej (rejestry, pamięć R A M ) i jej edycja na tym poziomie. Specyficznym o k n e m V M L A B - a jest tzw. panel sterujący. Zawiera on zewnę trzne urządzenia peryferyjne wykorzystywane w aplikacji. M o ż e to być klawia tura 4 x 4 , alfanumeryczny wyświetlacz L C D , wirtualny terminal T T Y , diody świecące, potencjometry. Ich parametry konfiguruje się w oknie projektu. U r u c h o m i e n i e w i r t u a l n e g o systemu następuje p o naciśnięciu klawisza F 5 lub ikonki z s e m a f o r e m . N a s z wirtualny system zaczyna w t y m m o m e n c i e dzia łać. N a o s c y l o s k o p i e (jeśli j e s t włączony) pojawiają się przebiegi g e n e r o w a n e przez m i k r o k o n t r o l e r , z m i a n i e ulegają wszystkie w y k o r z y s t y w a n e k o m p o nenty. S y m u l a c j ę m o ż n a z a t r z y m a ć naciskając ikonę ze z n a k i e m „ S T O P " . Oprócz p r a c y ciągłej m a m y d o dyspozycji - p o d o b n i e j a k w A V R Studio różne tryby pracy k r o k o w e j .
Przebieg na oscyloskopie m o ż e być dość swobodnie skalowany, umożliwia jąc w y ś w i e d a n i e charakterystyk z dużą dokładnością (100 ns/działkę) lub wyświetlanie przebiegów zebranych w dłuższym czasie, a także przyjrzenie się detalom z rozdzielczością
100 ns/działkę. Ustawiając na oscylogramie
d w a kursory m o ż n a łatwo d o k o n a ć pomiaru czasu. Program Visual Micro L a b jest bardzo w y g o d n y w użyciu, m a wiele cech sprawiających, że chętnie się p o niego sięga. W sytuacjach, w których wady stają się męczące z a w s z e można sięgnąć p o A V R Studio.
13.5. Programowanie pamięci programu w systemie (ISP) Mikrokontrolery A V R firmy Atmel są w y p o s a ż o n e w interfejs umożliwiający programowanie ich pamięci j u ż p o zamontowaniu w systemie (ISP). W y k o rzystanie takiego sposobu programowania powoduje, że m o ż n a zrezygnować z zakupu programatora stacjonarnego, wystarczy j e d y n i e prosty interfejs mię dzy u r u c h a m i a n y m s y s t e m e m a k o m p u t e r e m P C (jak np. Z L 2 P R G opisany w dalszej części rozdziału). Liczne przykłady takich konstrukcji można zna leźć w Internecie. O d n o ś n i k i są zamieszczone w dodatku H.
13.5.1. Programator ZL2PRG S c h e m a t elektryczny programatora Z L 2 P R G p o k a z a n o na r y s u n k u 13.17. Układ U l pełni rolę separatora linii w e / w y interfejsu d r u k a r k o w e g o Centro nics od systemu, w k t ó r y m znajduje się p r o g r a m o w a n y mikrokontroler. Inter fejs jest zasilany napięciem pobieranym z systemu, w związku z c z y m pod czas korzystania z niego nie trzeba stosować d o d a t k o w e g o zasilacza. Dla pro gramatora Z L 2 P R G zaprojektowano dwustronną płytkę drukowaną,
której
mozaiki i schemat m o n t a ż o w y p o k a z a n o w dodatku G. Układ U l m a o b u d o w ę przystosowaną do montażu S M D ( S O 2 0 ) , pozostałe elementy są m o n t o w a n e klasycznie. Złącza J l i JP1 są montowane na krawędzi płytki w taki sposób, że przed ich przylutowaniem laminat jest wsuwany po• między rzędy wyprowadzeń. Na r y s u n k u 13.18 pokazano przypisanie sygna łów d o styków gniazda J P 1 . Sygnał L E D można wykorzystać d o sterowania diody świecącej, sygnalizującej programowanie układu. N a płytce Z L 1 A V R dioda taka jest uwzględniona (D9 dołączona d o styku 3. gniazda ISP2).
SN74HC244
Rys. 13.17. Schemat elektryczny programatora ZL2PRG
A t u t e m p r o g r a m a t o r a Z L 2 P R G j e s t m o ż l i w o ś ć współpracy z wieloma bez p ł a t n y m i p r o g r a m a m i sterującymi j e g o pracą. J e d n y m z lepszych j e s t p r o gram P o n y P r o g 2 0 0 0 ( r y s u n e k 13.19), dostępny w Internecie pod adresem: http://www.lancos.com/ppwin95.html.
P o n y P r o g występuje w wersjach d l a
W i n d o w s (łącznie z NT72K/XP) oraz Linuksa. Obsługuje mikrokontrolery: A T 9 0 S 1 2 0 0 , A T 9 0 S 2 3 1 3 , A T 9 0 S 2 3 2 3 , A T 9 0 S 2 3 3 3 , A T 9 0 S 2 3 4 3 , AT90S4414, AT90S4434, AT90S8515, AT90S8534, AT90S8535, ATmega8, ATmegaló, ATmega64, ATmegal03, ATmegal28, ATmegal61, ATmegal63, ATmega 323,
ATtinyl2 i ATtinyl5.
Na r y s u n k u
13.20 p o k a z a n o zalecany s p o s ó b dołączenia
programatora
Z L 2 P R G d o m i k r o k o n t r o l e r a z a i n s t a l o w a n e g o w systemie. Taki sposób dołą• PoorProoJOOO SmM Doyicii Pingin
• lal xi Efc
Bo»w
tainsd
itrp
U*y
J«*"> 2
^nljn
"3
8
> u o o a Strona .etemenlów"
— f ••••
płytki programatora Sliona Jutowanis" płytki programatora
1*
g n o m ę ) 11 I I b o b i e d> f f u b g s b 3 » ) 11 KF o n o M i ) f i FF onoes a) n II o n o s ó d l u II 011007(1) t i ft gngosii) i r n t a a m i ) if n DOOMO) F-F
II II II
ii u n FF ff n FF FF FF II II U
II II rr rr
II If II ff IF |t FF FI
i ir i r FI r 1 FF F F II F I II I
F I FF n FF I F Ff FF FF I I
ggyijiijUyijggijiiiiuiJ
ir i rr r
rr rr rr rr BWIOFł.) I I
rr
IT M
(f
FI Ff Tf If > W * b X 0 > ~ AT9BM3J" "ĆteJJStyw CRC 4*3*
13.18. Wyprowadzenia mnatów na styki gniazda JP1
3
I II I I Ił I I F t F FF F I Ft f I F F I FI I I 'I I I Tf I I I I I
n Ff t r r i
n a e m B ) ir H a n o u e i o i i Ff o m a n a) r r IT
|*19CSUJ3
Sys, 13.79. Wygląd okna programu PonyProg 2000
mmmmmm
Do złącza JP1 programatora ZL2PRG
3 PB7
x 1 ( t
Do aplikacji P87
PS7
AXY
PS6
PB6
PB6
exv
PBS
PB5
PBS
CXY A B C
RESET
RESET
AVR Rys. 13.20. Zalecany sposób dołą czenia programatora ZL2PRG do mikrokontrolera zainstalowanego w systemie, gdy PB5, PB6 i PB7 pracują jako wejścia
RESET
AVR
AX ex ex AY 8Y CY
15 £BJL PB$
| O.
Rys. 13.21. Zalecany sposób dołączenia pro gramatora ZL2PRG do mikrokontrolera zain stalowanego w systemie, gdy co najmniej je dno z wyprowadzeń PB5, PB6 lub PBl pracuje jako wejście
czenia interfejsu I S P d o rnikrokontrolera jest m o ż l i w y tylko w przypadku, gdy porty P B 5 , P B 6 i P B 7 są skonfigurowane j a k o wejścia. W przypadku, gdy któreś z tych w y p r o w a d z e ń musi pracować j a k o wyjście, firma Atmel za leca inny sposób dołączenia programatora - p o k a z a n o go na r y s u n k u 13.21.
14. Przykładowe aplikacje Wcześniejsze rozdziały książki zawierały wiele informacji technicznych, które można znaleźć" w notach katalogowych mikrokontrolerów AVR, w szczególności A T 9 0 S 2 3 1 3 . Zapoznanie się z nimi jest nieodzowne do świadomego i efektyw nego wykorzystywania możliwości mikrokontrolerów w e własnych projektach, pomaga także zrozumieć zasadę działania rozwiązań spotykanych w książkach, czasopismach i Internecie. Sucha wiedza katalogowa z pewnością nie wystarczy do pełnego zaznajomienia się z mikrokontrolerami A V R . Najczęściej dopiero sa modzielnie przeprowadzone eksperymenty praktyczne wyjaśnią wątpliwości, ja kie mogły nasunąć się podczas lektury opisu technicznego. Rozdział 14. u ł o ż o n o w formie zestawu ć w i c z e ń praktycznych, s u k c e s y w n i e odsłaniających tajemnice mikrokontrolera, objaśniających zasady w y k o r z y s tywania j e g o b l o k ó w funkcjonalnych i rozwiązujących wiele p r o b l e m ó w , na j a k i e natykają początkujący elektronicy. Powtarzające się bez końca pytania, z którymi m o ż n a s p o t k a ć się na internetowych grupach dyskusyjnych typu: „Jak o b s ł u ż y ć w y ś w i e t l a c z a l f a n u m e r y c z n y ? " , „Jak zrealizować transmisję, wykorzystując interfejs R S 2 3 2 ? " , czy nawet . J a k sterować L E D - e m dołączo n y m d o m i k r o k o n t r o l e r a ? " , skłaniają d o zajęcia się tymi zagadnieniami. M a m nadzieję, ż e o p i s a n e e k s p e r y m e n t y rozwieją przynajmniej część tego typu wątpliwości C z y t e l n i k ó w . Przedstawiony m i n i k u r s opiera się na płytce uruchomieniowej
ZL1AVR
z m i k r o k o n t r o l e r e m A V R A T 9 0 S 2 3 1 3 . Zestaw zaprojektowano specjalnie na potrzeby książki. W y b ó r mikrokontrolera został p o d y k t o w a n y dużą popular nością tego układu, j e g o niską ceną i faktem, że świetnie się nadaje d o wielu p r a k t y c z n y c h aplikacji.
Płytki
drukowane
zestawu
ZL1AVR
oraz
programatora
Z L 2 P R G są d o s t ę p n e w i n t e r n e t o w y m sklepie W y d a w n i c t w a BTC
(hrip://www.btc.pł/index.php?id-15).
P o d s t a w o w y m dylematem rozstrzyganym podczas przygotowywania ćwiczeń był w y b ó r j ę z y k a programowania. W poprzednich rozdziałach książki więk szość p r z y k ł a d ó w napisano w asemblerze. T r u d n o było uczynić inaczej pod czas o m a w i a n i a listy rozkazów mikrokontrolera. Język ten nie jest jednak obecnie zbyt często stosowany w praktyce. Pisanie programów w asemblerze zajmuje d u ż o czasu, a ich czytelność, szczególnie p o p e w n y m czasie staje się
niewielka. Alternatywnymi możliwościami był Bascom lub j ę z y k C - mój w y bór padl na język C. A r g u m e n t e m przemawiającym za t y m rozwiązaniem był fakt, że jest dostępny kompilator tego języka w wersji darmowej ( A V R - G C C ) , bez żadnych ograniczeń (licencja G N U ) . Spotykane w Internecie opisy zagad nień technicznych również na ogół występują w postaci procedur lub całych pro gramów pisanych w C. Nie da się ukryć, że język ten stanowi obecnie standard w zastosowaniach profesjonalnych, warto więc nauczyć się g o j a k najwcześniej.
P r z y k ł a d o w e programy przedstawione w dalszej części książki napisano w języku C i k o m p i l o w a n o za pomocą
bezpłatnego
kompilatora A V R - G C C w wersji 3.2 datowanej n a 2 0 0 2 . 0 6 . 2 5 . Jest ona dostępna na stronie internetowej W y d a w n i c t w a B T C (http:/Avww.btc.pl?id=pliki).
Wybranie języka wysokiego poziomu m a również taką zaletę, że ucząc się pro gramowania w języku wysokiego poziomu, w każdej chwili m o ż n a podejrzeć kod wynikowy i w p e w n y m sensie również w ten sposób uczyć się asemblera. Przykłady przedstawione w książce k o m p i l o w a n e są k o m p i l a t o r e m
AVR-
G C C . S p o s ó b skonfigurowania środowiska d o pracy z t y m kompilatorem opisano w rozdziale 13. Należy zaznaczyć, że nie było z a m i a r e m autora pisa nie podręcznika d o nauki j ę z y k a C. Trzeba również dodać, że zamieszczone programy reprezentują tylko j e d n ą z wielu możliwych m e t o d rozwiązywania poszczególnych p r o b l e m ó w .
14.1. Zestaw uruchomieniowy ZL1AVR Jak j u ż w s p o m n i a n o , specjalnie na potrzeby niniejszej książki zaprojektowa n o zestaw u r u c h o m i e n i o w y , na którym były testowane wszystkie projekty przedstawione w tym rozdziale. Jest on stosunkowo łatwy w w y k o n a n i u , bar d z o uniwersalny, a j e g o koszt wykonania relatywnie niski. N a r y s u n k u 14.1 przedstawiono schemat elektryczny zestawu uruchomienio wego Z L 1 A V R , a na r y s u n k u 14.2 widok zmontowanej płytki i rozmieszcze nie na niej najważniejszych elementów. Dla j a k najpełniejszego zilustrowania możliwości mikrokontrolera
przewidziano kilka b l o k ó w
funkcjonalnych,
k o n f i g u r o w a n y c h za p o m o c ą licznych z w o r e k . O d p o w i e d n i e ich ustawienie pozwoli na przeprowadzenie różnorodnych eksperymentów praktycznych.
Rys. 14.2. Rozmieszczenie najważniejszych elementów na płytce zestawu ZL1AVR
Wykorzystując zestaw będzie m o ż n a również uruchamiać fragmenty włas nych aplikacji, a to dzięki uniwersalnemu polu m o n t a ż o w e m u umieszczone m u w prawej części płytki. Rozwiązanie takie podnosi walory funkcjonalne, a przede wszystkim edukacyjne zestawu.
14.1.1. Zasilanie zestawu Zasilanie z e s t a w u Z L 1 A V R m o ż e b y ć zrealizowane na kilka s p o s o b ó w . Pier wszy z nich, t o w y k o r z y s t a n i e t y p o w e g o zasilacza w t y c z k o w e g o dostarczają cego napięcie o wartości od 8 d o 12 V. Umieszczenie na płytce m o s t k a pros towniczego D l i stabilizatora U l nie narzuca ostrych w y m a g a ń c o d o napię cia w e j ś c i o w e g o . N i e m u s i b y ć o n o stabilizowane, nie jest nawet konieczne napięcie stale. J a k w i ę c w i d a ć , drugim s p o s o b e m zasilania będzie w y k o r z y s tanie z w y k ł e g o transformatora. W t y m p r z y p a d k u wartość skuteczna napięcia powinna z a w i e r a ć się m i ę d z y 5,6 V , a 8,5 V.
M o z a i k i płytki d r u k o w a n e j oraz schemat m o n t a ż o w y płytki ze s t a w u Z L I A Y R znajdują się w dodatku G.
Napięcie zasilające d o p r o w a d z a się d o gniazda J P 1 2 lub J P 1 3 . Złącze J P 1 2 to śrubowy z a c i s k A R K , przydatny d o podłączania p r z e w o d ó w . Z e względu na obecność m o s t k a D l nie j e s t istotna b i e g u n o w o ś ć dołączanego napięcia zasi lającego. Z ł ą c z e J P 1 3 to t y p o w e g n i a z d o zasilające, które m o ż n a w y k o r z y s tywać a l t e r n a t y w n i e z J P 1 2 . Pobór prądu przez system nie jest duży (ok. 45 m A z włączonymi diodami L E D i wyświetlaczem L C D ) , dzięki czemu stabilizator U l - w większości przypad ków - będzie m ó g ł pracować bez radiatora. Dołączenie własnych układów może spowodować znaczny wzrost prądu zasilającego, a co za tym idzie wzrost tempe ratury stabilizatora. W takim przypadku konieczne może się okazać założenie ra diatora na układ U l lub zmniejszenie d o minimum wartości napięcia zasilające go. Różnica między napięciem wejściowym, a wyjściowym nie powinna być mniejsza niż 2 V. Kondensator C7 filtruje tętnienia napięcia wyprostowanego, a C 8 i C 9 odsprzęgają układ U l dla wielkich częstotliwości,
zabezpieczając
przed wzbudzeniem się. W dolnej oraz górnej części uniwersalnego pola monta żowego przebiegają dwie ścieżki zasilające tak, by można było w j a k najwygod niejszy sposób doprowadzić napięcie zasilające d o własnej części badanego sys temu. Oprócz tego napięcie to jest dostępne na łączówkach JP17 i JP18. Podczas korzystania z nich należy uważać, by nie spowodować zwarcia.
14.1.2. Taktowanie i zerowanie mikrokontrolera N a j w a ż n i e j s z y m e l e m e n t e m n a płytce j e s t o c z y w i ś c i e m i k r o k o n t r o l e r U 3 . Zalecany j e s t układ A T 9 0 S 2 3 1 3 - 1 0 , współpracujący z r e z o n a t o r e m k w a r c o -
w y m X l o częstotliwości 8 M H z . Dla takiej konfiguracji są p r z y g o t o w a n e p r z y k ł a d o w e p r o g r a m y . W szczególności c h o d z i o p r o c e d u r y o d m i e r z a n i a czasu. W p r z y p a d k u k o r z y s t a n i a z rezonatora na płytce, z w o r k i J3 i J 4 p o winny b y ć u s t a w i o n e w g ó r n y m położeniu. G d y b y z j a k i c h ś p o w o d ó w za szła k o n i e c z n o ś ć d o ł ą c z e n i a z e w n ę t r z n e g o sygnału z e g a r o w e g o , to jest to m o ż l i w e poprzez ł ą c z ó w k ę O S C _ E X T . Z w o r k i J3 i J 4 p o w i n n y b y ć w ó w c z a s u s t a w i o n e w d o l n y m położeniu. Sygnał z łączówki wejściowej O S C _ E X T trafia p o p r z e z z w o r k ę J 3 n a wejście X T A L 1 m i k r o k o n t r o l e r a . M o ż l i w o ś ć użycia z e w n ę t r z n e g o sygnału z e g a r o w e g o m o ż e b y ć w y k o r z y s tana n p . d o s p r a w d z e n i a zależności prądu zasilającego w funkcji częstotli w o ś c i taktowania u k ł a d u . Z generatorem jest związany układ zerujący. Mikrokontroler j e s t j a k w i a d o m o układem synchronicznym. D o j e g o pracy niezbędny j e s t odpowiedni przebieg zegarowy. W m o m e n c i e włączenia zasilania generator nie wzbudza się natychmiast. Start jednostki centralnej musi więc być opóźniony o czas gwarantujący j e g o stabilną pracę. D o w y g e n e r o w a n i a o d p o w i e d n i e g o sygna łu R E S E T najlepiej nadają się specjalizowane układy, takie j a k n p . D S 1 8 1 3 , który zastosowano w zestawie u r u c h o m i e n i o w y m (układ U 2 ) . Zaletą takiego rozwiązania jest w y g e n e r o w a n i e p e w n e g o w działaniu sygnału zerującego, bez względu na szybkość narastania napięcia zasilającego. O d p o w i e d n i a ja kość zerowania b y w a ignorowana przez konstruktorów, t y m c z a s e m okazuje się, że w wielu p r z y p a d k a c h nieprawidłowo rozwiązane z e r o w a n i e mikrokon trolera uniemożliwia j e g o prawidłowe działanie. Z e r o w a n i e mikrokontrolera tylko i wyłącznie poprzez wyłączanie i włączanie zasilania byłoby na dłuższą metę uciążliwe, szczególnie w przypadku prowa dzenia różnorodnych testów. Dlatego też na płytce znajduje się przycisk R E S E T , za pomocą którego m o ż n a ręcznie zerować system.
14.1.3. Wykorzystywanie portów mikrokontrolera Wszystkie porty mikrokontrolera są wyprowadzone na gniazda o oznaczeniach P O R T B i P O R T D . Z a n i m j e d n a k sygnały z odpowiednich portów mikro kontrolera d o nich dotrą, muszą przejść przez zworki zakładane na specjalnie do tego celu umieszczone podwójne rzędy szpilek Z W ^ P O R T B i Z W _ P O R T D . Umieszczenie zworki np. w położeniu 1-2 gniazda Z W _ P O R T B powoduje połączenie w y p r o w a d z e n i a 1 gniazda P O R T B z w y p r o w a d z e n i e m 19 mikro kontrolera (PB7). Analogicznie jest dla pozostałych wyprowadzeń. W ten spo sób wyprowadzenia poszczególnych portów mikrokontrolera (gniazda P O R T B i P O R T D ) mogą b y ć n a stałe dołączone, np. d o własnego układu umieszczone-
g o na u n i w e r s a l n y m polu m o n t a ż o w y m i w razie potrzeby odłączane od niego za pomocą z w o r e k zakładanych na Z W J > O R T B i Z W _ P O R T D . N a u w a g ę za sługują k o ń c ó w k i 1 i 2 g n i a z d a Z W _ P O R T D oraz 1 P O R T D . Mikrokontroler A T 9 0 S 2 3 1 3 m a j e d y n i e 7 w y p r o w a d z e ń portu D i w związku z t y m w y m i e nione wyżej k o ń c ó w k i w y k o r z y s t a n o d o dołączenia sygnału d o wewnętrzne g o k o m p a r a t o r a a n a l o g o w e g o mikrokontrolera. Dla w y g o d y w y p r o w a d z e n i e 2 Z W _ P O R T D dołączono do masy.
D l a w y g o d y pracy w a r t o p r z y g o t o w a ć sobie specjalne kabelki,
U|GA
k t ó r e będą w y k o r z y s t y w a n e d o połączeń systemu z w ł a s n y m u k ł a d e m u m i e s z c z o n y m na u n i w e r s a l n y m polu m o n t a ż o w y m . K a b e l k i takie m o g ą b y ć w y k o n a n e np. przy użyciu pojedyn c z y c h s t y k ó w tulipanowych w y m o n t o w a n y c h ze standardowej ł ą c z ó w k i w i e l o s t y k o w e j . D o każdej k o ń c ó w k i należy przy luto w a ć k a w a ł e k drutu (linki miedzianej) i zaizolować rurką termo kurczliwą, w z m a c n i a j ą c t y m s a m y m połączenie. Drugi koniec k a b e l k a m o ż e b y ć j e d y n i e p o z b a w i o n y izolacji i p o c y n o w a n y . B ę d z i e on później d o l u t o w y w a n y do o d p o w i e d n i e g o punktu p o l a m o n t a ż o w e g o . D o e k s p e r y m e n t ó w przyda się też kilka ka b e l k ó w z a k o ń c z o n y c h obustronnie łączówką.
14.1.4. Klawiatura W jaki s p o s ó b c z ł o w i e k m o ż e k o m u n i k o w a ć się z systemem mikroprocesoro w y m ? N a p r z y k ł a d za p o m o c ą klawiatury. J a k o , ż e jej obsługa stanowi od wieczny p r o b l e m początkujących
elektroników, klawiatury nie m o g ł o za
braknąć na p ł y t c e . T w o r z ą j ą przyciski S W 1 , S W 2 , S W 3 , S W 4 . Z w o r k i JP4...JP7 służą d o dołączenia klawiatury d o mikrokontrolera i o d p o w i e d n i e g o jej s k o n f i g u r o w a n i a . Przyciski S W 1 . . . S W 4 m o g ą p r a c o w a ć j a k o d w a nie zależne przyciski dołączone b e z p o ś r e d n i o d o mikrokontrolera, przy c z y m muszą b y ć o b s ł u g i w a n e p r z e z d w a różne porty (można więc w y k o r z y s t y w a ć parę S W 1 , S W 4 lub S W 2 , S W 3 ) . Mogą też b y ć skonfigurowane j a k o klawia tura m a t r y c o w a 2 x 2 . W p i e r w s z y m p r z y p a d k u zworki J P 6 i J P 7 muszą być zwarte, a J P 4 i J P 5 z a ł o ż o n e w pozycji 2-3 (połączenie z masą). W układzie klawiatury m a t r y c o w e j z w o r k i J P 4 i J P 5 p o w i n n y b y ć założone w pozycji 1-2 (lewe p o ł o ż e n i e ) . Z w o r k i J P 6 i J P 7 służą d o całkowitego odłączenia przycisków od mikrokontrolera. M o ż e b y ć t o konieczne np. w przypadku używania U A R T - u lub p o r t ó w PD1 i/lub PDO. Naciśnięcie k t ó r e g o ś z tych przycisków m o g ł o b y zakłócić pracę systemu.
14.1.5. Interfejs RS232 Wejście i wyjście U A R T - u mikrokontrolera w y p r o w a d z o n o poprzez zworki J P 2 i J P 3 oraz układ M A X 2 3 2 (U4) na gniazdo D B 1 . Układ U 4 służy do konwersji p o z i o m ó w logicznych mikrokontrolera na p o z i o m y napięć zgodne ze standardem R S 2 3 2 . Płytkę uruchomieniową można łączyć poprzez gniaz d o D B 1 (typu D S U B - 9 ) z d o w o l n y m i n n y m urządzeniem
wyposażonym
w interfejs R S 2 3 2 . D o połączenia wystarczy kabel typu nułl-modem,
w któ
rym wykorzystuje się jedynie 3 przewody (dwie linie transmisyjne i masę sygnałową). N i e z b ę d n e w takim przypadku zapętlenia sygnałów R T S i C T S oraz D S R , D T R i D C D są w y k o n a n e na płytce ( r y s u n e k 14.3).
DTE (np. ZL1AVR)
OCE (PCJ
Rys. 14.3. Połączenie typu nułl-modem. Zapętlenia sygnałów RTS i CTS oraz DSR, DTR i DCD mogą być wykonane na płytce drukowanej lub przy stykach złącz DSUB-9
14.1.6. Diody LED Kolejnym środkiem komunikacji p o m i ę d z y systemem a u ż y t k o w n i k i e m jest zespół diod świecących L E D 1 . . . L E D 8 . Są o n e dołączane indywidualnie d o portu P B mikrokontrolera poprzez zworki Z W _ P O R T B . M o ż n a wykorzysty w a ć tylko wybrane, niekoniecznie wszystkie na raz. Z w o r k a J P 1 służy nato miast d o j e d n o c z e s n e g o odłączenia wszystkich diod L E D od mikrokontrole ra. Sterowanie d i o d a m i o d b y w a się bezpośrednio z w y p r o w a d z e ń mikrokon trolera bez d o d a t k o w y c h
wzmacniaczy tranzystorowych. J a k
pamiętamy
z poprzednich rozdziałów, wydajność prądowa portów układu A T 9 0 S 2 3 1 3 jest wystarczająca d o tego celu. Jedyne na co trzeba zwrócić u w a g ę , to takie dobranie rezystorów R 9 d o R 1 5 , aby nie przekroczyć całkowitej dopuszczal nej m o c y strat układu U 3 . W przypadku zestawu warunek ten jest spełniony, gdyż rezystory dołączone szeregowo ograniczają prąd diod L E D d o ok. 4 m A / s z t , co przy zapaleniu wszystkich diod daje pobór prądu o wartości ok. 32 mA. Założona wartość prądu w zupełności p o w i n n a wystarczyć d o wyraźnego świecenia się diod L E D , nawet gdy nie będą to diody wysokiej j a s n o ś c i . D i o -
dy L E D są d o ł ą c z o n e d o t e g o s a m e g o portu c o wyświetlacz alfanumeryczny L C D . Jeśli p r z e w i d y w a n e j e s t j e g o stosowanie, to niestety należy zrezygno wać z diod L E D lub z g o d z i ć się, że będą mrugały podczas pracy w czasie w y m i a n y d a n y c h m i ę d z y mikrokontrolerem a wyświetlaczem. Jedynie L E D 1 i L E D 2 pozostają d o e w e n t u a l n e g o n o r m a l n e g o wykorzystania, ale tym ra zem p o d w a r u n k i e m , ż e nie b ę d z i e u ż y w a n y przetwornik analogowo-cyfrowy lub o d p o w i e d n i o porty PBO i P B l .
14.1.7. Wyświetlacz alfanumeryczny LCD Na płytce u r u c h o m i e n i o w e j u m i e s z c z o n o g n i a z d o szpilkowe L C D 1 przezna czone d o d o ł ą c z e n i a t y p o w e g o wyświetlacza alfanumerycznego L C D . W z e stawie p r z e w i d z i a n o w y ś w i e t l a c z 2 x 1 6 . O b s ł u g a jest realizowana za pomocą 4-bitowej s z y n y d a n y c h i d w ó c h sygnałów sterujących: E i R S . T y p o w y in terfejs w y ś w i e t l a c z a a l f a n u m e r y c z n e g o zawiera ponadto sygnał R / W , za p o mocą k t ó r e g o określa się k i e r u n e k transmisji danych. Jest to potrzebne pra wie wyłącznie d o s p r a w d z a n i a gotowości wewnętrznego sterownika wy świetlacza. N a d e s ł a n e polecenie d o w y k o n a n i a przez mikrokontroler w c h w i li, gdy s t e r o w n i k nie j e s t g o t o w y kończy się j e g o zignorowaniem, c o najczęś ciej p r o w a d z i d o b ł ę d n e g o działania układu. G o t o w o ś ć tę m o ż n a j e d n a k prze widzieć, w p r o w a d z a j ą c d o obsługi odpowiednie opóźnienia p r o g r a m o w e (za kładając, ż e p o t y m czasie sterownik upora się z wcześniejszymi zadaniami). Obsługa n i e j e s t wtedy tak wydajna, j a k przy sprawdzaniu gotowości wy świetlacza, lecz w z a s t o s o w a n i a c h praktycznych na ogół w niczym to nie p r z e s z k a d z a . P o t e n c j o m e t r P I usytuowany blisko wyświetlacza służy d o re gulacji kontrastu i c z ę s t o b y w a p o w o d e m frustracji niedoświadczonych elekt roników. J e ś l i b o w i e m j e g o s u w a k będzie ustawiony w z ł y m położeniu, to kontrast w y ś w i e t l a c z a m o ż e b y ć na tyle m a ł y , że żadne znaki nie będą wi doczne na w y ś w i e t l a c z u . C a ł a w i n a w takich sytuacjach j e s t c z ę s t o „zrzuca na" na błędy programu lub pomyłki w połączeniach. Dlatego w czasie pierw szego włączenia wyświetlacza, gdy nic na n i m nie widać, warto pokręcić su wak od j e d n e g o skrajnego położenia do drugiego. Dopiero, gdy p o tym spraw dzeniu w y ś w i e t l a c z nadal będzie „milczał", należy szukać innych błędów.
2
14.1.8. Interfejsy l C i 1-Wire Interfejsy 1 ^ i 1-Wire są p o w s z e c h n i e s t o s o w a n e d o komunikacji różnorod nych
urządzeń
peryferyjnych
z systemem
mikroprocesorowym.
Czasami
można s p o t k a ć nieco z m i e n i o n e ich n a z w y , c o b y w a związane z trudnościami
w uzyskiwaniu licencji na stosowanie interfejsu przez p r o d u c e n t ó w poszcze gólnych m o d u ł ó w peryferyjnych. Okazuje się, ż e właściciele p r a w autorskich b a r d z o s u r o w o j e egzekwują, a liczni producenci nie zawsze m o g ą sobie po zwolić lub p o prostu nie mają zamiaru za nie płacić. P r o b l e m ó w takich nie 2
uniknął nawet taki potentat, j a k Analog Devices. Interfejs I C został opraco wany przez firmę Philips, natomiast 1-Wire w dawnej Dallas Semiconductor, obecnie M a x i m - D a l l a s . O b y d w a interfejsy nie wymagają stosowania żadnych dodatkowych układów oprócz rezystorów podciągających na liniach transmi 2
syjnych. Urządzenia peryferyjne komunikujące się poprzez interfejs I C dołą cza się d o systemu p o p r z e z gniazda J l lub J2 ( z d u b l o w a n o j e dla w y g o d y ) . Linię danych S D A d o ł ą c z a się d o mikrokontrolera za pomocą z w o r k i J P 1 5 , a linię zegarową S C L za p o m o c ą J P 1 6 . Rezystory podciągające R 2 i R 3 gwarantują o d p o w i e d n i ą j a k o ś ć podciągnięcia. A n a l o g i c z n i e j e s t z interfej s e m 1-Wire. T y m r a z e m , j a k sama n a z w a wskazuje, j e s t t o p o ł ą c z e n i e j e d n o p r z e w o d o w e . S y g n a ł d o p r o w a d z a się d o gniazda J P 1 0 lub J P 1 1 , a dołą 2
czenie d o systemu z a p e w n i a z w o r k a J P 1 4 . Interfejsy I C i 1-Wire zajmują porty o d p o w i e d n i o P D 5 , P D 6 i P D 3 . Należy to uwzględnić w planowaniu eksperymentów.
14.1.9. Przetwornik analogowo-cyfrowy Z zasady działania u k ł a d ó w cyfrowych, d o j a k i c h należą mikrokontrolery, wynika, że operują o n e na dyskretnym i s k o ń c z o n y m zbiorze stanów w e j ściowych i wyjściowych. T y m c z a s e m świat wokół nas jest a n a l o g o w y , czyli ciągły i nieskończony (przynajmniej z matematyczno-fizycznego punktu w i dzenia). M o ż n a w i e c w y s n u ć wniosek, że przydatność
mikrokontrolerów
w dziedzinie analizy t y p o w y c h , otaczających nas zjawisk będzie raczej nie wielka. Z drugiej zaś strony jeśli przyjrzeć się n a s z y m z m y s ł o m , to okaże się, że są bardzo ułomne i s t o s u n k o w o prosto m o ż n a j e oszukać... oczywiście m e todami cyfrowymi. Przekonujemy się o t y m na c o dzień słuchając płyt k o m p a k t o w y c h , czy nawet oglądając zdjęcia z wakacji. Jak z a t e m w p r o w a d z i ć analogową informację d o cyfrowego mikrokontrolera? W o g ó l n y m przypad ku o d p o w i e d ź brzmiałaby: stosując przetwornik analogowo-cyfrowy. W i ę k szość p r o d u c e n t ó w mikrokontrolerów m a w swojej ofercie handlowej modele układów w y p o s a ż o n y c h w wewnętrzne przetworniki A D C Converter). tinyl5L,
(Analog-Digital
Znajdziemy j e również wśród produktów A t m e l a , np.: A T A T t i n y 2 6 L , A T 9 0 S 4 4 3 3 , A T 9 0 S 8 5 3 5 i większość u k ł a d ó w serii
A T m e g a . Niestety przetwornika takiego nie z a i m p l e m e n t o w a n o w układzie A T 9 0 S 2 3 1 3 . W zamian za to znajduje się w j e g o strukturze k o m p a r a t o r ana l o g o w y . Dokładając s t o s u n k o w o niewiele e l e m e n t ó w zewnętrznych m o ż n a
Ą
|PO4
Rys. 14.4. Schemat elektryczny przetwornika analogowo-cyłrowego wykonanego na komparatorze analogowym
Rys. 14.5. Przebieg cyklu lądowania/ rozładowania kondensatora referencyjnego C
za j e g o p o m o c ą zrealizować przetwornik analogowo-cyfrowy. J e g o parametry nie są z p e w n o ś c i ą tak dobre j a k układów wyspecjalizowanych, czy przetwor ników z a w a r t y c h w strukturach mikrokontrolerów, ale są w zupełności wystar czające w wielu zastosowaniach. Schemat elektryczny i ogólną zasadę działa nia takiego przetwornika przedstawiono na r y s u n k a c h 14.4 i 14.5. K o n d e n s a t o r p o m i a r o w y C dołączono d o nieodwracającego wejścia kompa ratora a n a l o g o w e g o oraz - p o p r z e z opornik R - d o j e d n e g o z p o r t ó w mikro kontrolera ( n p . P D 4 ) . D o wejścia odwracającego komparatora jest doprowa dzony a n a l o g o w y sygnał m i e r z o n y . Cykl p o m i a r o w y rozpoczyna się od usta wienia s t a n u w y s o k i e g o na wyjściu P D 4 , w w y n i k u czego kondensator C za czyna się ł a d o w a ć przez o p o r n i k R d o napięcia zasilającego Vcc- W t y m sa mym momencie
m i k r o k o n t r o l e r powinien
uruchomić p o m i a r czasu
(po
wcześniejszym w y z e r o w a n i u rejestrów timera). L ą d o w a n i e przebiega zgod nie z zależnością:
V =V c
c c
(l-exp^~)
(14.1)
W m o m e n c i e , g d y napięcie n a kondensatorze osiągnie wartość mierzonego napięcia w e j ś c i o w e g o , na wyjściu komparatora nastąpi z m i a n a stanu. Fakt ten p o w i n i e n s p o w o d o w a ć z a t r z y m a n i e p o m i a r u czasu, który j a k widać bę dzie proporcjonalny
d o napięcia wejściowego. W rzeczy wistości
zmiana
stanu na wyjściu k o m p a r a t o r a najczęściej będzie wyzwalała funkcję prze chwytywania
Timeral,
czyli
zatrzaśnięcie
wyniku
w rejestrach
ICR1H
i I C R I L . 2 z a l e ż n o ś c i opisanej w z o r e m 14.1 wynika, że ładowanie konden satora nie p r z e b i e g a liniowo. Przeliczenie czasu na napięcie nie będzie więc łatwe. W p r a w d z i e mając d o dyspozycji mikrokontroler m o ż n a zależność tę zlinearyzować p r o g r a m o w o , lecz będzie się to wiązało z koniecznością za stosowania n i e m a ł y c h bibliotek matematycznych. Inna metoda, to stablicowa-
nie funkcji ładowania. W tym przypadku trzeba będzie z kolei zająć sporo miejsca w pamięci programu. Na rysunku 14.6 przedstawiono kilka oscylogram ó w rzeczywistego układu mierzącego na zasadzie ładowania kondensatora przez opornik. Oglądając te przebiegi zauważamy, że mniej więcej d o połowy napięcia Vrjc, ładowanie można uznać za liniowe. P o wprowadzeniu odpo wiednich ograniczeń dla napięcia wejściowego m a m y wiec kolejną metodę. Obliczeń dokonujemy stosując zwykłe przekształcenia liniowe b e z dołączania do programu bibliotek matematycznych. Zakładamy przy tym, ż e popełniany błąd jest do zaakceptowania. Cykl pomiarowy kończy się podaniem stanu nis kiego na wyjściu PD4, w wyniku czego kondensator jest rozładowywany przez rezystor R i niewielką oporność wyjściową portu P D 4 w tym stanie. W y k o r z y s t a n i e elementarnej wiedzy z fizyki p o m o ż e n a m w opracowaniu j e s z c z e j e d n e g o układu p o m i a r o w e g o . Jak p a m i ę t a m y ze szkoły, ładunek z g r o m a d z o n y w k o n d e n s a t o r z e jest proporcjonalny d o p o j e m n o ś c i tego kon densatora i napięcia panującego na nim. Z drugiej strony ładunek jest iloczy n e m prądu i czasu. Wykorzystując ten fakt uzyskujemy zależność I-t = U-C, z której w y n i k a wprost, że ładowanie kondensatora będzie m i a ł o charakter li niowy, jeśli tylko zostanie z a p e w n i o n a
stała wartość prądu. N a
płytce
Z L 1 A V R z a s t o s o w a n o właśnie takie rozwiązanie. R o l ę źródła p r ą d o w e g o pełnią tranzystory Q l , Q 2 i rezystor R l , pracujące w układzie lustra prądo w e g o . Prąd kolektora tranzystora Q l jest odzwierciedleniem prądu kolektora tranzystora Q 2 , a ten z kolei w y n i k a z wartości rezystora R l : V
I = cc-U Rl R 1
B E
P
(wzór 14.2)
Tranzystory p o w i n n y m i e ć j a k najbardziej zbliżone parametry. I d e a ł e m b y ł o b y , g d y b y były w y k o n a n e w tej samej strukturze p ó ł p r z e w o d n i k o w e j . O d p o wiednie elementy są d o s t ę p n e w handlu, j e d n a k z r e z y g n o w a n o z nich na rzecz popularnych tranzystorów, które m o ż n a kupić w k a ż d y m sklepie elekt r o n i c z n y m . K o n d e n s a t o r p o m i a r o w y C 5 j e s t dołączony d o wejścia nieodwra-
Rys. 14.6. Oscylogramy układu pomiarowego wykorzystującego ładowanie kondensatora prądem płynącym przez rezystor
Rys. 14.7. Oscylogramy układu pomiarowego wykorzystującego ładowanie kon prądowe cającego AINO (PBO). Jest o n ładowany stałym prądem ze źródła p r ą d o w e g o z b u d o w a n e g o z tranzystorów Q l , Q 2 . Z a l e ż n o ś ć napięcia n a kondensatorze w funkcji czasu określa w z ó r 14.3:
U
c
= ^
( w z ó r 14.3)
Jak w i d a ć j e s t to z a l e ż n o ś ć liniowa. W praktyce oczywiście nie jest tak ideal nie j a k n a papierze, ale błędy są d o przyjęcia (patrz rozdział 14.3.6). Mierzo ne n a p i ę c i e należy d o p r o w a d z i ć się d o wejścia A I N 1 ( P B l ) p o p r z e z (uwaga!) k o ń c ó w k ę 1 gniazda P O R T D . Tranzystor Q 3 (wraz z rezystorem R 5 ) , stero w a n y z wyjścia P D 4 u m o ż l i w i a szybkie rozładowania kondensatora C 5 . Pra cuje od n a s y c e n i a d o zatkania, j a k typowy klucz tranzystorowy. T a k zrealizo w a n y p r z e t w o r n i k będzie p r a c o w a ł niemal w całym zakresie napięć wejścio w y c h , t z n . od zera d o VQC- J e d n a k ze względu na n i e z n a c z n e pogorszenie charakterystyki dla dużych wartości napięcia wejściowego, celowe jest j e g o ograniczenie d o ok. 4,8 V przy zasilaniu 5 V . Oscylogramy przedstawione na r y s u n k u 14.7 pokazują j a k wygląda ładowanie kondensatora ze źródła prądo w e g o w rzeczywistym układzie (na płytce Z L 1 A V R ) . Widać wyraźną poprawę liniowości ładowania kondensatora w porównaniu z wcześniej opisaną metodą.
14.1.10. Programowanie mikrokontrolera w systemie (ISP) W p u n k c i e 11.4.2 o p i s a n o s z e r e g o w e p r o g r a m o w a n i e pamięci Flash mikro kontrolera. W y k o r z y s t y w a n y jest d o tego celu interfejs S P I , zaimplemento 0
w a n y w w i ę k s z o ś c i m i k r o k o n t r o l e r ó w A V R . D w u k i e r u n k o w a transmisja sze r e g o w a j e s t p r o w a d z o n a liniami M O S I (wejście danych dla mikrokontrolera), M I S O (wyjście d a n y c h ) i S C K (zegar synchronizujący transmisję). M i k r o kontroler u m i e s z c z o n y n a płytce uruchomieniowej m o ż e b y ć p r o g r a m o w a n y za p o m o c ą
dowolnego
programatora
zgodnego
z t y m standardem (np.
Z L 2 P R G ) . P r z y k ł a d o w ą konstrukcję o p i s a n o w rozdziale 13.
Płytki d r u k o w a n e d o programatora Z L 2 P R G oraz j e g o doku mentacja są dostępne w i n t e r n e t o w y m sklepie W y d a w n i c t w a BTC {http://www.btc.pi/index.php7id-zV2prg).
S t o s o w a n i e programowania szeregowego j e s t b a r d z o w y g o d n e dla użytkow nika, g d y ż uwalnia g o od uciążliwego przekładania układu z podstawki zesta w u d o podstawki programatora. Ci Czytelnicy, którzy zdecydują się pisać swoje programy w B a s c o m i e , będą mogli robić to w j e d n y m , zintegrowanym środowisku. T r z e b a j e d n a k pamiętać, że p r o g r a m o w a n i e szeregowe nie jest d o k ł a d n y m odpowiednikiem p r o g r a m o w a n i a równoległego. D o t y c z y t o usta wiania bitów konfiguracyjnych
(fuse bits).
Z tego względu warto j e d n a k
z a m o n t o w a ć na płytce p o d s t a w k ę pod mikrokontroler. Programator Z L 2 P R G najwygodniej jest dołączyć b e z p o ś r e d n i o d o gniazda I S P 2 przez kabel w y k o n a n y z taśmy 10-przewodowej. Połączenia powinny b y ć w y k o n a n e 1:1 (styk 1 na styk 1, 2 na 2 itd.), zgodnie z r y s u n k i e m 14.8. Na płytce Z L 1 A V R znajduje się ponadto g n i a z d o ISP1 z g o d n e ze specyfika cją Atmela. Zawiera ono tylko 6 styków. W przypadku wykorzystywania te g o gniazda d o p r o g r a m o w a n i a mikrokontrolera, niezbędne będzie w y k o n a n i e kabla przejściowego. S p o s ó b j e g o w y k o n a n i a przedstawiono n a r y s u n k u 14.9. W t y m przypadku dioda sygnalizacyjna L E D 9 nie będzie działała, p o -
Gnlazdo programatora 2L2PRS
2
Gniazdo ISP2 na płytce ZL1AVR
1
Rys. 14.8. Kabel połączeniowy dla programatora ZL2PRG dołączonego do gniazda ISP2 Gniazdo programatora ZL2PRG
Gniazdo ISP1 napłyt«ZL1AVR
Rys. 14.9. Kabel przejściowy dla programatora ZL2PRG dołączonego do gniazda ISP1
n i e w a ż j e s t o n a s t e r o w a n a s y g n a ł e m występującym wyłącznie na j e d n y m ze styków I S P 2 , sygnalizując a k t y w n o ś ć interfejsu.
14.2. Ćwiczenia praktyczne 14.2.1. Ćwiczenie 1 Sterowanie portami mikrokontrolera w trybie wyjściowym - efekt węża świetlnego i biegnącego punktu na linijce diod LEO P o z n a w a n i e m i k r o k o n t r o l e r a r o z p o c z n i e m y o d kilku przykładów obsługi j e g o portów. W w i ę k s z o ś c i p r a k t y c z n y c h aplikacji będziemy się spotykać z po d o b n y m z a g a d n i e n i e m , w s z a k jeśli j u ż w urządzeniu zastosowano mikrokon troler, t o o c z y w i s t e jest, że m u s i w y k o n y w a ć j a k i e ś zadania. A w jaki sposób, j a k nie p o p r z e z porty w e / w y , m a on p r z e k a z y w a ć efekty swojej pracy d o reszty s y s t e m u ? W ć w i c z e n i u n a u c z y m y się ustawiać linię portów w tryb wyjściowy i z m i e n i a ć ich stan. Mikrokontroler
AT90S2313
wyposażono
w dwa
porty
we/wy:
PORTB
i P O R T D . M o g ą o n e p r a c o w a ć j a k o porty ogólnego przeznaczenia lub m o ż n a w y k o r z y s t y w a ć ich funkcje alternatywne (patrz rozdział 3.1). D o wysterowa nia diod ś w i e c ą c y c h skorzystamy z ich p o d s t a w o w y c h możliwości. Porty m i k r o k o n t r o l e r ó w A V R są obsługiwane p r z e z trzy rejestry
umieszczone
w przestrzeni w e / w y . U ż y c i e portu p o w i n n o być p o p r z e d z o n e o d p o w i e d n i m s k o n f i g u r o w a n i e m go, najlepiej w e wstępnej fazie programu. Poszczególne linie p o r t ó w m o g ą b y ć i n d y w i d u a l n i e ustawiane j a k o wejściowe lub wyjścio we. D o k o n u j e się tego p o p r z e z wpis odpowiednich wartości d o rejestru kie runku (np. d l a portu B jest t o D D R B ) . W p i s a n i e „ 1 " na daną pozycję ozna cza, że o d p o w i a d a j ą c e jej w y p r o w a d z e n i e portu będzie p r a c o w a ł o j a k o wyj ściowe. A n a l o g i c z n i e „ 0 " konfiguruje port j a k o wejściowy (patrz następne ćwiczenia). Linijka diod L E D na płytce uruchomieniowej jest dołączona bez pośrednio d o portu B . Jak p a m i ę t a m y , porty mikrokontrolerów A V R mają wystarczającą wydajność prądową d o ich wysterowania. A b y zaświecić wy-
Ź r ó d ł o w e i w y n i k o w e wersje p r o g r a m ó w d o ć w i c z e ń przedsta w i o n y c h w dalszej części książki są dostępne na stronie interne towej W y d a w n i c t w a B T C
(http:/Avww.brc.pi?id~avr).
braną diodę należy o d p o w i e d n i e wyjście portu ustawić w stanie niskim, czyli wpisać „ 0 " na odpowiednią pozycję rejestru P O R T B . Ustawienie linii w sta nie w y s o k i m powoduje zgaszenie L E D - a . Oczywiście dołączenie diod Świe cących w niniejszym ćwiczeniu jest p o d y k t o w a n e tylko chęcią pokazania „ n a m a c a l n e g o " efektu sterowania portami. N a wyjściach portu występują napięcia o wartościach, które umożliwiają współpracę mikrokontrolera ze z w y k ł y m i układami cyfrowymi. J e d y n e na c o trzeba ewentualnie zwrócić u w a g ę , to upewnienie się o kompatybilności układów zasilanych r ó ż n y m i napięciami, gdyż coraz powszechniejsze stają się układy zasilane napięciem n p . 3,3 V. Niektóre układy występują j u ż tylko w wersjach niskonapięciowych. W takich przypadkach m o ż e okazać się nie zbędne stosowanie odpowiednich interfejsów. Przykład z d i o d a m i L E D m a j e s z c z e j e d e n praktyczny walor. W wielu aplikacjach w y m a g a n e jest galwa niczne odizolowanie systemu mikroprocesorowego
od
współpracujących
z n i m urządzeń. Jeśli w y m i a n a informacji dotyczy sygnałów cyfrowych, naj prostszą
metodą zrealizowania separacji jest zastosowanie
transoptorów,
a sterowanie nimi, to przecież nic innego j a k gaszenie i zapalanie diod L E D . Podobnie jest z przełączaniem o b w o d ó w dużej m o c y za pomocą optotriaków lub optoprzekaźników. Sterowanie portu m o ż n a zrealizować poprzez wpisanie całego bajtu o odpo wiedniej wartości lub poprzez manipulowanie pojedynczymi bitami. W j ę z y ku C realizuje się to instrukcjami np.: PORTB-0x0£; sbi(PORTB,5); cbi(PORTB,7);
//wyprowadzenia PB7...PB4 w stanie "0", PB3...PB0 //wlstanie "1". //ustaw bit 5 portu B w stanie wysokim ("l") //bez zmiany pozostałych //ustaw bit 7 portu B w stanie niskim ("0") //bez zmiany pozostałych
D o sterowania i n d y w i d u a l n y m i bitami portu m o ż n a również stosować bar dziej naturalny zapis. Przykład będzie podany w ćwiczeniu 9.
Aktualne wersje kompilatora A V R - G C C pozwalają, a na wet wymagają
stosowania zapisu np.
PORTB=wartość.
W wersjach wcześniejszych wymagane było użycie makra outp(wartość,
port).
Stany wyjść portu sterującego diodami świecącymi w t y m ćwiczeniu są zmieniane cyklicznie. C z a s cyklu wyznaczony jest na s z t y w n o za pomocą funkcji c z e k a j . Jest to funkcja uniwersalna, w zależności od wartości argu-
menru funkcji
pt
generowane
W programie z listingu
m o ż e b y ć opóźnienie o różnej
długości.
1 4 . 1 funkcja ta j e s t w y w o ł y w a n a z parametrem
p c z e k a j . Jest to z m i e n n a t y p u u n s i g n e d l o n g , inicjowana w miejscu de klaracji w a r t o ś c i ą 1500. Program realizujący p r z e d s t a w i o n e zadanie znajduje się na l i s t i n g u 1 4 . 1 . N a leży s k o m p i l o w a ć p r o g r a m cwiczl.c
i z a p r o g r a m o w a ć mikrokontroler z z e
stawu Z L 1 A V R plikiem w y n i k o w y m
cwiczl.hex.
Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, z w o r k a J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • z w o r k a J P I z w a r t a - g l o b a l n e włączenie diod L E D , • zworki Z W _ P O R T B z w a r t e (wszystkie) - włączone wszystkie diody L E D , • położenie p o z o s t a ł y c h z w o r e k nieistotne (np. rozłączone). List. 14.1. Program do ćwiczenia 1
/* Ćwiczenie 1 - sterowanie portami w trybie wyjściowym V /* Efekty świetlne na linijce LED-ów
*/
/* J . D . '2003 l*+***+»»«******.*.***********«*********»***•»**»******•*•/
*/
ttinclude unsigned long pczekaj=1500; void czekaj(unsigned long pt) //funkcja opóźnienia t unsigned char tpl; £or(;pt>0;pt--) for(tpl=255;tpl!=0;tpl--);
int main(void)
//program główny
unsigned char ledy,i,licznik; DDRB=0xff; while(l)
//konfiguracja wszystkich wyprowadzeń //portu B w trybie wyjścia //nieskończona pętla główna programu
//efekt węża for Uicznik=0;licznik»»» definicje tekstów wyświetlanych na LCD « EFEKT piszilcd(0xOd) ,pisztekst(tekst4); klawisz(2); czysclcdO ;
«, asm("nop") asm("nop") cbi(PORTB,lcd_e); //impuls strobujący czekaj(10L); //czekaj na gotowość LCD )
void czysclcd(void) i piszilcd(0x01); czekaj(l.S4*tau); wiersz=0; kolumna=0;
//czyść ekran //polecenie czyszczenia ekranu dla //kontrolera LCD //rozkaz 0x01 wykonuje sie l-64ms
}
void lcdxy(unsigned char w, unsigned char k) //ustaw współrzędne kursora {
piszilcd((w*0x40+k)10x80)
void piszznak(char znak) I pis2dlcd(znak);
//standardowy rozkaz sterownika LCD //ustawiający kursor w określonych //współrzędnych
//funkcja umieszcza znak na wyświetlaczu //wyświetl znak na LCD
)
unsigned char incwiersz(unsigned char w) //inkrementuj wiersz LCD (
return w==l?0:l; }
unsigned char decwiersz(unsigned char w) //dekrementuj wiersz LCD (
return w==0?l:0; )
unsigned char inckolumna(unsigned char k) //inkrementuj kolumnę LCD return k==15?0:++k;
unsigned char deckolumna(unsigned char k) //dekrementuj kolumnę LCD return k==0?15:--k;
nt main(void)
//program główny
unsigned char r,i; unsigned char xg=0; unsigned char yg=0;
//zmienne pomocnicze //kolumna wyświetlania kursora gracza //wiersz wyświetlania kursora gracza
Iiczt0=vliczt0; lkursor=vlkursor; PORTD=0xff; PORTB=0x03; DDRD=0xO3; DDRB=0xff; TIMSK=l«TOIE0; TCNTO=tauO; TCCR0=4; fklaw=0; //>>>>>>>>>>>>>>>> czekaj(45*tau);
lit podciąganiem //z podciąganiem wejść //PD0-PD1 wy, pozostałe wejścia //PORTB - wy //zezwolenie na przerwania od TCO //wpisz stałą czasową do TCHTO //preskaler XTAL/256, //kwant mierzonego czasu = 32|is inicjacja wyświetlacza LCD
/**.***»**»»****•************»***********»*•»******•***•****•*****/ ttinciude ttinciude ttinciude ttinciude
<signal.h> <eeprom. h>
/,».,,....,.»....... unsigned
char
volatile
unsigned
zmienne g l o b a l n e
***•***********.***•
licztO; char pomiar;
//flaga
dokonania
pomiaru
uniont u n s i g n e d int w s p k a l ; //współczynnik unsigned char w s p k a l b [ 2 1 ; )uwspkal; void
czekaj(unsigned
long
zt)
kalibracji
//funkcja
opóźnienia
//obsługa
przerwania
{ (łdefine tau 10-38 u n s i g n e d char Ztlj for(;zt>0;zt--) { forlztl = 255;ztl!=0;ztl — ) ;
) } StGHAL
i
(SIG_IHPUT_CAPTURE1)
od
przechwycenia
unionł unsigned int czas; unsigned char czasb[2); luczas; unsigned char czasS; uczas.czasb[0)=iCR]L; //zatrzaśnij rejestry przechwytywania uczas.czasbil J =ICR1H,czas8=~{(uczas.czas/uwspkal.wspkal}«2); //normalizacja wyniku do postaci 6-bitowej //liczby binarnej przesuniętej o 2 bity //w lewo (P0RTB1 i 0 są wykorzystywane //przez komparator analogowy) PORTB=(PORTBŁ0x03) Jczas8; //wyświetl wynik na LEDach pomiar=l; //pomiar dokonany (zapal flagę) sbi(PORTD,4) ; //zacznij rozładowywać kondensator //pomiarowy )
int main(void) DDRD=0xl0; PORTD=0xf£; PORTB=0x01; DDRB=0xfc; TCCR1A=0; TCCRlB=0x41;
//PORTD we oprócz PD4 //z podciąganiem //PBO z podciąganiem //PORTB7-2 - wy, PORTB1-0 - we // funkcje porównania i PWM wyłączone //preskaler XTAL/1 dla TC1, przechwyty//wanie na narastającym zboczu //zezwolenie na przerwania od //przechwytywania //zezwolenie na wyzwalanie //przechwytywania komparatorem
TIMSK=Ox08; ACSR=1 <stdlib.h> <signal.h>
ftdefine FCPU 8000000 //częstotliwość oscylatora CPU ttdefine VUART 38400 //prędkość transmisji [b/s} ttdefine VUBRR FCPU/ {VUART*16t -1 //wpis do UBRR dla VUART unsigned char romram;
//romram=l => dane z pamięci programu //romram=0 ^> dane z RAM-u char "pfifosio; //wskaźnik na kolejkę UART-u unsigned char volatile fodbznak=0; //flaga: "odebrano znak" char komenda; //odebrana komenda z PC-ta char *fifosio[]; //wskaźnik na kolejkę UART-u
//procedura obsługi odbiornika UART-u
SIGNAL(SIG„UART_RECV) { komenda=UDR; fodbznak=l;
//zapamiętaj odebraną komendę //ustaw flagę odebrania znaku
}
//procedura obsługi nadajnika UART //wywoływana po wysłaniu znaku
SIGNAL(SIG_UART„TRANS) { char znak; if(romram) { znak=PRG_RDB(pf i fosio++);
//skąd pobierać dane? //pobierz daną z pamięci programu
}
else { znak=*pfifosio+*;
//pobierz dane z pamięci RAM
}
//czy
if (znak!=0) { UDR=znak;
koniec pobierania danych?
//nie, wyślij znak pobrany z kolejki
}
else ( cbi(UCR,TXEN);
°//tak, wyłącz nadajnik
} )
void czekaj(unsigned { ttdefine tau 10.38 unsigned char ztl; for(,-zt>0;zt--) {
long zt)
//funkcja opóźnienia
for(ztl=255;ztl1=0;ztl-->; )
void wyslijtekstROM(char
*tekst) //wysyłanie danych z pamięci programu
{
//dane będą z pamięci programu //ustaw wskaźnik na dane do wysłania //włącz nadajnik //wyślij pierwszy znak, pozostałe będą //pobierane w procedurze obsługi //przerwania TXC
romram=1; pf i fosio=tekst ,• sbi(UCR,TXEN); UDR=PRG_RDB(pfi£osio++);
void wyślij tekst(char *tekst) ( romram=0; pfifosio=tekst; sbi(UCR,TXEN); UDR=*pfifosio++;
//wysyłanie danych z pamięci programu //dane będą z pamięci danych //ustaw wskaźnik na dane do wysłania //włącz nadajnik //wyślij pierwszy znak, pozostałe będą //pobierane w procedurze obsługi //przerwania TXC
int main(void) ( unsigned char i; unsigned char volatile licznikkl=0; //zmienna wykorzystywana do pomiaru //czasu naciśnięcia przycisków char volatile przyrost=l;
//przyrost zmiany współczynnika //wypełnienia sygnału PWM //tablica komunikatów do wysłania char *info(7]={ PSTR("\n\rRegulator obrotów silnika DC\n\r*), PSTR(•, - zmniejszanie obrotów\n\r"), PSTR[". - zwiększanie obrotów\n\r") , PSTRCO - zatrzymanie silnika\n\r"}, PSTRCl - start z max. obrotami\n\r"}, PSTRCN - podaj aktualne parametry sterownika\n\r\n"), PSTR["\n\rAktualne parametry PWM:•) >;
union
//unia pozwala na bajtowy dostęp do //zmiennej int (
unsigned int pwm; unsigned char pwmcf2]; }volatile upwm;
DDRB=0xff; PORTB=0xff; DDRD=0x02; PORTD=0x02; UBRR=VUBRR; UCR=1«RXCIE
TCCRlA=0x83;
//aktualny współczynnik wypełnienia //sygnału PWM //PORTB - wy
I 1«TXCIE
//PDI - wy (RXD), pozostałe we //podciągania wejścia PDI (RXD) //ustaw prędkość transmisji 1«RXEN; //zezwolenie na przerwania od odbiornika //i nadajnika, zezwolenie na odbiór //PWM 10-bitowy
TCCRlB=Ox01; TCNTlL=OxOO; TCNTlH=OxOO; upwm.pwm=0x3 tt;
OCRlH=upwm.pwmc|1); OCRlL=upwm.pwmc(0); sei(}; for(i=0;i0x3ff) //jeśli przekroczono wartość TOP, to (upwm.pwm= 0x 3 f f; //ustaw TOP >
czekaj(150'tau); licznikkl++; break; •. Upwm.pwm-=przyrost; if(upwm.pwm>0x3fE) (upwm.pwm=0; I czekaj(150'tau) 1icznikkl++; break; '0-: upwm.pwm=0; break; ' 1' :
case case
upwm.pwm=0x3 f f; break; ' n' :
//eliminacja powtórnej interpretacji //naciśnięcia przycisku //mierz długość naciśnięcia przycisku //odebrano - zmniejsz prędkość //zmniejsz PWM //odpowiada upwm.pwmj i
«
10
J
•
ffiOM)
* stan wymuszony przez Mastera
stan wymuszony przez Mastera stan wynikający z podciągnięcia rezystorem
stan wynikający z podciągnięcia rezystorem — — — • stan wymuszany przez pastylkę
Rys. 14.27. Okno wpisu „0" do rejestru wej ściowego układu iButton (czasy w mikroksekundach)
Rys. 14.28. Odczyt stanu wyjścia danych układu iButton przez mikrokontroler (czasy w mikroksekundach)
k i e g o n a j p r a w d o p o d o b n i e j będzie efektem zwarcia - zmienna z p jest p o raz kolejny i n k r e m e n t o w a n a . P o zakończeniu fazy inicjującej pastylkę mikrokon troler r o z p o z n a j e , która z p o w y ż s z y c h sytuacji wystąpiła na linii interfejsu. Jeśli z m i e n n a z p m a w a r t o ś ć 1, to z d u ż y m prawdopodobieństwem można p r z y p u s z c z a ć , ż e została r o z p o z n a n a obecność pastylki i nastąpi teraz próba odczytania z niej d a n y c h . A b y to uczynić, mikrokontroler musi przesłać do pastylki r o z k a z Czytaj
ROM
o kodzie 0 x 3 3 (lub 0x0f). Służy d o tego celu
u n i w e r s a l n a funkcja z a p i s z l w ( d a n a ) , której parametrem będzie w t y m przypadku wartość 0 x 3 3 . Funkcja ta wyłuskuje kolejne bity danej, począwszy od najmniej znaczącego, i wywołuje funkcję s l o t l w _ z a p ( z n a k ) , której za d a n i e m j e s t w y g e n e r o w a n i e odpowiedniej szczeliny nadawczej. W zależności od wartości t r a n s m i t o w a n e g o bitu, szczelina nadawcza przybiera odpowied nią p o s t a ć . W p r z y p a d k u bitu „ 1 " m a m y d o czynienia ze szczeliną Zapisz
je
den ( r y s u n e k 14.26). Mikrokontroler ustawia linię interfejsu w stan niski, odczekuje 11 u s , p o c z y m z w a l n i a j ą wpisując „ 1 " . Po 15 u s od chwili w y z e rowania, u k ł a d odbiorczy pastylki rozpoczyna próbkowanie linii, które może trwać d o 6 0 u s licząc od początku szczeliny. Mikrokontroler odczekuje jesz cze 6 0 u s d o k o ń c a slotu, p o c z y m może kontynuować pracę. W przypadku transmisji bitu o wartości „ 0 " m a m y d o czynienia ze szczeliną Zapisz
zero
( r y s u n e k 14.27). R ó ż n i się ona od poprzedniej czasem przytrzymania linii 1-Wire w s t a n i e niskim, który powinien zawierać się między 6 0 a l 2 0 u s . W p r o g r a m i e odczekuje się 7 0 us. Po przesłaniu rozkazu Czytaj ROM mikro kontroler r o z p o c z y n a odbieranie danych z pastylki. Służy d o tego funkcja c z y t a j l w ( ) . W wyniku jej działania d o 8-elementowego bufora b u f o r l w zostaną zapisane kolejne bajty odebrane z pastylki. Funkcja c z y t a j l w ( ) kompletuje
poszczególne
bity
w 1-bajtowe dane, wykorzystując
funkcję
Fot 14.29. Niepowtarzalny numer seryjny układu iButton jest wypalony laserem na obudo wie układu
s l o t l w _ c z y t ( ) . Szczelinę odczytu przedstawiono na r y s u n k u 14.28. Jej początek jest sygnalizowany wyzerowaniem przez mikrokontroler linii interfej su na czas t s u (1 us), p o którym jest ona zwalniana. W t y m m o m e n c i e pastylka wystawia stan odpowiadający n a d a w a n e m u przez nią bitowi. Mikrokontroler odczekuje jeszcze ok. 14 u s d o momentu, w którym będzie mógł próbkować li nię. P o odczytaniu bitu, funkcja s l o t l w _ c z y t {) zwraca wynik d o wywołu jącej ją c z y t a j l w ( ) , gdzie j a k j u ż wiadomo następuje kompletowanie ramki i zapis danej d o bufora. D a n e odebrane z pastylki to: identyfikator rodziny układów, tzw. Family Code (w przypadku układów D S 1 9 9 0 A zawsze będzie miał wartość 1), 6-bajtowy, niepowtarzalny n u m e r seryjny pastylki (jest on również wygrawerowany na obudowie - fotografia 14.29) oraz bajt C R C sta nowiący kontrolę poprawności odczytu. Procedura rozpoznająca obecność pas tylki w czytniku czasami może mylnie zinterpretować jej dołączenie, np. w wy niku zakłócenia linii interfejsu. M o ż e się również zdarzyć, że p o prawidłowym rozpoznaniu obecności pastylki, dane nie zostaną z niej odczytane bezbłędnie, np. w wyniku braku odpowiedniego kontaktu elektrycznego. Zastosowania d o j a k i c h zostały przewidziane układy D S 1 9 9 0 A
narzucają,
aby p e w n o ś ć odczytu danych była j a k największa. W t y m celu, p o odebraniu kompletu danych jest obliczana suma kontrolna C R C (służy d o tego celu fun kcja ł i c z _ C R C { d a n a , c r c ) ) . Jak widać na r y s u n k u 14.30, wartość sumy kontrolnej jest zapisana w pamięci R O M pastylki i przesyłana w r a z z resztą danych. 8
5
Do
obliczeń
jest
wykorzystywany
wielomian
generujący
4
x + x + x + 1. Funkcja l i c z „ C R C jest implementacją w j ę z y k u C proce dury asemblerowej opublikowanej w nocie katalogowej układu D S 1 9 9 0 A . S u m a kontrolna jest liczona w programie ze wszystkich 8 odebranych baj tów. W y n i k obliczeń w przypadku poprawnej transmisji p o w i n i e n dać war-
numer bajtu w buforze butorlw 1 LSB MSB FAMILY CODE
NUMER SERYJNY PASTYLKI
USB MSB
LSB MSB
kolejność odczytu
Rys. 14.30. Mapa pamięci układu 0S1990A
tość 0. K a ż d a inna w a r t o ś ć będzie oznaczała wystąpienie błędu podczas transmisji i d a n e takie p o w i n n y b y ć zignorowane. Jest w ó w c z a s wyświetlany o d p o w i e d n i k o m u n i k a t . S u m ę kontrolną C R C można liczyć również w inny sposób. O b l i c z e n i a m o g ą b y ć p r o w a d z o n e dla siedmiu pierwszych bajtów, a w y n i k p o w i n i e n o d p o w i a d a ć bajtowi ó s m e m u . Obie metody są r ó w n o w a ż ne, w y b ó r p a d ł na pierwszą, nieco łatwiejszą w realizacji praktycznej. Po o t r z y m a n i u p r a w i d ł o w e g o wyniku na wyświetlaczu jest wyświetlany ko munikat o r o z p o z n a n i u pastylki wraz z jej n u m e r e m seryjnym i k o d e m rodzi ny. D a n e są w y ś w i e t l a n e od tyłu, począwszy od szóstego elementu tablicy b u f o r l w tak, ż e b y o d p o w i a d a ł y rzeczywistej kolejności (zgodnej z n u m e r e m w y g r a w e r o w a n y m na o b u d o w i e ) . Ostatnie dwie cyfry zawierają identyfi kator r o d z i n y . D o w y ś w i e t l a n i a danych wykorzystano standardowe funkcje biblioteczne: u t o a - zamieniająca liczbę całkowitą, w tym przypadku szesnastkową na znaki A S C I I o r a z t o u p p e r , która zamienia małe litery na wiel kie. O b e c n o ś ć pastylki j e s t d o d a t k o w o sygnalizowana zapaleniem
diody
L E D 1 . P r o g r a m w y k r y w a brak pastylki w czytniku, zwarcie linii interfejsu, przyłożenie pastylki i błąd odczytu. P r o g r a m realizujący przedstawione zadanie znajduje się n a listingu 14.10. Należy
skompilować
p r o g r a m cwicz9.c
z z e s t a w u Z L 1 A V R plikiem w y n i k o w y m
i zaprogramować
mikrokontroler
cwicz9.hex.
Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, zworka J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • z w o r k a J P 1 rozwarta - globalne wyłączenie diod L E D , " z w o r k a J P 5 całkowicie rozłączona, • zworki Z W _ P O R T B zwarte w pozycjach 1-2, 3-4, 5-6, 7 - 8 , 9-10, 11-12, • z w o r k a J P 1 4 zwarta, • d o łączówki J P 1 1 dołączone p r z e w o d y czytnika układu D S 1 9 9 0 A (masa na g ó m y m styku), • p o ł o ż e n i e pozostałych z w o r e k nieistotne (np. rozłączone).
List 14.10. Program do ćwiczenia 9 | t ł ł t H ł ł ) : * ł t « « m ł « t * ł ł ł ł t l H ł t ł H i l t t f ł ł « t H i l i t ł > l l H I * l r * * « t t * * « ł * ł » ł t * * y
/* Ćwiczenie 9 - Obsługa interfejsu 1-Wire - odczyt pastylki /* O b s ł u g a wyświetlacza LCD 2x16 /* J.D. '2003 /»*«******»*«*»*»*****»»»»*******. ************************************* ttinciude ttinciude ttinciude ttinciude tt include
DS1990A
*/ */ */ f
<progmem.h> <stdlib.h> <string.h>
// Poniższe definicje służą typedef struct _bit_struct
do
realizacji
wygodnego
dostępu
bitowego
{ unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char }pole_bitowe; ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine
bitO: bitl bit2 bit3 bit4 bit5 bit6 bit?
DAJ„BIT(adr) (*((volatile pole_bitowe*t _PORTB 0x38 _PINB 0x36 „ P O R T D 0x32 _DDRD 0x31 _ P I N D 0x30 pastylka_we DAJ_BIT(_PIND),bit3 pastylka_wy DAJ_BIT(_DDRD) -bit3 lcd_rs DAJ_BIT(_PORTB),bit2 lcd_e DAJ_BTT(_PORTB}.bit3 ledO DAJ_BlT(_PORTB).bitO
ttdefine stan_0
1
ttdefine stan_l
0
ttdefine CR
(adr)))
//definicja stanu niskiego na linii 1-Wire / / " l " oznacza p r z e ł ą c z e n i e portu w tryb //wyjściowy //port jest wcześniej wysterowany w stan //niski //definicja stanu w y s o k i e g o na linii 1-Wire / / " 0 " oznacza przełączenie portu w tryb //wejściowy //stan wysoki jest wymuszany przez zewnętrzny //rezystor podciągający //znak CR (przejście do nowej linii)
0xOa
char b u f l c d [ 4 ] ; char *pbuflcd; unsigned char buforlwfS] unsigned char 'pbuforlw; unsigned char w i e r s z = 0 ; unsigned char kolumna=0;
//roboczy bufor wyświetlacza LCD //wskaźnik na bufor wyświetlacza //bufor interfejsu 1-Wire (dane z pastylki} //wskaźnik na bufor danych z pastylki //pozycja umieszczenia znaku na LCD //pozycja umieszczenia znaku na LCD
void
zt)
czekaj(unsigned
{ ttdefine tau 10.38 unsigned char ztl;
long
//funkcja
opóźnienia
ior(;zt>0;zt--) i
for(zt1 = 255;ztl!=0;ztl - - ) ; }
)
/ / » » » » » » Procedury obsługi wyświetlacza LCD « « « « « « < « void piszilcdtunsigned char instr) //zapisz instrukcje sterującą do LCD i
lcd_rs=0; lcd_e=l; pORTB={PORTB&0x0f) | (inst;c&0xi0) ; //przygotuj starszy półbajt do LCD asmj"nop") asm("nop"J asm("nop") lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD ok. lOOus lcd_e=l; PORTB^={PORTBS.OxOf) I ( { ins t rŁ0x0f) «A) ; //przygotuj młodszy półbajt do LCD asm("nop") asm("nop"} asm{"nop") lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD ok. lOOus }
void piszdlcdlchar dana) //zapisz daną do LCD { lcd_rs=l; lcd_e=l; PORTB=(PORTBS0x0f)I(dana&0xf0); //przygotuj starszy półbajt do LCD asm('nop' asm("nop") asm("nop">. lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD lcd_e=l; PORTBn(PORTB&0x0f)I((dana&0xO£) « 4 ) ; _ //przygotuj młodszy półbajt do LCD asm("nop") asm("nop") asm{"nop"). lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD )
void czysclcdWoid) l
piszilcd{0x01); czekaj(1.64*tauł; wiersz=0; kolumna=0;
//czyść ekran //polecenie czyszczenia ekranu dla //kontrolera LCD //rozkaz 0x01 wykonuje się 1.64ms
}
void lcdxy (unsigned char w, unsigned char k) //ustaw współrzędne kursora V i i r t [ n r f l
piszLlcd((w*0x40+k)10x80) }
void piszznak(char znak) < piszdlcdłznak);
//standardowy rozkaz sterownika LCD //ustawiający kursor w określonych //współrzędnych //procedura umieszcza znak na wyświetlaczu //wyświetl znak na LCD
(
void pisztekst(char *tekst)
//pisz tekst na LCD wskazywany przez //•tekst
t char zn,char nr=0; while(1) { zn=PRG_RDB(Łtekst(nr++]) ; //pobranie znaku z pamięci programu //czy nie ma końca tekstu? i£(zn!=0) ( //czy 2nak nowej linii if (zn==CR} { wiersz==l?wiersz=0: + +wiersz,//przejdź do nowej linii kolumna=0; //ustaw obowiązujące po zmianie lcdxy(wiersz,kolumna) //współrzędne na LCD ł
else ( piszdlcd(zn);
//umieść pojedynczy znak tekstu na LCD
I
} else { break;
//zakończ pętlę, jeśli koniec tekstu
} } )
//»»»>»» Procedury obsługi interfejsu 1-Wire ««•> lcd_rs=0; czekaj(45*tau);
Inicjowanie wyświetlacza
for(i=0;i0x2i)
//wyłącz przerwania, aby nie naczytać danych //włącz mruganie //odczytaj czas z RTC (tylko godz, min, sekł //ustaw wskaźnik bufora I2C na minuty //sekundy będą zawsze zerowane //pobierz minuty //pobierz godziny
//czekaj na naciśnięcie SW4 wykonując //poniższe instrukcje ustawianie godzin //czy naciśnięto SW1? //inkrementuj godziny
//korekcja dziesiętna liczby BCD
i godzi=0xc0;
//kasuj godziny po przekroczeniu
zakresu
)
bufI2C[2]=[bu£I2C[2}&0xc0)Igodz; //zapisz uaktualnione godziny w buforze 12C //pozostawiając bity 24/12 i AM/PM //nienaruszone wyswietlczas () ,• czekaj (150*tau);
lcdxy(1,4); zwolnij klaw(); //czekaj na naciśnięcie SW4 wykonując //poniższe instrukcje //ustawianie minut
while(sw4) {
lcdxy(1,4); if(!swl) { min++; if((mini0x0f}>9) ( min+=0x06; )
//czy naciśnięto SW1? //inkrementuj minuty
//korekcja dziesiętna liczby BCD //korekcja przekroczenia wartości S9
if(min>0x59) { min=0;
//przeniesienia na godziny nie ma, bo są one //ustawiane niezależnie
>
bufI2C[l]=min; wyswietlczas O ; czekaj(150*tau);
//zapisz uaktualnione minuty w buforze I2C
} )
piszilcd(0xOc); lcdxy(l,8); pisztekst(kom[01); zwolnijklawf); while(swl&sw4); i f(!sw4) ( doI2C(rtc,2,3); bufI2C(0]=0; doI2C(rtc,0,l);
//wyłącz mruganie //wyświetl komunikat
"START"
//czekaj na naciśnięcie jakiegoś klawisza //po naciśnięciu klawisza SW4... //...zapisz ustawienia zegara //start zegara
1 //włącz przerwania
sei();
int main(void) ( unsigned char i,zp;
//program główny
//tablica komunikatów do wyświetlenia char *info[4]=( PSTRCUstaw zegar •*), PSTR("Blad I2C "), PSTR("RTC - PCF8583 ") , PSTR("ZL1AVR - plytka\newaluacyjna AVR") >;
DDRB=0xf f; PORTBI=0x02; DDRD=OxO0; PORTD=Qx07; scl_wy=stan_0; fzegar=0; //>>>>>>>>>>»>>>> lcd__rs=0; czekaj (45"tau);
//PORTB - wy //zapal LED1, zgaś LED2 //PORTD - we //podciąganie linii PDO, PDI i PD2 //SCL=0
Inicjowanie wyświetlacza LCD
« « « « « « « « « «
//opóźnienie ok. 45 ms dla ustabilizowania //się napięcia zasilania LCD //(katalogowo min. 15 ms) //3-krotne wysłanie 3-
for(i=Q;i R S 2 3 2 oraz U S B < - > R S 4 2 2 / R S 4 8 5 , w interfejsach służących d o łą czenia systemów m i k r o p r o c e s o r o w y c h z urządzeniami z e w n ę t r z n y m i poprzez U S B itp. N a stronie p r o d u c e n t a są dostępne bezpłatne sterowniki dla syste m ó w operacyjnych W i n d o w s 9 8 , W i n d o w s 98 SE, W i n d o w s 2 0 0 0 / M E / X P , M A C O S - 8 i O S - 9 , L i n u x 2.40 i późniejsze. Sterowniki te pozwalają na pisa nie własnych p r o c e d u r komunikacyjnych w sposób identyczny j a k w przy padku urządzeń transmitujących dane za p o ś r e d n i c t w e m interfejsu R S 2 3 2 . D o łączności od strony k o m p u t e r a m o ż n a również stosować t y p o w e progra m y terminalowe n p . o k i e n k o w y H y p e r T e r m i n a l . Rozwiązanie takie wydaje się b y ć najprostszą
metodą realizacji transmisji z w y k o r z y s t a n i e m
portu
U S B . Bardziej z a a w a n s o w a n i programiści m o g ą sięgać p o sterowniki D 2 X X (USB Direct
Drivers
+ DLL S/W łnterface).
Są o n e dostępne d l a W i n d o w s
9 8 , W i n d o w s 9 8 S E , W i n d o w s 2 0 0 0 / M e / X P . Dużą zaletą u k ł a d ó w F T 8 U 2 3 2 jest m o ż l i w o ś ć p r a w i e d o w o l n e g o dobierania prędkości transmisji, byle tylko była o n a taka s a m a p o stronie n a d a w c z e j , j a k i odbiorczej. C e l e m ćwiczenia 1 1 . j e s t pokazanie, j a k w praktyce m o ż n a dołączyć w ł a s n e urządzenie d o k o m p u t e r a P C poprzez port U S B i z a d e m o n s t r o w a n i e przykła d o w e g o p r o g r a m u realizującego transmisję danych w obu kierunkach. D o re alizacji tego zamierzenia w y k o r z y s t a n o gotowy interfejs opisany w Elektro nice Praktycznej 5 / 2 0 0 3 . W y g l ą d tego modułu p o k a z a n o na f o t o g r a f i i 14.40, j e g o schemat elektryczny przedstawiono n a r y s u n k u 1 4 . 4 1 , a na r y s u n k u 14.42 p o k a z a n o sposób dołączenia g o d o płytki Z L 1 A V R .
j
P o dołączeniu modułu U S B d o płytki
£
Z L 1 A V R oraz k o m p u t e r a P C (za p o m o cą t y p o w e g o kabla U S B ) należy zasilić
^
zestaw i włączyć k o m p u t e r . Przy pierw szym
uruchomieniu
system
Windows
p o w i n i e n a u t o m a t y c z n i e rozpoznać no w e urządzenie i z a p r o p o n o w a ć zainstało-
Fot. 14.40. Wygląd interfejsu
wanie sterowników.
USBRS232
(771)
S2C4Ł.
wc-i Ov
-2-
GIC
CS 16V Ul
Fmzsm EESK tŁUATA VCC1 RESET WSTOUT 3V30UT US8DP USTOM GNDt SLEEP RXL£D TXLEO VCCIO
pwncrt
PWREN TXD£N
EECS TEST AVCC AGNO JCTOUT )CT1N VCO TXD fan RTS CTS DTR
Dsn
OCO
«
GNOZ
Rys. 14.41. Schemat elektryczny uniwersalnego modułu interfejsowego USB
Rys. 14.42. Sposób dołączenia uniwersalnego modułu interfejsowego USB do płytki ZL1AVR i komputera PC
N a l e ż y j e wcześniej s k o p i o w a ć na dyskietkę lub C D - R O M , m o ż n a j e także wgrać na d y s k twardy k o m p u t e r a d o d o w o l n e g o katalogu. Procedura instala cji przebiega niemal automatycznie, w standardowy dla W i n d o w s sposób (został on s z c z e g ó ł o w o opisany w Elektronice Praktycznej 10/2002, wybrane fragmenty tego artykułu znajdują się w dodatku F). P o zainstalowaniu sterowników w w i n d o w s o w y m M e n e d ż e r z e urządzeń p o j a w i a się n o w y port szeregowy C O M z kolejnym (następnym po dotychczas w i d z i a n y c h przez system) n u m e r e m , który w razie konieczności można ręcz nie z m i e n i ć .
Port t e n m o ż n a skonfigurować w identyczny sposób, j a k w p r z y p a d k u HyperTerminala z ćwiczenia 8. ( r y s u n e k 14.22) - czyli 3 8 4 0 0 , n , 8 , l . O d tej chwili urządzenia dołączone d o portu U S B k o m p u t e r a będą dostępne p o p r z e z wirtu alny port szeregowy.
Sterowniki dla układu F T 8 U 2 3 2 B M są dostępne n a stronie in ternetowej producenta, p o d adresem: FTDriver.htm.
http://www.ftdichip.com/
Opis ich instalacji znajduje się w d o d a t k u F .
Demonstracja działania m o d u ł u będzie polegała n a przesłaniu b l o k u danych 0 wielkości 128 k B z zestawu Z L 1 A V R d o komputera P C , a następnie przej ściu n a odbiór danych. W t y m trybie znaki w y s t u k i w a n e n a klawiaturze k o m putera będą - za p o m o c ą programu HyperTerminal - p r z e s y ł a n e d o m i k r o kontrolera n a płytce Z L 1 A V R i wyświetlane n a wyświetlaczu L C D . D o o b sługi wyświetlacza zostały wykorzystane procedury z poprzednich ćwiczeń. Nieznacznej zmianie w zakresie interpretacji z n a k ó w L F i C R uległ funkcja pisztekst. D o obsługi nadajnika i odbiornika U A R T - u przewidziano 3 2 - e l e m e n t o w y b u for f i f o s i o [32]. Rozwiązanie takie było m o ż l i w e , dzięki założeniu simpleksowej (jednokierunkowej) transmisji. D o tego bufora są więc „ w k ł a d a n e " znaki odebrane przez U A R T , a także pobierane są z niego dane d o wysłania. G d y b y zaistniała konieczność prowadzenia j e d n o c z e s n e g o n a d a w a n i a i o d bioru, bufor taki p o w i n i e n zostać z d u b l o w a n y (oddzielny dla nadajnika, o d dzielny dla odbiornika), f i f o s i o
to bufor cykliczny. D a n e są d o niego
w k ł a d a n e począwszy od elementu o indeksie 0, aż d o elementu o indeksie 3 1 . P o zapisaniu danej p o d a d r e s e m 31 następna d a n a będzie p o n o w n i e zapisana na pozycję 0 itd. P o d o b n i e dzieje się z pobieraniem danych. Operacje wkła dania i pobierania e l e m e n t ó w d o / z bufora odbywają się niezależnie, w dodat ku w d w ó c h zupełnie różnych częściach programu - w s e g m e n c i e g ł ó w n y m 1 w procedurach obsługi p r z e r w a ń U A R T - u . N a d prawidłowością zapisu i o d czytu bufora czuwają z m i e n n e i z f i f o s i o
(indeks zapisu
fifosio),
iofifosio (indeks odczytu f i f o s i o ) oraz z m i e n n a ldanych zliczająca aktualnie wpisaną liczbę danych d o bufora. W a r t o ś ć ldanych nigdy nie m o że przekroczyć wielkości bufora, czyli wartości 3 2 . Przed z a p i s a n i e m danej j e s t sprawdzany o d p o w i e d n i w a r u n e k i program zapętla się w oczekiwaniu n a zwolnienie operacja
miejsca
w buforze
while (ldanych==32);.
na fifosio powoduje
inkrementację
Każdorazowa
odpowiedniego
indeksu.
Z u w a g i n a wielkość bufora działanie to musi b y ć w y k o n y w a n e m o d u l o 3 2 .
P r z y k ł a d o w o instrukcja inkrementowania indeksu zapisu d o bufora s i o w y g l ą d a następująco:
fifo
izfifosio^=31?izfifosio=0:++izfifosio; Jest to m o ż e m a ł o czytelny zapis, ale za t o bardzo zwięzły. Oznacza tyle, ż e s p r a w d z a n y j e s t w a r u n e k , czy i z f i f o s i o
jest r ó w n e 3 1 . Jeśli tak, t o
z m i e n n a ta j e s t n a s t ę p n i e zerowana, jeśli nie, to zwiększana o j e d e n . W y k o rzystanie bufora p o z w a l a poprawić płynność transmisji. Jeśli g e n e r o w a n i e danych d o wysłania przebiega nierównomiernie w czasie, to - gdyby nie b y ł o bufora - m o g ł y b y się t w o r z y ć przerwy w nadawaniu zmniejszające efektyw ną p r ę d k o ś ć transmisji. Bufor pozwala wysyłać dane w chwilach oczekiwania na kolejne. Jeśli g e n e r o w a n i e danych przebiega szybciej niż ich nadawanie, t o d o s t a r c z a n i e danych j e s t w s t r z y m y w a n e w m o m e n c i e całkowitego zapeł nienia bufora, czyli gdy liczba danych w buforze osiągnie wartość 32. Osiąg nięcie i n d e k s u 31 nie o z n a c z a przepełnienia bufora. Najczęściej b ę d z i e m y mieli w ó w c z a s sytuację taką, że bufor szybko zostanie zapełniony, a następ nie d a n e będą na przemian dokładane i pobierane z szybkością na jaką p o z w a l a transmisja. P i e r w s z a część p r o g r a m u , to wysłanie do komputera bloku danych o rozmia rze 128 k B . D a n e , to powtarzające się znaki A S C I I w kolejności od spacji d o litery „ Z " . P r z y przyjętej prędkości transmisji cały blok powinien b y ć wysła ny w ciągu ok. 3 4 sekund. W tym miejscu warto z a u w a ż y ć , że wykorzysty w a n i e p o r t u U S B d o przesyłania niewielkich paczek d a n y c h nie tylko m o ż e nie spełnić o c z e k i w a ń c o d o u z y s k i w a n e g o transferu, ale w pewnych sytua cjach m o ż e d a ć gorsze wyniki niż n p . wykorzystanie portu szeregowego. P o w o d e m j e s t d o ś ć r o z b u d o w a n y protokół transmisji U S B , który sprawia, że n p . przy wysyłaniu j e d n e g o bajtu przez łącze przechodzi d u ż o więcej danych (nagłówki, s p o r o czasu zabiera negocjacja połączenia U S B itp.). P o z a k o ń c z e n i u transmisji na wyświetlaczu pojawia się k o m u n i k a t zachęcają cy t y m r a z e m d o przesyłania danych z k o m p u t e r a P C d o zestawu. Jeśli będą t o z n a ł a w y s y ł a n e z klawiatury, to zostaną natychmiast wyświetlone na w y świetlaczu. Jeśli natomiast prześlemy plik tekstowy, to niestety z a u w a ż y m y , że n a s z s y s t e m nie nadąża z obsługą transmisji, która przebiega dużo szybciej niż p r ę d k o ś ć wyświetlania z n a k ó w na L C D . Zaobserwujemy tu działanie bu fora, objawiające się p r a w i d ł o w y m wyświetleniem 32 z n a k ó w , p o c z y m k o lejne d a n e będą n a d p i s y w a n e przez następne. P o w o d e m j e s t brak kontroli p r z e p ł y w u transmisji. Mikrokontroler na płytce Z L 1 A V R nie m o ż e w żaden s p o s ó b p o w s t r z y m a ć nadajnika komputera.
Jeśli przyjrzymy się p o n i ż s z e m u p r o g r a m o w i , t o z a u w a ż y m y b e z trudu, że nie m a t a m nawet j e d n e g o rozkazu, który związany by był z protokołem U S B . Cały p r o g r a m j e s t napisany tak, j a k b y był pisany dla połączenia za po mocą R S 2 3 2 . M o ż n a się o t y m łatwo się przekonać odłączając m o d u ł U S B , zwierając zworki JR2 i J P 3 oraz łącząc płytkę Z L 1 A V R z k o m p u t e r e m p o przez port szeregowy C O M . M o ż n a też w y k o n a ć e k s p e r y m e n t w drugą stro n ę . W t y m celu trzeba się cofnąć d o ćwiczenia 8. Płytkę skonfigurować zgod nie z opisem d o tego ćwiczenia, z tą różnicą że zamiast kabla R S 2 3 2 dołącza m y moduł U S B . W ten s p o s ó b uzyskujemy możliwość regulacji obrotów sil nika z k o m p u t e r a P C p o p r z e z port U S B . D o w y k o n a n i a ć w i c z e n i a konieczne jest dołączenie d o zestawu m o d u ł u inter fejsowego U S B . S c h e m a t ilustrujący sposób przyłączenia p o k a z a n o na r y s u n k u 14.42. P r o g r a m realizujący przedstawione zadanie znajduje się na lis t i n g u 14.12. P r o g r a m cwiczl l.c należy s k o m p i l o w a ć i z a p r o g r a m o w a ć mik rokontroler z zestawu Z L 1 A V R plikiem w y n i k o w y m
cwiczllhex.
Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, z w o r k a J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • zworki Z W _ P O R T B z w a r t e w pozycjach 1-2, 3-4, 5-6, 7 - 8 , 9-10, 11-12, • zworki J P 6 i J P 7 rozłączone, • zworki J P 2 i J P 3 rozłączone, b ę d z i e d o nich dołączony k a b e l k a m i m o d u ł USB, • położenie pozostałych z w o r e k nieistotne (np. rozłączone), • w ł o ż o n y wyświetlacz alfanumeryczny 16x2 d o gniazda L C D 1 . Ust. 14.12. Program do ćwiczenia 11
/* /* /* J.D.
poprzez port USB Nadawanie i odbiór poprzez UART z użyciem
*/ */ przerwań*/
-2003
#include tfinclude <progmem.h> ttinciude <stdlib.h> ttinciude ttinciude <signal.h> ttdefine FCPU ttdefine VUART ttdefine VUBRR
8000000 38400 FCPU/ (VUART*16) -1
//częstotliwość oscylatora CPU //prędkość transmisji Jb/s) //wpis do UBRR dla VUART
// Poniższe definicje służą do realizacji typedef struct _bit_struct unsigned unsigned unsigned
char bitO: 1 char Bitl: 1 char bit2: 1
wygodnego dostępu
bitowego
unsigned char unsigned char unsigned char unsigned char unsigned char )pole_bitowe;
bit3 bit4 bitS bit6 bit7
ddefine łdefine Itdefine ttdefine ttdefine Itdefine ttdefine fdefine Sdefine ttdefine ttdefine
DAj_BIT(adr) l*((volatile pole_bitowe*) (adr))) _PORTB 0x38 _PINB 0x36 _PORTD 0x32 _DDRD 0x31 _PIND 0x30 lcd_rs DAJ_B1T{_P0RTB)-bit2 lcd_e DAJ_BIT(_PORTB).bit3 ledO DAJ_BIT(_PORTB).bitO ledl DAJ_BIT{_PORTB) .bitl LF 0x0a //definicja znaku LF (przejście do //nowej linii) ttdefine CR 0x0d //definicja znaku CR (powrót karetki)
unsigned char wiersz=0; unsigned char kolumna^O;
//pozycja umieszczenia znaku na LCD //pozycja umieszczenia znaku na LCD
//wskaźnik odczytu kolejki UART-u char volatile iofifosio; //wskaźnik zapisu kolejki UART-u char volatile izfifosio; //kolejka UART-u char fifosio[32]; //liczba danych w buforze fifosio unsigned char volatile ldanych=0; void czekaj[unsigned long zt) { ttdefine tau 10.38 unsigned char ztl; for(;zt>0;zt--) ( for(ztl=255;ztl!=0;ztl--) ;
//funkcja opóźnienia //przybliżony przelicznik argumentu na ms
) )