btc Redaktor merytoryczny; Krzysztof Powala ISBN X Copyright by Wydawnictwo BTC Warszawa Wydawnictwo

Jarosław Doliński Książka jest kompletnym przewodnikiem po rodzinie mikrokontrolerów AVR, ze szczególnym uwzględnieniem mikrokontrolera AT90S23I3. C...
9 downloads 2 Views 9MB Size
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 0;zt — ) { for(zt1=255;ztl!=0;ztl--ł ;

//procedura pomocnicza

} }

int main[void) { unsigned char dana; PORTB=0xff; DDRB=0xf£; czekaj(10000L); eeprom_wb(l,0x7f); eeprom_wb(2,Oxbf); dana=eeprom_rb(l); PORTE-dana; czekaj(10000L); dana=eeprom_rb(2); PORTB=dana; czekaj (10000D ; while (1);

//gaś LED-y //PORTB w całości jako wyjściowy //czekaj ok. 1 s //zapisz dana 0x7F do EEPROM-u pod adres = 1 //zapisz dana OxbF do EEPROM-u pod adres = 2 //czytaj EEPR0M[1] //i wyświetl na LED-ach //czekaj ok. 1 s //czytaj EEPROM[2] //i wyświetl na LED-ach //czekaj ok. 1 s //zapetl program

}

J a k w i d a ć , rozwiązanie tego s a m e g o p r o b l e m w j ę z y k u C j e s t znacznie prost­ sze. O d p a d a ż m u d n e o p e r o w a n i e na pojedynczych bitach rejestrów, spraw­ dzanie w a r u n k ó w gotowości E E P R O M - u d o zapisu itp. O c z y w i ś c i e wszyst­ kie te operacje są w y k o n y w a n e w p r o c e d u r a c h bibliotecznych j ę z y k a C.

M i k r o k o n t r o l e r y A V R nie są niestety p o z b a w i o n e

pewnych

p r z y k r y c h dla u ż y t k o w n i k a w a d . Jedną z nich j e s t brak z a b e z ­ pieczenia przed sytuacją, w której w takcie w y k o n y w a n i a zapi­ su d o E E P R O M - u nastąpi z e r o w a n i e mikrokontrolera. Cykl za­ p i s u zostanie d o k o ń c z o n y normalnie, ale rejestr adresu zostanie w y z e r o w a n y . D a n a zostanie zapisana pod adres

wskazany

i p o d adres Ó, c o oczywiście j e s t z a c h o w a n i e m n i e p o p r a w n y m . Z tego p o w o d u zaleca się n i e w y k o r z y s t y w a n i e z e r o w e g o adre­ su pamięci E E P R O M , m i m o że o p i s y w a n a sytuacja wydaje się b y ć mało p r a w d o p o d o b n a .

Zapewnienie prawidłowych warunków pracy pamięci EEPROM Pamięć E E P R O M d o p r a w i d ł o w e g o działania w y m a g a stabilnego napięcia zasilającego o wartości mieszczącej się w d o p u s z c z a l n y m przedziale. 2 jed­ nej strony zależy od tego prawidłowe w y t w o r z e n i e napięć programujących, z drugiej zaś obniżone napięcie zasilające m o ż e mieć s z k o d l i w y wpływ na działanie mikrokontrolera. W efekcie mogą

powstawać

nieprawidłowości

pracy, w szczególności związane z d o s t ę p e m d o pamięci E E P R O M . Aby uchronić się od opisanych p r o b l e m ó w zaleca się s t o s o w a n i e j e d n e j z następu­ jących zasad: 1. U t r z y m y w a ć a k t y w n y stan linii R E S E T mikrokontrolera p r z e z czas ustala­ nia się napięcia zasilającego. Najpopularniejszą metodą j e s t wykorzystywa­ nie w aplikacjach specjalizowanych układów z e r o w a n i a (np. D S 1 8 1 3 ) . Przy ich doborze trzeba pamiętać, aby miały o d p o w i e d n i p o z i o m a k t y w n y sygnału zerującego. Mikrokontrolery A V R są z e r o w a n e p o z i o m e m niskim. Układy takie są n a z y w a n e Brown-out

Detector

( B O D ) i zapewniają prawidłowe ge­

nerowanie sygnału zerującego oraz kontrolę obniżenia n a p i ę c i a zasilającego. Wiele dodatkowych informacji m o ż n a znaleźć w n o c i e A V R 1 8 0 dostępnej na internetowej stronie Atmela

(www.atmel.com).

2. G d y napięcie zasilające jest o b n i ż o n e , należy u t r z y m y w a ć mikrokontroler w stanie uśpienia. Rozwiązanie takie zapobiegnie n i e p r a w i d ł o w e m u wykona­ niu rozkazów, skutecznie zabezpieczając k o m ó r k i p a m i ę c i E E P R O M przed niekontrolowanymi z m i a n a m i . 3. Stałe w y k o r z y s t y w a n e przez p r o g r a m należy p r z e c h o w y w a ć w pamięci Flash (w pamięci p r o g r a m u ) , chroniąc j e t y m s a m y m przed jakimikolwiek zmianami w y w o ł a n y m i przez źle działający p r o g r a m . P a m i ę ć Flash nie może być b o w i e m m o d y f i k o w a n a przez C P U (nie d o t y c z y mikrokontrolerów ATmega).

8.

Układ transmisji szeregowej (UART) W wielu przypadkach system oparty na mikrokontrolerze musi k o m u n i k o w a ć się z j a k i m ś urządzeniem zewnętrznym. Aktualnie c o r a z powszechniej w y k o ­ rzystuje się d o tego celu interfejs U S B , ale w dalszym ciągu klasyczny interfejs - j a k i m jest R S 2 3 2 - cieszy się ogromną popularnością wśród użytkowników. Dlatego też, wiele współczesnych mikrokontrolerów m a w b u d o w a n e odpo­ wiednie bloki funkcjonalne d o realizacji asynchronicznej (niekiedy również synchronicznej) transmisji szeregowej. Określane są o n e m i a n e m U A R T (Universal Asynchronous

Receiver

and Transmitter).

Stanowią one kompletne roz­

wiązanie interfejsu pod w z g l ę d e m logicznym, j e d n a k gdy transmisja m a b y ć prowadzona

na większe odległości wymagają

układów dopasowujących

zastosowania

zewnętrznych

poziom sygnałów d o standardu R S 2 3 2 .

Można

z nich r e z y g n o w a ć w przypadku wieloprocesorowych aplikacji, w których po­ szczególne jednostki pracują w swoim bezpośrednim sąsiedztwie. Większość urządzeń obsługujących transmisję szeregową wykorzystuje interfejs R S 2 3 2 , w którym logicznej j e d y n c e przypisano wartość napięcia z przedziału od - 3 d o - 1 2 V, zaś logicznemu zeru przypisano wartość napięcia z przedziału od 3 d o 12 V. Sygnały na liniach transmisyjnych nie p o w i n n y osiągać wartości od - 3 d o + 3 V. Najpopularniejszym

układem d o realizacji takiego interfejsu jest

M A X 2 3 2 lub j e g o odmiany. W niektórych przypadkach zadowalające może być wykonanie konwertera poziomów na tranzystorze. M i m o popularności te­ g o typu transmisji nie wszystkie mikrokontrolery A V R wyposażono w U A R T (patrz porównanie parametrów w dodatku A ) . W takich przypadkach konieczna jest niestety całkowicie programowa j e g o implementacja. Stanowi to p e w n e utrudnienie,

ale nie jest niemożliwe d o zrobienia.

Opisywany

tu

układ

A T 9 0 S 2 3 1 3 na szczęście m a w swojej architekturze dupleksowy blok U A R T u, d o którego dostęp zapewniają wydzielone rejestry nadajnika i odbiornika. P o d s t a w o w e cechy U A R T - u w b u d o w a n e g o w mikrokontrolery A V R to: - w b u d o w a n y generator p o d s t a w y czasu dla transmisji szeregowej, - m o ż l i w o ś ć uzyskiwania w y s o k i c h prędkości transmisji dla niskich częstot­ liwości rezonatora k w a r c o w e g o , - d a n a o długości 8 lub 9 bitów, - układ redukcji s z u m ó w zakłócających transmisję, - detekcja nadpisania zawartości bufora odbiornika, - detekcja błędu ramki, - detekcja b ł ę d n e g o bitu startu, - trzy w y d z i e l o n e przerwania d o obsługi zdarzeń: z a k o ń c z e n i a transmisji da­ nej, opróżnienia bufora n a d a w c z e g o , zapełnienia bufora odbiorczego.

8.1.

Budowa i działanie nadajnika UART Schemat b l o k o w y układu nadajnika p r z e d s t a w i o n o na r y s u n k u 8 . 1 . Nadawa­ nie jest inicjowane przez zapisanie wysyłanej danej d o rejestru nadajnika U D R (UART l/O Register).

Dana ta jest następnie p r z e n o s z o n a d o wyjścio­

w e g o rejestru przesuwającego. Jeśli zapis d o U D R nastąpi p o t y m , gdy bit stopu poprzedniego znaku opuści rejestr przesuwający, to rejestr ten jest ła­ d o w a n y bezpośrednio nową daną. Jeśli zapis d o U D R nastąpi przed w y s ł a n i e m bitu stopu p o p r z e d n i e g o znaku, to n o w a dana czeka w rejestrze U D R na przepisanie d o w y j ś c i o w e g o rejestru przesuwającego d o m o m e n t u , gdy bit stopu p o p r z e d n i e g o znaku zostanie wy­ słany. Rejestr przesuwający m a długość 10 (lub 11) bitów (8 lub 9 bitów da­ nej + znak startu + znak stopu). W chwili, g d y rejestr przesuwający nadajnika jest pusty, n o w a dana j e s t przenoszona d o niego z rejestru U D R i jednocześ­ nie zostaje ustawiony bit U D R E (UART Data Register w rejestrze U S R (UART Status Register), Magistrata danych

XTAL-

BAUOxl6 Generator prędkości transm.

1:16

Rys. 8.1. Schemat blokowy nadajnika układa UART

Empty)

znajdujący się

c o j e s t s y g n a ł e m g o t o w o ś c i nadaj-

Rejestr danych UART (UDR)

nika d o przyjęcia nowej danej. Jednocześnie z przenoszeniem znaku z rejestru U D R d o rejestru przesuwającego bit 0 tego rejestru j e s t zerowany (będzie to bit startu), a bit 9 (lub 10) jest ustawiany (będzie to bit stopu). Jeśli wybrano 9-bitową długość słowa, to bit T X B 8 z rejestru U C R (UART Control Register)

jest

przenoszony d o bitu 9 rejestru przesuwającego. D ł u g o ś ć słowa określa się na­ dając odpowiednią wartość bitowi C H R 9 znajdującemu się w rejestrze U C R . Dla słowa 9-bitowego bit ten powinien b y ć ustawiony („1"). Przesuwanie bi­ tów w rejestrze wyjściowym jest taktowane zegarem transmisyjnym (Baud Ra­ tę Clock). Jest on niezależny od zegara taktującego C P U . Bity nadawanego znaku pojawiają się na wyprowadzeniu T X D mikrokontrolera. Najpierw bit startu, potem bity danej począwszy od najmniej znaczącego (LSB). N a końcu jest wysyłany bit stopu. Kiedy bit stopu opuści rejestr przesuwający, zostaje do niego załadowana n o w a dana z rejestru U D R (jeśli wcześniej została t a m umieszczona). Podczas ładowania bit U D R E jest ustawiony. Jeśli w rejestrze U D R nie m a kolejnego znaku d o wysiania, to bit U D R E zostaje ustawiony w chwili wyjścia poprzedniego bitu stopu z rejestru przesuwającego i pozostaje w t y m stanie d o momentu kolejnego wpisu d o rejestru U D R . Jeśli nie nastąpi zapisanie nowej danej, gdy bit stopu występuje na wyjściu T X D przez czas trwania transmisji j e d n e g o bitu, to zostanie ustawiona flaga TX Compiete

Fłag

(TXC) znajdująca się w rejestrze USR. Nadajnik m o ż e b y ć włączany lub w y ­ łączny za pomocą bitu T X E N z rejestru U C R . Jego ustawienie („1") uaktywnia nadajnik. Jeśli bit ten będzie wyzerowany („0"), wyprowadzenie P D 1 może b y ć wykorzystywane j a k o wejście/wyjście ogólnego przeznaczenia. Ustawienie T X E N powoduje c a ł k o w i t e p r z e c h w y c e n i e funkcji w y p r o w a d z e n i a P D 1 przez nadajnik, niezależnie o d ustawienia bitu D D D 1 w rejestrze D D R D .

Ustawienie bitu C H R 9 w rejestrze U C R p o w o d u j e , że n a d a w a n e i o d b i e r a n e znaki mają długość 9 b i t ó w , plus bit startu i bit stopu. M u s i m u b y ć n a d a n a o d p o w i e d n i a wartość przed zainicjowaniem transmisji. Dziewiąty bit d o w y ­ słania, t o T X B 8 znajdujący się w rejestrze U C R .

8.2.

Budowa i działanie odbiornika UART S c h e m a t b l o k o w y układu odbiornika przedstawiono na r y s u n k u 8.2. Wejście odbiornika transmisji szeregowej jest połączone za p o m o c ą o d p o w i e d n i c h układów przełączających z w y p r o w a d z e n i e m P D 0 / R X D . W e w n ę t r z n a logika próbkuje sygnał

16 razy w c i ą g u czasu t r w a n i a transmisji j e d n e g o bitu.

W czasie, gdy linia znajduje się w stanie idle ( o c z e k i w a n i e na bit startu), po­ j e d y n c z a p r ó b k a o wartości „ 0 " j e s t interpretowana j a k o opadające zbocze sygnału wejściowego. Powoduje to zainicjowanie sekwencji działań związa­ nych z wykryciem bitu startu. Przyjmijmy, ż e p r ó b k a ta m a n u m e r 1. Tak więc p o zmianie stanu linii odbiorczej ( R X D ) z 1 n a 0 o d b i o r n i k analizu­ j e 8, 9 i 10 próbkę. Jeśli c o najmniej dwie z nich będą miały wartość' „ 1 " , wy­ krycie bitu startu jest a n u l o w a n e . Sytuację taką uznaje się za zakłócenie im­ pulsowe i cała powyższa procedura jest w z n a w i a n a od początku. W przeciw­ n y m razie uznaje się, że odebrano bit startu. P r ó b k o w a n i e kolejnych bitów od­ bywa się w podobny sposób. Wartości c o najmniej d w ó c h j e d n a k o w y c h próbek spośród 8, 9 i 10 decydują o wartości odebranego bitu. J e d n a k o w e próbki nie muszą przy tym występować kolejno p o sobie. Sekwencja n p . 101 j e s t interpre­ towana j a k o bit o wartości „ 1 " . Odebrany bit „ w c h o d z i " d o rejestru przesuwa­ jącego. Próbkowanie wejścia R X D zilustrowano na r y s u n k u 8.3.

Magistrala danych

XTAL-

Generaior prędkości transm.

8AUDx16 1:16

Rejestr danych UART (UDR)

BAUD STORĘ UDR

Bufor wejściowy PDO

RXD

Blok detekcji bitów

Rejestr sterujący UART (UCR)

Magistrala danych

Rys. 8.2. Schemat blokowy odbiornika układu UART

>

10(H)-bitowyrejestr przesuwny odbiornika

RXD

sygnału przez 11M11liiiItllllllltlllllllllltllllliri 111 illllllllJlllltlllllllllllinIII•lllllllltItllllMiritlllJIllfllilllJlItllJIllIllIJJJJIlItlłJlIlllIłlllllltlllIIII• IL11 odbiornik UART Rys. 8.3. Próbkowanie danych odbieranych przez odbiornik UART-u

U k ł a d o d b i o r n i k a liczy o d b i e r a n e bity. O s t a t n i m b i t e m ramki jest bit stopu, który p o w i n i e n mieć wartość „ 1 " . Jest o n r o z p o z n a w a n y w z n a n y j u ż sposób. Jeśli o k a ż e się, ż e d w i e l u b trzy próbki (spośród 8, 9 i 10) bitu stopu są r ó w n e „ 0 " , p o d e j m o w a n a jest decyzja o wystąpieniu błędu ramki i ustawiana j e s t flaga Framing

Error ( F E ) w rejestrze statusu U S R (UART Status

Register).

Przed o d c z y t e m danej z rejestru U D R programista powinien z a w s z e spraw­ dzić, stan tej flagi, a b y u p e w n i ć się, czy nie wystąpi! błąd transmisji. P o pra­ w i d ł o w y m l u b b ł ę d n y m odebraniu bitu stopu dana j e s t p r z e p i s y w a n a z rejest­ r u przesuwającego d o rejestru U D R . J e d n o c z e ś n i e j e s t ustawiana flaga R X C w rejestrze U S R . Rejestr U D R to de facto

fizycznie d w a oddzielne rejestry

dla nadajnika i odbiornika. P o d c z a s odczytu U D R j e s t udostępniany odbior­ czy rejestr d a n y c h , podczas z a p i s y w a n i a natomiast j e s t udostępniany n a d a w ­ czy rejestr d a n y c h . Jeśli w y b r a n o 9-bitowe s ł o w o d a n y c h (bit C H R 9 w rejes­ trze U C R m a wartość „ 1 " ) , bit R X B 8 w rejestrze U C R jest ładowany 9 b i t e m z rejestru przesuwającego. Dzieje się to w tej samej chwili, c o przepisywanie danej z rejestru przesuwającego d o rejestru U D R . T a k s k o m p l e t o w a n a d a n a p o w i n n a b y ć odczytana z rejestru U D R przed o d e b r a n i e m następnej. Jeśli t a k się nie stanie, to w rejestrze U S R jest ustawiana flaga OverRun

( O R ) , sygna­

lizując błąd nadpisania danej. W takiej sytuacji ostatnia dana s k o m p l e t o w a n a w rejestrze przesuwającym nie p o w i n n a b y ć (teoretycznie) przenoszona d o U D R . Flaga O R j e s t buforowana i z a w s z e a k t u a l i z o w a n a p o odczytaniu pra­ widłowej danej z rejestru U D R . Programista p o w i n i e n z a w s z e s p r a w d z a ć stan flagi O R p o odczytaniu rejestru U D R . W y s t ę p o w a n i e b ł ę d ó w nadpisania m o ­ że b y ć konsekwencją zbyt dużej prędkości transmisji lub n a d m i e r n y m obcią­ ż e n i e m j e d n o s t k i centralnej i n n y m i zadaniami o w y ż s z y m priorytecie. W y z e ­ rowanie ( „ 0 " ) bitu R X E N w rejestrze U C R p o w o d u j e z a b l o k o w a n i e odbiorni­ ka. W y p r o w a d z e n i e P D 0 / R X D m o ż e b y ć w ó w c z a s w y k o r z y s t y w a n e j a k o wejście/wyjście o g ó l n e g o przeznaczenia. W p r z y p a d k u ustawienia („1") bitu C H R 9 w rejestrze U C R , dziewiąty bit o d e b r a n e g o z n a k u to R X B 8 znajdujący się w rejestrze U C R .

Włączenie

odbiornika

powoduje

całkowite

przechwycenie

funkcji w y p r o w a d z e n i a PDO przez odbiornik, niezależnie o d ustawienia bitu DDDO w rejestrze D D R D .

8.3.

Sterowanie transmisją D o obsługi transmisji szeregowej poprzez U A R T służą cztery rejestry specjalne.

UDR (UART HO Dała Register) - rejestr danych nadawanych/odbieranych przez UART - $0C Bit S0C($2C)

I

MSB

|

Otoyt/Zapis WW Wartość początkowa o R/W - oznacza odczyt/zapis

I R/W 0

I

I

RM 0

I

R/W

R/W

I R/W

0

0

1 R/W 0

0

L

S

B

i

"DR

0

Rejestr U D R to fizycznie d w a oddzielne rejestry występujące p o d tym sa­ m y m adresem w przestrzeni I/O. P o d c z a s zapisu d a n e są k i e r o w a n e do rejes­ tru danych wysyłanych (UART

Transmit

Dała

z rejestru danych odbieranych (UART Receive

Register). Data

O d c z y t następuje

Register).

USR (UART Status Register) - rejestr stanu UART-u - $0B Bit 7 6 $0B($2S) | RXC | TXC | UORE Odczyt/Zapis R R/W R Wartość początkowa 0 0 1 R -oznacza odczyt. R/W - oznacza od czyi/zapis

5 |

FE

4 |

3 OR R

0

0

2

l R

1 I

-

R 0

I R

0

0 R 0

l USR

Rejestr U S R może być tylko o d c z y t y w a n y . Sygnalizuje stan układu UART. B 7 - R X C (UART Receive

Comptete):

flaga

s y g n a l i z u j ą c a o d e b r a n i e zna­

ku przez odbiornik. Znacznik ten jest ustawiany („1") w c h w i l i , g d y o d e b r a n a d a n a jest przeno­ szona z odbiorczego rejestru przesuwającego d o rejestru U D R . Ustawienie bitu R X C o d b y w a się niezależnie od e w e n t u a l n e g o w y k r y c i a błędów trans­ misji. Jeśli bit R X C I E z rejestru U C R jest u s t a w i o n y ( „ 1 " ) , to ustawienie fla­ gi R X C będzie o z n a c z a ł o zgłoszenie przerwania UART Receive

Complete,

oznaczającego, że w rejestrze U D R znajduje się d a n a d o o d c z y t u . Bit RXC jest automatycznie k a s o w a n y w chwili odczytu rejestru U D R . Jeśli transmisje prowadzi się wykorzystując system przerwań, to p r o c e d u r a obsługi przerwa­ nia UART Receive

Complete

p o w i n n a odczytać rejestr U D R w c e l u skasowa­

nia flagi R X C . W p r z e c i w n y m razie, z a n i m zostanie z a k o ń c z o n a aktualna procedura obsługi wystąpi kolejne przerwanie. B 6 - T X C (UART Transmit Complete): wysyłania danej przez nadajnik.

flaga

s y g n a l i z u j ą c a zakończenie

Znacznik ten jest ustawiany („1") w chwili, gdy cała n a d a w a n a d a n a (włączając bit stopu) zostanie wysunięta z nadawczego rejestru przesuwającego i nie ma

nowej danej zapisanej w rejestrze U D R . Znacznik ten jest szczególnie przydat­ ny podczas obsługi transmisji półdupleksowej, w której bezpośrednio po wy­ słaniu znaku trzeba przechodzić „na odbiór" i zwalniać Unię transmisyjną. Jeśli bit T X C I E z rejestru U C R jest ustawiony („1"), t o ustawienie flagi T X C będzie oznaczało zgłoszenie przerwania UART Transmit Complete,

oznaczającego, ż e

w rejestrze U D R nie ma danej d o wysłania. Bit T X C jest automatycznie zero­ wany w chwili wykonania skoku d o odpowiedniego wektora przerwania. Moż­ na też g o z e r o w a ć poprzez wpisanie logicznej j e d y n k i („1") d o tego bitu: sbi

uci".txc

; zeru j flagę TXC w rejestrze UCR

B 5 - U D R E ( U A R T Data Register

Empty);

flaga

sygnalizująca opróżnie­

nie bufora U A R T . Bit U D R E jest ustawiany („1") w chwili przenoszenia danej z rejestru U D R d o nadawczego rejestru przesuwającego. Sygnalizowana jest tym s a m y m gotowość nadajnika do wczytania nowej danej przeznaczonej d o wysiania. Jeśli bit U D R I E w rejestrze U C R jest ustawiony („1"), t o przerwanie UART Transmit Complete będzie m o g ł o być obsługiwane dopóty, dopóki bit U D R E jest ustawiony. Flaga U D R E jest zerowana przez zapisanie rejestru U D R . Jeśli transmisję prowadzi się wykorzystując system przerwań, to procedura obsługi przerwania UART Data Register Empty musi zapisywać rejestr U D R w celu skasowania flagi U D R E . W p r z e c i w n y m razie, zanim zostanie zakończona aktualna procedura obsługi wystąpi kolejne przerwanie. Po restarcie mikrokontrolera flaga U D R E jest ustawiana („1") sygnalizując gotowość nadajnika. B 4 - F E (Framming

Error): flaga s y g n a l i z u j ą c a b)ąd r a m k i .

R a g a F E j e s t ustawiana, g d y zostanie wykryty błąd r a m k i (np. w p r z y p a d k u r o z p o z n a n i a zerowej wartości bitu stopu), z e r o w a n a z a ś automatycznie p o odebraniu p r a w i d ł o w e g o bitu stopu. B 3 - O R (OverRun):

flaga

sygnalizująca n a d p i s a n i e d a n y c h w rejestrze

odbiornika. Flaga O R j e s t ustawiana, jeśli zostanie w y k r y t e nadpisanie danych w rejest­ rze o d b i o r n i k a ( n p . gdy d a n a znajdująca się aktualnie w rejestrze U D R nie zostanie o d c z y t a n a przed w p r o w a d z e n i e m n a s t ę p n e g o znaku d o odbiorczego rejestru przesuwającego). Z n a c z n i k O R jest z e r o w a n y p o przesianiu odebra­ nej danej d o rejestru U D R . B2...0 - z a r e z e r w o w a n e . T e bity są z a r e z e r w o w a n e w układzie A T 9 0 S 2 3 1 3 i z a w s z e o d c z y t y w a n e j a ­ k o zero.

UCR [UART Control Register) -rejestr sterujący UART-u - $ 0 A s

4

7 6 A(S2A) l RXCIE | TXCIE | UDR1E I Odczyt/Zapis R W R / W R / W R Wartość początkowa 0 0 0 R - oznacza odczyt. W - oznacza zapis, R/W - oznacza S0

B 7 - R X C I E (RX Compłete

3

2

1

. . , , RXSN 1 TXEN I CHR9 | RXB8 / W R / W R / W R 0 0 0 1 odczyt/zapis

B i t

Interrupt

Enable):

. |

0

TXB8 W 0

, | UCR

bit z e z w o l e n i a n a przerwa­

nie od odbiornika ( p o o d e b r a n i u danej). Ustawienie („1") bitu R X C I E zezwala na przyjęcie p r z e r w a n i a Receive plete Interrupt,

Com­

zgłaszanego automatycznie przez U A R T p o odebraniu danej

i sygnalizowanego ustawieniem flagi R X C w rejestrze U S R . Przerwanie zo­ stanie obsłużone pod w a r u n k i e m g l o b a l n e g o z e z w o l e n i a na przerwania. B6 - T X C I E (TX Complete

Interrupt

Enable):

bit z e z w o l e n i a n a przerwa­

nie od nadajnika (po w y s i a n i u danej). Ustawienie („1") bitu T X C I E zezwala na przyjęcie przerwania Transmit

Comple­

te Interrupt, zgłaszanego automatycznie przez U A R T p o zakończeniu nadawania danej i sygnalizowanego ustawieniem flagi T X C w rejestrze USR. Przerwanie zostanie obsłużone pod warunkiem globalnego zezwolenia na przerwania. B 5 - UDRJJE (UART Data Register

Empty Interrupt

Enable):

bit zezwolenia

na przerwanie od nadajnika (po opróżnieniu bufora n a d a j n i k a U D R ) . Ustawienie („1") bitu U D R I E zezwala na przyjęcie p r z e r w a n i a UART Data Register

Empty Interrupt,

zgłaszanego a u t o m a t y c z n i e p r z e z U A R T p o opróż­

nieniu bufora nadajnika i s y g n a l i z o w a n e g o u s t a w i e n i e m flagi U D R E w rejes­ trze U S R . Przerwanie zostanie obsłużone p o d w a r u n k i e m g l o b a l n e g o zezwo­ lenia na przerwania. B 4 - R X E N (Receher

Enable): bit włączający/wyłączający odbiornik UART.

Ustawienie („1") bitu R X E N powoduje włączenie o d b i o r n i k a U A R T - u . Jeśli bit R X E N m a wartość „ 0 " odbiór jest n i e m o ż l i w y , a flagi R X C , O R i FE nie mogą stawać się a k t y w n e (są ustawiane a u t o m a t y c z n i e p o wystąpieniu odpo­ wiednich zdarzeń). Jeśli flagi te zostały w czasie pracy u s t a w i o n e , to wyzero­ wanie bitu R X E N nie w p ł y w a na nie (są nadal u s t a w i o n e ) . B 3 - T X E N (Transmitter Enable): bit włączający/wyłączający odbiornik UART. Ustawienie („1") bitu T X E N powoduje włączenie nadajnika U A R T . Jeśli bit T X E N zostanie w y z e r o w a n y w chwili, gdy nie została j e s z c z e zakończona transmisja, to nadajnik nie zostanie w y ł ą c z o n y natychmiast, lecz dopiero po c a ł k o w i t y m zakończeniu wysyłania bieżącej danej ( w y c h o d z ą c e j z szerego­ w e g o rejestru przesuwającego nadajnika) i danej znajdującej s i ę w rejestrze U D R (oczekującej na wysłanie).

B 2 - C H R 9 (9 Bit Characters):

bit ustalający d ł u g o ś ć d a n e j n a d a w a n e j /

odbieranej. Ustawienie („1") bitu C H R 9 powoduje przyjęcie 9-bitowej długości danej na­ dawanej i odbieranej plus bit stopu i bit startu. Dziewiąty bit odebranego znaku jest odczytywany z rejestru U C R (bit R X B 8 ) . Dziewiąty bit transmitowanego znaku jest zapisywany w rejestrze U C R (bit T X B 8 ) . B I - R X B 8 (Receive

Data Bit 8)t ó s m y ( n a j b a r d z i e j z n a c z ą c y ) bit o d e b r a ­

nej danej. Kiedy bit C H R 9 j e s t ustawiony ( „ 1 " ) , R X B 8 zawiera najstarszy bit odebranej danej. BO - T X B 8 (Transmit

Data Bit 8): ó s m y ( n a j b a r d z i e j z n a c z ą c y ) bit n a d a ­

wanej danej. Kiedy bit C H R 9 j e s t ustawiony ( „ 1 " ) , T X B 8 z a w i e r a najstarszy bit n a d a w a ­ nej danej.

8.4.

Generator podstawy czasu transmisji [Baud Rate Generator) Z e g a r synchronizujący pracę U A R T jest wytwarzany przez o d p o w i e d n i e p o ­ dzielenie częstotliwości oscylatora s y s t e m o w e g o . D o obliczenia j e g o para­ m e t r ó w stosuje się poniższą formułę: BAUD = f gdzie:

CK

/16-(UBRR+1)

B A U D - p r ę d k o ś ć transmisji [b/s], fcK - częstotliwość oscylatora taktującego C P U , U B R R - wartość rejestru U B R R zapewniająca transmisję z ustaloną prędkością ( m o ż e p r z y j m o w a ć wartości o d 0 d o 255).

J a k w i d a ć , ustawianie prędkości tylko poprzez zapisanie rejestru U B R R p o ­ ciąga za sobą p e w n e niedogodności. T a k a dyskretna forma regulacji z 2 5 6 (tylko) m o ż l i w y m i k r o k a m i m o ż e budzić o b a w y c o d o jej skuteczności. Istot­ nie, nie da się w ten sposób uzyskać dowolnej prędkości transmisji dla do­ wolnej wartości z a s t o s o w a n e g o kwarcu. Pamiętajmy j e d n a k , że najczęściej j e s t s t o s o w a n a j e d n a z kilku standardowych prędkości transmisji przewidzia­ nych dla interfejsu R S 2 3 2 . Z a s a d a prowadzenia transmisji

asynchronicznej

dopuszcza r ó w n i e ż pewną tolerancję częstotliwości zegara transmisyjnego. Z a k ł a d a się, że 1% błąd określenia tej prędkości nie powinien p o w o d o w a ć praktycznych p r o b l e m ó w . G d y b y p o m i m o tego nie u d a ł o się obliczyć para-

m e t r u U B R R , należy p r ó b o w a ć d o b r a ć c z ę s t o t l i w o ś ć r e z o n a t o r a kwarcowe­ g o . Wiąże się to niestety z e w e n t u a l n y m i p ó ź n i e j s z y m i p r o b l e m a m i z obli­ c z e n i a m i czasu w p r o g r a m i e , j e ś l i z o b l i c z e ń w y n i k n i e „ n i e r ó w n a " wartość k w a r c u . Z e s t a w i e n i e z t a b l i c y 8.1 ułatwi o d p o w i e d n i d o b ó r w s z y s t k i c h para­ m e t r ó w określających p r ę d k o ś ć transmisji,. W y t ł u s z c z o n o w s z y s t k i e pozycje, w których obliczony błąd j e s t mniejszy n i ż

2%.

Tab. 8.1. Dobór parametru UBRR dla standardowych prędkości transmisji i kilku typowych rezonatorów kwarcowych Prędkość

1 MHz

transmisji

Stąd

1.8432 MHz

Błąd [%]

2 MHz

Btąd t%]

2,4576 MHz

f%]

Btąd [%]

2400

UBRR=25

0,2

UBRR=47

0,2

UBRR=12

0.2

UBRR=23

0.0 0,0

UBRR=51

4800

UBRR=25

0,2

UBRfi=63 UBRR=31

0.0

9600

UBRR=6

7.5

UBRR=11

0,0

UBRR=12

0,2

UBRR=15

0,0

14400

UBRR=3

7,8

UBRR=7

0,0

UBRR=8

3,7

UBRR=10

3,1

19200

UBRR=2

7,8

UBRR=5

0,0

UBRR=6

7.5

UBRR=7

0,0

28800

UBRR=1

7,8

UBRR=3

0,0

UBRR=3

7,8

UBRR=4

6,3

38400

UBRR=1

22,9

U8RR=2

0.0

UBRR=2

7,8

UBRR=3

0.0

57600

UBRR=0

7,8

UBRR=1

0,0

UBRR = 1

7.8

UBRR=2

12,5

76800

UBRR=0

22.9

UBRR=1

33,3

UBRR = 1

22.9

UBRR=1

0.0

115200

U8RR-0

84.3

U8RR=0

0,0

UBRR=0

7,8

NBRR=0

25,0

3,2768 MHz

Błąd

3.6864 MHz

Błąd 1%1

4 MHz

Błąd

4,608 MHz

Btąd !%]

Prędkość transmisji

l%]

m

2400

UBRR=84

0,4

UBRR=95

0,0

UBRR=103

0,2

UBRR=42

0,8

UBRR=47

0.0

0,2

9600

UBRR=20

1,6

UBRR=23

0,0

UBRR=51 U8RR=25

UBRR=119 UBRR=59

0,0

4800

0,2

UBRR=29

0,0

14400

UBRR=13

1.6

UBRR=15

0,0

UBRR=16

2.1

UBRR=19

D.O

19200

U8RR = 10

3.1

UBRR=11

0.0

UBRR=12

0,2

UBRR=14

0,0

0,0

28800

UBRR=6

1.6

UBRR=7

0,0

U8RR=8

3,7

UBRR=9

0,0

38400

U8RR=4

6.3

UBRR=5

0,0

NBRR=6

7.5

UBRR=7

6.7

0,0

57600

UBRR = 3

12,5

UBRR=3

7.8

UBRR ==4

UBRR=2

12,5

UBRR=3 UBRR=2

0,0

76800

0,0

UBRR=2

7,8

UBRR=3

6.7

115200

UBRR=1

12.5

UBRR=1

o.o

UBRR = 1

7,8

UBRR=2

20,0

Prędkość transmisji

7,3728 MHz

Błąd [%]

8 MHz

Błąd [%]

9,216 MHz

Błąd [%]

11.059 MHz

Błąd

2400

UBRR=191

0,0

UBRR=207

0,2

UBRR=239

0,0

UBRR=287

_

4800

UBRR=95

0,0

0,0

UBRR-143

U8RR=47

0,0

0,2 0.2

UBRR=119

9600

U8RR=103 U BRR=51

UBRR=S9

UBRR=71

14400

UBRR=31

UBRR=34

0,8

UBRR=39

UBRR=47

0,0

19200

UBRR=23

0.0 0,0

0,0 0,0

0,0 0,0

UBRR=25

0,2

UBRR=29

0,0

UBRR=35

0,0

28800

UBRR=15

0,0

UBRR=16

2,1

UBRR=19

0,0

U8HR=23

0.0

38400

UBRR=11

0.0

UBRR=12

0,2

0,0

UBRR=17

0,0

57600

UBRR=7

0.0

UBRR=8

3.7

UBRR=14 UBRR=9

0,0

UBRR=11

0,0

76800

UBRR=5

0,0

UBRR=6

7,5

UBRR=7

6,7

UBRR=8

0,0

115200

UBRR=3

0,0

UBRR=3

7,8

UBRR=4

0.0

UBRR=5

0,0

UBRR (UART Baud Rate Register) - rejestr wyboru prędkości transmisji UART-u - $09 7 Bit S09(S29) | MSB | R/W Odczyt/Zapis Wartość początkowa 0 R/W - oznacza odczyt/zapis

6

5

4

3

Z

1

RAN

R/W

R/W

R/W

R/W

R/W

0 LSB R/W

0

0

0

0

0

0

0

Rejestr U B R R zawiera 8-bitowy p a r a m e t r określający p r ę d k o ś ć transmisji szeregowej, z g o d n i e z p r z e d s t a w i o n y m i wyżej obliczeniami.

U k ł a d U A R T mikrokontrolera A T 9 0 S 2 3 1 3 m o ż e utracić syn­ chronizację, jeśli podczas wyłączenia odbiornika na linii R X D b ę d z i e w y s t ę p o w a ! stan niski. Dzieje się tak, g d y ż w e w n ę t r z n a logika bloku U A R T w y k r y w a rozpoczęcie transmisji (bit star­ tu) nawet w ó w c z a s , gdy U A R T nie j e s t włączony. W takiej sy­ tuacji pierwszy odebrany bajt p o włączeniu

UART

będzie

błędny. A b y uchronić się o d takiego p r z y p a d k u należy z a p e w ­ nić u t r z y m y w a n i e linii R X D w stanie w y s o k i m podczas wyłą­ czenia interfejsu U A R T .

9.

Komparator analogowy M a r z e n i e m k a ż d e g o konstruktora j e s t mikrokontroler w y p o s a ż o n y w prze­ twornik analogowo-cyfrowy. Niestety, często okazuje się, że wykonanie ta­ k i e g o układu chociaż m o ż l i w e , nie j e s t proste. Z a i m p l e m e n t o w a n i e dobrego przetwornika A/C w strukturze mikrokontrolera jest na o g ó ł okupione dość z n a c z n y m wzrostem kosztu wykonania układu. Minimalizacja wzajemnego o d d z i a ł y w a n i a na siebie b l o k ó w analogowych i cyfrowych w j e d n y m układzie stanowi niemałe w y z w a n i e dla biur konstruk­ cyjnych producentów. Rezygnacja z tego k o m p o n e n t u znajduje uzasadnienie, g d y ż w wielu p r z y p a d k a c h problem braku p r z e t w o r n i k a m o ż n a obejść pew­ n y m i metodami. W p r a w d z i e specjalizowane, „ a n a l o g o w e " aplikacje nie obędą się bez p r a w d z i w e g o przetwornika A / C , lecz w mniej wymagających sys­ temach można d o c e l ó w przetwarzania a n a l o g o w o - c y f r o w e g o

zastosować

komparator analogowy. Okazuje się to na tyle p r o s t y m i tanim rozwiązaniem, że jest stosowane w wielu b a r d z o p o p u l a r n y c h m i k r o k o n t r o l e r a c h . Kompara­ tor taki m o ż e być oczywiście również w y k o r z y s t y w a n y d o i n n y c h zadań. Większość mikrokontrolerów A V R - w t y m A T 9 0 S 2 3 1 3 -

m a w swojej

strukturze komparator analogowy (patrz zestawienie w d o d a t k u A ) . Jego za­ daniem jest p o r ó w n y w a n i e d w ó c h napięć d o p r o w a d z o n y c h d o wejścia nieodwracającego A1N0 (PBO) i wejścia odwracającego A I N 1 ( P B l ) (rysunek 9.1). Wyjście komparatora A C O (Analog

Comparator

Output)

jest w stanie

w y s o k i m („1"), jeśli napięcie na wejściu n i e o d w r a c a j ą c y m AINO jest większe od napięcia na wejściu odwracającym A I N 1 . Wyjście k o m p a r a t o r a może być wykorzystywane do w y z w a l a n i a funkcji p r z e c h w y t y w a n i a Timera/Licznikal. W systemie przerwań mikrokontrolera A T 9 0 S 2 3 1 3 p r z e w i d z i a n o specjalny wektor przerwania przydzielony dla k o m p a r a t o r a a n a l o g o w e g o , równy $00A.

PBO (AINO)

ACIE

ACD ACO

Przerwanie od komparatora analogowego

Wybór warunków zgłoszenia przerwania

1 ACIS1

T

ACl ACIC

ACISO Do mulitpleksera TC1 CAPTURE TRIGGER

Rys. 9.1. Schemat blokowy komparatora analogowego

Przerwanie j e s t g e n e r o w a n e na wyjściu k o m p a r a t o r a , przy c z y m zgłoszenie przerwania m o ż e n a s t ę p o w a ć p o zmianie stanu na j e g o wyjściu z niskiego na w y s o k i , z w y s o k i e g o na niski, lub dowolną zmianą stanu (przerzutem). K o m ­ parator m o ż e b y ć p r o g r a m o w o wyłączany w celu zmniejszenia poboru prądu zasilającego p r z e z mikrokontroler.

ACSR {Analog Comparator Control and Status Register) - rejestr sterujący i statusu komparatora analogowego - $08 B i t

7

$08 ($28)

|

ACD

CWczytCapis

6 | •

-

RAW

S :

|

4

ACO

R

R

|

3

ĄCI

|

ACIE

R/W

R/W

Wartość początkowa o 0 N/A 0 R - oznacza odczyt. R/W - oznacza odczyt/zapis. N/A - nieustalona

B7-ACD

(Analog

Comparator

Disable):

2

1

0

| ACIC | ACISl ] AC1S0 | ACSR R/W 0

bit

R/W 0

RAW 0

0

włączający/wyłączający

komparator analogowy. Ustawienie ( „ 1 " ) bitu A C D p o w o d u j e wyłączenie komparatora. Bit ten m o ż e b y ć u s t a w i o n y w d o w o l n y m m o m e n c i e . W y ł ą c z e n i e k o m p a r a t o r a wyraźnie zmniejsza p o b ó r prądu zasilającego w trybie n o r m a l n y m i Idle. zmiany bitu A C D musi b y ć w y ł ą c z o n e p r z e r w a n i e k o m p a r a t o r a Comparator

Interrupt)

W chwili (Analog

przez w y z e r o w a n i e bitu A C I E w rejestrze A C S R . Jeś­

li się nie z a p e w n i tego w a r u n k u , m o ż e wystąpić n i e k o n t r o l o w a n e w y g e n e r o ­ wanie p r z e r w a n i a . B 6 - zarezerwowany. T e n bit j e s t z a r e z e r w o w a n y w układzie A T 9 0 S 2 3 1 3 i z a w s z e o d c z y t y w a n y j a k o zero. B 5 - A C O (Analog Comparator

Output):

wyjście komparatora analogowego.

Bit A C O j e s t b e z p o ś r e d n i m odzwierciedleniem s t a n u wyjścia k o m p a r a t o r a analogowego. B 4 - A C l (Analog tora.

Comparator

Interrupt):

flaga

p r z e r w a n i a od k o m p a r a ­

Bit A C l j e s t ustawiany („1") w m o m e n c i e wystąpienia zdarzenia n a wyjściu komparatora a n a l o g o w e g o zdefiniowanego za p o m o c ą bitów A C I S l i ACISO j a k o zgłoszenie przerwania. Procedura obsługi p r z e r w a n i a od k o m p a r a t o r a (Analog wiony

Comparator

Interrupt)

jest w y k o n y w a n a , jeśli bit A C I E jest usta­

(„1") i włączone j e s t globalne zezwolenie n a p r z e r w a n i a (bit I w re­

jestrze S R E G jest ustawiony). Flaga A C l j e s t z e r o w a n a sprzętowo w chwili skoku d o w e k t o r a przerwania o d komparatora. M o ż e b y ć także z e r o w a n a p o ­ przez w p i s a n i e j e d y n k i („1") d o tego bitu. Jeśli w p r o g r a m i e pozostałe bity

rejestru U C S R są m o d y f i k o w a n e r o z k a z a m i S B I lub C B I , t o bit A C l powi­ nien być wyzerowany przed w y k o n a n i e m tych modyfikacji. B 3 - A C I E (Analog

Comparator

Interrupt

Enable):

flaga

zezwolenia na

przerwanie od k o m p a r a t o r a . Ustawienie bitu A C I E („1") przy w ł ą c z o n y m g l o b a l n y m zezwoleniu na prze­ rwania (bit I w rejestrze S R E G j e s t u s t a w i o n y ) , z e z w a l a n a generowanie przerwania od komparatora. Jeśli A C I E = 0, to p r z e r w a n i a komparatora są zablokowane. B 2 - A C I C (Analog

Comparator

Input Capture

Enable):

bit zezwolenia na

wyzwalanie funkcji p r z e c h w y t y w a n i a T i m e r a / L i c z n i k a l p r z e z kompara­ tor a n a l o g o w y . Ustawienie („1") bitu A C I C powoduje, że funkcja p r z e c h w y t y w a n i a Timera/ Licznikal jest w y z w a l a n a przez k o m p a r a t o r a n a l o g o w y . W y j ś c i e komparato­ ra zostaje w ó w c z a s dołączone b e z p o ś r e d n i o d o układu sterującego funkcją przechwytywania. W t y m trybie m o ż n a n o r m a l n i e w y k o r z y s t y w a ć eliminator s z u m u i wybierać z b o c z e generujące p r z e r w a n i e Timer/Counterl ture Interrupt

Input Cap­

(patrz opis L i c z n i k a / T i m e r a l ) . Jeśli bit A C I C j e s t wyzerowany

(„0"), opisanego wyżej połączenia nie m a . A b y w y z w a l a n e komparatorem przerwanie Timer/Counterl

Input Capture Interrupt

m o g ł o b y ć wygenerowa­

ne, bit T I C I E 1 w rejestrze T I M S K m u s i b y ć ustawiony ( „ 1 " ) . B I , BO - A C I S l , ACISO (Analog

Comparator

Interrupt

Modę

Select): bity

w y b o r u w a r u n k u zgłaszania p r z e r w a n i a przez k o m p a r a t o r . Powyższe bity określają które zdarzenie na wyjściu k o m p a r a t o r a analogowego powoduje zgłoszenie przerwania. Możliwości są przedstawione w tablicy 9.1. Przykład wykorzystania komparatora a n a l o g o w e g o j a k o ź r ó d ł a wyzwalania funkcji przechwytywania T i m e r a / L i c z n i k a l z a m i e s z c z o n o w rozdziale 14.1 (ćwiczenie 6). Tab. 9.1 Tryby wyzwalania przerwania komparatora ustawiane bitami ACIS1, ACISOH) ACISl

ACISO

0

0

Przerwanie komparatora wyzwalane zmianą stanu na jego wyjściu

0

1

Zarezerwowane

1

0

Przerwanie komparatora wyzwalane opadającym zboczem sygnału wyjściowego komparatora

1

1

Przerwanie komparatora wyzwalane narastającym zboczem sygnału wyjściowego komparatora

Tryb przerwania

?:

Uwaga: " i Podczas zmian bitów ACIS1 i ACISO przerwanie od komparatora analogowego powinno być zablokowa­ ne przez wyzerowanie bilu ACIE w rejestrze ACSR. W przeciwnym razie może wystąpić niekontrolowane zgłoszenie przerwania komparatora.

t

10. Porty wejścia-wyjścia (l/O) D o czego może być wykorzystany mikrokontroler? Jak sama nazwa wska­ zuje d o s t e r o w a n i a , a j e ś l i tak, to p o w i n i e n b y ć w y p o s a ż o n y w o d p o w i e d n i ą liczbę u n i w e r s a l n y c h wejść i w y j ś ć . U w z g l ę d n i e n i e t e g o postulatu m o ż e niekorzystnie wpływać na wielkość obudowy mikrokontrolera. Aby zmini­ malizować liczbę wyprowadzeń układu scalonego, wymyślono wielofunk­ cyjne p o r t y w e / w y . W z a l e ż n o ś c i o d u s t a w i e ń b i t ó w k o n f i g u r a c y j n y c h m o ­ gą o n e p e ł n i ć rolę p o r t ó w w e / w y o g ó l n e g o p r z e z n a c z e n i a w y k o r z y s t y w a ­ nych do sterowania urządzeniami zewnętrznymi lub mogą współpracować z w e w n ę t r z n y m i b l o k a m i f u n k c j o n a l n y m i . Z e w z g l ę d u na b u d o w ę w e w n ę t ­ rzną C P U , a w szczególności długość rejestrów i s z e r o k o ś ć szyny danych porty te mają najczęściej b u d o w ę 8-bitową. N i e k t ó r e z nich m o g ą nawet pra­ c o w a ć j a k o a n a l o g o w e lub cyfrowe. W zależności o d typu mikrokontrolera j e s t w n i m z a i m p l e m e n t o w a n a mniejsza lub w i ę k s z a liczba p o r t ó w (patrz z e ­ stawienie p a r a m e t r ó w w dodatku A ) . W układzie A T 9 0 S 2 3 1 3 u ż y t k o w n i k m a d o dyspozycji 8-bitowy port w e / w y - P O R T B i 7-bitowy P O R T D . Kieru­ n e k k a ż d e g o w y p r o w a d z e n i a d o w o l n e g o portu m o ż e ustalany niezależnie o d pozostałych i zmieniany w d o w o l n y m m o m e n c i e bez w p ł y w u na pozostałe li­ nie portów. S t o s o w n ą konfigurację m o ż n a zrealizować przy użyciu r o z k a z ó w S B I lub C B I . T e s a m e rozkazy mogą służyć d o ustawienia o d p o w i e d n i e g o p o z i o m u na porcie w y j ś c i o w y m lub włączenia/wyłączenia podciągania pullup linii portu w e j ś c i o w e g o .

10.1. Budowa portu B Jak j u ż w i e m y , P O R T B j e s t 8-bitowym, d w u k i e r u n k o w y m p o r t e m w e / w y . Jest on dostępny poprzez 3 lokacje w przestrzeni w e / w y

mikrokontrolera.

D l a c z e g o j e d e n port zajmuje aż trzy adresy? Praktycznie j e d e n adres wystar­ czy, ale rozwiązania z a s t o s o w a n e w A V R - a c h pozwalają na bardziej efek­ t y w n e konfigurowanie i w y k o r z y s t y w a n i e portów. Jak się t o z a t e m o d b y w a ? Pierwsza lokacja to rejestr danych (Data

Register)

P O R T B - adres $18 w przestrzeni w e / w y mikrokontrolera lub $ 3 8 w obsza­ rze pamięci w e w n ę t r z n e j . Następna, to rejestr konfiguracji kierunku Direction

Register)

(Data

D D R B mający o d p o w i e d n i e adresy: $ 1 7 ($37) i ostatni -

rejestr wejściowy (Input Pius) P1NB o adresach $16 ($36). Rejestr P I N B m o ­ że b y ć tylko o d c z y t y w a n y , P O R T B i D D R B mogą b y ć z a r ó w n o czytane j a k

i z a p i s y w a n e . Ważną cechą portu B j e s t to, że każda je­

AT90S2313

g o linia m a i n d y w i d u a l n i e w y b i e r a n y rezystor podcią­ gający d o „plusa" zasilania (pull-up).

D o wszystkich

w y p r o w a d z e ń P O R T B m o ż n a dołączać diody LED j .

LED

e

d y n i e p o p r z e z rezystor ograniczający.

Dopuszczalna

obciążalność k a ż d e g o w y p r o w a d z e n i a P O R T B wynosi

Rys. 10.1. Przykład bezpośredniego stero­

2 0 m A w stanie niskim (dla V

wania diodą LED przez

p a m i ę t a ć o tym, ż e s u m a w s z y s t k i c h prądów z portów

mikrokontroler AVR

wyjściowych nie m o ż e p r z e k r o c z y ć wartości 200 mA.

c

c

= 5 V), trzeba jednak

Bezpośrednio sterowane diody L E D p o w i n n y b y ć w ł ą c z o n e poprzez rezystor ograniczający pomiędzy plusem zasilania a p o r t e m w y j ś c i o w y m (przykłado­ w e sterowanie diodą L E D przedstawiono na r y s u n k u 10.1). Zaświecenie dio­ dy następuje p o ustawieniu na wyjściu portu n i s k i e g o p o z i o m u logicznego.

Jeśli w y p r o w a d z e n i a PBO d o P B 7 są w y k o r z y s t y w a n e jako wejścia i są zewnętrznie p o d c i ą g a n e d o dołu, t o stanowią źród­ ło prądu wypływającego z portu, jeśli t y l k o są uaktywnione w e w n ę t r z n e rezystory podciągające.

Jak j u ż wiemy większość Unii p o r t ó w o g ó l n e g o p r z e z n a c z e n i a pełni dodatko­ w e funkcje wykorzystywane d o obsługi urządzeń peryferyjnych. Znaczenie funkcji alternatywnych portu B p r z e d s t a w i o n o w t a b l i c y 10.1. Tab. 10.1. Alternatywne funkcje portu B Wyprowadzenie portu

Funkcja alternatywna

PBO

AINO (wejście nieodwracające komparatora analogowego)

PBl

AIN1 (wejście odwracające komparatora analogowego)

P83

OCi (wyjście porównania dla Timera/Licznikal)

PB5

MOSI (wejście danych dla programowania szeregowego)

PB6

MISO (wyjście danych dla programowania szeregowego)

PB7

SCK (wejście zegarowe dla programowania szeregowego)

PORTB [Port B Bata Register) - rejestr danych portu B - $ 1 8 Bit

, Z . 6 5 4 2 1 0 > I PORTB7 | PORTB6 I PORTB5 | P0RTB4 I PORTB3 | PORTB21 PORTB1 I PORTBp] PORTU Odczyttfapis R/W R/W R/W RAW RAW R/W RAW RW WartoM początkowa 0 0 o O o o n o R/W-ojnaoza odczyt/zapis u 0 0 0 o 3

S 1 S ( E 3 8

Rejestr P O R T B może b y ć zapisywany i o d c z y t y w a n y . Z a w i e r a dane we/wy.

DDRB (Port B Bata Direction Register) - rejestr kierunku portu B - $17 8 i t

7

$17 ($37) | DDB7 | Odczyt/Zapis R/W Wartość początkowa 0 R/W - oznacza odczyt/zapis

DDB6 R/W 0

6 |

5 DDB5 R/W 0

j

4 DDB4 R/W

3

2

1

0

| DDB3 | DDB2 | DDB1 ] ODBO | DDRB R/W R/W R/W R/W 0 0 0 0 0

Rejestr D D R B określa typ każdej linii portu B . Linie m o g ą b y ć skonfiguro­ w a n e j a k o w e j ś c i o w e lub wyjściowe. D o d a t k o w o ustawia się opcje związane z podciąganiem. Szczegóły są p o d a n e w dalszej części niniejszego rozdziału.

PINB (Port B Input Pin Address) - rejestr wejściowy portu B - $ 1 6 7 Bit $16 ($36) | PINB7 ; R Odczyt/Zapis Wartość początkowa WA P. - oznacza odczyt

6 PINB6 R

5 PINB5 R

4 PINB4 R

3 PINB3 R

2 PINB2 R

PINB1 R

0 PINBO R

N/A

N/A

N/A

N/A

N/A

N/A

N/A

1

Rejestr PINB może b y ć tylko odczytywany. J e g o zawartość odzwierciedla bez­ pośrednio stan wyprowadzeń mikrokontrolera przypisanych d o portu B . Fi­ zycznie nie j e s t to więc rejestr. Inaczej jest podczas bezpośredniego odczytu P O R T B . W ó w c z a s czytany j e s t stan zatrzasków portu B (Port B Data

Latch).

10.1.1. Port B jako cyfrowy port we/wy ogólnego przeznaczenia Jeśli poszczególne linie portu B są wykorzystywane j a k o wyprowadzenia cyfro­ w e ogólnego przeznaczenia, to są wzajemnie równoważne. Przyjmijmy oznacze­ nie PBn d o określenia n-tego wyprowadzenia portu B . Stosując dalej tę konwen­ cję, bit D D B n w rejestrze D D R B będzie określał kierunek wyprowadzenia PBn. Jeśli D D B n będzie ustawiony („1"), to wyprowadzenie P B n będzie skonfiguro­ wane j a k o wyjściowe. Jeśli D D B n będzie wyzerowany („0"), wyprowadzenie PBn będzie skonfigurowane jako wejściowe. Wyprowadzenie P B n skonfiguro­ wane jako wejściowe będzie się zachowywało różnie, w zależności od stanu P O R T B n . Jeśli bit P O R T B n będzie ustawiony („1"), to linia wejściowa PBn bęTab. 10.2. Wpływ ustawienia bitów DDBn i PORTBn na wyprowadzenia portu B DDBn

PORTBn

1/0

0

0

Wejście

Brak

Wysoka impedancja (high-Z)

0

1

Wejście

Jest

PBn jest źródłem prądu, jeśli jest zewnętrznie podcią­ gany do masy zasilania ipull-Iow)

1

0

Wyjście

Brak

Wyjście typu push-pull stan niski

1

1

Wyjście

Brak

Wyjście typu push-pull stan wysoki

Kt

;

Podciąganie pull-up

Uwagi

r

3

:

dzie miała uaktywniony M O S - o w y rezystor podciągający (pull-up). Taka konfi­ guracja świetnie nadaje się d o obsługi np. zewnętrznej klawiatury, różnego ro­ dzaju przełączników. Trzeba jednak pamiętać o ograniczonych możliwościach wewnętrznego podciągania. D o wyłączenia wewnętrznego rezystora podciągają­ cego należy wyzerować („0") bit P O R T B n lub skonfigurować linię PBn jako wyjściową. Po zerowaniu rnikrokontrolera port B jest ustawiany w stan wysokiej impedancji, nawet wówczas, gdy nie jest aktywny zegar systemowy. Konfigurowanie

portów

w języku

C

było

przedstawione

„przy

okazji"

w przykładzie 9 . 1 . Poniżej m o ż n a z o b a c z y ć , j a k robi się to w asemblerze. Przykład 10.1. Konfigurowanie portów mikrokontrolera w asemblerze. W charakterze ćwiczenia, dla lepszego zrozumienia programu warto rozpisać poszczególne bity w rejestrach PORTB i DDRB .include "2313def.inc" -def temp=rl7 ldi

temp,$af

out

ddrb,temp

ldi out

temp,0xc£ portb,temp

;PB0 do PB3 oraz PBS i PB7 - wyjścia PBO PB5 PB4 PB6

do PB3 wyjście wejście wejście

i PB7 wyjście w stanie wysokim w stanie niskim w stanie High-Z podciągnięte do- plusa

10.1.2. Funkcje alternatywne portu B Wyprowadzenie portu B mogą spełniać także następujące funkcje alternatywne: B 7 - S C K : wejście z e g a r o w e dla p r o g r a m o w a n i a s z e r e g o w e g o . D o tego wejścia jest doprowadzany zewnętrzny przebieg zegarowy taktujący trans­ ferem danych podczas szeregowego p r o g r a m o w a n i a pamięci rnikrokontrolera. B 6 - M I S O : wyjście d a n y c h d l a p r o g r a m o w a n i a s z e r e g o w e g o . Z tego wyjścia są p r z e k a z y w a n e informacje z m i k r o k o n t r o l e r a d o programa­ tora podczas s z e r e g o w e g o p r o g r a m o w a n i a p a m i ę c i . B 5 - M O S I : wejście danych dla programowania szeregowego. D o tego wejścia są p r z e k a z y w a n e informacje z p r o g r a m a t o r a d o mikrokont­ rolera podczas s z e r e g o w e g o p r o g r a m o w a n i a p a m i ę c i . B 3 - O C 1 : wyjście p r z e c h w y t y w a n i a . Wyjście O C 1 j e s t w y k o r z y s t y w a n e , gdy j e s t a k t y w n a funkcja porównywania T i m e r a / L i c z n i k a l . Pojawia się na n i m stan w y s o k i , jeśli stan Timera/Liczni­ kal

zrówna

się

z rejestrem

OCRIA

(tzn.

gdy

TCNTlH=OCRIAH

i T C N T l L = O C R l A L ) . W y p r o w a d z e n i e P B 3 p o w i n n o b y ć w takim p r z y p a d ­ ku skonfigurowane j a k o wyjście. Więcej informacji p o d a n o w rozdziale 5.2. B I - A I N 1 : wejście odwracające komparatora analogowego. Jeśli w y p r o w a d z e n i e t o jest skonfigurowane j a k o wejście z w y ł ą c z o n y m p o d ­ ciąganiem ( D D B 1 jest w y z e r o w a n e („0") i P B l j e s t w y z e r o w a n e („0")), wy­ p r o w a d z e n i e A I N 1 j e s t b e z p o ś r e d n i o dołączone d o odwracającego

wejścia

komparatora a n a l o g o w e g o z a w a r t e g o w strukturze mikrokontrolera. BO - AINO: w e j ś c i e n i e o d w r a c a j ą c e k o m p a r a t o r a a n a l o g o w e g o . Jeśli w y p r o w a d z e n i e to jest skonfigurowane j a k o wejście z w y ł ą c z o n y m pod­ ciąganiem (DDBO j e s t w y z e r o w a n e („0") i PBO j e s t w y z e r o w a n e („0")), t o w y p r o w a d z e n i e AINO j e s t b e z p o ś r e d n i o dołączone d o nieodwracającego w e j ­ ścia k o m p a r a t o r a a n a l o g o w e g o zawartego w strukturze mikrokontrolera.

10.1.3. Budowa linii portu B N a r y s u n k a c h 10.2 d o 10.7 p r z e d s t a w i o n o schematy poszczególnych linii portu B . Ich b u d o w a w e w n ę t r z n a różni się ze w z g l ę d u na funkcje alternatyw­ ne. W s z y s t k i e w y p r o w a d z e n i a portu są s y n c h r o n i z o w a n e , j e d n a k ż e na rysun­ kach nie p o k a z a n o zatrzasków synchronizujących. Tranzystor MOS (pull-up) J r

WP; zapis do PORTB WD: zapis do DDRB RL: odczyt rejestru PORTO RP; odczyt wyprowadzenia PORTB RD: odczyt DDRB n: 0. i

Do komparatora

nu

Tran^jstof '—•] tpuTHjp}

RESET I Q R D DDB3 C

~~1 WD RESET Q f* 0 PORT63 C WP

WP: zapis do PORTB WD: zapis do DDRB P.L: odczyt rsjastnj PORTB RP: odczyt wyprowadzenia PORTB RD:: odczyt DDRB

Rys. 10.3. Schemat linii 3 portu B

(pun-up) |-J

WP; WO: RL RP: RD; n;

zapis do PORTB zapis do DDRB odczyt rejestru PORTB odczyt wyprowadzenia PORTB odczyt DDRfl 2.4

• COM1A0 Selektor trybu pracy wyjścia

• COM1A1 COMP. MATCH1

nu T

r

a

r

L

« H > (pun-op) r-lr

RESET 1

Q R D PORTBS C

t

WP

WP: WD: RL RP: RD; SPIGN:

zapis do PORTB zapis do DDRB odczyt rejestru PORTB odczyt wyprowadzenia PORTB odczyt DDRB SPI ENABLE

SPI MOSI SPIEN

Rys. 10.5. Schemat linii 5 portu B

(ptHI-up)-'

WP: zapis do PORTB WO: zapis do DDRB flL: odczyt rejestru PORTB RP: odczyt wyprowadzenia PORTB RO: odczyt DDRB SPIEN: SPI ENABLE

SPIEN SPI MISO

T

r

a

n

^ h L

< ~ t ~ l

RESET I O R D PORTB7 C WP

SPI SCK WP: zapis do PORTB WD: zapis do DDRB RL: odczy! rejestru PORTB RP: odczyl wyprowadzenia PORTB RD: odczyl DDRB SPIEN: SPI ENABLE

SPIEN

Rys. 10.7. Schemat linii 7portu B

10.2. Budowa portu D P O R T D zawiera 7 dwukierunkowych linii w e / w y . Jest o n dostępny poprzez 3 lokacje w przestrzeni w e / w y mikrokontrolera. Pierwsza lokacja to rejestr da­ nych (Data Register)

P O R T D - adres $ 1 2 w przestrzeni w e / w y mikrokontrole­

ra lub $ 3 2 w obszarze pamięci w e w n ę t r z n e j . Następna, t o rejestr konfiguracji kierunku (Data Direction

Register)

D D R D mający o d p o w i e d n i e adresy: $11

($31) i ostatni - rejestr wejściowy (Input Pins) P I N D o adresach $10 ($30). Re­ jestr P I N D m o ż e być tylko odczytywany, P O R T D i D D R D m o g ą być zarówno czytane j a k i zapisywane. K a ż d a linia portu D m a indywidualnie wybierany re­ zystor podciągający d o góry (pull-up).

D o wszystkich w y p r o w a d z e ń PORTD

można dołączać diody L E D , jedynie poprzez rezystor ograniczający. Dopusz­ czalna obciążalność każdego w y p r o w a d z e n i a P O R T D w y n o s i 2 0 m A w stanie niskim (dla V

c c

= 5 V), trzeba j e d n a k p a m i ę t a ć o t y m , że s u m a wszystkich prą­

dów z portów wyjściowych nie m o ż e przekroczyć wartości 200 m A . Bezpo­ średnio sterowane diody L E D powinny b y ć w ł ą c z o n e p o p r z e z rezystor ograniJeśli w y p r o w a d z e n i a PDO d o P D 6 są w y k o r z y s t y w a n e jako wejścia i są zewnętrznie p o d c i ą g a n e d o dołu, t o stanowią źród­ ł o prądu wypływającego z portu, jeśli t y l k o są uaktywnione w e w n ę t r z n e rezystory podciągające.

Tab. 10.3. Funkcje alternatywne portu D

• -CS

Wyprowadzenie portu

Funkcja alternatywna

PDO

RXD (wejście danych odbiornika UART)

PD1

TXD (wyjście danych nadajnika UART)

PD2

INTO (wejście zgłoszenia przerwania zewnętrznego INTO)

PD3

INT1 (wejście zgłoszenia przerwania zewnętrznego INT1)

PD4

TO (wejście zewnętrznego sygnału dla licznika TCO)

PD6

T1 (wejście zewnętrznego sygnału d!a licznika TC1)

PD7

iCP (wejście przechwytywania dla timera/licznika TC1)

czający p o m i ę d z y plusem zasilania a portem wyjściowym (przykład sterowania diodami L E D przedstawiono n a r y s u n k u 10.1). Dioda świeci p o wysterowaniu linii portu niskim p o z i o m e m logicznym. W s z y s t k i e linie portu D pełnią d o d a t k o w e funkcje w y k o r z y s t y w a n e d o obsłu­ gi urządzeń peryferyjnych, które zestawiono w t a b l i c y 1 0 3 . W p r z y p a d k u w y k o r z y s t y w a n i a poszczególnych linii portu D d o obsługi fun­ kcji alternatywnych, odpowiadające

i m bity konfiguracyjne

w rejestrach

D D R D i P O R T D p o w i n n y b y ć ustawione zgodnie z o p i s e m tych funkcji. PORTD [Port D Data Register) - rejestr danych portu D - $12 6 5 7 | PORTD6 PORTD5 $12 (S321 I n/w R/W Odczyt/Zapis Wartość początkowa 0 0 0 R - oznacza odczyt. R/w - oznacza odczyt/zapis



R

4 PORTD4 R/W 0

1 3 2 0 P0RTD3 PORTD2 PORTD 1 PORTDO R/W R/W R/W R/W 0

0

0

0

Rejestr P O R T D m o ż e b y ć zapisywany i o d c z y t y w a n y . Z a w i e r a dane w e / w y . DDRD [Port D Data Direction Register) - rejestr kierunku portu D - $11 Btt 7 6 5 | DDD6 DDDS $11 ($31) |R/W R/W R Odczyt/Zapis Wartość początkowa 0 0 0 R - oznacza odczyt. R/W - oznacza odczyt/zapis

4 DDD4 R/W

3 DDD3 R/W

2 DDD2 R/W

1 DDD1 R/W

0 DDDO R/W

0

0

0

0

0

Rejestr D D R D określa typ każdej linii portu D . Linie m o g ą b y ć skonfiguro­ w a n e j a k o w e j ś c i o w e l u b wyjściowe. D o d a t k o w o ustawia się opcje związane z p o d c i ą g a n i e m . Szczegóły są p o d a n e w dalszej części rozdziału. PIND [Port D Input Pins Address) - rejestr wejściowy portu D Bit S10(S30)

7 |

-R

Odczyt/Zapis Wartość początkowa 0

]

6 PIND6 R

5 PIND5 R

4 PIND4 R

N/A

N/A

N/A

fi - oznacza odczyl, N / A - nieustalona

$10

3 PIND3 R

2 PIND2 R

1 PIND1 R

0 P1ND0 R

N/A

N/A

N/A

N/A

PIND

Rejestr P I N D może b y ć t y l k o o d c z y t y w a n y . J e g o z a w a r t o ś ć odzwierciedla b e z p o ś r e d n i o stan w y p r o w a d z e ń m i k r o k o n t r o l e r a p r z y p i s a n y c h do portu D. Fizycznie nie jest to w i ę c rejestr. Inaczej j e s t p o d c z a s

bezpośredniego

odczytu P O R T D . W ó w c z a s c z y t a n y j e s t s t a n z a t r z a s k ó w p o r t u D (Port D Dała

Latek).

10.2.1. Port D jako cyfrowy port we/wy ogólnego przeznaczenia Jeśli poszczególne linie portu D są w y k o r z y s t y w a n e j a k o wyprowadzenia cyfrowe o g ó l n e g o przeznaczenia, to są w z a j e m n i e r ó w n o w a ż n e . Przyjmijmy oznaczenie P D n do określenia n-tego w y p r o w a d z e n i a portu D . Stosując dalej tę konwencję, bit D D D n w rejestrze D D R D b ę d z i e określał kierunek wypro­ wadzenia P D n . Jeśli D D D n b ę d z i e u s t a w i o n y ( „ 1 " ) , t o w y p r o w a d z e n i e PDn będzie skonfigurowane j a k o wyjściowe. Jeśli D D D n b ę d z i e wyzerowany („0"), to w y p r o w a d z e n i e P D n będzie s k o n f i g u r o w a n e j a k o wejściowe. Wy­ prowadzenie P D n skonfigurowane j a k o w e j ś c i o w e b ę d z i e się zachowywało różnie, w zależności od stanu P O R T D n . Jeśli bit P O R T D n będzie ustawiony („1"), to linia wejściowa P D n będzie miała u a k t y w n i o n y M O S - o w y rezystor podciągający (pull-up).

Taka konfiguracja ś w i e t n i e nadaje się do obsługi np.

zewnętrznej klawiatury, r ó ż n e g o rodzaju p r z e ł ą c z n i k ó w . T r z e b a jednak pa­ miętać o ograniczonych m o ż l i w o ś c i a c h w e w n ę t r z n e g o podciągania. Do wy­ łączenia w e w n ę t r z n e g o rezystora podciągającego n a l e ż y w y z e r o w a ć („0") bit P O R T D n lub skonfigurować linię P D n j a k o wyjściową. P o zerowaniu mikro­ kontrolera port D j e s t ustawiany w s t a ń w y s o k i e j i m p e d a n c j i , nawet wów­ czas, gdy nie j e s t aktywny zegar s y s t e m o w y .

10.2.2. Funkcje alternatywne portu D W y p r o w a d z e n i e portu D m o g ą spełniać t a k ż e następujące funkcje alterna­ tywne: B 6 - I C P : wejście p r z e c h w y t y w a n i a d l a T i m e r a / L i c z n i k a l . Wejście ICP jest wykorzystywane, gdy jest a k t y w n a funkcja przechwytywania Timera/Licznikal. Pojawienie się na t y m w y p r o w a d z e n i u z b o c z a określonego ustawieniem bitu ICES1 w rejestrze T C C R 1 B powoduje przepisanie stanu Ti­ mera/Licznikal d o rejestru ICR1 (tzn. I C R 1 H = T C N T 1 H i ICR1L=TCNT1L). W y p r o w a d z e n i e P D 6 p o w i n n o b y ć w takim p r z y p a d k u skonfigurowane jako wejście. Więcej informacji p o d a n o w rozdziale 5.2.

Tab. 10.4. Wpfyw ustawienia bitów DDDn i PORTDn na wyprowadzenia portu D PORTDn

l/O

Podciąganie putl-up

0

0

Wejście

Brak

0

1

Wejście

Jest

' DDDn

Uwagi

'

Wysoka impedancja (high-Z) PDn jest źródłem prądu, jeśli jest zewnętrznie podcią­ gany do masy zasilania (pull-low)

1

0

Wyjście

Brak

Wyjście typu push-pull stan niski

1

1

Wyjście

Brak

Wyjście typu push-pull stan wysoki

B 5 - T l : w e j ś c i e z e g a r o w e dla T i m e r a / L i c z n i k a l . Jeśli układ Timera/Licznikal pracuje w konfiguracji licznika, zliczane są zewnęt­ rzne impulsy podawane do wejścia T l . Więcej informacji podano w rozdziale 5.2. B 4 - TO: wejście z e g a r o w e d l a Timera/LicznikaO. Jeśli układ Timera/LicznikaO pracuje w konfiguracji Ucznika, zliczane są zewnęt­ rzne impulsy podawane do wejścia TO. Więcej informacji podano w rozdziale 5.1. B 3 - I N T 1 : wejście zgłoszenia z e w n ę t r z n e g o p r z e r w a n i a I N T 1 . D o wejścia I N T 1 jest d o p r o w a d z a n y sygnał zgłoszenia przerwania zewnętrz­ n e g o I N T 1 . S p o s ó b g e n e r o w a n i a zgłoszenia jest określony bitami I S C 1 1 i I S C 1 0 w rejestrze M C U C R . Więcej informacji p o d a n o w rozdziale 4 . 1 0 . 2 . B 2 - INTO: wejście zgłoszenia z e w n ę t r z n e g o p r z e r w a n i a INTO. D o wejścia INTO j e s t d o p r o w a d z a n y sygnał zgłoszenia przerwania zewnętrz­ nego INTO. S p o s ó b g e n e r o w a n i a zgłoszenia jest określony bitami I S C 0 1 i ISCOO w rejestrze M C U C R . Więcej informacji p o d a n o w rozdziale 4.10.2. B I - T X D : wyjście danych nadajnika U A R T . Jeśli jest włączony nadajnik U A R T , to na wyjściu T X D pojawiają się szerego­ w o bity transmitowanych danych wraz z bitami startu i stopu. D a n e są wysyła­ ne od najmłodszego do najstarszego bitu, w takt zegara transmisyjnego. Pozio­ m y napięciowe (0...+5 V) nie nadają się d o bezpośredniego wykorzystania w interfejsie R S 2 3 2 . Wyprowadzenie T X D zostaje automatycznie skonfiguro­ w a n e j a k o wyjściowe, gdy tylko zostanie włączony nadajnik U A R T , niezależ­ nie od ustawienia bitu D D D 1 . Więcej informacji p o d a n o w rozdziale 8. BO - R X D : w e j ś c i e d a n y c h o d b i o r n i k a U A R T . Jeśli jest włączony odbiornik U A R T , d o wejścia R X D należy d o p r o w a d z i ć przebieg odbierany. Poziomy napięciowe p o w i n n y z a w i e r a ć się w przedziale 0...+5 V (dla V

c

c

= 5 V ) . O d e b r a n y przebieg z interfejsu R S 2 3 2 powinien

w i e c b y ć p o d d a n y odpowiedniej konwersji. Bity d a n y c h są odbierane w ko­ lejności od najmłodszego d o najstarszego, w takt zegara transmisyjnego. Wy­ p r o w a d z e n i e R X D zostaje a u t o m a t y c z n i e s k o n f i g u r o w a n e j a k o wejściowe, gdy tylko zostanie włączony odbiornik U A R T , niezależnie o d ustawienia bitu DDDO. Ustawienie bitu P O R T D 0 s p o w o d u j e włączenie podciągania (p f/. U

w/?)- Więcej informacji p o d a n o w rozdziale 8.

10.2.3. Budowa linii portu D N a r y s u n k a c h 10.8 d o 10.12 p r z e d s t a w i o n o schematy poszczególnych wy­ p r o w a d z e ń portu D . Ich b u d o w a w e w n ę t r z n a różni się ze w z g l ę d u na funkcje alternatywne. Wszystkie w y p r o w a d z e n i a p o r t u są s y n c h r o n i z o w a n e , jednakże na rysunkach nie p o k a z a n o z a t r z a s k ó w synchronizujących.

Tranzystor MOS (pull-up)

WP: zapis do PORTD WD: zapia do DDRD W.: odczyt rejestru FORTO [_ RP: odczyl wyprowadzenia PORTD RD: odczyl DDRD RXD: dane odbierano poez UART RK6N: włącza odbiór danytfi UART

Rys. 10.8. Schemat linii 0 portu D

RXEN RX0

WP: WD: RL' RP: RO: FtXD: RXEN:

zapis *> PORTD zapis do DDRD odczyl rejestru PORTD odczyt wyprowadzenia PORTD odczyt ODRO dane nadawane przez UART wtacza nadawanie danych UART

Rys. 10.9. Schemat linii 1 portu D

anzystor —u MOS |p (puH-upJ

WP; zapis do PORTO WD. zapis do DDRD RL: odczyt rejestru PORTD RP: odczyt wyprowadzania PORTD RO: odczyt DORD n: 2.3 m: 0.1

ISCml

isCmO

nu T W B

Bg>

(puii-up) r

RESET R

Q D PORTDn C

•a

— f -

Sygnał zapis do PORTD |Wybor współczynnika "zagarowy zapis do DDRD podziału dla TIMERm odczyt rejestru PORTD odczyt wyprowadzania PORTO odczyt DDRD *• CSm2 CSml CSmO m: 0,1

WP: WD: RU RP: RD; n :

5

Rys. 10.11. Schemat linii 4 i PD5 portu 0

(pull-up)

WP: WD: RL: RP: RD. ACIC: ACO:

zapis do PORTD zapis do DDRD odczytrajestruPORTD odczyl wyprowadzania PORTD odczyt DDRO sygnał włączający komparator wyjścia komparatora

Eliminator szumów

Selektor zbocza

ICNC1

ICESt

-ICF1

-ACIC -ACO

1 1 . Pamięci nieuiotne w mikrokontrolerach AVR Z a p e w n e c z ę ś ć C z y t e l n i k ó w p a m i ę t a p i e r w s z e w e r s j e m i k r o k o n t r o l e r ó w i pa­ mięci

stosowanych

w systemach

mikroprocesorowych.

Najpowszechniej­

s z y m r o d z a j e m p a m i ę c i b y ł y w ó w c z a s układy typu U V E P R O M (Ultra EPROM).

Violet

M o ż n a je było wielokrotnie zapisywać w specjalnym programato­

rze i k a s o w a ć za p o m o c ą p r o m i e n i ultrafioletowych. B y ł y w i ę c w użyciu n i e ­ zbyt w y g o d n e , a i ich c e n a nie b y ł a niska. Pomijając p a m i ę c i O T P (One Programmable

Time

- p r o g r a m o w a n e j e d n o r a z o w o ) , nie b y ł o j e d n a k specjalnego

w y b o r u . C e n a p a m i ę c i O T P b y ł a na o g ó ! z n a c z ą c o n i ż s z a od U V E P R O M , lecz ze w z g l ę d u n a m o ż l i w o ś ć j e d n o r a z o w e g o z a p i s u zupełnie nie n a d a w a ł y się o n e d o p r a c konstrukcyjnych. W a d ą U V E P R O M - ó w b y ł a k o n i e c z n o ś ć s t o s o w a n i a n i e ł a t w e g o d o z d o b y c i a k a s o w n i k a (zawierającego l a m p ę ultra­ fioletową emitującą

p r o m i e n i o w a n i e o o d p o w i e d n i e j długości fali) i długi

czas k a s o w a n i a , na ogół nie krótszy niż kilkanaście d o kilkudziesięciu minut. Dzięki spopularyzowaniu pamięci Flash wszystkie te zmartwienia praktycz­ nie poszły w z a p o m n i e n i e . Z d o m i n o w a ł y o n e w i ę k s z o ś ć o b e c n i e p r o d u k o ­ wanych

mikrokontrolerów,

a także

nieulotnych

pamięci

zewnętrznych.

T e c h n o l o g i a ta u m o ż l i w i a w i e l o k r o t n y z a p i s i k a s o w a n i e na d r o d z e e l e k t ­ rycznej. Informacja zapisana w pojedynczej komórce pamięci jest reprezen­ t o w a n a p r z e z ilość ł a d u n k u w s t r z y k n i ę t e g o d o o b s z a r u t z w .

pływającej

bramki zmodyfikowanego nieco - w stosunku do rozwiązań typowych

-

t r a n z y s t o r a M O S ( r y s u n e k 11.1). W s t r z y k n i ę t y ł a d u n e k j e s t z a t r z y m y w a n y Pływająca bramka

\

?

1

\

9* !e@©i ? iseea

Rys. 11.1. Zasada działania komórki pamięciowej w technologii Flash

na stale w s k u t e k pułapki p o t e n c j a ł o w e j . M ó w i ą c p r o ś c i e j „nie m a siły", aby u w o l n i ć się o d otaczającej g o bariery p o t e n c j a ł u . D o p r o w a d z a j ą c dostatecz­ nie w y s o k i e i o d p o w i e d n i o

spolaryzowane

napięcie d o

poszczególnych

elektrod tranzystora m o ż n a j e d n a k s p o w o d o w a ć o d p ł y w ł a d u n k u z obszaru pływającej bramki, t y m s a m y m s k a s o w a ć p a m i ę ć (lub z a p r o g r a m o w a ć , zależy od przyjętej k o n w e n c j i ) . N a świecie - j a k w i e m y - n i e m a rzeczy ide­ alnych. Z a w s z e p o d c z a s k a s o w a n i a m o ż e w o b s z a r z e pływającej bramki p o z o s t a w a ć p e w i e n s z c z ą t k o w y ł a d u n e k . Z drugiej s t r o n y , m i m o bariery potencjałów p o j e d y n c z e ładunki m o g ą w p e w n y c h o k o l i c z n o ś c i a c h opusz­ czać o b s z a r pływającej b r a m k i . S k u m u l o w a n i e t y c h e f e k t ó w spowoduje, że p o p i e r w s z e kolejny cykl k a s o w a n i a / p r o g r a m o w a n i a p a m i ę c i Flash może się nie udać, p o drugie z a p r o g r a m o w a n a p a m i ę ć r o z p r o g r a m u j e się sama po p e w n y m czasie. Liczba cykli k a s o w a n i a / z a p i s u oraz c z a s utrzymywania za­ wartości pamięci są na szczęście wystarczające d o p r a k t y c z n y c h zastosowań. Trzeba tu w s p o m n i e ć o j e s z c z e i n n y m rodzaju p a m i ę c i nieulotnej jakim jest p a m i ę ć E E P R O M . T e n rodzaj pamięci r ó w n i e ż p o z w a l a n a zachowanie da­ nych p o wyłączeniu zasilania i nie w y m a g a d o d a t k o w y c h urządzeń do kaso­ wania. W mikrokontrolerach, w t y m w A V R - a c h , p a m i ę ć E E P R O M jest wy­ korzystywana j a k o pamięć d a n y c h , które p o w i n n y b y ć z a c h o w a n e po wyłą­ czeniu zasilania. T y p o w e jej zastosowania to p r z e c h o w y w a n i e parametrów konfiguracyjnych, opcji p r o g r a m u itp. R e a s u m u j ą c : w m i k r o k o n t r o l e r a c h A V R z a s t o s o w a n e są j e d n o c z e ś n i e dwa rodzaje p a m i ę c i nteulotnych. P a m i ę ć F l a s h - pełniąca r o l ę pamięci progra­ m u i pamięć E E P R O M - służąca d o p r z e c h o w y w a n i a p a r a m e t r ó w programu, a także p e w n y c h informacji d o t y c z ą c y c h k o n f i g u r a c j i s a m e g o mikrokontro­ lera. P r o g r a m o w a n i e obu r o d z a j ó w p a m i ę c i m o ż e się o d b y w a ć bezpośred­ nio w s y s t e m i e (bez k o n i e c z n o ś c i p r z e n o s z e n i a m i k r o k o n t r o l e r a d o progra­ matora).

11.1. Bity zabezpieczające pamięć programu i danych W mikrokontrolerze

AT90S2313

zastosowano

dwa

bity

zabezpieczające

(Lock Bits), za pomocą których ustawia się stopień o c h r o n y danych zapisa­ nych w pamięci nieulotnej mikrokontrolera, czyli w p a m i ę c i Flash oraz E E P R O M . P o d c z a s p r o g r a m o w a n i a p a m i ę c i m i k r o k o n t r o l e r a bity zabezpie­ czające m o ż n a pozostawić n i e z a p r o g r a m o w a n e („1") lub zaprogramować je

Tab. 11.1. Ochrona pamięci mikrokontrolera za pomocą bitów zabezpieczających Tryb

Bity zabezpieczające Typ zabezpieczenia L81 L82

1

1

1

Pamięć niezabezpieczona

2

0

1

Zapis pamięci Flash i EEPROM zablokowany' '

3

0

0

Zapis i weryfikacja pamięci Flash i EEPROM zablokowana

1

Uwaga: b a PC*-PC +C127 + 1 Z=1 = > PC«-PC + 1

-

1 lub 2

BRCS

cl27

Skok względny. Jeśli Haga przeniesienia

C=1 = > PC PC*-PC + 1

-

1 lub 2

jest ustawiona BRCC

Cl 27

Skok względny, jeśli flaga przeniesienia jest wyzerowana

BRSH

C127

C=0 = > PC PC t - PC + 1

Skok względny, jeśli większy lub równy (dotyczy liczb bez znaku)

C=0 = > PC*-PC +cl27 + 1 C=1 = > PCt-PC + 1

1lut>2

-

llubz

BULO

C127

Skok względny, jeśli mniejszy (dotyczy liczb bez znaku)

C=1 = > P C * - P C + c 1 2 7 + 1

BRMI

Cl 27

Skok względny, jeśli ujemny

N=t = > PC+-PC +C127 + f N = 0 = > PC*-PC + 1

-

Hub 2

8RPL

C127

Skok względny, jeśli dodatni

N=0=>PC«-PC+Ci27 + 1

-

1lub2

C=0=>PC*-PC + 1

N=1 = > P C * - P C + 1 BRGE

C127

Skok względny, jeśli większy lub równy (dotyczy liczb ze znakiem)

S=0 = > PC*- PC +C127 + 1 S=1 = > PC*~PC + 1

-

1 lub 2

BRLT

C127

Skok względny, jeśli mniejszy niż zero (dotyczy liczb ze znakiem)

S=1 = > PC*- PC +C127 + 1

-

1lub2

S=0 = > PC«-PC + 1

BRHS

C127

Skok względny, jeśli (laga przeniesienia pomocniczego ustawiona

H=1 = > PC«- PC +C127 + 1 H=0=>PC*-PC + 1

-

i lub 2

BRHC

Cl 27

Skok względny, jeśli Haga przeniesienia pomocniczego wyzerowana

H=0 = > PC*-PC +C127 + 1 H=1 = > P C t - P C + 1

-

1 lub 2

BRTS

Cl 27

Skok względny, jeśli znacznik T jest ustawiony

T=1 = > PC*-PC +C127 - M T=0=>PC*-PC + 1

-

Hub 2

BRiC

Cl 27

Skok względny, Jeśli znacznik T |est wyzerowany

T=0=>PC^PC+c127 + 1

-

1 lub E

Skok względny, jeśli tlaga przepełnienia ustawiona

V=1 = > PC*-PC +C127 + 1

-

1 lub 2

8RVS

C127

T=1 = > P C * - P C + 1 V=0=>PC*-PC + t

BRVC

C127

Skok względny, jeśli tlaga przepełnienia wyzerowana

V = 0 = > P C < - P C +C127 + 1 V=f = > PC PC*-PC +C127 + 1

-

1 lub 2

-

1lub2

1=0 = > PC * - PC + 1 BR1D

C127

Skok względny, jeśli przerwania zablokowane

1=0 = > PC*-PC +C127 + 1 1=1 = > PC*-PC + 1

Rozkazy transferu danych MOV MOVW

Rd.Rs Rd+1:Rd,

Kopiuj zawartość rejestru Rs do rejestru Rd Kopiuj zawartość sfowa z rejestrów

R d * - Rs

-

1

Rd+-t:RrJ*-Rs4-t:Rs

-

t

Rs+1:RS

Rs+l:Rs do rejestrów Rd+1:Rd

LOI

Rh,c255

Ładuj rejestr bezpośrednio stalą

Rh *- C255

1

LD

Rd,X

tadu) rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X

Rd*-(X)

-

2

LO

Rd,X+

taduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X z postinkrementacją

Rd«-(X) X*-X + 1

-

2

Ląduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr X z predekrementacją

X*-X-1 Rd*-(X)

-

2

Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y

Rd*-(Y)

-

2

LD

LD

Rd.-X

Rd,Y

Mnemonik

Operantfy

Opis

Operacja

Modyflkowaoe flagi

Uczto' taktów

zegara , LD

LD

LDD

Rd,Y+

Rd,-Y

Rd,Y+c63

Ląduj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z postinkrementacją

Rd«- (Y) Y*-Y+ 1

2

Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z predekrementacją

Ył-Y-1 Rd*-(Y)

2

Rd «- (Y + C63)

2

Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Y z przemieszczeniem

LD

Rd.Z

Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Z

Rd«-(Z)

2

LD

Rd,Z+

Ładuj rejestr pośrednio daną z pamięci SRAM spod adresu wskazywanego przez rejestr Z z postinkrementacją

Rd R s , to P C « - P C + c l 2 7 + 1 w p r z e c i w n y m p r z y p a d k u P C =0)

BRSH - skok względny jeśli większy lub równy (rozpatrywane są liczby bez znaku) W a r u n k o w e rozgałęzienie p r o g r a m u . S p r a w d z a flagę przeniesienia (C). Jeśli j e s t w y z e r o w a n a , to nastąpi s k o k w z g l ę d e m b i e ż ą c e g o adresu w s k a z y w a n e g o przez P C . G d y r o z k a z ten j e s t w y k o n y w a n y b e z p o ś r e d n i o p o C P , C P I , SUB lub S U B I , s k o k zostanie w y k o n a n y wtedy i t y l k o w t e d y , gdy b i n a r n a liczba bez z n a k u u m i e s z c z o n a w rejestrze R d j e s t w i ę k s z a lub r ó w n a o d tak s a m o reprezentowanej

liczby

zapisanej

w rejestrze

R s . Z a s i ę g skoku

PC-63 < adres_skoku < PC+64. Parametr c l 2 7 jest przesunięciem n y m w k o d z i e uzupełnienia d o d w ó c h . R o z k a z ten j e s t BRBC Operacja:

0,0127.

Jeśli C = 0 , czyli R d > R s , to P C i- P C + c l 2 7 + 1 w p r z e c i w n y m p r z y p a d k u P C «— P C + 1

Składnia:

Kod:

BRSH 1

r i

1

cl27 t

1

i

1

i

1

1

0

i

I

1

i

c

1 I

1

r

c

c

I

c 1

1 c

1

-1 1 1 c c 0 0 0 1 i . t

Liczba słów: 1 ( 2 bajty) Liczba cykli: 1, jeśli w a r u n e k niespełniony 2 , jeśli w a r u n e k spełniony

Flagi:

I

T

H

S

V

N

Z

C

Przykład: subi brsh większy;

nop

rl9,4 większy

;odejmij liczbę 4 od rl9 ;skocz, jeśli rl9>=4 ;tu skocz

wynosi: zapisa­

odpowiednikiem

BRTC - skok względny, jeśli flaga T jest wyzerowana W a r u n k o w e rozgałęzienie p r o g r a m u . S p r a w d z a flagę p o m o c n i c z ą (T). Jeśli j e s t ona w y z e r o w a n a , to nastąpi skok w z g l ę d e m b i e ż ą c e g o adresu wskazywa­ n e g o przez P C . Z a s i ę g skoku w y n o s i : P C - 6 3 < a d r e s _ s k o k u £ PC+64. Para­ m e t r c l 2 7 j e s t p r z e s u n i ę c i e m z a p i s a n y m w k o d z i e u z u p e ł n i e n i a d o dwóch R o z k a z ten j e s t o d p o w i e d n i k i e m BRBC 6 , c l 2 7 . Operacja:

Jeśli T = 0 , to P C < - P C + c l 2 7 + 1 w p r z e c i w n y m przypadku P C 0L l?A'
kow ustawtone pułapki programu pojedynczego \ Pfoownu ™ Wykonania programu od aktualne] wartości PC do instrukcji wskazywanej przez kursor

\ «i

n

(

( a 2 u

Rys. 13.11. Ikony paska narzędziowego AVR Studio służące do prowadzenia symulacji programu

jednostki czasu. Dodatkową korzyścią jest możliwość zerowania wskazań tego licznika, c o umożliwia realizacje precyzyjnego pomiaru czasu w y k o n y w a n i a poszczególnych fragmentów programu. Piąta ikona służy d o otwarcia o k n a komunikatów symulatora (Messages),

a ostatnia umożliwia wyświetlenie zaso­

b ó w mikrokontrolera (stan C P U , ustawienia przerwań, rejestry Umerów/liczni­ k ó w , w a t c h d o g a , E E P R O M - u , U A R T - u , komparatora analogowego, a także stany rejestrów związanych z portami w e / w y ) . Sposób prezentowania danych z a p e w n i a w y g o d n ą interpretację poszczególnych bitów każdego rejestru (rysu­ nek 13.10). Są one wyświetlane n a c z e r w o n o w przypadku, gdy w wyniku w y ­ konania pojedynczego rozkazu (praca krokowa) ulegną modyfikacji. Wszystkie zasoby mikrokontrolera mogą b y ć ręcznie modyfikowane przez użytkownika. N a r y s u n k u 13.11 p o k a z a n o ikony związane bezpośrednio z przebiegiem sy­ mulacji. P i e r w s z a od lewej p o w o d u j e dołączenie podświetlonej w oknie p r o ­ g r a m u symulacji zmiennej d o listy Watches,

dzięki c z e m u stan tej zmiennej

jest ś l e d z o n y w trakcie w y k o n y w a n i a się p r o g r a m u . D r u g a i k o n a służy d o k a ­ s o w a n i a z m i e n n e j z listy podglądu. M u s i b y ć o n a wcześniej podświetlona w oknie Watches.

N a s t ę p n e ikonki uruchamiają symulację w różnych try­

bach. P i e r w s z a z nich p o w o d u j e ciągłe w y k o n a n i e p r o g r a m u , w związku z c z y m najczęściej będzie współpracowała z wcześniej u s t a w i o n y m i pułapka­ mi. Stosuje się ją, g d y n i e c h c e m y śledzić w y k o n y w a n i a p r o g r a m u instrukcja p o instrukcji, g d y ż s a m przebieg n a s n i e interesuje, natomiast m o ż e on m i e ć w p ł y w n a resztę p r o g r a m u - np. pętle opóźniające. Naciśnięcie tej ikony p o ­ woduje d e z a k t y w a c j ę pozostałych. N i e są też w i d o c z n e z m i a n y licznika pro­ g r a m u . D ł u ż s z a praca w t y m trybie m o ż e n a s u w a ć wątpliwości, c z y p r o g r a m gdzieś się n i e zawiesił. Kolejna i k o n a (czwarta od lewej n a r y s u n k u 13.11) powoduje przerwanie w y k o n y w a n i a p r o g r a m u . W y ś w i e t l o n y w t y m m o m e n c i e stan mikrokontrole-

r a o d p o w i a d a takiemu, j a k i wystąpił p o ostatnim r o z k a z i e . Kolejne ikony słu­ żą do: w y k o n a n i a p o j e d y n c z e g o rozkazu z wejściem d o ciała procedury (jeśli jest to np. RCALL), w y k o n a n i a rozkazu traktując napotkaną p r o c e d u r ę j a k o pojedynczy k r o k p r o g r a m u . S i ó d m a od lewej strony i k o n a z r y s u n k u 13.11 służy d o o p u s z c z e n i a procedury. Jej naciśnięcie p o w o d u j e ciągłe w y k o n y w a ­ n i e p r o g r a m u , aż d o n a p o t k a n i a rozkazów RET lub R E T I . Kolejna i k o n a p o w o d u j e ciągłe w y k o n a n i e p r o g r a m u o d adresu wynikającego z aktualnej wartości licznika p r o g r a m u P C d o miejsca w s k a z y w a n e g o przez kursor w o k n i e p r o g r a m u . W niektórych sytuacjach b a r d z o przydatne m o g ą b y ć kolejne d w i e ikonki. P i e r w s z a z nich inicjuje automatyczną p r a c ę k r o k o ­ wą. M i ę d z y p o s z c z e g ó l n y m i k r o k a m i p r o g r a m u w s t a w i a n a j e s t p r z e z symula­ tor p r z e r w a , której długość w milisekundach określa się p o l e c e n i e m menu Debug>Options>Single

step delay (ms). Kolejna ikona powoduje ciągłe w y ­

k o n a n i e /i k r o k ó w p r o g r a m u b e z p o d g l ą d a n i a z a s o b ó w . W a r t o ś ć » jest usta­ w i a n a w poleceniu Debug>Options>Number

of Single

Steps.

D o o m ó w i e n i a pozostały j e s z c z e trzy ostatnie ikony p r z e d s t a w i o n e na r y s u n ­ k u 1 3 . 1 1 . Ikona z „łapką" ustawia/kasuje pułapkę p r o g r a m o w ą w miejscu p r o g r a m u w s k a z y w a n y m przez kursor w postaci żółtej strzałki w o k n i e pro­ g r a m u . Jeśli pułapka j e s t ustawiona p o lewej stronie instrukcji p r o g r a m u z o ­ stanie w y ś w i e t l o n y

m a ł y k w a d r a c i k . Ikona z d w i e m a

„łapkami"

usuwa

wszystkie pułapki ustawione w p r o g r a m i e . Pułapki m o g ą być t y m c z a s o w o b l o k o w a n e . O d p o w i e d n i e d o tego polecenia znajdują points>Show

List>Enable

lub Breakpoints>Show

się w m e n u

List>Disable.

BreakOstatnia

i k o n a służy d o w y z e r o w a n i a s y m u l o w a n e g o mikrokontrolera. 1

'A"" "

'

'

d[u.li''afl

Hys. 13.12. Ikony paska narzędziowego informu-

P o d c z a s symulacji programu w i e l o m o d u ł o w e g o nazwa a k t y w n e g o modułu jest wyświetlana w oknie przedstaw i o n y m na r y s u n k u 13.12. Krok w y k o n y w a n i a pronapisanego w C p o k r y w a się domyślnie z i n -

jące o aktywnym modu-

lei przetaczające tryb pracy okna programu

, s

t

r

u

k

. c

. , e

, 2

„ 8

C

z

. a

s

a

n

u

z

a

c

h

o

d

z

i

e d n a k

k o

^ S ° J* ** " J " nieczność pracy na poziomie k o d u m a s z y n o w e g o . Jest t o m o ż l i w e p o naciśnięciu ikonki z n a w i a s a m i klamro­ w y m i przedstawionej na r y s u n k u 13.12. Zostaje w ó w c z a s otwarte o k n o zawie­ rające zdeasemblowaną postać programu. O d tego m o m e n t u praca k r o k o w a od­ b y w a się na p o z i o m i e r o z k a z ó w mikrokontrolera ( r y s u n e k 13.13). P r o g r a m A V R Studio stwarza m o ż l i w o ś ć uruchamiania programu b e z koniecz­ ności wielokrotnego p r o g r a m o w a n i a pamięci mikrokontrolera. Wirtualna jed­ nostka centralna nie zachowuje j e d n a k pełnej kompatybilności z jej rzeczywis­ tym odpowiednikiem. Przykładowo A V R Studio 3.56 nie potrafi symulować watchdoga, nie radzi sobie też dobrze z k o m p a r a t o r e m a n a l o g o w y m .

Nie

• •."•V. i.xnr «7,>n

urn i jt.mi ^łi»j t p l j

FT11 *0OOO00;9. coor *QOQttQ0; CFM łr

I

-I.

• H I I ™

O

11(1 •oooooozc; O M • a o o o o c : ? 0401

LEI » P W ?5 : T » L I - T ^ T P I - - ] ;

K5. H

ŁIJODOTUŁ^C.

lOtKrOCort*. trJOOMOJI;

ł Jłl

• 000000 W : łOOOOOOJl. łOOOO0Qli: ULCULLH-L>JLLCAILLL4L.0JL.ŁCNUJT4H

. WW.L* H»hti,

Ai^tt*

-Onp; u; oiai U l . OlOO kf.o ijft : o oo ooio: - • oo oo rr ix 00W: u oo w " OOiO: 00 • 0-, CO fO PO 00 nfl 00 00ŁOI CCi C D 00 0056: '.JD 00 uQ UO D 7 15 0040: os oo oo oo yj 77 ?? t? ooń8: yy yy 7? ii ?? ?? ?? 7? oo70t 77 7? 7? j ? 77 ?? ?> ł? ooiai ?? 17 77 77 77 77 77 7? 0060: >ł I? 77 77 77 77 77 77 C C G O t 77 77 77 77 77 77 77 77 OOSOi 77 77 77 77 77 77 77 77

Dt-Jan* łff

HJOMSOW OOODOOW rb J W D

USR OOIOMCO Ufjł OOCOOCCO UflRfl O W O O W e

Gnw^ >\iW l - ł w j ifl' (lii , i : J11J11 1 gq:u0DO2 3 JKilKOM jcwceoK lJttWOHtt

9vm«m«

UsCOWCO' ISJOWOOMT

JJ >K"EXW £1 WWCCSO< £ > W » O 0 &1110J11L.

FORT aocooooc' AG*

GOJ

fefarPLCf

i om Torf*

-111:111

IttoOttK.

5D»»kco; H.-mowOft

Zj fTOOf-lOOCi

DcidlJlWJ 21 oommoj.

0^000000' DC ĆMOM'

tc-ia»7 iłtf& KWiOlOi;

/rys. 73.14. Okno programu Visual Micro Lab

wyświetlacz L C D o r a z terminal komunikacyjny T T Y . V M L A B w wielu sy­ tuacjach uwalnia u ż y t k o w n i k a od konieczności b u d o w a n i a układu prototypo­ w e g o i stosowania e m u l a t o r ó w sprzętowych. O p r ó c z p o d z e s p o ł ó w , z których m o ż n a z b u d o w a ć system, w programie V M L A B z a i m p l e m e n t o w a n o również wielokanałowy o s c y l o s k o p wirtualny. Opis u r u c h a m i a n e g o układu p r z y p o m i ­ na n i e c o standard, j a k i m j e s t Spice. Z a p o m o c ą Visual M i c r o L a b m o ż n a uru­ c h a m i a ć urządzenia, w których wykorzystuje się z a i m p l e m e n t o w a n y w mik­ rokontrolerze przetwornik analogowo-cyfrowy l u b komparator, z c z y m j a k p a m i ę t a m y miał p r o b l e m y symulator A V R Studio. Visual Micro L a b t o p r o g r a m typu I D E . Integruje o n asembler, zewnętrzny kompilator n p . A V R - G C C , linker i debuger, przy c z y m integracja poszcze­ gólnych e l e m e n t ó w j e s t znacznie lepsza n i ż w A V R Studio. D e b u g e r w y ­ świetla i wykonuje p r o g r a m z a r ó w n o n a poziomie kodu m a s z y n o w e g o j a k i j ę z y k a w y s o k i e g o p o z i o m u . W i d a ć przy t y m współzależność o b u postaci programu. W V M L A B użytkownik r ó w n i e ż w każdej chwili m o ż e podejrzeć lub zmienić stan d o w o l n e g o k o m p o n e n t u mikrokontrolera lub zmiennej pro­ gramu. Prezentacja wszystkich zasobów mikrokontrolera jest zrealizowana w sposób b a r d z o czytelny ( r y s u n e k 13.14), lecz rozmieszczenie wszystkich okien w y m a g a z a s t o s o w a n i a dużego monitora, pracującego w wysokiej roz­ dzielczości.

Instalacja p r o g r a m u j e s t b a r d z o prosta. P r z e d z a k u p e m pełnej wersji m o ż n a w y p r ó b o w a ć działanie p r o g r a m u n a 2 I - d n i o w e j wersji ewaluacyjnej. Pliki m o ż n a p o b r a ć ze strony http://www.amtools.net.

Z a i n s t a l o w a n i e wersji peł­

nej w y m a g a w y p e ł n i e n i a o d p o w i e d n i e g o f o r m u l a r z a i d o k o n a n i a opłaty. P o w y k o n a n i u t y c h c z y n n o ś c i , drogą e l e k t r o n i c z n ą są d o s t a r c z a n e k o d y d l a wersji p e ł n e j . Instalator

zakłada

n a dysku

domyślnym

katalog c:\VMLAB,

w którym

u m i e s z c z a w s z y s t k i e n i e z b ę d n e d o pracy pliki. K o m p i l a t o r y j ę z y k a C m u ­ szą b y ć z a i n s t a l o w a n e na k o m p u t e r z e n i e z a l e ż n i e od V M L A B - a . Nadają się j e d y n i e te, k t ó r e generują pliki *.cof. S y m u l a c j a u r u c h a m i a n e g o urządzenia m u s i b y ć p o p r z e d z o n a z d e f i n i o w a n i e m projektu. Z m e n u w y b i e r a m y p o l e ­ cenie Project>New

project.

P o j a w i a się o k n o k r e o w a n i a projektu, w k t ó ­

r y m n a l e ż y w y p e ł n i ć o d p o w i e d n i e pola. T r z y m a j ą c się p o p r z e d n i e g o przy­ kładu n a d a j e m y n a z w ę n p . cwiczl.prj,

wybieramy jako docelowy mikro­

k o n t r o l e r A T 9 0 S 2 3 1 3 , d e c y d u j e m y się na p r o g r a m w j ę z y k u C. Przyjmuje­ m y w e r s j ę G N U C i z g a d z a m y się na a u t o m a t y c z n e w y g e n e r o w a n i e pliku makefile,

c o j e s t d u ż y m u d o g o d n i e n i e m , g d y ż zwalnia n a s z k o n i e c z n o ś c i

k o p i o w a n i a t e g o pliku z i n n y c h k a t a l o g ó w lub ż m u d n e g o , s a m o d z i e l n e g o w p i s y w a n i a . A u t o m a t y c z n e t w o r z e n i e pliku nie z a m y k a o c z y w i ś c i e m o ż l i ­ wości p ó ź n i e j s z e j j e g o e d y c j i . P r z y k ł a d o w e u s t a w i e n i a projektu przedsta­ wiono na r y s u n k u 13.15. Przed przystąpieniem d o symulacji przydatne będzie określenie konfiguracji całego u r u c h a m i a n e g o s y s t e m u , w t y m e w e n t u a l n e dołączenie wirtualnych peryferiów, zdefiniowanie p a r a m e t r ó w śledzenia, określenie p u n k t ó w syste-

£tppl ^dnthqni fhtnp^yutrcffi

i

Ewiun/ bron* /

dwtory J

' P Cnmt

U C C F 1 T K

OZCHWX

i

PCUER STORĘ 2 5 0 .

VSS-0

Power nod*i Kiero ciot*. Tr»to (nicitwiigM

to) «lorw« um

D; UDO PBO D; UCD PBl DC VIC PB»

flys. 73.75. 0*/w parame/rówpnyeWu ffys. 73.76. Konfiguracja uruchamianego systemu

m u , d o których będzie dołączony wielokanałowy oscyloskop wirtualny. Ustawień tych dokonuje się w oknie w y w o ł a n y m poleceniem View>Project File ( r y s u n e k 13.16). Szczegóły dotyczące użycia d o s t ę p n y c h elementów m o ż n a znaleźć w d o b r z e opracowanej p o m o c y programu. Zaletą V M L A B - a j e s t możliwość zdefiniowania pięciu r ó ż n y c h organizacji ekranu. Z a p a m i ę t y w a n i e kilku w i d o k ó w pozwoli szybko przechodzić pomię­ dzy ekranami zawierającymi istotne w d a n y m m o m e n c i e informacje. Znacz­ nie zwiększa się t y m s a m y m czytelność, c o m a znaczenie szczególnie wtedy, gdy monitor nie jest zbyt duży. Widoki zmienia się wybierając odpowiednią pozycję listy rozwijanej umieszczonej na końcu paska n a r z ę d z i o w e g o poka­ zanego na r y s u n k u 13.14. Pierwsza faza uruchamiania p r o g r a m u najczęściej będzie polegała n a częstym sięganiu d o źródła, k o m p i l o w a n i u programu, przeglądaniu

komunikatów

kompilatora i ponownej edycji źródła. W a r t o więc w j e d n y m z w i d o k ó w po­ dzielić ekran tylko na d w a okna: edycyjne i k o m u n i k a t ó w . Z a p e w n i to duży komfort podczas prac na t y m etapie. D o przeprowadzenia kompilacji progra­ m u należy wybrać polecenie Project>Build.

M o ż n a też u ż y ć klawisza F 9 lub

ikony Build (środkowa ikona na pasku n a r z ę d z i o w y m ) . W o k n i e

Messages

pojawią się wszystkie komunikaty generowane przez kompilator. Jeśli wystą­ pi choćby j e d e n błąd, kursor edycyjny zostanie ustawiony w podejrzanym o to miejscu. C z a s a m i j e d n a k błąd m o ż e b y ć ulokowany gdzie indziej. Na przykład, brak średnika kończącego linię p r o g r a m u C spowoduje wystąpienie błędu dopiero p o d c z a s kompilacji dalszej części programu. W s z y s t k i e miejs­ ca, na które trzeba zwrócić uwagę, są sygnalizowane w y k r z y k n i k a m i umiesz­ c z o n y m i przed treścią komunikatu. Kolor żółty oznacza, ż e chodzi tylko o ostrzeżenie, p r o g r a m będzie k o m p i l o w a n y . P r z y k ł a d o w o V M L A B ostrzega w ten sposób przed z a d e k l a r o w a n i e m zmiennej, która nie jest używana dalej w ż a d n y m miejscu p r o g r a m u . Gorzej, gdy wykrzyknik m a k o l o r czerwony. W takiej sytuacji kompilator nie tworzy pliku w y k o n y w a l n e g o , a więc uru­ chomienie programu nie będzie możliwe. T e g o typu błędy trzeba bezwzględ­ nie poprawić. C z a s a m i zdarza się, że j e d n a nieprawidłowość w źródle p o w o ­ duje wygenerowanie całej listy błędów. Ż m u d n y etap eliminacji błędów for­ malnych kończy się wyświetleniem komunikatu: Success! Ali ready to run. O d tego momentu r o z p o c z y n a się kolejna faza uruchamiania aplikacji - sy­ mulacja. Teraz w s k a z a n e będzie stworzenie sobie kolejnych e k r a n ó w robo­ czych wynikających ze specyfiki u r u c h a m i a n e g o układu. N a p e w n o warto umieścić na n i m c h o ć b y niewielkie o k n o źródła programu. Wykorzystując krokowy tryb pracy, będzie w n i m zaznaczana aktualnie w y k o n y w a n a in­ strukcja na poziomie odpowiadającym wersji źródłowej (język C lub asemb-

ler). Jeśli p r o g r a m j e s t napisany w C a c h c e m y w y k o n y w a ć g o na poziomie t

rozkazów

m i k r o k o n t r o l e r a , konieczne b ę d z i e dołożenie o k n a Program

me-

mory i u c z y n i e n i e g o a k t y w n y m . P o lewej s t r o m e każdej instrukcji widnieją niewielkie p r z y c i s k i e k r a n o w e . Ich naciśnięcie powoduje wstawienie w da­ n y m miejscu p r o g r a m u p u ł a p k i (breakpoint).

Kolor klawisza zmienia się

w ó w c z a s n a c z e r w o n y . A k t y w n y c h p u ł a p e k m o ż e b y ć wiele. Podczas prac u r u c h o m i e n i o w y c h c z ę s t o z a c h o d z i konieczność pomiaru czasu w y k o n y w a ­ nia się n p . o k r e ś l o n e j p r o c e d u r y . Tu niestety trzeba przyznać w y ż s z o ś ć pro­ g r a m u A V R S t u d i o nad V i s u a l M i c r o L a b . Atrakcyjna m o ż e b y ć natomiast graficzna interpretacja c z a s u p r z e b y w a n i a j e d n o s t k i centralnej w o k r e ś l o n y m miejscu p r o g r a m u . Rolę w s k a ź n i k ó w spełniają żółte paski nałożone na po­ s z c z e g ó l n e instrukcje. T r z e b a przy t y m pamiętać, że skala czasu jest logaryt­ miczna! P o s z c z e g ó l n e k o m p o n e n t y mikrokontrolera są z g r u p o w a n e w kilku niezależ­ nych o k n a c h , n p . ; rejestry, p a m i ę ć p r o g r a m u , pamięć danych S R A M , pamięć E E P R O M , porty oraz U A R T , timery, w a t c h d o g . Zawartość k a ż d e g o z nich m o ż e b y ć w y ś w i e t l a n a w postaci binarnej, h e x a d e c y m a l n e j , całkowitoliczbowej, a n a w e t w kodach A S C I I . N a wszystkie pola jest nałożony półprzeźro­ czysty p a s e k graficzny, który w postaci analogowej pokazuje stan d a n e g o k o m p o n e n t u . K a ż d y z rejestrów m o ż e b y ć w dowolnej chwili zmieniony. Niestety n i e d o t y c z y to licznika programu, c o oznacza, że p r o g r a m m o ż e b y ć w y k o n a n y t y l k o w takiej kolejności, j a k w układzie rzeczywistym. U ż y t k o w ­ nik m a też m o ż l i w o ś ć podglądania z m i e n n y c h programu. Bywają z t y m nie­ stety p r o b l e m y , z m i e n n e te nie z a w s z e są dostępne. Nie m o ż n a też modyfiko­ w a ć w prosty s p o s ó b ich wartości. W t y m zakresie A V R Studio wykazuje p r z e w a g ę n a d Visual M i c r o L a b . P e w n y m wyjściem z sytuacji jest podejrze­ nie miejsca p r z e c h o w y w a n i a zmiennej (rejestry, pamięć R A M ) i jej edycja na tym poziomie. Specyficznym o k n e m V M L A B - a jest tzw. panel sterujący. Zawiera on zewnę­ trzne urządzenia peryferyjne wykorzystywane w aplikacji. M o ż e to być klawia­ tura 4 x 4 , alfanumeryczny wyświetlacz L C D , wirtualny terminal T T Y , diody świecące, potencjometry. Ich parametry konfiguruje się w oknie projektu. U r u c h o m i e n i e w i r t u a l n e g o systemu następuje p o naciśnięciu klawisza F 5 lub ikonki z s e m a f o r e m . N a s z wirtualny system zaczyna w t y m m o m e n c i e dzia­ łać. N a o s c y l o s k o p i e (jeśli j e s t włączony) pojawiają się przebiegi g e n e r o w a n e przez m i k r o k o n t r o l e r , z m i a n i e ulegają wszystkie w y k o r z y s t y w a n e k o m p o ­ nenty. S y m u l a c j ę m o ż n a z a t r z y m a ć naciskając ikonę ze z n a k i e m „ S T O P " . Oprócz p r a c y ciągłej m a m y d o dyspozycji - p o d o b n i e j a k w A V R Studio różne tryby pracy k r o k o w e j .

Przebieg na oscyloskopie m o ż e być dość swobodnie skalowany, umożliwia­ jąc w y ś w i e d a n i e charakterystyk z dużą dokładnością (100 ns/działkę) lub wyświetlanie przebiegów zebranych w dłuższym czasie, a także przyjrzenie się detalom z rozdzielczością

100 ns/działkę. Ustawiając na oscylogramie

d w a kursory m o ż n a łatwo d o k o n a ć pomiaru czasu. Program Visual Micro L a b jest bardzo w y g o d n y w użyciu, m a wiele cech sprawiających, że chętnie się p o niego sięga. W sytuacjach, w których wady stają się męczące z a w s z e można sięgnąć p o A V R Studio.

13.5. Programowanie pamięci programu w systemie (ISP) Mikrokontrolery A V R firmy Atmel są w y p o s a ż o n e w interfejs umożliwiający programowanie ich pamięci j u ż p o zamontowaniu w systemie (ISP). W y k o ­ rzystanie takiego sposobu programowania powoduje, że m o ż n a zrezygnować z zakupu programatora stacjonarnego, wystarczy j e d y n i e prosty interfejs mię­ dzy u r u c h a m i a n y m s y s t e m e m a k o m p u t e r e m P C (jak np. Z L 2 P R G opisany w dalszej części rozdziału). Liczne przykłady takich konstrukcji można zna­ leźć w Internecie. O d n o ś n i k i są zamieszczone w dodatku H.

13.5.1. Programator ZL2PRG S c h e m a t elektryczny programatora Z L 2 P R G p o k a z a n o na r y s u n k u 13.17. Układ U l pełni rolę separatora linii w e / w y interfejsu d r u k a r k o w e g o Centro­ nics od systemu, w k t ó r y m znajduje się p r o g r a m o w a n y mikrokontroler. Inter­ fejs jest zasilany napięciem pobieranym z systemu, w związku z c z y m pod­ czas korzystania z niego nie trzeba stosować d o d a t k o w e g o zasilacza. Dla pro­ gramatora Z L 2 P R G zaprojektowano dwustronną płytkę drukowaną,

której

mozaiki i schemat m o n t a ż o w y p o k a z a n o w dodatku G. Układ U l m a o b u d o w ę przystosowaną do montażu S M D ( S O 2 0 ) , pozostałe elementy są m o n t o w a n e klasycznie. Złącza J l i JP1 są montowane na krawędzi płytki w taki sposób, że przed ich przylutowaniem laminat jest wsuwany po• między rzędy wyprowadzeń. Na r y s u n k u 13.18 pokazano przypisanie sygna­ łów d o styków gniazda J P 1 . Sygnał L E D można wykorzystać d o sterowania diody świecącej, sygnalizującej programowanie układu. N a płytce Z L 1 A V R dioda taka jest uwzględniona (D9 dołączona d o styku 3. gniazda ISP2).

SN74HC244

Rys. 13.17. Schemat elektryczny programatora ZL2PRG

A t u t e m p r o g r a m a t o r a Z L 2 P R G j e s t m o ż l i w o ś ć współpracy z wieloma bez­ p ł a t n y m i p r o g r a m a m i sterującymi j e g o pracą. J e d n y m z lepszych j e s t p r o ­ gram P o n y P r o g 2 0 0 0 ( r y s u n e k 13.19), dostępny w Internecie pod adresem: http://www.lancos.com/ppwin95.html.

P o n y P r o g występuje w wersjach d l a

W i n d o w s (łącznie z NT72K/XP) oraz Linuksa. Obsługuje mikrokontrolery: A T 9 0 S 1 2 0 0 , A T 9 0 S 2 3 1 3 , A T 9 0 S 2 3 2 3 , A T 9 0 S 2 3 3 3 , A T 9 0 S 2 3 4 3 , AT90S4414, AT90S4434, AT90S8515, AT90S8534, AT90S8535, ATmega8, ATmegaló, ATmega64, ATmegal03, ATmegal28, ATmegal61, ATmegal63, ATmega 323,

ATtinyl2 i ATtinyl5.

Na r y s u n k u

13.20 p o k a z a n o zalecany s p o s ó b dołączenia

programatora

Z L 2 P R G d o m i k r o k o n t r o l e r a z a i n s t a l o w a n e g o w systemie. Taki sposób dołą• PoorProoJOOO SmM Doyicii Pingin

• lal xi Efc

Bo»w

tainsd

itrp

U*y

J«*"> 2

^nljn

"3

8

> u o o a Strona .etemenlów"

— f ••••

płytki programatora Sliona Jutowanis" płytki programatora

1*

g n o m ę ) 11 I I b o b i e d> f f u b g s b 3 » ) 11 KF o n o M i ) f i FF onoes a) n II o n o s ó d l u II 011007(1) t i ft gngosii) i r n t a a m i ) if n DOOMO) F-F

II II II

ii u n FF ff n FF FF FF II II U

II II rr rr

II If II ff IF |t FF FI

i ir i r FI r 1 FF F F II F I II I

F I FF n FF I F Ff FF FF I I

ggyijiijUyijggijiiiiuiJ

ir i rr r

rr rr rr rr BWIOFł.) I I

rr

IT M

(f

FI Ff Tf If > W * b X 0 > ~ AT9BM3J" "ĆteJJStyw CRC 4*3*

13.18. Wyprowadzenia mnatów na styki gniazda JP1

3

I II I I Ił I I F t F FF F I Ft f I F F I FI I I 'I I I Tf I I I I I

n Ff t r r i

n a e m B ) ir H a n o u e i o i i Ff o m a n a) r r IT

|*19CSUJ3

Sys, 13.79. Wygląd okna programu PonyProg 2000

mmmmmm

Do złącza JP1 programatora ZL2PRG

3 PB7

x 1 ( t

Do aplikacji P87

PS7

AXY

PS6

PB6

PB6

exv

PBS

PB5

PBS

CXY A B C

RESET

RESET

AVR Rys. 13.20. Zalecany sposób dołą­ czenia programatora ZL2PRG do mikrokontrolera zainstalowanego w systemie, gdy PB5, PB6 i PB7 pracują jako wejścia

RESET

AVR

AX ex ex AY 8Y CY

15 £BJL PB$

| O.

Rys. 13.21. Zalecany sposób dołączenia pro­ gramatora ZL2PRG do mikrokontrolera zain­ stalowanego w systemie, gdy co najmniej je­ dno z wyprowadzeń PB5, PB6 lub PBl pracuje jako wejście

czenia interfejsu I S P d o rnikrokontrolera jest m o ż l i w y tylko w przypadku, gdy porty P B 5 , P B 6 i P B 7 są skonfigurowane j a k o wejścia. W przypadku, gdy któreś z tych w y p r o w a d z e ń musi pracować j a k o wyjście, firma Atmel za­ leca inny sposób dołączenia programatora - p o k a z a n o go na r y s u n k u 13.21.

14. Przykładowe aplikacje Wcześniejsze rozdziały książki zawierały wiele informacji technicznych, które można znaleźć" w notach katalogowych mikrokontrolerów AVR, w szczególności A T 9 0 S 2 3 1 3 . Zapoznanie się z nimi jest nieodzowne do świadomego i efektyw­ nego wykorzystywania możliwości mikrokontrolerów w e własnych projektach, pomaga także zrozumieć zasadę działania rozwiązań spotykanych w książkach, czasopismach i Internecie. Sucha wiedza katalogowa z pewnością nie wystarczy do pełnego zaznajomienia się z mikrokontrolerami A V R . Najczęściej dopiero sa­ modzielnie przeprowadzone eksperymenty praktyczne wyjaśnią wątpliwości, ja­ kie mogły nasunąć się podczas lektury opisu technicznego. Rozdział 14. u ł o ż o n o w formie zestawu ć w i c z e ń praktycznych, s u k c e s y w n i e odsłaniających tajemnice mikrokontrolera, objaśniających zasady w y k o r z y s ­ tywania j e g o b l o k ó w funkcjonalnych i rozwiązujących wiele p r o b l e m ó w , na j a k i e natykają początkujący elektronicy. Powtarzające się bez końca pytania, z którymi m o ż n a s p o t k a ć się na internetowych grupach dyskusyjnych typu: „Jak o b s ł u ż y ć w y ś w i e t l a c z a l f a n u m e r y c z n y ? " , „Jak zrealizować transmisję, wykorzystując interfejs R S 2 3 2 ? " , czy nawet . J a k sterować L E D - e m dołączo­ n y m d o m i k r o k o n t r o l e r a ? " , skłaniają d o zajęcia się tymi zagadnieniami. M a m nadzieję, ż e o p i s a n e e k s p e r y m e n t y rozwieją przynajmniej część tego typu wątpliwości C z y t e l n i k ó w . Przedstawiony m i n i k u r s opiera się na płytce uruchomieniowej

ZL1AVR

z m i k r o k o n t r o l e r e m A V R A T 9 0 S 2 3 1 3 . Zestaw zaprojektowano specjalnie na potrzeby książki. W y b ó r mikrokontrolera został p o d y k t o w a n y dużą popular­ nością tego układu, j e g o niską ceną i faktem, że świetnie się nadaje d o wielu p r a k t y c z n y c h aplikacji.

Płytki

drukowane

zestawu

ZL1AVR

oraz

programatora

Z L 2 P R G są d o s t ę p n e w i n t e r n e t o w y m sklepie W y d a w n i c t w a BTC

(hrip://www.btc.pł/index.php?id-15).

P o d s t a w o w y m dylematem rozstrzyganym podczas przygotowywania ćwiczeń był w y b ó r j ę z y k a programowania. W poprzednich rozdziałach książki więk­ szość p r z y k ł a d ó w napisano w asemblerze. T r u d n o było uczynić inaczej pod­ czas o m a w i a n i a listy rozkazów mikrokontrolera. Język ten nie jest jednak obecnie zbyt często stosowany w praktyce. Pisanie programów w asemblerze zajmuje d u ż o czasu, a ich czytelność, szczególnie p o p e w n y m czasie staje się

niewielka. Alternatywnymi możliwościami był Bascom lub j ę z y k C - mój w y ­ bór padl na język C. A r g u m e n t e m przemawiającym za t y m rozwiązaniem był fakt, że jest dostępny kompilator tego języka w wersji darmowej ( A V R - G C C ) , bez żadnych ograniczeń (licencja G N U ) . Spotykane w Internecie opisy zagad­ nień technicznych również na ogół występują w postaci procedur lub całych pro­ gramów pisanych w C. Nie da się ukryć, że język ten stanowi obecnie standard w zastosowaniach profesjonalnych, warto więc nauczyć się g o j a k najwcześniej.

P r z y k ł a d o w e programy przedstawione w dalszej części książki napisano w języku C i k o m p i l o w a n o za pomocą

bezpłatnego

kompilatora A V R - G C C w wersji 3.2 datowanej n a 2 0 0 2 . 0 6 . 2 5 . Jest ona dostępna na stronie internetowej W y d a w n i c t w a B T C (http:/Avww.btc.pl?id=pliki).

Wybranie języka wysokiego poziomu m a również taką zaletę, że ucząc się pro­ gramowania w języku wysokiego poziomu, w każdej chwili m o ż n a podejrzeć kod wynikowy i w p e w n y m sensie również w ten sposób uczyć się asemblera. Przykłady przedstawione w książce k o m p i l o w a n e są k o m p i l a t o r e m

AVR-

G C C . S p o s ó b skonfigurowania środowiska d o pracy z t y m kompilatorem opisano w rozdziale 13. Należy zaznaczyć, że nie było z a m i a r e m autora pisa­ nie podręcznika d o nauki j ę z y k a C. Trzeba również dodać, że zamieszczone programy reprezentują tylko j e d n ą z wielu możliwych m e t o d rozwiązywania poszczególnych p r o b l e m ó w .

14.1. Zestaw uruchomieniowy ZL1AVR Jak j u ż w s p o m n i a n o , specjalnie na potrzeby niniejszej książki zaprojektowa­ n o zestaw u r u c h o m i e n i o w y , na którym były testowane wszystkie projekty przedstawione w tym rozdziale. Jest on stosunkowo łatwy w w y k o n a n i u , bar­ d z o uniwersalny, a j e g o koszt wykonania relatywnie niski. N a r y s u n k u 14.1 przedstawiono schemat elektryczny zestawu uruchomienio­ wego Z L 1 A V R , a na r y s u n k u 14.2 widok zmontowanej płytki i rozmieszcze­ nie na niej najważniejszych elementów. Dla j a k najpełniejszego zilustrowania możliwości mikrokontrolera

przewidziano kilka b l o k ó w

funkcjonalnych,

k o n f i g u r o w a n y c h za p o m o c ą licznych z w o r e k . O d p o w i e d n i e ich ustawienie pozwoli na przeprowadzenie różnorodnych eksperymentów praktycznych.

Rys. 14.2. Rozmieszczenie najważniejszych elementów na płytce zestawu ZL1AVR

Wykorzystując zestaw będzie m o ż n a również uruchamiać fragmenty włas­ nych aplikacji, a to dzięki uniwersalnemu polu m o n t a ż o w e m u umieszczone­ m u w prawej części płytki. Rozwiązanie takie podnosi walory funkcjonalne, a przede wszystkim edukacyjne zestawu.

14.1.1. Zasilanie zestawu Zasilanie z e s t a w u Z L 1 A V R m o ż e b y ć zrealizowane na kilka s p o s o b ó w . Pier­ wszy z nich, t o w y k o r z y s t a n i e t y p o w e g o zasilacza w t y c z k o w e g o dostarczają­ cego napięcie o wartości od 8 d o 12 V. Umieszczenie na płytce m o s t k a pros­ towniczego D l i stabilizatora U l nie narzuca ostrych w y m a g a ń c o d o napię­ cia w e j ś c i o w e g o . N i e m u s i b y ć o n o stabilizowane, nie jest nawet konieczne napięcie stale. J a k w i ę c w i d a ć , drugim s p o s o b e m zasilania będzie w y k o r z y s ­ tanie z w y k ł e g o transformatora. W t y m p r z y p a d k u wartość skuteczna napięcia powinna z a w i e r a ć się m i ę d z y 5,6 V , a 8,5 V.

M o z a i k i płytki d r u k o w a n e j oraz schemat m o n t a ż o w y płytki ze­ s t a w u Z L I A Y R znajdują się w dodatku G.

Napięcie zasilające d o p r o w a d z a się d o gniazda J P 1 2 lub J P 1 3 . Złącze J P 1 2 to śrubowy z a c i s k A R K , przydatny d o podłączania p r z e w o d ó w . Z e względu na obecność m o s t k a D l nie j e s t istotna b i e g u n o w o ś ć dołączanego napięcia zasi­ lającego. Z ł ą c z e J P 1 3 to t y p o w e g n i a z d o zasilające, które m o ż n a w y k o r z y s ­ tywać a l t e r n a t y w n i e z J P 1 2 . Pobór prądu przez system nie jest duży (ok. 45 m A z włączonymi diodami L E D i wyświetlaczem L C D ) , dzięki czemu stabilizator U l - w większości przypad­ ków - będzie m ó g ł pracować bez radiatora. Dołączenie własnych układów może spowodować znaczny wzrost prądu zasilającego, a co za tym idzie wzrost tempe­ ratury stabilizatora. W takim przypadku konieczne może się okazać założenie ra­ diatora na układ U l lub zmniejszenie d o minimum wartości napięcia zasilające­ go. Różnica między napięciem wejściowym, a wyjściowym nie powinna być mniejsza niż 2 V. Kondensator C7 filtruje tętnienia napięcia wyprostowanego, a C 8 i C 9 odsprzęgają układ U l dla wielkich częstotliwości,

zabezpieczając

przed wzbudzeniem się. W dolnej oraz górnej części uniwersalnego pola monta­ żowego przebiegają dwie ścieżki zasilające tak, by można było w j a k najwygod­ niejszy sposób doprowadzić napięcie zasilające d o własnej części badanego sys­ temu. Oprócz tego napięcie to jest dostępne na łączówkach JP17 i JP18. Podczas korzystania z nich należy uważać, by nie spowodować zwarcia.

14.1.2. Taktowanie i zerowanie mikrokontrolera N a j w a ż n i e j s z y m e l e m e n t e m n a płytce j e s t o c z y w i ś c i e m i k r o k o n t r o l e r U 3 . Zalecany j e s t układ A T 9 0 S 2 3 1 3 - 1 0 , współpracujący z r e z o n a t o r e m k w a r c o -

w y m X l o częstotliwości 8 M H z . Dla takiej konfiguracji są p r z y g o t o w a n e p r z y k ł a d o w e p r o g r a m y . W szczególności c h o d z i o p r o c e d u r y o d m i e r z a n i a czasu. W p r z y p a d k u k o r z y s t a n i a z rezonatora na płytce, z w o r k i J3 i J 4 p o ­ winny b y ć u s t a w i o n e w g ó r n y m położeniu. G d y b y z j a k i c h ś p o w o d ó w za­ szła k o n i e c z n o ś ć d o ł ą c z e n i a z e w n ę t r z n e g o sygnału z e g a r o w e g o , to jest to m o ż l i w e poprzez ł ą c z ó w k ę O S C _ E X T . Z w o r k i J3 i J 4 p o w i n n y b y ć w ó w ­ c z a s u s t a w i o n e w d o l n y m położeniu. Sygnał z łączówki wejściowej O S C _ E X T trafia p o p r z e z z w o r k ę J 3 n a wejście X T A L 1 m i k r o k o n t r o l e r a . M o ż l i w o ś ć użycia z e w n ę t r z n e g o sygnału z e g a r o w e g o m o ż e b y ć w y k o r z y s ­ tana n p . d o s p r a w d z e n i a zależności prądu zasilającego w funkcji częstotli­ w o ś c i taktowania u k ł a d u . Z generatorem jest związany układ zerujący. Mikrokontroler j e s t j a k w i a d o ­ m o układem synchronicznym. D o j e g o pracy niezbędny j e s t odpowiedni przebieg zegarowy. W m o m e n c i e włączenia zasilania generator nie wzbudza się natychmiast. Start jednostki centralnej musi więc być opóźniony o czas gwarantujący j e g o stabilną pracę. D o w y g e n e r o w a n i a o d p o w i e d n i e g o sygna­ łu R E S E T najlepiej nadają się specjalizowane układy, takie j a k n p . D S 1 8 1 3 , który zastosowano w zestawie u r u c h o m i e n i o w y m (układ U 2 ) . Zaletą takiego rozwiązania jest w y g e n e r o w a n i e p e w n e g o w działaniu sygnału zerującego, bez względu na szybkość narastania napięcia zasilającego. O d p o w i e d n i a ja­ kość zerowania b y w a ignorowana przez konstruktorów, t y m c z a s e m okazuje się, że w wielu p r z y p a d k a c h nieprawidłowo rozwiązane z e r o w a n i e mikrokon­ trolera uniemożliwia j e g o prawidłowe działanie. Z e r o w a n i e mikrokontrolera tylko i wyłącznie poprzez wyłączanie i włączanie zasilania byłoby na dłuższą metę uciążliwe, szczególnie w przypadku prowa­ dzenia różnorodnych testów. Dlatego też na płytce znajduje się przycisk R E ­ S E T , za pomocą którego m o ż n a ręcznie zerować system.

14.1.3. Wykorzystywanie portów mikrokontrolera Wszystkie porty mikrokontrolera są wyprowadzone na gniazda o oznaczeniach P O R T B i P O R T D . Z a n i m j e d n a k sygnały z odpowiednich portów mikro­ kontrolera d o nich dotrą, muszą przejść przez zworki zakładane na specjalnie do tego celu umieszczone podwójne rzędy szpilek Z W ^ P O R T B i Z W _ P O R T D . Umieszczenie zworki np. w położeniu 1-2 gniazda Z W _ P O R T B powoduje połączenie w y p r o w a d z e n i a 1 gniazda P O R T B z w y p r o w a d z e n i e m 19 mikro­ kontrolera (PB7). Analogicznie jest dla pozostałych wyprowadzeń. W ten spo­ sób wyprowadzenia poszczególnych portów mikrokontrolera (gniazda P O R T B i P O R T D ) mogą b y ć n a stałe dołączone, np. d o własnego układu umieszczone-

g o na u n i w e r s a l n y m polu m o n t a ż o w y m i w razie potrzeby odłączane od niego za pomocą z w o r e k zakładanych na Z W J > O R T B i Z W _ P O R T D . N a u w a g ę za­ sługują k o ń c ó w k i 1 i 2 g n i a z d a Z W _ P O R T D oraz 1 P O R T D . Mikrokontroler A T 9 0 S 2 3 1 3 m a j e d y n i e 7 w y p r o w a d z e ń portu D i w związku z t y m w y m i e ­ nione wyżej k o ń c ó w k i w y k o r z y s t a n o d o dołączenia sygnału d o wewnętrzne­ g o k o m p a r a t o r a a n a l o g o w e g o mikrokontrolera. Dla w y g o d y w y p r o w a d z e n i e 2 Z W _ P O R T D dołączono do masy.

D l a w y g o d y pracy w a r t o p r z y g o t o w a ć sobie specjalne kabelki,

U|GA

k t ó r e będą w y k o r z y s t y w a n e d o połączeń systemu z w ł a s n y m u k ł a d e m u m i e s z c z o n y m na u n i w e r s a l n y m polu m o n t a ż o w y m . K a b e l k i takie m o g ą b y ć w y k o n a n e np. przy użyciu pojedyn­ c z y c h s t y k ó w tulipanowych w y m o n t o w a n y c h ze standardowej ł ą c z ó w k i w i e l o s t y k o w e j . D o każdej k o ń c ó w k i należy przy luto­ w a ć k a w a ł e k drutu (linki miedzianej) i zaizolować rurką termo­ kurczliwą, w z m a c n i a j ą c t y m s a m y m połączenie. Drugi koniec k a b e l k a m o ż e b y ć j e d y n i e p o z b a w i o n y izolacji i p o c y n o w a n y . B ę d z i e on później d o l u t o w y w a n y do o d p o w i e d n i e g o punktu p o l a m o n t a ż o w e g o . D o e k s p e r y m e n t ó w przyda się też kilka ka­ b e l k ó w z a k o ń c z o n y c h obustronnie łączówką.

14.1.4. Klawiatura W jaki s p o s ó b c z ł o w i e k m o ż e k o m u n i k o w a ć się z systemem mikroprocesoro­ w y m ? N a p r z y k ł a d za p o m o c ą klawiatury. J a k o , ż e jej obsługa stanowi od­ wieczny p r o b l e m początkujących

elektroników, klawiatury nie m o g ł o za­

braknąć na p ł y t c e . T w o r z ą j ą przyciski S W 1 , S W 2 , S W 3 , S W 4 . Z w o r k i JP4...JP7 służą d o dołączenia klawiatury d o mikrokontrolera i o d p o w i e d n i e ­ g o jej s k o n f i g u r o w a n i a . Przyciski S W 1 . . . S W 4 m o g ą p r a c o w a ć j a k o d w a nie­ zależne przyciski dołączone b e z p o ś r e d n i o d o mikrokontrolera, przy c z y m muszą b y ć o b s ł u g i w a n e p r z e z d w a różne porty (można więc w y k o r z y s t y w a ć parę S W 1 , S W 4 lub S W 2 , S W 3 ) . Mogą też b y ć skonfigurowane j a k o klawia­ tura m a t r y c o w a 2 x 2 . W p i e r w s z y m p r z y p a d k u zworki J P 6 i J P 7 muszą być zwarte, a J P 4 i J P 5 z a ł o ż o n e w pozycji 2-3 (połączenie z masą). W układzie klawiatury m a t r y c o w e j z w o r k i J P 4 i J P 5 p o w i n n y b y ć założone w pozycji 1-2 (lewe p o ł o ż e n i e ) . Z w o r k i J P 6 i J P 7 służą d o całkowitego odłączenia przycisków od mikrokontrolera. M o ż e b y ć t o konieczne np. w przypadku używania U A R T - u lub p o r t ó w PD1 i/lub PDO. Naciśnięcie k t ó r e g o ś z tych przycisków m o g ł o b y zakłócić pracę systemu.

14.1.5. Interfejs RS232 Wejście i wyjście U A R T - u mikrokontrolera w y p r o w a d z o n o poprzez zworki J P 2 i J P 3 oraz układ M A X 2 3 2 (U4) na gniazdo D B 1 . Układ U 4 służy do konwersji p o z i o m ó w logicznych mikrokontrolera na p o z i o m y napięć zgodne ze standardem R S 2 3 2 . Płytkę uruchomieniową można łączyć poprzez gniaz­ d o D B 1 (typu D S U B - 9 ) z d o w o l n y m i n n y m urządzeniem

wyposażonym

w interfejs R S 2 3 2 . D o połączenia wystarczy kabel typu nułl-modem,

w któ­

rym wykorzystuje się jedynie 3 przewody (dwie linie transmisyjne i masę sygnałową). N i e z b ę d n e w takim przypadku zapętlenia sygnałów R T S i C T S oraz D S R , D T R i D C D są w y k o n a n e na płytce ( r y s u n e k 14.3).

DTE (np. ZL1AVR)

OCE (PCJ

Rys. 14.3. Połączenie typu nułl-modem. Zapętlenia sygnałów RTS i CTS oraz DSR, DTR i DCD mogą być wykonane na płytce drukowanej lub przy stykach złącz DSUB-9

14.1.6. Diody LED Kolejnym środkiem komunikacji p o m i ę d z y systemem a u ż y t k o w n i k i e m jest zespół diod świecących L E D 1 . . . L E D 8 . Są o n e dołączane indywidualnie d o portu P B mikrokontrolera poprzez zworki Z W _ P O R T B . M o ż n a wykorzysty­ w a ć tylko wybrane, niekoniecznie wszystkie na raz. Z w o r k a J P 1 służy nato­ miast d o j e d n o c z e s n e g o odłączenia wszystkich diod L E D od mikrokontrole­ ra. Sterowanie d i o d a m i o d b y w a się bezpośrednio z w y p r o w a d z e ń mikrokon­ trolera bez d o d a t k o w y c h

wzmacniaczy tranzystorowych. J a k

pamiętamy

z poprzednich rozdziałów, wydajność prądowa portów układu A T 9 0 S 2 3 1 3 jest wystarczająca d o tego celu. Jedyne na co trzeba zwrócić u w a g ę , to takie dobranie rezystorów R 9 d o R 1 5 , aby nie przekroczyć całkowitej dopuszczal­ nej m o c y strat układu U 3 . W przypadku zestawu warunek ten jest spełniony, gdyż rezystory dołączone szeregowo ograniczają prąd diod L E D d o ok. 4 m A / s z t , co przy zapaleniu wszystkich diod daje pobór prądu o wartości ok. 32 mA. Założona wartość prądu w zupełności p o w i n n a wystarczyć d o wyraźnego świecenia się diod L E D , nawet gdy nie będą to diody wysokiej j a s n o ś c i . D i o -

dy L E D są d o ł ą c z o n e d o t e g o s a m e g o portu c o wyświetlacz alfanumeryczny L C D . Jeśli p r z e w i d y w a n e j e s t j e g o stosowanie, to niestety należy zrezygno­ wać z diod L E D lub z g o d z i ć się, że będą mrugały podczas pracy w czasie w y m i a n y d a n y c h m i ę d z y mikrokontrolerem a wyświetlaczem. Jedynie L E D 1 i L E D 2 pozostają d o e w e n t u a l n e g o n o r m a l n e g o wykorzystania, ale tym ra­ zem p o d w a r u n k i e m , ż e nie b ę d z i e u ż y w a n y przetwornik analogowo-cyfrowy lub o d p o w i e d n i o porty PBO i P B l .

14.1.7. Wyświetlacz alfanumeryczny LCD Na płytce u r u c h o m i e n i o w e j u m i e s z c z o n o g n i a z d o szpilkowe L C D 1 przezna­ czone d o d o ł ą c z e n i a t y p o w e g o wyświetlacza alfanumerycznego L C D . W z e ­ stawie p r z e w i d z i a n o w y ś w i e t l a c z 2 x 1 6 . O b s ł u g a jest realizowana za pomocą 4-bitowej s z y n y d a n y c h i d w ó c h sygnałów sterujących: E i R S . T y p o w y in­ terfejs w y ś w i e t l a c z a a l f a n u m e r y c z n e g o zawiera ponadto sygnał R / W , za p o ­ mocą k t ó r e g o określa się k i e r u n e k transmisji danych. Jest to potrzebne pra­ wie wyłącznie d o s p r a w d z a n i a gotowości wewnętrznego sterownika wy­ świetlacza. N a d e s ł a n e polecenie d o w y k o n a n i a przez mikrokontroler w c h w i ­ li, gdy s t e r o w n i k nie j e s t g o t o w y kończy się j e g o zignorowaniem, c o najczęś­ ciej p r o w a d z i d o b ł ę d n e g o działania układu. G o t o w o ś ć tę m o ż n a j e d n a k prze­ widzieć, w p r o w a d z a j ą c d o obsługi odpowiednie opóźnienia p r o g r a m o w e (za­ kładając, ż e p o t y m czasie sterownik upora się z wcześniejszymi zadaniami). Obsługa n i e j e s t wtedy tak wydajna, j a k przy sprawdzaniu gotowości wy­ świetlacza, lecz w z a s t o s o w a n i a c h praktycznych na ogół w niczym to nie p r z e s z k a d z a . P o t e n c j o m e t r P I usytuowany blisko wyświetlacza służy d o re­ gulacji kontrastu i c z ę s t o b y w a p o w o d e m frustracji niedoświadczonych elekt­ roników. J e ś l i b o w i e m j e g o s u w a k będzie ustawiony w z ł y m położeniu, to kontrast w y ś w i e t l a c z a m o ż e b y ć na tyle m a ł y , że żadne znaki nie będą wi­ doczne na w y ś w i e t l a c z u . C a ł a w i n a w takich sytuacjach j e s t c z ę s t o „zrzuca­ na" na błędy programu lub pomyłki w połączeniach. Dlatego w czasie pierw­ szego włączenia wyświetlacza, gdy nic na n i m nie widać, warto pokręcić su­ wak od j e d n e g o skrajnego położenia do drugiego. Dopiero, gdy p o tym spraw­ dzeniu w y ś w i e t l a c z nadal będzie „milczał", należy szukać innych błędów.

2

14.1.8. Interfejsy l C i 1-Wire Interfejsy 1 ^ i 1-Wire są p o w s z e c h n i e s t o s o w a n e d o komunikacji różnorod­ nych

urządzeń

peryferyjnych

z systemem

mikroprocesorowym.

Czasami

można s p o t k a ć nieco z m i e n i o n e ich n a z w y , c o b y w a związane z trudnościami

w uzyskiwaniu licencji na stosowanie interfejsu przez p r o d u c e n t ó w poszcze­ gólnych m o d u ł ó w peryferyjnych. Okazuje się, ż e właściciele p r a w autorskich b a r d z o s u r o w o j e egzekwują, a liczni producenci nie zawsze m o g ą sobie po­ zwolić lub p o prostu nie mają zamiaru za nie płacić. P r o b l e m ó w takich nie 2

uniknął nawet taki potentat, j a k Analog Devices. Interfejs I C został opraco­ wany przez firmę Philips, natomiast 1-Wire w dawnej Dallas Semiconductor, obecnie M a x i m - D a l l a s . O b y d w a interfejsy nie wymagają stosowania żadnych dodatkowych układów oprócz rezystorów podciągających na liniach transmi­ 2

syjnych. Urządzenia peryferyjne komunikujące się poprzez interfejs I C dołą­ cza się d o systemu p o p r z e z gniazda J l lub J2 ( z d u b l o w a n o j e dla w y g o d y ) . Linię danych S D A d o ł ą c z a się d o mikrokontrolera za pomocą z w o r k i J P 1 5 , a linię zegarową S C L za p o m o c ą J P 1 6 . Rezystory podciągające R 2 i R 3 gwarantują o d p o w i e d n i ą j a k o ś ć podciągnięcia. A n a l o g i c z n i e j e s t z interfej­ s e m 1-Wire. T y m r a z e m , j a k sama n a z w a wskazuje, j e s t t o p o ł ą c z e n i e j e d n o p r z e w o d o w e . S y g n a ł d o p r o w a d z a się d o gniazda J P 1 0 lub J P 1 1 , a dołą­ 2

czenie d o systemu z a p e w n i a z w o r k a J P 1 4 . Interfejsy I C i 1-Wire zajmują porty o d p o w i e d n i o P D 5 , P D 6 i P D 3 . Należy to uwzględnić w planowaniu eksperymentów.

14.1.9. Przetwornik analogowo-cyfrowy Z zasady działania u k ł a d ó w cyfrowych, d o j a k i c h należą mikrokontrolery, wynika, że operują o n e na dyskretnym i s k o ń c z o n y m zbiorze stanów w e j ­ ściowych i wyjściowych. T y m c z a s e m świat wokół nas jest a n a l o g o w y , czyli ciągły i nieskończony (przynajmniej z matematyczno-fizycznego punktu w i ­ dzenia). M o ż n a w i e c w y s n u ć wniosek, że przydatność

mikrokontrolerów

w dziedzinie analizy t y p o w y c h , otaczających nas zjawisk będzie raczej nie­ wielka. Z drugiej zaś strony jeśli przyjrzeć się n a s z y m z m y s ł o m , to okaże się, że są bardzo ułomne i s t o s u n k o w o prosto m o ż n a j e oszukać... oczywiście m e ­ todami cyfrowymi. Przekonujemy się o t y m na c o dzień słuchając płyt k o m ­ p a k t o w y c h , czy nawet oglądając zdjęcia z wakacji. Jak z a t e m w p r o w a d z i ć analogową informację d o cyfrowego mikrokontrolera? W o g ó l n y m przypad­ ku o d p o w i e d ź brzmiałaby: stosując przetwornik analogowo-cyfrowy. W i ę k ­ szość p r o d u c e n t ó w mikrokontrolerów m a w swojej ofercie handlowej modele układów w y p o s a ż o n y c h w wewnętrzne przetworniki A D C Converter). tinyl5L,

(Analog-Digital

Znajdziemy j e również wśród produktów A t m e l a , np.: A T A T t i n y 2 6 L , A T 9 0 S 4 4 3 3 , A T 9 0 S 8 5 3 5 i większość u k ł a d ó w serii

A T m e g a . Niestety przetwornika takiego nie z a i m p l e m e n t o w a n o w układzie A T 9 0 S 2 3 1 3 . W zamian za to znajduje się w j e g o strukturze k o m p a r a t o r ana­ l o g o w y . Dokładając s t o s u n k o w o niewiele e l e m e n t ó w zewnętrznych m o ż n a

Ą

|PO4

Rys. 14.4. Schemat elektryczny przetwornika analogowo-cyłrowego wykonanego na komparatorze analogowym

Rys. 14.5. Przebieg cyklu lądowania/ rozładowania kondensatora referencyjnego C

za j e g o p o m o c ą zrealizować przetwornik analogowo-cyfrowy. J e g o parametry nie są z p e w n o ś c i ą tak dobre j a k układów wyspecjalizowanych, czy przetwor­ ników z a w a r t y c h w strukturach mikrokontrolerów, ale są w zupełności wystar­ czające w wielu zastosowaniach. Schemat elektryczny i ogólną zasadę działa­ nia takiego przetwornika przedstawiono na r y s u n k a c h 14.4 i 14.5. K o n d e n s a t o r p o m i a r o w y C dołączono d o nieodwracającego wejścia kompa­ ratora a n a l o g o w e g o oraz - p o p r z e z opornik R - d o j e d n e g o z p o r t ó w mikro­ kontrolera ( n p . P D 4 ) . D o wejścia odwracającego komparatora jest doprowa­ dzony a n a l o g o w y sygnał m i e r z o n y . Cykl p o m i a r o w y rozpoczyna się od usta­ wienia s t a n u w y s o k i e g o na wyjściu P D 4 , w w y n i k u czego kondensator C za­ czyna się ł a d o w a ć przez o p o r n i k R d o napięcia zasilającego Vcc- W t y m sa­ mym momencie

m i k r o k o n t r o l e r powinien

uruchomić p o m i a r czasu

(po

wcześniejszym w y z e r o w a n i u rejestrów timera). L ą d o w a n i e przebiega zgod­ nie z zależnością:

V =V c

c c

(l-exp^~)

(14.1)

W m o m e n c i e , g d y napięcie n a kondensatorze osiągnie wartość mierzonego napięcia w e j ś c i o w e g o , na wyjściu komparatora nastąpi z m i a n a stanu. Fakt ten p o w i n i e n s p o w o d o w a ć z a t r z y m a n i e p o m i a r u czasu, który j a k widać bę­ dzie proporcjonalny

d o napięcia wejściowego. W rzeczy wistości

zmiana

stanu na wyjściu k o m p a r a t o r a najczęściej będzie wyzwalała funkcję prze­ chwytywania

Timeral,

czyli

zatrzaśnięcie

wyniku

w rejestrach

ICR1H

i I C R I L . 2 z a l e ż n o ś c i opisanej w z o r e m 14.1 wynika, że ładowanie konden­ satora nie p r z e b i e g a liniowo. Przeliczenie czasu na napięcie nie będzie więc łatwe. W p r a w d z i e mając d o dyspozycji mikrokontroler m o ż n a zależność tę zlinearyzować p r o g r a m o w o , lecz będzie się to wiązało z koniecznością za­ stosowania n i e m a ł y c h bibliotek matematycznych. Inna metoda, to stablicowa-

nie funkcji ładowania. W tym przypadku trzeba będzie z kolei zająć sporo miejsca w pamięci programu. Na rysunku 14.6 przedstawiono kilka oscylogram ó w rzeczywistego układu mierzącego na zasadzie ładowania kondensatora przez opornik. Oglądając te przebiegi zauważamy, że mniej więcej d o połowy napięcia Vrjc, ładowanie można uznać za liniowe. P o wprowadzeniu odpo­ wiednich ograniczeń dla napięcia wejściowego m a m y wiec kolejną metodę. Obliczeń dokonujemy stosując zwykłe przekształcenia liniowe b e z dołączania do programu bibliotek matematycznych. Zakładamy przy tym, ż e popełniany błąd jest do zaakceptowania. Cykl pomiarowy kończy się podaniem stanu nis­ kiego na wyjściu PD4, w wyniku czego kondensator jest rozładowywany przez rezystor R i niewielką oporność wyjściową portu P D 4 w tym stanie. W y k o r z y s t a n i e elementarnej wiedzy z fizyki p o m o ż e n a m w opracowaniu j e s z c z e j e d n e g o układu p o m i a r o w e g o . Jak p a m i ę t a m y ze szkoły, ładunek z g r o m a d z o n y w k o n d e n s a t o r z e jest proporcjonalny d o p o j e m n o ś c i tego kon­ densatora i napięcia panującego na nim. Z drugiej strony ładunek jest iloczy­ n e m prądu i czasu. Wykorzystując ten fakt uzyskujemy zależność I-t = U-C, z której w y n i k a wprost, że ładowanie kondensatora będzie m i a ł o charakter li­ niowy, jeśli tylko zostanie z a p e w n i o n a

stała wartość prądu. N a

płytce

Z L 1 A V R z a s t o s o w a n o właśnie takie rozwiązanie. R o l ę źródła p r ą d o w e g o pełnią tranzystory Q l , Q 2 i rezystor R l , pracujące w układzie lustra prądo­ w e g o . Prąd kolektora tranzystora Q l jest odzwierciedleniem prądu kolektora tranzystora Q 2 , a ten z kolei w y n i k a z wartości rezystora R l : V

I = cc-U Rl R 1

B E

P

(wzór 14.2)

Tranzystory p o w i n n y m i e ć j a k najbardziej zbliżone parametry. I d e a ł e m b y ł o ­ b y , g d y b y były w y k o n a n e w tej samej strukturze p ó ł p r z e w o d n i k o w e j . O d p o ­ wiednie elementy są d o s t ę p n e w handlu, j e d n a k z r e z y g n o w a n o z nich na rzecz popularnych tranzystorów, które m o ż n a kupić w k a ż d y m sklepie elekt­ r o n i c z n y m . K o n d e n s a t o r p o m i a r o w y C 5 j e s t dołączony d o wejścia nieodwra-

Rys. 14.6. Oscylogramy układu pomiarowego wykorzystującego ładowanie kondensatora prądem płynącym przez rezystor

Rys. 14.7. Oscylogramy układu pomiarowego wykorzystującego ładowanie kon prądowe cającego AINO (PBO). Jest o n ładowany stałym prądem ze źródła p r ą d o w e g o z b u d o w a n e g o z tranzystorów Q l , Q 2 . Z a l e ż n o ś ć napięcia n a kondensatorze w funkcji czasu określa w z ó r 14.3:

U

c

= ^

( w z ó r 14.3)

Jak w i d a ć j e s t to z a l e ż n o ś ć liniowa. W praktyce oczywiście nie jest tak ideal­ nie j a k n a papierze, ale błędy są d o przyjęcia (patrz rozdział 14.3.6). Mierzo­ ne n a p i ę c i e należy d o p r o w a d z i ć się d o wejścia A I N 1 ( P B l ) p o p r z e z (uwaga!) k o ń c ó w k ę 1 gniazda P O R T D . Tranzystor Q 3 (wraz z rezystorem R 5 ) , stero­ w a n y z wyjścia P D 4 u m o ż l i w i a szybkie rozładowania kondensatora C 5 . Pra­ cuje od n a s y c e n i a d o zatkania, j a k typowy klucz tranzystorowy. T a k zrealizo­ w a n y p r z e t w o r n i k będzie p r a c o w a ł niemal w całym zakresie napięć wejścio­ w y c h , t z n . od zera d o VQC- J e d n a k ze względu na n i e z n a c z n e pogorszenie charakterystyki dla dużych wartości napięcia wejściowego, celowe jest j e g o ograniczenie d o ok. 4,8 V przy zasilaniu 5 V . Oscylogramy przedstawione na r y s u n k u 14.7 pokazują j a k wygląda ładowanie kondensatora ze źródła prądo­ w e g o w rzeczywistym układzie (na płytce Z L 1 A V R ) . Widać wyraźną poprawę liniowości ładowania kondensatora w porównaniu z wcześniej opisaną metodą.

14.1.10. Programowanie mikrokontrolera w systemie (ISP) W p u n k c i e 11.4.2 o p i s a n o s z e r e g o w e p r o g r a m o w a n i e pamięci Flash mikro­ kontrolera. W y k o r z y s t y w a n y jest d o tego celu interfejs S P I , zaimplemento­ 0

w a n y w w i ę k s z o ś c i m i k r o k o n t r o l e r ó w A V R . D w u k i e r u n k o w a transmisja sze­ r e g o w a j e s t p r o w a d z o n a liniami M O S I (wejście danych dla mikrokontrolera), M I S O (wyjście d a n y c h ) i S C K (zegar synchronizujący transmisję). M i k r o ­ kontroler u m i e s z c z o n y n a płytce uruchomieniowej m o ż e b y ć p r o g r a m o w a n y za p o m o c ą

dowolnego

programatora

zgodnego

z t y m standardem (np.

Z L 2 P R G ) . P r z y k ł a d o w ą konstrukcję o p i s a n o w rozdziale 13.

Płytki d r u k o w a n e d o programatora Z L 2 P R G oraz j e g o doku­ mentacja są dostępne w i n t e r n e t o w y m sklepie W y d a w n i c t w a BTC {http://www.btc.pi/index.php7id-zV2prg).

S t o s o w a n i e programowania szeregowego j e s t b a r d z o w y g o d n e dla użytkow­ nika, g d y ż uwalnia g o od uciążliwego przekładania układu z podstawki zesta­ w u d o podstawki programatora. Ci Czytelnicy, którzy zdecydują się pisać swoje programy w B a s c o m i e , będą mogli robić to w j e d n y m , zintegrowanym środowisku. T r z e b a j e d n a k pamiętać, że p r o g r a m o w a n i e szeregowe nie jest d o k ł a d n y m odpowiednikiem p r o g r a m o w a n i a równoległego. D o t y c z y t o usta­ wiania bitów konfiguracyjnych

(fuse bits).

Z tego względu warto j e d n a k

z a m o n t o w a ć na płytce p o d s t a w k ę pod mikrokontroler. Programator Z L 2 P R G najwygodniej jest dołączyć b e z p o ś r e d n i o d o gniazda I S P 2 przez kabel w y k o n a n y z taśmy 10-przewodowej. Połączenia powinny b y ć w y k o n a n e 1:1 (styk 1 na styk 1, 2 na 2 itd.), zgodnie z r y s u n k i e m 14.8. Na płytce Z L 1 A V R znajduje się ponadto g n i a z d o ISP1 z g o d n e ze specyfika­ cją Atmela. Zawiera ono tylko 6 styków. W przypadku wykorzystywania te­ g o gniazda d o p r o g r a m o w a n i a mikrokontrolera, niezbędne będzie w y k o n a n i e kabla przejściowego. S p o s ó b j e g o w y k o n a n i a przedstawiono n a r y s u n k u 14.9. W t y m przypadku dioda sygnalizacyjna L E D 9 nie będzie działała, p o -

Gnlazdo programatora 2L2PRS

2

Gniazdo ISP2 na płytce ZL1AVR

1

Rys. 14.8. Kabel połączeniowy dla programatora ZL2PRG dołączonego do gniazda ISP2 Gniazdo programatora ZL2PRG

Gniazdo ISP1 napłyt«ZL1AVR

Rys. 14.9. Kabel przejściowy dla programatora ZL2PRG dołączonego do gniazda ISP1

n i e w a ż j e s t o n a s t e r o w a n a s y g n a ł e m występującym wyłącznie na j e d n y m ze styków I S P 2 , sygnalizując a k t y w n o ś ć interfejsu.

14.2. Ćwiczenia praktyczne 14.2.1. Ćwiczenie 1 Sterowanie portami mikrokontrolera w trybie wyjściowym - efekt węża świetlnego i biegnącego punktu na linijce diod LEO P o z n a w a n i e m i k r o k o n t r o l e r a r o z p o c z n i e m y o d kilku przykładów obsługi j e ­ g o portów. W w i ę k s z o ś c i p r a k t y c z n y c h aplikacji będziemy się spotykać z po­ d o b n y m z a g a d n i e n i e m , w s z a k jeśli j u ż w urządzeniu zastosowano mikrokon­ troler, t o o c z y w i s t e jest, że m u s i w y k o n y w a ć j a k i e ś zadania. A w jaki sposób, j a k nie p o p r z e z porty w e / w y , m a on p r z e k a z y w a ć efekty swojej pracy d o reszty s y s t e m u ? W ć w i c z e n i u n a u c z y m y się ustawiać linię portów w tryb wyjściowy i z m i e n i a ć ich stan. Mikrokontroler

AT90S2313

wyposażono

w dwa

porty

we/wy:

PORTB

i P O R T D . M o g ą o n e p r a c o w a ć j a k o porty ogólnego przeznaczenia lub m o ż n a w y k o r z y s t y w a ć ich funkcje alternatywne (patrz rozdział 3.1). D o wysterowa­ nia diod ś w i e c ą c y c h skorzystamy z ich p o d s t a w o w y c h możliwości. Porty m i k r o k o n t r o l e r ó w A V R są obsługiwane p r z e z trzy rejestry

umieszczone

w przestrzeni w e / w y . U ż y c i e portu p o w i n n o być p o p r z e d z o n e o d p o w i e d n i m s k o n f i g u r o w a n i e m go, najlepiej w e wstępnej fazie programu. Poszczególne linie p o r t ó w m o g ą b y ć i n d y w i d u a l n i e ustawiane j a k o wejściowe lub wyjścio­ we. D o k o n u j e się tego p o p r z e z wpis odpowiednich wartości d o rejestru kie­ runku (np. d l a portu B jest t o D D R B ) . W p i s a n i e „ 1 " na daną pozycję ozna­ cza, że o d p o w i a d a j ą c e jej w y p r o w a d z e n i e portu będzie p r a c o w a ł o j a k o wyj­ ściowe. A n a l o g i c z n i e „ 0 " konfiguruje port j a k o wejściowy (patrz następne ćwiczenia). Linijka diod L E D na płytce uruchomieniowej jest dołączona bez­ pośrednio d o portu B . Jak p a m i ę t a m y , porty mikrokontrolerów A V R mają wystarczającą wydajność prądową d o ich wysterowania. A b y zaświecić wy-

Ź r ó d ł o w e i w y n i k o w e wersje p r o g r a m ó w d o ć w i c z e ń przedsta­ w i o n y c h w dalszej części książki są dostępne na stronie interne­ towej W y d a w n i c t w a B T C

(http:/Avww.brc.pi?id~avr).

braną diodę należy o d p o w i e d n i e wyjście portu ustawić w stanie niskim, czyli wpisać „ 0 " na odpowiednią pozycję rejestru P O R T B . Ustawienie linii w sta­ nie w y s o k i m powoduje zgaszenie L E D - a . Oczywiście dołączenie diod Świe­ cących w niniejszym ćwiczeniu jest p o d y k t o w a n e tylko chęcią pokazania „ n a m a c a l n e g o " efektu sterowania portami. N a wyjściach portu występują napięcia o wartościach, które umożliwiają współpracę mikrokontrolera ze z w y k ł y m i układami cyfrowymi. J e d y n e na c o trzeba ewentualnie zwrócić u w a g ę , to upewnienie się o kompatybilności układów zasilanych r ó ż n y m i napięciami, gdyż coraz powszechniejsze stają się układy zasilane napięciem n p . 3,3 V. Niektóre układy występują j u ż tylko w wersjach niskonapięciowych. W takich przypadkach m o ż e okazać się nie­ zbędne stosowanie odpowiednich interfejsów. Przykład z d i o d a m i L E D m a j e s z c z e j e d e n praktyczny walor. W wielu aplikacjach w y m a g a n e jest galwa­ niczne odizolowanie systemu mikroprocesorowego

od

współpracujących

z n i m urządzeń. Jeśli w y m i a n a informacji dotyczy sygnałów cyfrowych, naj­ prostszą

metodą zrealizowania separacji jest zastosowanie

transoptorów,

a sterowanie nimi, to przecież nic innego j a k gaszenie i zapalanie diod L E D . Podobnie jest z przełączaniem o b w o d ó w dużej m o c y za pomocą optotriaków lub optoprzekaźników. Sterowanie portu m o ż n a zrealizować poprzez wpisanie całego bajtu o odpo­ wiedniej wartości lub poprzez manipulowanie pojedynczymi bitami. W j ę z y ­ ku C realizuje się to instrukcjami np.: PORTB-0x0£; sbi(PORTB,5); cbi(PORTB,7);

//wyprowadzenia PB7...PB4 w stanie "0", PB3...PB0 //wlstanie "1". //ustaw bit 5 portu B w stanie wysokim ("l") //bez zmiany pozostałych //ustaw bit 7 portu B w stanie niskim ("0") //bez zmiany pozostałych

D o sterowania i n d y w i d u a l n y m i bitami portu m o ż n a również stosować bar­ dziej naturalny zapis. Przykład będzie podany w ćwiczeniu 9.

Aktualne wersje kompilatora A V R - G C C pozwalają, a na­ wet wymagają

stosowania zapisu np.

PORTB=wartość.

W wersjach wcześniejszych wymagane było użycie makra outp(wartość,

port).

Stany wyjść portu sterującego diodami świecącymi w t y m ćwiczeniu są zmieniane cyklicznie. C z a s cyklu wyznaczony jest na s z t y w n o za pomocą funkcji c z e k a j . Jest to funkcja uniwersalna, w zależności od wartości argu-

menru funkcji

pt

generowane

W programie z listingu

m o ż e b y ć opóźnienie o różnej

długości.

1 4 . 1 funkcja ta j e s t w y w o ł y w a n a z parametrem

p c z e k a j . Jest to z m i e n n a t y p u u n s i g n e d l o n g , inicjowana w miejscu de­ klaracji w a r t o ś c i ą 1500. Program realizujący p r z e d s t a w i o n e zadanie znajduje się na l i s t i n g u 1 4 . 1 . N a ­ leży s k o m p i l o w a ć p r o g r a m cwiczl.c

i z a p r o g r a m o w a ć mikrokontroler z z e ­

stawu Z L 1 A V R plikiem w y n i k o w y m

cwiczl.hex.

Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, z w o r k a J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • z w o r k a J P I z w a r t a - g l o b a l n e włączenie diod L E D , • zworki Z W _ P O R T B z w a r t e (wszystkie) - włączone wszystkie diody L E D , • położenie p o z o s t a ł y c h z w o r e k nieistotne (np. rozłączone). List. 14.1. Program do ćwiczenia 1

/* Ćwiczenie 1 - sterowanie portami w trybie wyjściowym V /* Efekty świetlne na linijce LED-ów

*/

/* J . D . '2003 l*+***+»»«******.*.***********«*********»***•»**»******•*•/

*/

ttinclude unsigned long pczekaj=1500; void czekaj(unsigned long pt) //funkcja opóźnienia t unsigned char tpl; £or(;pt>0;pt--) for(tpl=255;tpl!=0;tpl--);

int main(void)

//program główny

unsigned char ledy,i,licznik; DDRB=0xff; while(l)

//konfiguracja wszystkich wyprowadzeń //portu B w trybie wyjścia //nieskończona pętla główna programu

//efekt węża for Uicznik=0;licznik»»» definicje tekstów wyświetlanych na LCD « EFEKT piszilcd(0xOd) ,pisztekst(tekst4); klawisz(2); czysclcdO ;

«, asm("nop") asm("nop") cbi(PORTB,lcd_e); //impuls strobujący czekaj(10L); //czekaj na gotowość LCD )

void czysclcd(void) i piszilcd(0x01); czekaj(l.S4*tau); wiersz=0; kolumna=0;

//czyść ekran //polecenie czyszczenia ekranu dla //kontrolera LCD //rozkaz 0x01 wykonuje sie l-64ms

}

void lcdxy(unsigned char w, unsigned char k) //ustaw współrzędne kursora {

piszilcd((w*0x40+k)10x80)

void piszznak(char znak) I pis2dlcd(znak);

//standardowy rozkaz sterownika LCD //ustawiający kursor w określonych //współrzędnych

//funkcja umieszcza znak na wyświetlaczu //wyświetl znak na LCD

)

unsigned char incwiersz(unsigned char w) //inkrementuj wiersz LCD (

return w==l?0:l; }

unsigned char decwiersz(unsigned char w) //dekrementuj wiersz LCD (

return w==0?l:0; )

unsigned char inckolumna(unsigned char k) //inkrementuj kolumnę LCD return k==15?0:++k;

unsigned char deckolumna(unsigned char k) //dekrementuj kolumnę LCD return k==0?15:--k;

nt main(void)

//program główny

unsigned char r,i; unsigned char xg=0; unsigned char yg=0;

//zmienne pomocnicze //kolumna wyświetlania kursora gracza //wiersz wyświetlania kursora gracza

Iiczt0=vliczt0; lkursor=vlkursor; PORTD=0xff; PORTB=0x03; DDRD=0xO3; DDRB=0xff; TIMSK=l«TOIE0; TCNTO=tauO; TCCR0=4; fklaw=0; //>>>>>>>>>>>>>>>> czekaj(45*tau);

lit podciąganiem //z podciąganiem wejść //PD0-PD1 wy, pozostałe wejścia //PORTB - wy //zezwolenie na przerwania od TCO //wpisz stałą czasową do TCHTO //preskaler XTAL/256, //kwant mierzonego czasu = 32|is inicjacja wyświetlacza LCD

/**.***»**»»****•************»***********»*•»******•***•****•*****/ ttinciude ttinciude ttinciude ttinciude



/,».,,....,.»....... unsigned

char

volatile

unsigned

zmienne g l o b a l n e

***•***********.***•

licztO; char pomiar;

//flaga

dokonania

pomiaru

uniont u n s i g n e d int w s p k a l ; //współczynnik unsigned char w s p k a l b [ 2 1 ; )uwspkal; void

czekaj(unsigned

long

zt)

kalibracji

//funkcja

opóźnienia

//obsługa

przerwania

{ (łdefine tau 10-38 u n s i g n e d char Ztlj for(;zt>0;zt--) { forlztl = 255;ztl!=0;ztl — ) ;

) } StGHAL

i

(SIG_IHPUT_CAPTURE1)

od

przechwycenia

unionł unsigned int czas; unsigned char czasb[2); luczas; unsigned char czasS; uczas.czasb[0)=iCR]L; //zatrzaśnij rejestry przechwytywania uczas.czasbil J =ICR1H,czas8=~{(uczas.czas/uwspkal.wspkal}«2); //normalizacja wyniku do postaci 6-bitowej //liczby binarnej przesuniętej o 2 bity //w lewo (P0RTB1 i 0 są wykorzystywane //przez komparator analogowy) PORTB=(PORTBŁ0x03) Jczas8; //wyświetl wynik na LEDach pomiar=l; //pomiar dokonany (zapal flagę) sbi(PORTD,4) ; //zacznij rozładowywać kondensator //pomiarowy )

int main(void) DDRD=0xl0; PORTD=0xf£; PORTB=0x01; DDRB=0xfc; TCCR1A=0; TCCRlB=0x41;

//PORTD we oprócz PD4 //z podciąganiem //PBO z podciąganiem //PORTB7-2 - wy, PORTB1-0 - we // funkcje porównania i PWM wyłączone //preskaler XTAL/1 dla TC1, przechwyty//wanie na narastającym zboczu //zezwolenie na przerwania od //przechwytywania //zezwolenie na wyzwalanie //przechwytywania komparatorem

TIMSK=Ox08; ACSR=1 dane z pamięci programu //romram=0 ^> dane z RAM-u char "pfifosio; //wskaźnik na kolejkę UART-u unsigned char volatile fodbznak=0; //flaga: "odebrano znak" char komenda; //odebrana komenda z PC-ta char *fifosio[]; //wskaźnik na kolejkę UART-u

//procedura obsługi odbiornika UART-u

SIGNAL(SIG„UART_RECV) { komenda=UDR; fodbznak=l;

//zapamiętaj odebraną komendę //ustaw flagę odebrania znaku

}

//procedura obsługi nadajnika UART //wywoływana po wysłaniu znaku

SIGNAL(SIG_UART„TRANS) { char znak; if(romram) { znak=PRG_RDB(pf i fosio++);

//skąd pobierać dane? //pobierz daną z pamięci programu

}

else { znak=*pfifosio+*;

//pobierz dane z pamięci RAM

}

//czy

if (znak!=0) { UDR=znak;

koniec pobierania danych?

//nie, wyślij znak pobrany z kolejki

}

else ( cbi(UCR,TXEN);

°//tak, wyłącz nadajnik

} )

void czekaj(unsigned { ttdefine tau 10.38 unsigned char ztl; for(,-zt>0;zt--) {

long zt)

//funkcja opóźnienia

for(ztl=255;ztl1=0;ztl-->; )

void wyslijtekstROM(char

*tekst) //wysyłanie danych z pamięci programu

{

//dane będą z pamięci programu //ustaw wskaźnik na dane do wysłania //włącz nadajnik //wyślij pierwszy znak, pozostałe będą //pobierane w procedurze obsługi //przerwania TXC

romram=1; pf i fosio=tekst ,• sbi(UCR,TXEN); UDR=PRG_RDB(pfi£osio++);

void wyślij tekst(char *tekst) ( romram=0; pfifosio=tekst; sbi(UCR,TXEN); UDR=*pfifosio++;

//wysyłanie danych z pamięci programu //dane będą z pamięci danych //ustaw wskaźnik na dane do wysłania //włącz nadajnik //wyślij pierwszy znak, pozostałe będą //pobierane w procedurze obsługi //przerwania TXC

int main(void) ( unsigned char i; unsigned char volatile licznikkl=0; //zmienna wykorzystywana do pomiaru //czasu naciśnięcia przycisków char volatile przyrost=l;

//przyrost zmiany współczynnika //wypełnienia sygnału PWM //tablica komunikatów do wysłania char *info(7]={ PSTR("\n\rRegulator obrotów silnika DC\n\r*), PSTR(•, - zmniejszanie obrotów\n\r"), PSTR[". - zwiększanie obrotów\n\r") , PSTRCO - zatrzymanie silnika\n\r"}, PSTRCl - start z max. obrotami\n\r"}, PSTRCN - podaj aktualne parametry sterownika\n\r\n"), PSTR["\n\rAktualne parametry PWM:•) >;

union

//unia pozwala na bajtowy dostęp do //zmiennej int (

unsigned int pwm; unsigned char pwmcf2]; }volatile upwm;

DDRB=0xff; PORTB=0xff; DDRD=0x02; PORTD=0x02; UBRR=VUBRR; UCR=1«RXCIE

TCCRlA=0x83;

//aktualny współczynnik wypełnienia //sygnału PWM //PORTB - wy

I 1«TXCIE

//PDI - wy (RXD), pozostałe we //podciągania wejścia PDI (RXD) //ustaw prędkość transmisji 1«RXEN; //zezwolenie na przerwania od odbiornika //i nadajnika, zezwolenie na odbiór //PWM 10-bitowy

TCCRlB=Ox01; TCNTlL=OxOO; TCNTlH=OxOO; upwm.pwm=0x3 tt;

OCRlH=upwm.pwmc|1); OCRlL=upwm.pwmc(0); sei(}; for(i=0;i0x3ff) //jeśli przekroczono wartość TOP, to (upwm.pwm= 0x 3 f f; //ustaw TOP >

czekaj(150'tau); licznikkl++; break; •. Upwm.pwm-=przyrost; if(upwm.pwm>0x3fE) (upwm.pwm=0; I czekaj(150'tau) 1icznikkl++; break; '0-: upwm.pwm=0; break; ' 1' :

case case

upwm.pwm=0x3 f f; break; ' n' :

//eliminacja powtórnej interpretacji //naciśnięcia przycisku //mierz długość naciśnięcia przycisku //odebrano - zmniejsz prędkość //zmniejsz PWM //odpowiada upwm.pwmj i

«

10

J



ffiOM)

* stan wymuszony przez Mastera

stan wymuszony przez Mastera stan wynikający z podciągnięcia rezystorem

stan wynikający z podciągnięcia rezystorem — — — • stan wymuszany przez pastylkę

Rys. 14.27. Okno wpisu „0" do rejestru wej­ ściowego układu iButton (czasy w mikroksekundach)

Rys. 14.28. Odczyt stanu wyjścia danych układu iButton przez mikrokontroler (czasy w mikroksekundach)

k i e g o n a j p r a w d o p o d o b n i e j będzie efektem zwarcia - zmienna z p jest p o raz kolejny i n k r e m e n t o w a n a . P o zakończeniu fazy inicjującej pastylkę mikrokon­ troler r o z p o z n a j e , która z p o w y ż s z y c h sytuacji wystąpiła na linii interfejsu. Jeśli z m i e n n a z p m a w a r t o ś ć 1, to z d u ż y m prawdopodobieństwem można p r z y p u s z c z a ć , ż e została r o z p o z n a n a obecność pastylki i nastąpi teraz próba odczytania z niej d a n y c h . A b y to uczynić, mikrokontroler musi przesłać do pastylki r o z k a z Czytaj

ROM

o kodzie 0 x 3 3 (lub 0x0f). Służy d o tego celu

u n i w e r s a l n a funkcja z a p i s z l w ( d a n a ) , której parametrem będzie w t y m przypadku wartość 0 x 3 3 . Funkcja ta wyłuskuje kolejne bity danej, począwszy od najmniej znaczącego, i wywołuje funkcję s l o t l w _ z a p ( z n a k ) , której za­ d a n i e m j e s t w y g e n e r o w a n i e odpowiedniej szczeliny nadawczej. W zależności od wartości t r a n s m i t o w a n e g o bitu, szczelina nadawcza przybiera odpowied­ nią p o s t a ć . W p r z y p a d k u bitu „ 1 " m a m y d o czynienia ze szczeliną Zapisz

je­

den ( r y s u n e k 14.26). Mikrokontroler ustawia linię interfejsu w stan niski, odczekuje 11 u s , p o c z y m z w a l n i a j ą wpisując „ 1 " . Po 15 u s od chwili w y z e ­ rowania, u k ł a d odbiorczy pastylki rozpoczyna próbkowanie linii, które może trwać d o 6 0 u s licząc od początku szczeliny. Mikrokontroler odczekuje jesz­ cze 6 0 u s d o k o ń c a slotu, p o c z y m może kontynuować pracę. W przypadku transmisji bitu o wartości „ 0 " m a m y d o czynienia ze szczeliną Zapisz

zero

( r y s u n e k 14.27). R ó ż n i się ona od poprzedniej czasem przytrzymania linii 1-Wire w s t a n i e niskim, który powinien zawierać się między 6 0 a l 2 0 u s . W p r o g r a m i e odczekuje się 7 0 us. Po przesłaniu rozkazu Czytaj ROM mikro­ kontroler r o z p o c z y n a odbieranie danych z pastylki. Służy d o tego funkcja c z y t a j l w ( ) . W wyniku jej działania d o 8-elementowego bufora b u f o r l w zostaną zapisane kolejne bajty odebrane z pastylki. Funkcja c z y t a j l w ( ) kompletuje

poszczególne

bity

w 1-bajtowe dane, wykorzystując

funkcję

Fot 14.29. Niepowtarzalny numer seryjny układu iButton jest wypalony laserem na obudo­ wie układu

s l o t l w _ c z y t ( ) . Szczelinę odczytu przedstawiono na r y s u n k u 14.28. Jej początek jest sygnalizowany wyzerowaniem przez mikrokontroler linii interfej­ su na czas t s u (1 us), p o którym jest ona zwalniana. W t y m m o m e n c i e pastylka wystawia stan odpowiadający n a d a w a n e m u przez nią bitowi. Mikrokontroler odczekuje jeszcze ok. 14 u s d o momentu, w którym będzie mógł próbkować li­ nię. P o odczytaniu bitu, funkcja s l o t l w _ c z y t {) zwraca wynik d o wywołu­ jącej ją c z y t a j l w ( ) , gdzie j a k j u ż wiadomo następuje kompletowanie ramki i zapis danej d o bufora. D a n e odebrane z pastylki to: identyfikator rodziny układów, tzw. Family Code (w przypadku układów D S 1 9 9 0 A zawsze będzie miał wartość 1), 6-bajtowy, niepowtarzalny n u m e r seryjny pastylki (jest on również wygrawerowany na obudowie - fotografia 14.29) oraz bajt C R C sta­ nowiący kontrolę poprawności odczytu. Procedura rozpoznająca obecność pas­ tylki w czytniku czasami może mylnie zinterpretować jej dołączenie, np. w wy­ niku zakłócenia linii interfejsu. M o ż e się również zdarzyć, że p o prawidłowym rozpoznaniu obecności pastylki, dane nie zostaną z niej odczytane bezbłędnie, np. w wyniku braku odpowiedniego kontaktu elektrycznego. Zastosowania d o j a k i c h zostały przewidziane układy D S 1 9 9 0 A

narzucają,

aby p e w n o ś ć odczytu danych była j a k największa. W t y m celu, p o odebraniu kompletu danych jest obliczana suma kontrolna C R C (służy d o tego celu fun­ kcja ł i c z _ C R C { d a n a , c r c ) ) . Jak widać na r y s u n k u 14.30, wartość sumy kontrolnej jest zapisana w pamięci R O M pastylki i przesyłana w r a z z resztą danych. 8

5

Do

obliczeń

jest

wykorzystywany

wielomian

generujący

4

x + x + x + 1. Funkcja l i c z „ C R C jest implementacją w j ę z y k u C proce­ dury asemblerowej opublikowanej w nocie katalogowej układu D S 1 9 9 0 A . S u m a kontrolna jest liczona w programie ze wszystkich 8 odebranych baj­ tów. W y n i k obliczeń w przypadku poprawnej transmisji p o w i n i e n dać war-

numer bajtu w buforze butorlw 1 LSB MSB FAMILY CODE

NUMER SERYJNY PASTYLKI

USB MSB

LSB MSB

kolejność odczytu

Rys. 14.30. Mapa pamięci układu 0S1990A

tość 0. K a ż d a inna w a r t o ś ć będzie oznaczała wystąpienie błędu podczas transmisji i d a n e takie p o w i n n y b y ć zignorowane. Jest w ó w c z a s wyświetlany o d p o w i e d n i k o m u n i k a t . S u m ę kontrolną C R C można liczyć również w inny sposób. O b l i c z e n i a m o g ą b y ć p r o w a d z o n e dla siedmiu pierwszych bajtów, a w y n i k p o w i n i e n o d p o w i a d a ć bajtowi ó s m e m u . Obie metody są r ó w n o w a ż ­ ne, w y b ó r p a d ł na pierwszą, nieco łatwiejszą w realizacji praktycznej. Po o t r z y m a n i u p r a w i d ł o w e g o wyniku na wyświetlaczu jest wyświetlany ko­ munikat o r o z p o z n a n i u pastylki wraz z jej n u m e r e m seryjnym i k o d e m rodzi­ ny. D a n e są w y ś w i e t l a n e od tyłu, począwszy od szóstego elementu tablicy b u f o r l w tak, ż e b y o d p o w i a d a ł y rzeczywistej kolejności (zgodnej z n u m e ­ r e m w y g r a w e r o w a n y m na o b u d o w i e ) . Ostatnie dwie cyfry zawierają identyfi­ kator r o d z i n y . D o w y ś w i e t l a n i a danych wykorzystano standardowe funkcje biblioteczne: u t o a - zamieniająca liczbę całkowitą, w tym przypadku szesnastkową na znaki A S C I I o r a z t o u p p e r , która zamienia małe litery na wiel­ kie. O b e c n o ś ć pastylki j e s t d o d a t k o w o sygnalizowana zapaleniem

diody

L E D 1 . P r o g r a m w y k r y w a brak pastylki w czytniku, zwarcie linii interfejsu, przyłożenie pastylki i błąd odczytu. P r o g r a m realizujący przedstawione zadanie znajduje się n a listingu 14.10. Należy

skompilować

p r o g r a m cwicz9.c

z z e s t a w u Z L 1 A V R plikiem w y n i k o w y m

i zaprogramować

mikrokontroler

cwicz9.hex.

Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, zworka J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • z w o r k a J P 1 rozwarta - globalne wyłączenie diod L E D , " z w o r k a J P 5 całkowicie rozłączona, • zworki Z W _ P O R T B zwarte w pozycjach 1-2, 3-4, 5-6, 7 - 8 , 9-10, 11-12, • z w o r k a J P 1 4 zwarta, • d o łączówki J P 1 1 dołączone p r z e w o d y czytnika układu D S 1 9 9 0 A (masa na g ó m y m styku), • p o ł o ż e n i e pozostałych z w o r e k nieistotne (np. rozłączone).

List 14.10. Program do ćwiczenia 9 | t ł ł t H ł ł ) : * ł t « « m ł « t * ł ł ł ł t l H ł t ł H i l t t f ł ł « t H i l i t ł > l l H I * l r * * « t t * * « ł * ł » ł t * * y

/* Ćwiczenie 9 - Obsługa interfejsu 1-Wire - odczyt pastylki /* O b s ł u g a wyświetlacza LCD 2x16 /* J.D. '2003 /»*«******»*«*»*»*****»»»»*******. ************************************* ttinciude ttinciude ttinciude ttinciude tt include

DS1990A

*/ */ */ f



// Poniższe definicje służą typedef struct _bit_struct

do

realizacji

wygodnego

dostępu

bitowego

{ unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char }pole_bitowe; ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine ttdefine

bitO: bitl bit2 bit3 bit4 bit5 bit6 bit?

DAJ„BIT(adr) (*((volatile pole_bitowe*t _PORTB 0x38 _PINB 0x36 „ P O R T D 0x32 _DDRD 0x31 _ P I N D 0x30 pastylka_we DAJ_BIT(_PIND),bit3 pastylka_wy DAJ_BIT(_DDRD) -bit3 lcd_rs DAJ_BIT(_PORTB),bit2 lcd_e DAJ_BTT(_PORTB}.bit3 ledO DAJ_BlT(_PORTB).bitO

ttdefine stan_0

1

ttdefine stan_l

0

ttdefine CR

(adr)))

//definicja stanu niskiego na linii 1-Wire / / " l " oznacza p r z e ł ą c z e n i e portu w tryb //wyjściowy //port jest wcześniej wysterowany w stan //niski //definicja stanu w y s o k i e g o na linii 1-Wire / / " 0 " oznacza przełączenie portu w tryb //wejściowy //stan wysoki jest wymuszany przez zewnętrzny //rezystor podciągający //znak CR (przejście do nowej linii)

0xOa

char b u f l c d [ 4 ] ; char *pbuflcd; unsigned char buforlwfS] unsigned char 'pbuforlw; unsigned char w i e r s z = 0 ; unsigned char kolumna=0;

//roboczy bufor wyświetlacza LCD //wskaźnik na bufor wyświetlacza //bufor interfejsu 1-Wire (dane z pastylki} //wskaźnik na bufor danych z pastylki //pozycja umieszczenia znaku na LCD //pozycja umieszczenia znaku na LCD

void

zt)

czekaj(unsigned

{ ttdefine tau 10.38 unsigned char ztl;

long

//funkcja

opóźnienia

ior(;zt>0;zt--) i

for(zt1 = 255;ztl!=0;ztl - - ) ; }

)

/ / » » » » » » Procedury obsługi wyświetlacza LCD « « « « « « < « void piszilcdtunsigned char instr) //zapisz instrukcje sterującą do LCD i

lcd_rs=0; lcd_e=l; pORTB={PORTB&0x0f) | (inst;c&0xi0) ; //przygotuj starszy półbajt do LCD asmj"nop") asm("nop"J asm("nop") lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD ok. lOOus lcd_e=l; PORTB^={PORTBS.OxOf) I ( { ins t rŁ0x0f) «A) ; //przygotuj młodszy półbajt do LCD asm("nop") asm("nop"} asm{"nop") lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD ok. lOOus }

void piszdlcdlchar dana) //zapisz daną do LCD { lcd_rs=l; lcd_e=l; PORTB=(PORTBS0x0f)I(dana&0xf0); //przygotuj starszy półbajt do LCD asm('nop' asm("nop") asm("nop">. lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD lcd_e=l; PORTBn(PORTB&0x0f)I((dana&0xO£) « 4 ) ; _ //przygotuj młodszy półbajt do LCD asm("nop") asm("nop") asm{"nop"). lcd_e=0; //impuls strobujący czekaj(10L); //czekaj na gotowość LCD )

void czysclcdWoid) l

