164 18 8MB
Polish Pages 452
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 łł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 (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 >>>>>>>>>>>> czekaj(45*tau);
konfigurowanie portów < « « « « « « : « « « « « < //port z podciąganiem //port z podciąganiem //PORTD - we //PORTB - wy inicjacja wyświetlacza LCD « « « « « « « « « « //opóźnienie ok. 45ms dla ustabilizowania //się napięcia zasilania LCD (katalogowo //min. 15 ms). lcd„rs już wcześniej było //ustawione w stanie "0" //3-krotne wysłanie 3-
for(i=0;i0;zt--) < for(zt1=255;ztl!=0;ztl --) ;
1 1 SIGNAL
(SIG_QVERFLOW0l
//obsługa przerwania od przepełnienia //timeraO
{ unsigned char kkolumna,kwiersz; //zmienne pomocnicze TCNTO=tauO; //odśwież stalą czasową w TCNTO if(--licztO==0) //czy już czytać klawisze? { //tak for(kkolumna=Oxfe;kkolumna!=0xfb;kkolumna={kkolumna«l)*1) {
PORTD=(PORTDI0x03)&(kkolumna); //podaj *0* na linię sterującą aktywną //kolumną kwiersz=PIND&Ox0f; //czytaj wiersz, pozostaw tylko linie //obsługujące klawiaturę //czy jest odpowiedź na jakiejś linii if((kwiersz&0x0c)"0x0c) //wierszy? //tak, ustaw flagę gotowości klawiatury { fklaw=l //i zakończ przepatrywanie break; ;
)
if(fklaw) t kodklaw=kwiersz;
//jeśli wykryto wciśnięcie klawisza, podaj //jego kod
)
else { kodklaw=0xff;
//jeśli nie, ustaw kod neutralny
)
Iiczt0=vliczt0; if(--lkursor==0) { fkursor=l; lkursor=vlkursor;
//odśwież stan licztO //czy można ustawić flagę zmiany "muchy"? //tak {minęło ok. 300mst //odśwież stan lkursor
} )
void piszilcd(unsigned char instr) //zapisz instrukcję sterującą do LCD i cbi(PORTB,lcd_rs); sbi(PORTB,lcd_e); PORTB=(PORTB&0x0f)I(instr&0x£0); //przygotuj starszy połbait do LCD asm("nop"); asm("nop"); asm("nop*); cbi(PORTB,lcd_e); //impuls strobujący czekaj(10L); //czekaj na gotowość LCD ok. lOOus sbi(PORTB,lcd_e); PORTB=(PORTBŁ0x0f ) I ( (instr&0x0£)«4) ; //przygotuj młodszy półbajt oo LCD
asm("nop") asm("nop*} asm("nop*) cbi(PORTB,lcd_e); czekaj(10L);
11impu1s strobujący //czekaj na gotowość LCD ok. lOOus
)
void piszdlcd(char dana) //zapisz daną do LCD { sbi(PORTB,lcd_rs); sbi(PORTB,lcd_e); PORTB=(PORTB&0x0£)|(dana&0x£0); //przygotuj starszy półbajt do LCD asm("nop*); asm("nop"); asm("nop"); cbi(PORTB,lcd_e); //impuls strobujący czekaj(10L); //czekaj na gotowość LCD sbi(PORTB,lcd_e); PORTB=(PORTB&0x0£) | ((dana60x0f) « 4 ) ; //przygotuj młodszy półbajt do LCD asm("nop">, 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 =l;
//wyślij bit do pastylki
) )
void czytajlw(void) f unsigned char i,j; unsigned char dana; pbuforlw=&buforlw[0] ; for(i=0;i>l) ; )
int
main(void)
//program
główny
{ unsigned
char
i,zp;
//tablica komunikatów do wyświetlenia char *in£o[5]={ PSTRfWykryto pastylkę"), PSTR(-Wykryto zwarcie " ) , PSTR!"Brak pastylki * ) , PSTR(" ") , PSTR("Blad CRC " ) ,
//PORTB - wy //PORTD - w e //bez podciągania //gaś LED-a
DDRB=0x££; DDRD=0; PORTD=0; led0=l; //»»»»»»>•> lcd_rs=0; czekaj(45*tau);
Inicjowanie wyświetlacza
for(i=0;i
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 ttinciude ttinciude ttinciude 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
) )