piszilcd{0x01); czekaj(1.64*tauł; wiersz=0; kolumna=0;

//czyść ekran //polecenie czyszczenia ekranu dla //kontrolera LCD //rozkaz 0x01 wykonuje się 1.64ms

}

void lcdxy (unsigned char w, unsigned char k) //ustaw współrzędne kursora V i i r t [ n r f l

piszLlcd((w*0x40+k)10x80) }

void piszznak(char znak) < piszdlcdłznak);

//standardowy rozkaz sterownika LCD //ustawiający kursor w określonych //współrzędnych //procedura umieszcza znak na wyświetlaczu //wyświetl znak na LCD

(

void pisztekst(char *tekst)

//pisz tekst na LCD wskazywany przez //•tekst

t char zn,char nr=0; while(1) { zn=PRG_RDB(Łtekst(nr++]) ; //pobranie znaku z pamięci programu //czy nie ma końca tekstu? i£(zn!=0) ( //czy 2nak nowej linii if (zn==CR} { wiersz==l?wiersz=0: + +wiersz,//przejdź do nowej linii kolumna=0; //ustaw obowiązujące po zmianie lcdxy(wiersz,kolumna) //współrzędne na LCD ł

else ( piszdlcd(zn);

//umieść pojedynczy znak tekstu na LCD

I

} else { break;

//zakończ pętlę, jeśli koniec tekstu

} } )

//»»»>»» Procedury obsługi interfejsu 1-Wire ««•> lcd_rs=0; czekaj(45*tau);

Inicjowanie wyświetlacza

for(i=0;i0x2i)

//wyłącz przerwania, aby nie naczytać danych //włącz mruganie //odczytaj czas z RTC (tylko godz, min, sekł //ustaw wskaźnik bufora I2C na minuty //sekundy będą zawsze zerowane //pobierz minuty //pobierz godziny

//czekaj na naciśnięcie SW4 wykonując //poniższe instrukcje ustawianie godzin //czy naciśnięto SW1? //inkrementuj godziny

//korekcja dziesiętna liczby BCD

i godzi=0xc0;

//kasuj godziny po przekroczeniu

zakresu

)

bufI2C[2]=[bu£I2C[2}&0xc0)Igodz; //zapisz uaktualnione godziny w buforze 12C //pozostawiając bity 24/12 i AM/PM //nienaruszone wyswietlczas () ,• czekaj (150*tau);

lcdxy(1,4); zwolnij klaw(); //czekaj na naciśnięcie SW4 wykonując //poniższe instrukcje //ustawianie minut

while(sw4) {

lcdxy(1,4); if(!swl) { min++; if((mini0x0f}>9) ( min+=0x06; )

//czy naciśnięto SW1? //inkrementuj minuty

//korekcja dziesiętna liczby BCD //korekcja przekroczenia wartości S9

if(min>0x59) { min=0;

//przeniesienia na godziny nie ma, bo są one //ustawiane niezależnie

>

bufI2C[l]=min; wyswietlczas O ; czekaj(150*tau);

//zapisz uaktualnione minuty w buforze I2C

} )

piszilcd(0xOc); lcdxy(l,8); pisztekst(kom[01); zwolnijklawf); while(swl&sw4); i f(!sw4) ( doI2C(rtc,2,3); bufI2C(0]=0; doI2C(rtc,0,l);

//wyłącz mruganie //wyświetl komunikat

"START"

//czekaj na naciśnięcie jakiegoś klawisza //po naciśnięciu klawisza SW4... //...zapisz ustawienia zegara //start zegara

1 //włącz przerwania

sei();

int main(void) ( unsigned char i,zp;

//program główny

//tablica komunikatów do wyświetlenia char *info[4]=( PSTRCUstaw zegar •*), PSTR("Blad I2C "), PSTR("RTC - PCF8583 ") , PSTR("ZL1AVR - plytka\newaluacyjna AVR") >;

DDRB=0xf f; PORTBI=0x02; DDRD=OxO0; PORTD=Qx07; scl_wy=stan_0; fzegar=0; //>>>>>>>>>>»>>>> lcd__rs=0; czekaj (45"tau);

//PORTB - wy //zapal LED1, zgaś LED2 //PORTD - we //podciąganie linii PDO, PDI i PD2 //SCL=0

Inicjowanie wyświetlacza LCD

« « « « « « « « « «

//opóźnienie ok. 45 ms dla ustabilizowania //się napięcia zasilania LCD //(katalogowo min. 15 ms) //3-krotne wysłanie 3-

for(i=Q;i R S 2 3 2 oraz U S B < - > R S 4 2 2 / R S 4 8 5 , w interfejsach służących d o łą­ czenia systemów m i k r o p r o c e s o r o w y c h z urządzeniami z e w n ę t r z n y m i poprzez U S B itp. N a stronie p r o d u c e n t a są dostępne bezpłatne sterowniki dla syste­ m ó w operacyjnych W i n d o w s 9 8 , W i n d o w s 98 SE, W i n d o w s 2 0 0 0 / M E / X P , M A C O S - 8 i O S - 9 , L i n u x 2.40 i późniejsze. Sterowniki te pozwalają na pisa­ nie własnych p r o c e d u r komunikacyjnych w sposób identyczny j a k w przy­ padku urządzeń transmitujących dane za p o ś r e d n i c t w e m interfejsu R S 2 3 2 . D o łączności od strony k o m p u t e r a m o ż n a również stosować t y p o w e progra­ m y terminalowe n p . o k i e n k o w y H y p e r T e r m i n a l . Rozwiązanie takie wydaje się b y ć najprostszą

metodą realizacji transmisji z w y k o r z y s t a n i e m

portu

U S B . Bardziej z a a w a n s o w a n i programiści m o g ą sięgać p o sterowniki D 2 X X (USB Direct

Drivers

+ DLL S/W łnterface).

Są o n e dostępne d l a W i n d o w s

9 8 , W i n d o w s 9 8 S E , W i n d o w s 2 0 0 0 / M e / X P . Dużą zaletą u k ł a d ó w F T 8 U 2 3 2 jest m o ż l i w o ś ć p r a w i e d o w o l n e g o dobierania prędkości transmisji, byle tylko była o n a taka s a m a p o stronie n a d a w c z e j , j a k i odbiorczej. C e l e m ćwiczenia 1 1 . j e s t pokazanie, j a k w praktyce m o ż n a dołączyć w ł a s n e urządzenie d o k o m p u t e r a P C poprzez port U S B i z a d e m o n s t r o w a n i e przykła­ d o w e g o p r o g r a m u realizującego transmisję danych w obu kierunkach. D o re­ alizacji tego zamierzenia w y k o r z y s t a n o gotowy interfejs opisany w Elektro­ nice Praktycznej 5 / 2 0 0 3 . W y g l ą d tego modułu p o k a z a n o na f o t o g r a f i i 14.40, j e g o schemat elektryczny przedstawiono n a r y s u n k u 1 4 . 4 1 , a na r y s u n k u 14.42 p o k a z a n o sposób dołączenia g o d o płytki Z L 1 A V R .

j

P o dołączeniu modułu U S B d o płytki

£

Z L 1 A V R oraz k o m p u t e r a P C (za p o m o ­ cą t y p o w e g o kabla U S B ) należy zasilić

^

zestaw i włączyć k o m p u t e r . Przy pierw­ szym

uruchomieniu

system

Windows

p o w i n i e n a u t o m a t y c z n i e rozpoznać no­ w e urządzenie i z a p r o p o n o w a ć zainstało-

Fot. 14.40. Wygląd interfejsu

wanie sterowników.

USBRS232

(771)

S2C4Ł.

wc-i Ov

-2-

GIC

CS 16V Ul

Fmzsm EESK tŁUATA VCC1 RESET WSTOUT 3V30UT US8DP USTOM GNDt SLEEP RXL£D TXLEO VCCIO

pwncrt

PWREN TXD£N

EECS TEST AVCC AGNO JCTOUT )CT1N VCO TXD fan RTS CTS DTR

Dsn

OCO

«

GNOZ

Rys. 14.41. Schemat elektryczny uniwersalnego modułu interfejsowego USB

Rys. 14.42. Sposób dołączenia uniwersalnego modułu interfejsowego USB do płytki ZL1AVR i komputera PC

N a l e ż y j e wcześniej s k o p i o w a ć na dyskietkę lub C D - R O M , m o ż n a j e także wgrać na d y s k twardy k o m p u t e r a d o d o w o l n e g o katalogu. Procedura instala­ cji przebiega niemal automatycznie, w standardowy dla W i n d o w s sposób (został on s z c z e g ó ł o w o opisany w Elektronice Praktycznej 10/2002, wybrane fragmenty tego artykułu znajdują się w dodatku F). P o zainstalowaniu sterowników w w i n d o w s o w y m M e n e d ż e r z e urządzeń p o ­ j a w i a się n o w y port szeregowy C O M z kolejnym (następnym po dotychczas w i d z i a n y c h przez system) n u m e r e m , który w razie konieczności można ręcz­ nie z m i e n i ć .

Port t e n m o ż n a skonfigurować w identyczny sposób, j a k w p r z y p a d k u HyperTerminala z ćwiczenia 8. ( r y s u n e k 14.22) - czyli 3 8 4 0 0 , n , 8 , l . O d tej chwili urządzenia dołączone d o portu U S B k o m p u t e r a będą dostępne p o p r z e z wirtu­ alny port szeregowy.

Sterowniki dla układu F T 8 U 2 3 2 B M są dostępne n a stronie in­ ternetowej producenta, p o d adresem: FTDriver.htm.

http://www.ftdichip.com/

Opis ich instalacji znajduje się w d o d a t k u F .

Demonstracja działania m o d u ł u będzie polegała n a przesłaniu b l o k u danych 0 wielkości 128 k B z zestawu Z L 1 A V R d o komputera P C , a następnie przej­ ściu n a odbiór danych. W t y m trybie znaki w y s t u k i w a n e n a klawiaturze k o m ­ putera będą - za p o m o c ą programu HyperTerminal - p r z e s y ł a n e d o m i k r o ­ kontrolera n a płytce Z L 1 A V R i wyświetlane n a wyświetlaczu L C D . D o o b ­ sługi wyświetlacza zostały wykorzystane procedury z poprzednich ćwiczeń. Nieznacznej zmianie w zakresie interpretacji z n a k ó w L F i C R uległ funkcja pisztekst. D o obsługi nadajnika i odbiornika U A R T - u przewidziano 3 2 - e l e m e n t o w y b u ­ for f i f o s i o [32]. Rozwiązanie takie było m o ż l i w e , dzięki założeniu simpleksowej (jednokierunkowej) transmisji. D o tego bufora są więc „ w k ł a d a n e " znaki odebrane przez U A R T , a także pobierane są z niego dane d o wysłania. G d y b y zaistniała konieczność prowadzenia j e d n o c z e s n e g o n a d a w a n i a i o d ­ bioru, bufor taki p o w i n i e n zostać z d u b l o w a n y (oddzielny dla nadajnika, o d ­ dzielny dla odbiornika), f i f o s i o

to bufor cykliczny. D a n e są d o niego

w k ł a d a n e począwszy od elementu o indeksie 0, aż d o elementu o indeksie 3 1 . P o zapisaniu danej p o d a d r e s e m 31 następna d a n a będzie p o n o w n i e zapisana na pozycję 0 itd. P o d o b n i e dzieje się z pobieraniem danych. Operacje wkła­ dania i pobierania e l e m e n t ó w d o / z bufora odbywają się niezależnie, w dodat­ ku w d w ó c h zupełnie różnych częściach programu - w s e g m e n c i e g ł ó w n y m 1 w procedurach obsługi p r z e r w a ń U A R T - u . N a d prawidłowością zapisu i o d ­ czytu bufora czuwają z m i e n n e i z f i f o s i o

(indeks zapisu

fifosio),

iofifosio (indeks odczytu f i f o s i o ) oraz z m i e n n a ldanych zliczająca aktualnie wpisaną liczbę danych d o bufora. W a r t o ś ć ldanych nigdy nie m o ­ że przekroczyć wielkości bufora, czyli wartości 3 2 . Przed z a p i s a n i e m danej j e s t sprawdzany o d p o w i e d n i w a r u n e k i program zapętla się w oczekiwaniu n a zwolnienie operacja

miejsca

w buforze

while (ldanych==32);.

na fifosio powoduje

inkrementację

Każdorazowa

odpowiedniego

indeksu.

Z u w a g i n a wielkość bufora działanie to musi b y ć w y k o n y w a n e m o d u l o 3 2 .

P r z y k ł a d o w o instrukcja inkrementowania indeksu zapisu d o bufora s i o w y g l ą d a następująco:

fifo­

izfifosio^=31?izfifosio=0:++izfifosio; Jest to m o ż e m a ł o czytelny zapis, ale za t o bardzo zwięzły. Oznacza tyle, ż e s p r a w d z a n y j e s t w a r u n e k , czy i z f i f o s i o

jest r ó w n e 3 1 . Jeśli tak, t o

z m i e n n a ta j e s t n a s t ę p n i e zerowana, jeśli nie, to zwiększana o j e d e n . W y k o ­ rzystanie bufora p o z w a l a poprawić płynność transmisji. Jeśli g e n e r o w a n i e danych d o wysłania przebiega nierównomiernie w czasie, to - gdyby nie b y ł o bufora - m o g ł y b y się t w o r z y ć przerwy w nadawaniu zmniejszające efektyw­ ną p r ę d k o ś ć transmisji. Bufor pozwala wysyłać dane w chwilach oczekiwania na kolejne. Jeśli g e n e r o w a n i e danych przebiega szybciej niż ich nadawanie, t o d o s t a r c z a n i e danych j e s t w s t r z y m y w a n e w m o m e n c i e całkowitego zapeł­ nienia bufora, czyli gdy liczba danych w buforze osiągnie wartość 32. Osiąg­ nięcie i n d e k s u 31 nie o z n a c z a przepełnienia bufora. Najczęściej b ę d z i e m y mieli w ó w c z a s sytuację taką, że bufor szybko zostanie zapełniony, a następ­ nie d a n e będą na przemian dokładane i pobierane z szybkością na jaką p o ­ z w a l a transmisja. P i e r w s z a część p r o g r a m u , to wysłanie do komputera bloku danych o rozmia­ rze 128 k B . D a n e , to powtarzające się znaki A S C I I w kolejności od spacji d o litery „ Z " . P r z y przyjętej prędkości transmisji cały blok powinien b y ć wysła­ ny w ciągu ok. 3 4 sekund. W tym miejscu warto z a u w a ż y ć , że wykorzysty­ w a n i e p o r t u U S B d o przesyłania niewielkich paczek d a n y c h nie tylko m o ż e nie spełnić o c z e k i w a ń c o d o u z y s k i w a n e g o transferu, ale w pewnych sytua­ cjach m o ż e d a ć gorsze wyniki niż n p . wykorzystanie portu szeregowego. P o ­ w o d e m j e s t d o ś ć r o z b u d o w a n y protokół transmisji U S B , który sprawia, że n p . przy wysyłaniu j e d n e g o bajtu przez łącze przechodzi d u ż o więcej danych (nagłówki, s p o r o czasu zabiera negocjacja połączenia U S B itp.). P o z a k o ń c z e n i u transmisji na wyświetlaczu pojawia się k o m u n i k a t zachęcają­ cy t y m r a z e m d o przesyłania danych z k o m p u t e r a P C d o zestawu. Jeśli będą t o z n a ł a w y s y ł a n e z klawiatury, to zostaną natychmiast wyświetlone na w y ­ świetlaczu. Jeśli natomiast prześlemy plik tekstowy, to niestety z a u w a ż y m y , że n a s z s y s t e m nie nadąża z obsługą transmisji, która przebiega dużo szybciej niż p r ę d k o ś ć wyświetlania z n a k ó w na L C D . Zaobserwujemy tu działanie bu­ fora, objawiające się p r a w i d ł o w y m wyświetleniem 32 z n a k ó w , p o c z y m k o ­ lejne d a n e będą n a d p i s y w a n e przez następne. P o w o d e m j e s t brak kontroli p r z e p ł y w u transmisji. Mikrokontroler na płytce Z L 1 A V R nie m o ż e w żaden s p o s ó b p o w s t r z y m a ć nadajnika komputera.

Jeśli przyjrzymy się p o n i ż s z e m u p r o g r a m o w i , t o z a u w a ż y m y b e z trudu, że nie m a t a m nawet j e d n e g o rozkazu, który związany by był z protokołem U S B . Cały p r o g r a m j e s t napisany tak, j a k b y był pisany dla połączenia za po­ mocą R S 2 3 2 . M o ż n a się o t y m łatwo się przekonać odłączając m o d u ł U S B , zwierając zworki JR2 i J P 3 oraz łącząc płytkę Z L 1 A V R z k o m p u t e r e m p o ­ przez port szeregowy C O M . M o ż n a też w y k o n a ć e k s p e r y m e n t w drugą stro­ n ę . W t y m celu trzeba się cofnąć d o ćwiczenia 8. Płytkę skonfigurować zgod­ nie z opisem d o tego ćwiczenia, z tą różnicą że zamiast kabla R S 2 3 2 dołącza­ m y moduł U S B . W ten s p o s ó b uzyskujemy możliwość regulacji obrotów sil­ nika z k o m p u t e r a P C p o p r z e z port U S B . D o w y k o n a n i a ć w i c z e n i a konieczne jest dołączenie d o zestawu m o d u ł u inter­ fejsowego U S B . S c h e m a t ilustrujący sposób przyłączenia p o k a z a n o na r y ­ s u n k u 14.42. P r o g r a m realizujący przedstawione zadanie znajduje się na lis­ t i n g u 14.12. P r o g r a m cwiczl l.c należy s k o m p i l o w a ć i z a p r o g r a m o w a ć mik­ rokontroler z zestawu Z L 1 A V R plikiem w y n i k o w y m

cwiczllhex.

Konfiguracja płytki Z L 1 A V R : • z w o r k a J 3 w pozycji 1-2, z w o r k a J 4 w pozycji 2-3 - dołączony oscylator wewnętrzny, • zworki Z W _ P O R T B z w a r t e w pozycjach 1-2, 3-4, 5-6, 7 - 8 , 9-10, 11-12, • zworki J P 6 i J P 7 rozłączone, • zworki J P 2 i J P 3 rozłączone, b ę d z i e d o nich dołączony k a b e l k a m i m o d u ł USB, • położenie pozostałych z w o r e k nieistotne (np. rozłączone), • w ł o ż o n y wyświetlacz alfanumeryczny 16x2 d o gniazda L C D 1 . Ust. 14.12. Program do ćwiczenia 11

/* /* /* J.D.

poprzez port USB Nadawanie i odbiór poprzez UART z użyciem

*/ */ przerwań*/

-2003

#include tfinclude 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

) )

Suggest Documents