You are on page 1of 63

Katedra Optoelektroniki i Systemw Elektronicznych Wydzia Elektroniki, Telekomunikacji i Informatyki Politechniki Gdaskiej

LABORATORIUM MIKROSTEROWNIKI I MIKROSYSTEMY ROZPROSZONE

Dokumentacja mikrokontrolera Atmega16 firmy Atmel

Gdask 2008

Charakterystyka mikrokontrolera ATMega16

Rys. 1. Schemat blokowy mikrokontrolera ATMega16

1. Cechy i parametry mikrokontrolera ATMega16: Wysokowydajna architektura AVR. RISC, 131 instrukcji (wikszo 1 cyklowe), nastawione na jzyk C, mnoenie 3 cyklowe.

16kB pamici flash programowanej w systemie (ISP) z funkcj Read-While-Write, trwao do 10k cykli kasuj/zapisz. 32 x8 rejestry robocze. 1kB pamici SRAM. 512 pamici EEPROM (100k cykli). Programowalne blokady bezpieczestwa pamici programu i eeprom. do 32 konfigurowalnych linii I/O. Interfejs JTAG (IEEE 1149.1): testowanie, debudowanie w ukadzie, programowanie pamici w systemie. Trzy elastyczne timery/liczniki z trybami porwnania (Input/Output Compare). Wewntrzne i zewntrzne programowalne przerwania. Szeregowy interfejs USART (praca synchroniczna i asynchroniczna). Interfejsy szeregowe TWI (kompatybilny z I2C) oraz SPI. 8kanaowy 10bitowy przetwornik ADC, z opcjonalnym trybem wejcia rnicowego wraz z programowalnym wzmocnieniem (tylko w wersji TQFP). Analogowy komparator w ukadzie. Programowalny Watchdog z wasnym oddzielnym oscylatorem . Ukad Power-On Reset (zapewnienie prawidowego resetu po wczeniu zasilania). Wewntrzny programowany generator RC (1, 2, 4 lub 8MHz), ktry pozwala w wielu przypadkach zrezygnowa z podczania zewntrznego kwarcu. Programowalny prg spadku napicia zasilania (Brown-out detection). 6 trybw oszczdzania energii. Zakresy napi zasilania: 2,7 5,5 V dla ATMega16L, 4,5 5,5 V dla ATMega16. Dopuszczalna szybko pracy: 0 8 MHz dla ATMega16L, 0 16 MHz dla ATMega16. Pobr mocy dla 3V przy 1MHz: W stanie aktywnej pracy: 1,1mA, Tryb Idle: 0,35mA, Tryb Power-down: poniej 1uA. Wersje obudowy: 40pin PDIP, 44pin TQFP, 44pad MLF.

Technologia Flash ISP pozwala na przeprogramowywanie pamici w systemie poprzez szeregowy interfejs ISP, z wykorzystaniem konwencjonalnych programatorw, magistral JTAG, a take przez program botujcy1 pracujcy w samym ukadzie. Program botujcy moe wykorzystywa dowolny rodzaj interfejsu, aby zaadowa waciwy program do pamici

Program botujcy podstawowa cz programu uruchamiajca system, przed programem waciwym

aplikacji. Program z sekcji botujcej kontynuuje swoj prac podczas programowania czci aplikacyjnej, na co pozwala technika rzeczywistego Write-While-Read. Poczone moliwoci 8-bitowej jednostki obliczeniowej RISC, programowania w systemie oraz samoreprogramowaniem pamici flash w jednym ukadzie, pozwala na zastosowanie tego mikrokontrolera w elastycznych funkcjonalnie i oszczdnych cenowo rozwizaniach, w wymagajcych kontroli dziaania aplikacjach wbudowanych (ang. embeded).

Rys. 2. Opis wyprowadze mikrokontrolera ATMega16 w obudowie DIP40

2. Zarys budowy rdzenia AVR Gwnym zadaniem rdzenia CPU (centralnej jednostki liczcej) jest zapewnienie poprawnego i szybkiego wykonywania kodu. Z tego powodu CPU musi mie dostp do pamici, musi wykonywa operacje, sterowa ukadami peryferyjnymi i obsugiwa przerwania. Dla uzyskania maksymalnej wydajnoci AVR zbudowany jest w oparciu o architektur harwardzk z rozdzielonymi pamiciami i szynami dla programu i danych. Instrukcje w pamici programu wykonywane s potokowo. Podczas gdy jedna instrukcja jest wykonywana, nastpna jest ju pobierana z pamici programu. Dziki takiemu rozwizaniu, moliwe jest wykonywanie caej instrukcji w kadym cyklu zegara. Blok szybkiego dostpu zawiera 32 rejestry robocze o jednocyklowym czasie dostpu. To pozwala aby jednostka ALU (arytmetyczno logiczna) rwnie moga pracowa w jednym cyklu. W typowej operacji, dwa argumenty ALU s wystawiane z bloku rejestrw, wykonywana jest operacja, a wynik jest powrotem umieszczany w bloku rejestrw, i to wszystko w jednym cyklu zegara.

Rys. 3. Schemat blokowy architektury AVR Sze spord 32 rejestrw roboczych moe by uywane jako trzy 16-bitowe rejestry wskanikowe (X, Y, Z) w trybie adresowania poredniego. Daje to moliwo wykonywania szybkich przelicze danych. Jeden z tych trzech wskanikw adresu (Z) moe by uyty jako wskanik adresu w tzw. lookup tables w pamici flash programu. Jednostka ALU umoliwia wykonywanie operacji arytmetycznych i logicznych midzy rejestrami, miedzy sta a rejestrem, oraz take operacji na pojedynczym rejestrze. Po wykonaniu operacji uaktualniany jest rejestr statusowy dajcy informacje o rezultacie. Dziaanie programu jest moliwe dziki warunkowym i bezwarunkowym skokom i instrukcjom rozgaziajcym, dajcym bezporedni dostp do caej przestrzeni adresowej. Wiksza cz instrukcji AVR ma format pojedynczego 16-bitowego sowa. Kady adres pamici programu zawiera 16 lub 32-bitow instrukcj. Pami programu moe by podzielona na dwie sekcje: sekcj programu botujcego, oraz sekcj programu aplikacji. Obie czci maj indywidualne bity bezpieczestwa (Lock bits) do zabezpieczenia przed odczytem i nadpisaniem zawartoci (np. przez programator). Program sekcji botujcej moe suy np. do aktualizacji oprogramowania systemu, gdy tylko z tej czci pamici programu moe by wykonywana instrukcja SPM nadpisujca pami flash aplikacji. Podczas przerwa i wywoa procedur podrzdnych adres powrotny licznika programu jest przechowywany w pamici stosu. Stos zajmuje obszar pamici SRAM, wic jego rozmiar jest ograniczony wielkoci tej pamici. Kady program musi zainicjalizowa wskanik stosu SP w procedurze obsugi resetu, zanim zostanie wywoana obsuga przerwania czy podprocedura.

Modu przerwa ma swoje rejestry kontrolne w przestrzeni I/O z dodatkowym globalnym bitem odblokowujcym przerwania w rejestrze statusowym SREG (opisany dalej). Wszystkie przerwania maj osobny wektor przerwania w tablicy wektorw przerwa. Przerwania maj priorytet zaleny od pozycji wektora. Im niszy adres wektora przerwa, tym wyszy jest priorytet dla danego przerwania. Rejestr SREG Rejestr statusowy SREG zawiera informacje o rezultacie ostatnio wykonywanej operacji arytmetycznej. Informacja ta moe by uyta przez instrukcje warunkowe sprawdzajce stan wyniku poprzedniej operacji. Rejestr statusowy jest aktualizowany przez operacje wykonane przez ALU. Nie zawsze musi by zmieniana caa zawarto SREG. Zalenie od instrukcji, moe to by np. tylko jeden bit. Dziki wykorzystaniu tych waciwoci moliwe jest tworzenie bardziej zoptymalizowanego kodu pod wzgldem szybkoci i objtoci. (jak zmieniane s flagi, patrz Opis instrukcji). Zawarto rejestru SREG nie jest automatycznie zapamitywana przy wejciu w kod obsugi przerwania i odzyskiwana po jego wykonaniu. Naley to wykonywa programowo.
Rejestr SREG Bit Dostp Warto pocztkowa

7 I R/W 0

6 T R/W 0

5 H R/W 0

4 S R/W 0

3 V R/W 0

2 N R/W 0

1 Z R/W 0

0 C R/W 0

I-

T-

H-

SVN-

Globalne odblokowanie przerwa. Flaga globalnych przerwa musi zosta by ustawiona aby odblokowa przerwania. Kontrola indywidualnych przerwa jest realizowana w osobnych rejestrach kontrolnych. Jeli globalna flaga I jest wykasowana (rwna 0) to adne z przerwa nie nastpi, pomimo i mog by niezalenie odblokowane. Bit I jest automatycznie kasowany po wystpieniu przerwania i z powrotem ustawiany instrukcj RETI aby umoliwi wystpienie kolejnym przerwaniom. Globalny bit przerwa moe by te zmieniany programowo instrukcjami SEI oraz CLI. Przechowanie kopiowanego bitu. Instrukcje kopiowania bitu BLD i BST uywaj T jako bit rdowy lub docelowy do operacji bitowej. Flaga przeniesienia powkowego (half carry). Flaga H pojawia si w wyniku niektrych operacji arytmetycznych (gdy nastpi przeniesienie na 4 bit). Uyteczna w arytmetyce BCD. Bit znaku S = N V. Warto bitu S jest zawsze rwny operacji XOR midzy bitami V oraz N. Flaga przepenienia uzupenienia do dwch. Flaga wpierajca arytmetyk uzupenienia do dwch. Flaga wyniku ujemnego. 5

Z-

C-

Flaga N pojawia si w wyniku ujemnego wyniku operacji arytmetycznej lub logicznej. Flaga zera. Flaga Z pojawia si, gdy w wyniku operacji arytmetycznej lub logicznej wynikiem jest warto zero. Flaga przeniesienia. Flaga przeniesienia C (carry) pojawia si gdy w wyniku operacji arytmetycznej lub logicznej nastpio przeniesienie.

3. rda resetu W mikrokontrolerze ATMega16 istnieje pi rde resetu: Power-on Reset. Reset zewntrzny. Watchdog reset. Brown-out reset. JTAG AVR reset. Podczas resetu, wszystkie rejestry I/O s ustawiane na ich wartoci pocztkowe a program rozpoczyna dziaanie od wektora resetu. Jeli przerwania w ukadzie zostay wczone (np. instrukcj SEI), wwczas pod adresem 0x0000 powinna zale si instrukcja JMP do procedury obsugi resetu. Jeli program nigdy nie uywa przerwa, to od tego adresu moe zacz si normalny program. Odczytujc stan bitw rejestru MCUCSR mona okreli, ktre ze rde resetu spowodowao reset mikrokontrolera. Power-on Reset Mikrokontroler jest resetowany, gdy poziom napicia zasilajcego znajdzie si poniej progu Power-on (VPOT). Ukad Power-on Reset ogranicza konieczno stosowania zewntrznych specjalizowanych ukadw zapewniajcych poprawne uruchomienie mikrokontrolera, czyli przytrzymujce stan resetu (tutaj niski) przez okrelon chwil czasu po podczeniu zasilania do mikrokontrolera. Wbudowany Power-On Reset generuje wewntrzny impuls resetu o wymaganej dugoci. Takie rozwizanie pozwala na bezporednie poczenie napicia zasilajcego mikrokontrolera VCC do pinu . Dodatkowe ukady mog jednak przeduy czas uruchamiania. Reset zewntrzny Zewntrzny reset jest powodowany przez pojawienie si niskiego poziomu na pinie . Reset mikrokontrolera nastpi, gdy impuls resetujcy bdzie trwa przynajmniej 1,5 s.

Watchdog reset Ukad Watchdog suy wykluczeniu moliwoci zawieszania si mikrokontrolera, np. na skutek zaistniaych zakce w systemie czy poprzez wykonywanie nieskoczonych niepodanych ptli programu. Jeli wczony licznik watchdoga nie zostanie w okrelonym czasie wyzerowany, nastpi wygenerowanie impulsu resetujcego mikrokontroler. Taktowanie odbywa si poprzez niezaleny wbudowany oscylator o czstotliwoci pracy ok. 1MHz. Wczanie i konfigurowanie watchdoga odbywa si przez rejestr WDTCR.
Rejestr WDTCR Bit Dostp Warto pocztkowa

7 R 0

6 R 0

5 R 0

4 WDTOE R/W 0

3 WDE R/W 0

2 WDP2 R/W 0

1 WDP1 R/W 0

0 WDP0 R/W 0

WDTOE -

WDE -

WDP2:0 -

Bit odblokowania wyczania watchdoga. Ustawienie tego bitu na 1, tu przed wpisaniem do WDE wartoci 0, pozwala wyczy watchdog'a. Bit wczania watchdoga. Wpisanie logicznej jedynki do bitu WDE powoduje wczenie watchdoga, natomiast wpisanie 0 go wycza. Aby wyczy watchdoga, wczeniej bit WDTOE musi by ustawiony na 1, albo oba te bity zapisa rwnoczenie. Bity preskalera licznika watchdoga. Za pomoc tych bitw dobierany jest czas, jaki upywa od zerowania watchdoga do wygenerowania przez niego impulsu resetujcego. Czas mona dobiera w zakresie od ok. 16ms (stan 000) do ok. 2,2s (stan 111).

Brown-out reset Reset mikrokontrolera nastpuje, kiedy poziom napicia zasilajcego VCC spadnie poniej zaprogramowanego progu detektora Brown-out (VBOT) i jeli ten detektor jest wczony. Funkcj t konfiguruje si za pomoc bitw bezpiecznikowych (fuse BODEN). JTAG AVR reset Mikrokontroler pozostaje tak dugo w stanie Resetu, jak dugo znajdowa si bdzie logiczna jedynka w rejestrze resetu (Reset Register), ktry jest czci systemu JTAG.

4. Porty I/O Wszystkie porty mikrokontrolerw AVR posiadaj moliwo pracy jako cyfrowe porty wejcia/wyjcia. Pojedynczemu pinowi mona zmieni kierunek pracy instrukcjami do zmian stanu bitw CBI i SBI.

Sterownik kadego pinu moe dostarczy wystarczajc ilo mocy na bezporednie wysterowanie diody LED. Wydajno prdowa kadego z pinw siga 20mA w stanie niskim. Wszystkie piny kadego z portw posiadaj moliwo wczenia indywidualnie rezystora podcigajcego do napicia zasilania (pull-up). Kady z portw ma cile z nim zwizane 3 rejestry konfiguracyjne. S to: rejestr danych PORTx, rejestr kierunkowy DDRx oraz port pinw wejciowych PINx. Dodatkowo ustawieniem jednego bitu PUD w rejestrze SFIOR mona wyczy wszystkie rezystory pull-up we wszystkich portach jednoczenie. Wikszo pinw posiada wicej ni jedn funkcj, do obsugi ukadw zintegrowanych w mikrokontrolerze. Uaktywnienie funkcji alternatywnej wybranym pinom portu nie blokuje pozostaym moliwoci pracy jako cyfrowe piny I/O. Konfigurowanie cyfrowych portw I/O Bity DDxn w rejestrze DDRx okrelaj kierunek pracy pinu. Wpisana tam warto 1 powoduje prac pinu Pxn jako wyjciowy, 0 jako wejciowy. Wpisanie 1 do PORTxn podczas, gdy pin skonfigurowany jest jako wejcie, powoduje wczenie rezystora pull-up. Warto 0 spowoduje jego wyczenie. Skonfigurowanie pinu jako wyjcie automatycznie odczy rezystor pull-up. W czasie stanu resetu mikrokontrolera lub gdy nie pracuje zegar, piny s w trjstanowe. Wpisanie 1 do PORTxn, podczas gdy pin skonfigurowany jest jako wyjcie, spowoduje ustawienie stanu wysokiego. Wpisanie 0 ustawi stan niski. Ustawienie bitu PUD w rejestrze SFIOR wycza rezystory pull-up we wszystkich portach, bez wzgldu na ustawienie DDxn i PORTxn. Tabela 1. Konfiguracja pinw portw PUD DDxn PORTxn I/O (SFIOR) 0 0 X Wejcie 0 0 1 1 1 1 0 1 0 1 X X Wejcie Wejcie Wyjcie Wyjscie

PullUp Komentarz Nie Tak Nie Nie Nie Trzy stanowy (Hi-Z) Pxn bdzie rdem prdu jeli na zewntrz poczony jest z mas. Trzy stanowy (Hi-Z) Wyjcie stan niski Wyjcie stan wysoki (rdo)

Odczytywanie stanu pinw Niezalenie od obranego kierunku pracy pinu w DDxn, warto pinu portu moe by odczytana poprzez bity PINxn. Jeli zmiana stanu nastpuje z zewntrz, to warto PINxn jest opniona do momentu synchronizacji ze stanem niskim zegara. Warto na pinie jest zapamitywana na zboczu opadajcym zegara a uaktualniona warto PINxn pojawia si ze zboczem narastajcym zegara. Potwierdzenie wpisanej programowo wartoci pinu, poprzez odczyt PINxn, musi odbywa si wic co najmniej jeden cykl zegarowy po wpisaniu. Synchronizujce opnienie mona zrealizowa instrukcj NOP. 8

Alternatywne funkcje portw Wikszo pinw portw poza prac jako cyfrowe wejcie/wyjcie posiada funkcje alternatywn. Funkcja alternatywna jednego z pinw portu nie blokuje pracy pozostaym jako cyfrowe piny wejcia/wyjcia. Port A Alternatywn funkcj pinw portu A s kanay przetwornika ADC. Jeli ktre z pinw s skonfigurowane jako wyjciowe, podczas gdy inne pracuj jako kanay przetwornika, przeczanie wyj podczas trwajcej konwersji moe pogorszy jako konwersji. Tabela 2. Alternatywne funkcje pinw portu A Pin portu PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Port B Tabela 3. Alternatywne funkcje pinw portu B Pin portu PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Port C Kilka pinw portu C moe peni funkcje linii interfejsu JTAG. Jeli JTAG jest wczony, to rezystory pull-up na pinach PC5, PC3, PC2 s aktywne nawet w stanie resetu. W Funkcja alternatywna SCK (zegar szyny szeregowej SPI) MISO (szyna interfejsu SPI, Master Input/Slave Output) MOSI (szyna interfejsu SPI, Master Output/Slave Input) SS (interfejs SPI, wejcie Slave Select) AIN1 (ujemne wejcie komparatora analogowego) OC0 (wyjcie Output Compare Timera/Licznika 0) AIN0 (dodatnie wejcie komparatora analogowego) INT2 (wejcie zewntrznego przerwania 2) T1 (zewntrzne wejcie licznika) T0 (zewntrzne wejcie licznika) XCK (zewntrzny zegar USART) Funkcja alternatywna ADC7 (wejcie ADC, kana 7) ADC6 (wejcie ADC, kana 6) ADC5 (wejcie ADC, kana 5) ADC4 (wejcie ADC, kana 4) ADC3 (wejcie ADC, kana 3) ADC2 (wejcie ADC, kana 2) ADC1 (wejcie ADC, kana 1) ADC0 (wejcie ADC, kana 0)

fabrycznie nowym ukadzie ATMega16 interfejs JTAG jest wczony, wic jego cztery piny PC2-PC5 nie bd pracowa jako cyfrowe piny wejcia wyjcia. Tabela 4. Alternatywne funkcje pinw portu C Pin portu PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 Port D Tabela 5. Alternatywne funkcje pinw portu D Pin portu PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 Funkcja alternatywna OC2, wyjcie Output Compare Timera/Licznika 2 ICP1, pin wejciowy Input Capture Timera/Licznika 1 OC1A, wyjcie Output Compare A, Timera/Licznika 1 OC1B, wyjcie Output Compare B Timera/Licznika 1 INT1, wejcie zewntrznego przerwania 1 INT0, wejcie zewntrznego przerwania 0 TXD, pin wyjciowy USART RXD, pin wejciowy USART Funkcja alternatywna TOSC2, Oscylator licznika, Pin 2 TOSC1, Oscylator licznika, Pin 1 TDI, JTAG Test Data In TDO, JTAG Test Data Out TMS, JTAG Test Mode Select TCK, JTAG Test Clock SDA, linia wejcia/wyjcia danych interfejsu TWI (I2C) SCL, linia zegarowa interfejsu TWI (I2C)

Opis rejestrw dla portw I/O Rejestr danych portu A PORTA


Rejestr PORTA Bit Dostp Warto pocztkowa

7
PORTA7

6
PORTA6

5
PORTA5

4
PORTA4

3
PORTA3

2
PORTA2

1
PORTA1

0
PORTA0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

Rejestr kierunku danych portu A DDRA


Rejestr DDRA Bit Dostp Warto pocztkowa

7 DDRA7 R/W 0

6 DDRA6 R/W 0

5 DDRA5 R/W 0

4 DDRA4 R/W 0

3 DDRA3 R/W 0

2 DDRA2 R/W 0

1 DDRA1 R/W 0

0 DDRA0 R/W 0

10

Rejestr pinw wejciowych danych portu A PINA


Rejestr PORTA Bit Dostp Warto pocztkowa

7
PINA7

6
PINA6

5
PINA5

4
PINA4

3
PINA3

2
PINA2

1
PINA1

0
PINA0

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

Rejestr danych portu B PORTB


Rejestr PORTB Bit Dostp Warto pocztkowa

7
PORTB7

6
PORTB6

5
PORTB5

4
PORTB4

3
PORTB3

2
PORTB2

1
PORTB1

0
PORTB0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

Rejestr kierunku danych portu B DDRB


Rejestr DDRB Bit Dostp Warto pocztkowa

7 DDRB7 R/W 0

6 DDRB6 R/W 0

5 DDRB5 R/W 0

4 DDRB4 R/W 0

3 DDRB3 R/W 0

2 DDRB2 R/W 0

1 DDRB1 R/W 0

0 DDRB0 R/W 0

Rejestr pinw wejciowych danych portu B PINB


Rejestr PORTB Bit Dostp Warto pocztkowa

7
PINB7

6
PINB6

5
PINB5

4
PINB4

3
PINB3

2
PINB2

1
PINB1

0
PINB0

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

Rejestr danych portu C PORTC


Rejestr PORTC Bit Dostp Warto pocztkowa

7
PORTC7

6
PORTC6

5
PORTC5

4
PORTC4

3
PORTC3

2
PORTC2

1
PORTC1

0
PORTC0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

Rejestr kierunku danych portu C DDRC


Rejestr DDRC Bit Dostp Warto pocztkowa

7 DDRC7 R/W 0

6 DDRC6 R/W 0

5 DDRC5 R/W 0

4 DDRC4 R/W 0

3 DDRC3 R/W 0

2 DDRC2 R/W 0

1 DDRC1 R/W 0

0 DDRC0 R/W 0

Rejestr pinw wejciowych danych portu C PINC

11

Rejestr PORTC Bit Dostp Warto pocztkowa

7
PINC7

6
PINC6

5
PINC5

4
PINC4

3
PINC3

2
PINC2

1
PINC1

0
PINC0

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

Rejestr danych portu D PORTD


Rejestr PORTD Bit Dostp Warto pocztkowa

7
PORTD7

6
PORTD6

5
PORTD5

4
PORTD4

3
PORTD3

2
PORTD2

1
PORTD1

0
PORTD0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

Rejestr kierunku danych portu D DDRD


Rejestr DDRD Bit Dostp Warto pocztkowa

7 DDRD7 R/W 0

6 DDRD6 R/W 0

5 DDRD5 R/W 0

4 DDRD4 R/W 0

3 DDRD3 R/W 0

2 DDRD2 R/W 0

1 DDRD1 R/W 0

0 DDRD0 R/W 0

Rejestr pinw wejciowych danych portu D PIND


Rejestr PORTD Bit Dostp Warto pocztkowa

7
PIND7

6
PIND6

5
PIND5

4
PIND4

3
PIND3

2
PIND2

1
PIND1

0
PIND0

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

R nd.

1. Przerwania System przerwa obecny jest prawdopodobnie w kadym mikrokontrolerze. Im bardziej jest on zoony, tyb bardziej rozbudowany bdzie w nim system przerwa. W mikrokontrolerze ATMega16 dostpnych jest 21 rodzajw przerwa, ktre mog by wywoywane na skutek jeszcze wikszej liczby zdarze. Pozwala to na sprawne kontrolowanie prac wbudowanych w ukad urzdze peryferyjnych, a dziki przerwaniom zewntrznym take urzdze zewntrznych. Opis konfiguracji przerwa jest zwizany cile z ukadami peryferyjnymi i jest zawarty w opisie tych ukadw w kolejnych punkach. Globalna flaga przerwa znajduje si w gwnym rejestrze kontrolnym SREG i zostaa omwiona przy opisie tego rejestru przy kocu rozdziau Zarys budowy rdzenia AVR. Zawarto rejestru SREG nie jest automatycznie zapamitywana przy wejciu w kod obsugi przerwania i odzyskiwana po jego wykonaniu. Naley to wykonywa programowo. Podczas przerwa i wywoa procedur podrzdnych adres powrotny licznika programu jest przechowywany w pamici stosu.

12

Ponisza tabela zawiera zestawienie wektorw przerwa dla ATMega16. Nie obejmuje przypadku korzystania z podziau pamici na sekcj botujc i aplikacyjn. Tabela 6. Wektory przerwa i resetu Adres Wektor, pamici rdo nr programu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $000 $002 $004 $006 $008 $00A $00C $00E $010 $012 $014 $016 $018 $01A $01C $01E $020 $022 $024 $026 $028 RESET INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI INT2 TIMER0 COMP SPM_RDY

Opis przerwania
Pin zewntrzny, Power-on reset, Brown-out reset, Watchdog reset, JTAG reset Zewntrzne przerwanie INT0 Zewntrzne przerwanie INT1 Timer / Licznik 2 dopasowanie porwnania Timer / Licznik 2 przepenienie Timer / Licznik 1 zdarzenie przechwycenia Timer / Licznik 1 dopasowanie porwnania A Timer / Licznik 1 dopasowanie porwnania B Timer / Licznik 1 przepenienie Timer /Licznik 0 przepenienie Zakoczona transmisja szeregowa USART, Rx USART, pusty rejestr danych USART, Rx Zakoczona konwersja ADC EEPROM gotowy Komparator analogowy Interfejs szeregowy TWI (I2C) Zewntrzne przerwanie INT2 Timer / Licznik 0 dopasowanie porwnania Store Program Memory Ready

Rejestr GICR Gwny rejestr kontroli przerwa Dwa poniej opisane bity rejestru GICR maj znaczenie w przypadku korzystania z dzielenia pamici programu na cz botujc oraz cz aplikacyjn. Opis pozostaych bitw i rejestrw konfiguracyjnych znajduje si przy opisach ukadw peryferyjnych ktre z nich korzystaj.
Rejestr GICR Bit Dostp Warto pocztkowa

7 INT1 R/W 0

6 INT0 R/W 0

5 INT2 R/W 0

4 R 0

3 R 0

2 R 0

1 IVSEL R/W 0

0 IVCE R/W 0

IVSEL -

IVCE -

Bit wyboru pocztku wektora przerwa. Wykorzystywanie tego bitu wie si z korzystaniem z programw botujcych. Jego warto zero oznacza e wektory przerwa zaczynaj si od pocztku obszaru pamici flash. Warto jeden przesuwa pocztek do miejsca wybranego przez konfiguracj bitw bezpiecznikowych BOOTZS Bit odblokowujcy wybr wektora przerwa.

13

Zabezpiecza przed przypadkow zmian stanu bitu IVSEL. Musi by ustawiony na 1 zanim zostanie zmieniony IVSEL. Bit ten jest sprztowo kasowany po 4 cyklach zegara od ustawienia tego bitu, lub po zmianie IVSEL. Przerwania zewntrzne Przerwania zewntrzne s wyzwalane pinami INT0, INT1 oraz INT2. Mog by wyzwalane niezalenie od tego czy te piny s skonfigurowane jako wyjciowe czy wejciowe. Cecha ta moe by wykorzystana do programowego generowania przerwa. Zalenie od ustawie w rejestrach MCUCR oraz MCUCS, przerwanie zewntrzne moe by wyzwolone zboczem narastajcym, opadajcym, lub niskim poziomem (INT2 tylko zboczem). INT0 / INT1: Przerwanie skonfigurowane jako wyzwalane poziomem bdzie trwao tak dugo, jak bdzie ten stan si utrzymywa. Poziom jest wykrywany asynchronicznie i moe suy do wybudzenia mikrokontrolera z trybu Power-Down. Stan niski wwczas musi si utrzyma przez czas, jaki jest potrzebny na wybudzenie. INT2: Przerwanie INT2 moe by wyzwolone jednym ze zboczy, a zdarzenie to wykrywane jest asynchronicznie. Aby zdarzenie synchroniczne zostao wykryte (np. z wejcia INT1), przy wykrywaniu zbocza impuls nie moe by zbyt krtki, natomiast przy wykrywaniu poziomu, jego stan rwnie nie moe trwa zbyt krtko. Zwizane to jest z prbkowaniem stanu pinu w takt zegara Watchdoga. Rejestr MCUCR Rejestr kontroli mikrokontrolera Rejestr MCUCR zawiera midzy innymi bity kontrolne do wyboru sposobu wykrywania przerwania.
Rejestr MCUCR Bit Dostp Warto pocztkowa

7 SM2 R/W 0

6 SE R/W 0

5 SM1 R/W 0

4 SM0 R/W 0

3 ISC11 R/W 0

2 ISC10 R/W 0

1 ISC01 R/W 0

0 ISC00 R/W 0

ISC10, ISC11 - Bity wyboru sposobu wykrywania przerwania 1. Pin INT1 moe by rdem przerwania jeli ustawiona jest flaga I w SREG oraz odpowiednia maska przerwa w GICR.
ISC11 0 0 1 1 ISC10 0 1 0 1 Opis Niski poziom pinu INT1 spowoduje danie przerwania Dowolna zmiana stanu logicznego na INT1 wywoa danie przerwania Zbocze opadajce na INT1 wywoa danie przerwania Zbocze narastajce na INT1 wywoa danie przerwania

14

ISC00, ISC01 - Bity wyboru sposobu wykrywania przerwania 0. Pin INT0 moe by rdem przerwania jeli ustawiona jest flaga I w SREG oraz odpowiednia maska przerwa w GICR.
ISC01 0 0 1 1 ISC00 0 1 0 1 Opis Niski poziom pinu INT0 spowoduje danie przerwania Dowolna zmiana stanu logicznego na INT0 wywoa danie przerwania Zbocze opadajce na INT0 wywoa danie przerwania Zbocze narastajce na INT0 wywoa danie przerwania

Rejestr MCUCSR Rejestr kontroli i statusu mikrokontrolera


Rejestr MCUCSR Bit Dostp Warto pocztkowa

7 JTD R/W 0

6 ISC2 R/W 0

5 R 0

4 JTRF R/W

3 2 1 WDRF BORF EXTRF R/W R/W R/W zobacz w opisie bitw

0 PORF R/W

ISC2 -

Bity wyboru sposobu wykrywania przerwania 2. Pin INT2 (asynchroniczne przerwanie zewntrzne) moe by rdem przerwania jeli ustawiona jest flaga I w SREG oraz odpowiednia maska przerwa w GICR. Konfigurujc ISC2 wybieramy rodzaj zbocza ktre wygeneruje przerwanie. Wpisanie 1 powoduje reakcj na zbocze narastajce, wpisanie 0 na zbocze opadajce. Aby zmiana zostaa wychwycona, impuls powinien trwa typowo nie krcej ni 50ns. Zmiana bitu ISC2 moe wywoa przerwanie, wic aby mona byo go zmieni, najpierw naley wykasowa bit odblokowujcy w GICR, po czym mona zmieni ISC2. Przed ponownym odblokowaniem przerwania INT2, flaga tego przerwania powinna by wykasowana przez wpisanie jedynki do INTF2 w GIFR.

Rejestr GICR Gwny rejestr kontroli przerwa


Rejestr GICR Bit Dostp Warto pocztkowa

7 INT1 R/W 0

6 INT0 R/W 0

5 INT2 R/W 0

4 R 0

3 R 0

2 R 0

1 IVSEL R/W 0

0 IVCE R/W 0

INT1 -

Bit odblokowujcy zewntrzne przerwanie 1. Ustawienie tego bitu na 1 oraz ustawionym na 1 bicie I w SREG wcza zewntrzne przerwanie. Sposb wykrywania przerwania wybiera si bitami

15

INT0 -

INT2 -

ISC11 i ISC10 w rejestrze MCUCR. Zdarzenie moe by wykryte nawet gdy pin skonfigurowany jest jako wyjciowy. Bit odblokowujcy zewntrzne przerwanie 0. Ustawienie tego bitu na 1 oraz ustawionym na 1 bicie I w SREG wcza zewntrzne przerwanie. Sposb wykrywania przerwania wybiera si bitami ISC01 i ISC00 w rejestrze MCUCR. Zdarzenie moe by wykryte nawet gdy pin skonfigurowany jest jako wyjciowy. Bit odblokowujcy zewntrzne przerwanie 2. Ustawienie tego bitu na 1 oraz ustawionym na 1 bicie I w SREG wcza zewntrzne przerwanie. Bitem ISC2 w rejestrze MCUCSR okrela si rodzaj zbocza generujcego przerwanie. Zdarzenie moe by wykryte nawet gdy pin skonfigurowany jest jako wyjciowy.

Rejestr GIFR Gwny rejestr flag przerwa


Rejestr GIFR Bit Dostp Warto pocztkowa

7 INTF1 R/W 0

6 INTF0 R/W 0

5 INTF2 R/W 0

4 R 0

3 R 0

2 R 0

1 R 0

0 R 0

INTF1 -

INTF0 -

INTF2 -

Flaga zewntrznego przerwania 1. Kiedy zdarzenie pinu INT1 wywoa przerwanie, flaga INTF1 jest ustawiana na 1. Jeli ustawiony jest bit I w SREG oraz ustawiony bit INT1 w GICR, CPU skoczy do odpowiedniego wektora przerwania. Flaga INTF1 jest kasowana kiedy wykonywana jest procedura obsugi przerwania. Moliwe jest rczne jej wykasowanie przez wpisanie do niej 1. Jeli ustawionej jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje wyczyszczona. Flaga zewntrznego przerwania 0. Kiedy zdarzenie na pinie INT0 wywoa przerwanie, flaga INTF0 jest ustawiana na 1. Jeli ustawiony jest bit I w SREG oraz ustawiony bit INT0 w GICR, mikrokontroler skoczy do odpowiedniego wektora przerwania. Flaga INTF0 jest kasowana kiedy wykonywana jest procedura obsugi przerwania. Moliwe jest rczne jej wykasowanie przez wpisanie do niej 1. Flaga zewntrznego przerwania 2. Kiedy zdarzenie na pinie INT2 wywoa przerwanie, flaga INTF2 jest ustawiana na 1. Jeli ustawiony jest bit I w SREG oraz ustawiony bit INT2 w GICR, CPU skoczy do odpowiedniego wektora przerwania. Flaga INTF2 jest kasowana kiedy wykonywana jest procedura obsugi przerwania. Jeli ustawione jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje wyczyszczona.

16

6. Timery/Liczniki W mikrokontrolerze ATMega16 dostpne s trzy moduy licznikw (timerw), dwa 8-bitowe i jeden 16-bitowy. Oprcz tych istnieje take specjalizowany licznik tzw. Watchdog Timer (opisany w punkcie 2.3. rda resetu).

6.1. 8-bitowy licznik 0 z PWM Gwne waciwoci oraz moliwoci zastosowa licznika 0: Licznik jedno kanaowy. Automatyczne kasowanie i restart timera w trybie porwnania. Generator czstotliwoci. Generator przebiegu PWM. Licznik zdarze zewntrznych. 10-bitowy programowalny preskaler. rdo przerwa (przepenienie, zrwnanie).

Rys. 4. Schemat blokowy licznika 8-bitowego Rejestr licznika (TCNT0) oraz rejestr output compare (OCR0) s 8-bitowe. Licznik moe by taktowany wewntrznie poprzez ukad preskalera lub przez zewntrzne rdo podczone do pinu T0. Blok logiczny wyboru zegara, kontroluje wybr tego rda oraz rodzaj zbocza, ktre bdzie licznik inkrementowa lub dekrementowa. Gdy rdo taktowania nie zostao

17

wybrane, licznik pozostaje nieaktywny. Zegar i podzia preskalera wybiera si bitami CS02:0 w rejestrze TCCR0. Preskaler jest wspdzielony przez licznik 0 oraz licznik 1. W celu synchronizacji licznika z preskalerem (np. przy uruchomieniu licznika), moliwe jest zresetowanie preskalera bitem PSR10 w rejestrze SFIOR. Sygna taktujcy ze rda zewntrznego omija preskaler. W trybie output compare zawarto rejestru OCR0 jest stale porwnywana z wartoci rejestru licznika TCNT0. Zdarzenie zrwnania wartoci licznika i rejestru OCR0 ustawi flag OCF0, ktra moe by rdem dania przerwania. Przerwanie output compare moe zosta wygenerowane, jeli ustawiona jest flaga przerwa OCIE0 oraz globalna flaga przerwa w SREG. Wynik porwnania moe suy generowaniu przebiegw PWM lub sygnau o zmiennej czstotliwoci na wyjciu pinu OC0. Praca w trybie z korygowaniem fazy zapobiega powstawaniu szpilek (glitch). Najprostszy sposb pracy to tzw. tryb Normal, przy ustawieniu WGM01:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osigniciu maksymalnej wartoci TOP = 0xFF licznik przekrca si i restartuje od 0. Flaga TOV0 zostaje ustawiona, gdy licznik osignie warto 0. Normalnie ta flaga nie jest kasowana. Kasowanie automatyczne nastpuje przy wykorzystaniu przerwania przy przepenieniu. W kadej chwili warto licznika moe by nadpisana inn liczb. W trybie normalnym moliwe jest take generowanie przebiegu za pomoc Output Compare, jednak do tego celu zalecane jest skorzystanie z innych trybw. Rejestr TCCR0 Rejestr kontroli licznika/timera 0
Rejestr TCCR0 Bit Dostp Warto pocztkowa

7 FOC0 W 0

6
WGM00

R/W 0

5 COM01 R/W 0

4 COM00 R/W 0

3
WGM01

R/W 0

2 SC02 R/W 0

1 CS01 R/W 0

0 CS00 R/W 0

Wymuszenie trybu output compare. Bit ten jest aktywny tylko, gdy bity WGM okrelaj tryb inny ni PWM. Dla zapewnienia kompatybilnoci z przyszymi ukadami, ten bit musi by ustawiany na 0 przy zapisie do rejestru. Ustawienie tego bitu na 1 spowoduje natychmiastowe wymuszenie zdarzenia compare, a wycie OC0 zostanie zmienione zgodnie z ustawieniami bitw COM01:0. Wymuszenie output compare nie spowoduje jednak ustawienia flagi OCF0 i wygenerowania przerwania. WGM01:0 - Tryb generowania przebiegu. Bity te kontroluj proces zliczania licznika. Obsugiwane s nastpujce tryby pracy licznika: normalny, kasowanie timera przy zrwnaniu (compare match) oraz dwa tryby PWM.

FOC0 -

18

WGM01 0 0 1

WGM00 0 1 0

Tryb pracy Normalny PWM, korekcja fazy CTC

TOP 0xFF 0xFF OCR0

Aktualizowanie OCR0 Natychmiast TOP Natychmiast

Ustawianie flagi TOV0 MAX BOTTOM MAX

1 1 Szybkie PWM 0xFF TOP MAX TOP - warto koczca zliczanie (np. OCR0), MAX - osignicie wartoci (0xff), BOTTOM - osignicie minimum (0x00), CTC kasowanie przy zrwnaniu (clear timer on compare)

COM01:0 -

Tryb pracy output compare (compare match output mode). Te bity kontroluj zachowanie pinu wyjciowego Output Compare (OC0). Jeli ktry z tych bitw jest ustawiony, funkcja OC staje si nadrzdn nad innymi funkcjami IO tego pinu. Mimo to jego DDR musi by ustawione jako wyjciowe. Funkcja ustawiona przez bity COM01:0 jest uzaleniona od ustawie WGM01:0.
Tryb nie-PWM (patrz WGM01:0): COM01 0 0 1 1 COM00 0 1 0 1 Opis Normalna praca portu, OC0 odczone Przecza OC0 przy zrwnaniu Kasuje OC0 przy zrwnaniu Ustawia OC0 przy zrwnaniu

Tryb szybkie PWM (patrz WGM01:0): COM01 0 0 1 1 COM00 0 1 0 1 Opis Normalna praca portu, OC0 odczone zarezerwowane Kasuje OC0 przy zrwnaniu, ustawia OC0 przy TOP Ustawia OC0 przy zrwnaniu, kasuje OC0 przy TOP

Tryb PWM, korygowana faza (patrz WGM01:0): COM01 0 0 1 1 COM00 0 1 0 1 Opis Normalna praca portu, OC0 odczone zarezerwowane Kasuje OC0 przy zrwnaniu podczas zliczania w gr, ustawia przy zrwnaniu podczas zliczania w d Ustawia OC0 przy zrwnaniu podczas zliczania w gr, kasuje przy zrwnaniu podczas zliczania w d

CS02:0 -

Ustawienia rda zegara dla licznika 0.

19

CS02 0 0 0 0 1 1 1

CS01 0 0 1 1 0 0 1

CS00 0 1 0 1 0 1 0

Opis Nie wybrane rdo zegara, licznik zatrzymany clkIO (bez preskalera) clkIO / 8 (preskaler) clkIO / 64 (preskaler) clkIO / 256 (preskaler) clkIO / 1024 (preskaler) Zewntrzne rdo zegara z pinu T0, zbocze opadajce 1)

1 1 1 Zewntrzne rdo zegara z pinu T0, zbocze narastajce 1) 1) T0 moe by rdem taktowania nawet gdy jest ustawiony jako pin wyjciowy

Rejestr TCNT0 Rejestr licznika/timera 0 Rejestr pozwalajcy na odczyt stanu licznika lub jego zmian. Modyfikacja zliczajcego licznika moe spowodowa pominicie momentu zrwnania z OCR0.
Rejestr TCNT0 Bit Dostp Warto pocztkowa

7 R/W 0

6 R/W 0

5 R/W 0

4 3 TCNT0[7:0] R/W R/W 0 0

2 R/W 0

1 R/W 0

0 R/W 0

Rejestr OCR0 Rejestr Output Compare Zawarto rejestru OCR0 to 8-bitowa warto, ktra stale jest porwnywana z wartoci rejestru licznika TCNT0. Moment ich zrwnania moe by wykorzystany do generowania przerwania, albo do generowania przebiegu na wyjciu pinu OC0.
Rejestr OCR0 Bit Dostp Warto pocztkowa

7 R/W 0

6 R/W 0

5 R/W 0

4 3 OCR0[7:0] R/W R/W 0 0

2 R/W 0

1 R/W 0

0 R/W 0

Rejestr TIMSK Rejestr maskowania przerwa licznikw


Rejestr TIMSK Bit Dostp Warto pocztkowa

7
OCIE2

6
TOIE2

5
TICIE1

4
OCIE1A

3
OCIE1B

2
TOIE1

1
OCIE0

0
TOIE0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

OCIE0 -

Odblokowanie przerwania output compare licznika 0. 20

Ustawienie bitu OCIE0 na 1 oraz flagi przerwa I w SREG odblokowuje przerwanie output compare, ktre bdzie generowane przez zrwnanie si licznika 0 i rejestrem OCR0. TOIE0 Odblokowanie przerwania na przepenienie licznika 0. Ustawienie bitu TOIE0 na 1 oraz flagi przerwa I w SREG odblokowuje przerwanie na przepenienie licznika 0 (overflow).

Rejestr TIFR Rejestr flag przerwa licznikw


Rejestr TIFR Bit Dostp Warto pocztkowa

7
OCF2

6
TOV2

5
ICF1

4
OCF1A

3
OCF1B

2
TOV1

1
OCF0

0
TOV0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

OCF0 -

TOV0 -

Flaga output compare licznika 0. Bit OCF0 jest ustawiony gdy nastpi zrwnanie wartoci rejestru OCR0 z licznikiem 0. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki). Flaga przepenienia licznika 0. Bit TOV0 jest ustawiony gdy nastpi przepenienie licznika TCNT0. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania, albo moe by kasowana programowo przez wpisanie 0. W trybie PWM z korygowaniem fazy, bit TOV0 jest ustawiany przy zmianie kierunku zliczania przy wartoci 0x00.

Rejestr SFIOR Rejestr funkcji specjalnych


Rejestr SFIOR Bit Dostp Warto pocztkowa

7
ADTS2

6
ADTS1

5
ADTS0

R/W 0

R/W 0

R/W 0

4 R 0

3
ACME

2
PUD

1
PSR2

0
PSR10

R/W 0

R/W 0

R/W 0

R/W 0

PSR10 -

Reset preskalera licznika 0 oraz licznika 1. Wpisanie 1 do tego bitu spowoduje reset preskalera. Naley pamita, e ten preskaler jest wspdzielony przez liczniki 0 i 1, wic ta operacja wpynie na oba liczniki. Po resecie preskalera bit jest natychmiast kasowany sprztowo.

21

6.2. 16-bitowy licznik 1 Gwne waciwoci oraz moliwoci zastosowa licznika 1: Prawdziwa 16-bitowa konstrukcja (moliwy np. 16-bitowy PWM). Niezalene dwie jednostki Output Compare. Jednostka Input Capture z ukadem redukcji szumw. Automatyczne kasowanie i restart timera w trybie porwnywania. Generator czstotliwoci. Generator przebiegu PWM. Licznik zdarze zewntrznych. 10-bitowy programowalny preskaler. 4 niezalene rda przerwa.

Rys. 5. Schemat blokowy licznika 16-bitowego Firma Atmel stale ulepsza swoje mikrokontrolery. Zmiany take dotycz moduu licznika 16-bitowego. Obecny w ATMega16 rni si od wczeniejszych wersji ze starszych modeli AVR, wic starsze programy mog nie dziaa poprawnie. Dostp do 16-bitowych rejestrw licznika1 (TCNT1, OCR1A/B, ICR1) musi si odbywa przez dwie operacje odczytu lub zapisu przez 8-bitow szyn danych. Przykadowo dla TCNT1, dostp odbywa si poprzez dwa rejestry omiobitowe TCNT1L oraz TCNT1H.

22

Dziki buforowaniu czci H (8-bitowy rejestr TEMP), odczyt lub modyfikacja mimo to odbywa si w jednym cyklu zegara (za wyjtkiem rejestrw OCR1A/B).

Rys. 6. Schemat blokowy jednostki zliczajcej licznika 16-bitowego Licznik moe by taktowany wewntrznie poprzez ukad preskalera lub przez zewntrzne rdo podczone na pinie T1. Blok logiczny wyboru zegara, kontroluje wybr tego rda oraz rodzaj zbocza, ktre bdzie licznik inkrementowa lub dekrementowa. Preskaler jest wspdzielony przez licznik 0 oraz licznik 1. W celu synchronizacji licznika z preskalerem (np. przy uruchomieniu licznika), moliwe jest zresetowanie preskalera bitem PSR10 w rejestrze SFIOR. Sygna taktujcy ze rda zewntrznego omija preskaler. W trybie output compare zawarto rejestrw OCR1A/B jest stale porwnywana z wartoci rejestru licznika TCNT1. Zdarzenie zrwnania wartoci licznika i rejestru OCR1A/B ustawi flag OCF1A/B, ktra moe by rdem dania przerwania. Wynik porwnania moe suy generowaniu przebiegw PWM lub sygnau o zmiennej czstotliwoci na wyjciu pinw OC1A/B. Najprostszy sposb pracy to tzw. tryb Normal, przy ustawieniu WGM13:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osigniciu maksymalnej wartoci (MAX = 0xFFFF) licznik przekrca si i restartuje od dolnej wartoci (BOTTOM=0x0000). Flaga TOV1 zostaje ustawiona, gdy licznik osignie warto 0. Normalnie flaga ta nie jest kasowana. Kasowanie automatyczne nastpuje przy wykorzystaniu przerwania przy przepenieniu. W kadej chwili warto licznika moe by nadpisana inn liczb. W trybie normalnym moliwe jest take generowanie przebiegu za pomoc Output Compare, jednak do tego celu zalecane jest skorzystanie z innych trybw. Skorzystanie Input Compare najatwiejsze jest w trybie Normal. Maksymalny odstp midzy zdarzeniami na pinie ICP1 musi bra pod uwag rozdzielczo licznika. W razie potrzeby naley uy preskalera. Rejestr ICR1 (Input Capture) moe przechwyci warto licznika na skutek zdarzenia zewntrznego na pinie ICP1 albo na wyjciu komparatora analogowego (patrz opis bitu ACIC rejestru ACSR komparatora analogowego). W celu zredukowania wraliwoci na szumy, modu Input Capture zawiera ukad cyfrowej filtracji szumw. Ustawienie rda zegara dla licznika rozpoczyna jego prac. Jeli nie zostao wybrane, licznik pozostaje zatrzymany.

23

Rejestr TCCR1A Rejestr A kontroli licznika/timera 1


Rejestr TCCR1A Bit Dostp Warto pocztkowa

7
COM1A1

6
COM1A0

5
COM1B1

4
COM1B0

3
FOC1A

2
FOC1B

1
WGM11

0
WGM10

R/W 0

R/W 0

R/W 0

R/W 0

W 0

W 0

R/W 0

R/W 0

COM1A1:0 - Bity trybu pracy output compare dla kanau A (compare match output mode). COM1B1:0 - Bity trybu pracy output compare dla kanau B . Te bity kontroluj zachowanie pinw wyjciowych Output Compare (OC1A i OC1B). Jeli ktry z tych bitw jest ustawiony, funkcja OC staje si nadrzdn nad innymi funkcjami IO tego pinu. Mimo to jego DDR musi by ustawione jako wyjciowe. Funkcje ustawione przez bity COM1x1:0 s uzalenione od ustawie WGM1x1:0.
Tryb nie-PWM (patrz WGM13:0):
COM1A1 / COM1B1 COM1A0 / COM1B0

Opis Normalna praca portu, OC1A/OC1B odczone Przecza OC1A/OC1B przy zrwnaniu Kasuje OC1A/OC1B przy zrwnaniu (stan low) Ustawia OC1A/OC1B przy zrwnaniu (stan high)

0 0 1 1

0 1 0 1

Tryb szybkie PWM (patrz WGM13:0):


COM1A1 / COM1B1 COM1A0 / COM1B0

Opis Normalna praca portu, OC1A/OC1B odczone Przy WGM13:0 = 15 przecza OC1A przy zrwnaniu, a OC1B odczone. Pozostae kombinacje WGM13:0 normalna praca portu, OC1A/OC1B odczone Kasuje OC1A/OC1B przy zrwnaniu,ustawia OC1A/OC1B przy TOP Ustawia OC1A/OC1B przy zrwnaniu, kasuje OC1A/OC1B przy TOP

1 1

0 1

Tryb PWM, korygowana faza (patrz WGM13:0):


COM1A1 / COM1B1 COM1A0 / COM1B0

Opis Normalna praca portu, OC1A/OC1B odczone Przy WGM13:0 = 9 lub 14 przecza OC1A przy zrwnaniu, a OC1B odczone. Pozostae kombinacje WGM13:0 normalna praca portu, OC1A/OC1B odczone Kasuje OC1A/OC1B przy zrwnaniu podczas zliczania w gr, ustawia przy zrwnaniu podczas zliczania w d

24

Ustawia OC1A/OC1B przy zrwnaniu podczas zliczania w gr, kasuje przy zrwnaniu podczas zliczania w d

FOC1A FOC1B -

Wymuszenie trybu output compare dla kanau A. Wymuszenie trybu output compare dla kanau B. Bit ten jest aktywny tylko, gdy WGM13:0 okrela tryb inny ni PWM. Dla zapewnienia kompatybilnoci z przyszymi ukadami, ten bit musi by ustawiany na 0 podczas dziaania w trybie PWM. Ustawienie tego bitu na 1 spowoduje natychmiastowe wymuszenie zdarzenia compare, a wycie OC1A/ OC1B zostanie zmienione zgodnie z ustawieniami bitw COM1x1:0. Wymuszenie output compare nie spowoduje jednak ustawienia adnej z flag OCF1A / B i wygenerowania przerwania. WGM11:0 - Tryb generowania przebiegu. W poczeniu z bitami WGM13:2 w rejestrze TCCR1B, bity te kontroluj proces zliczania licznika. Obsugiwane s nastpujce tryby pracy licznika: normalny, kasowanie timera przy zrwnaniu (compare match - CTC) oraz trzy tryby PWM.
Aktualizowanie OCR0 Natychmiast TOP TOP TOP Natychmiast TOP TOP TOP BOTTOM BOTTOM TOP TOP Natychmiast TOP TOP Ustawianie flagi TOV0 MAX BOTTOM BOTTOM BOTTOM MAX TOP TOP TOP BOTTOM BOTTOM BOTTOM BOTTOM MAX TOP TOP

WGM13

WGM12

WGM11

WGM10

Tryb pracy licznika Normalny PWM, korekcja fazy, 8-bit PWM, korekcja fazy, 9-bit PWM, korekcja fazy, 10-bit CTC Szybkie PWM, 8-bit Szybkie PWM, 9-bit Szybkie PWM, 10-bit PWM, korekcja fazy i czstotliwoci PWM, korekcja fazy i czstotliwoci PWM, korekcja fazy PWM, korekcja fazy CTC Zarezerwowane Szybkie PWM Szybkie PWM

TOP 0xFFFF 0x00FF 0x01FF 0x03FF OCR1A 0x00FF 0x01FF 0x03FF ICR1 OCR1A ICR1 OCR1A ICR1 ICR1 OCR1A

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

TOP - warto koczca zliczanie (np. z rejestru OCR1A, albo staej), MAX - osignicie wartoci (0xff), BOTTOM - osignicie minimum (0x00) , CTC kasowanie przy zrwnaniu (clear timer on compare)

25

Rejestr TCCR1B Rejestr B kontroli licznika/timera 1


Rejestr TCCR1B Bit Dostp Warto pocztkowa

7 ICNC1 R/W 0

6 ICES1 R/W 0

5 R 0

4 WGM13 R/W 0

3 WGM12 R/W 0

2 CS12 R/W 0

1 CS11 R/W 0

0 CS10 R/W 0

Redukcja szumw pinu ICP1 (Input Capture). Ustawienie tego bitu na 1 wcza ukad redukcji szumu na wejciu Input Capture. Zdarzenie zmiany stanu pinu nastpuje, gdy nowy poziom utrzymuje si przez kolejne czterokrotne prbkowanie tego pinu. Opnia to wic wykrycie zmiany na ICP1 o 4 cykle oscylatora. ICES1 Wybr zbocza zdarzenia na pinie ICP1. Bit ten suy do okrelenia rodzaju zbocza, ktre bdzie interpretowane jako zdarzenie Input Capture na pinie ICP1. ICES1 = 0 oznacza wybr zbocza opadajcego, ICES1= 1 to zbocze narastajce. Wychwycenie zdarzenia powoduje e aktualna warto licznika 1 jest kopiowana do rejestru ICR1. Ustawiana jest take flaga ICF1, co moe by uyte do generowania przerwania. Jeli ICR1 jest uyte jako warto TOP (zobacz opis bitw WGM13:0), to funkcja Input Capture na pinie ICP1 jest wyczona. Bit 5 Zarezerwowany do przyszych zastosowa, zapisujc rejestr wpisywa 0. WGM13:2 - Tryb generowania przebiegu, zobacz opis TCCR1A. CS12:0 Ustawienia rda zegara dla licznika.
CS12 0 0 0 0 1 1 1 1 CS11 0 0 1 1 0 0 1 1 CS10 0 1 0 1 0 1 0 1 Opis Nie wybrane rdo zegara, licznik zatrzymany clkIO (bez preskalera) clkIO / 8 (preskaler) clkIO / 64 (preskaler) clkIO / 256 (preskaler) clkIO / 1024 (preskaler) Zewntrzne rdo zegara z pinu T1, zbocze opadajce Zewntrzne rdo zegara z pinu T1, zbocze narastajce

ICNC1 -

Pin T1 moe by rdem taktowania nawet gdy jest ustawiony jako pin wyjciowy. Rejestry TCNT1H i TCNT1L Rejestry licznika 1
Rejestr TCNT1 Bit TCNT1H

4 3 TCNT1[15:8]

26

Rejestr TCNT1 TCNT1L Dostp Warto pocztkowa

R/W 0

R/W 0

R 0

TCNT1[7:0] R/W R/W 0 0

R/W 0

R/W 0

R/W 0

Dwie lokacje (TCNT1H, TCNT1L) daj bezporedni dostp do 16-bitowej jednostki licznika. Aby operacja odczytu lub zapisu bya wykonywana jednoczenie na caych 16 bitach, dostp do tego rejestru jest realizowany za pomoc 8-bitowego tymczasowego rejestru TEMP. Przez niego odbywa si dostp do czci High. Rejestr tymczasowy wykorzystywany jest w ten sposb przez wszystkie rejestry 16-bitowe. Uwaga: Ze wzgldu na 8-bitow szyn danych mikrokontrolera, dostp do rejestrw odbywa si poprzez dwie operacje na jedno bajtowych czciach tego rejestru, najpierw starszej ICR1H, po czym modszej ICR1L. Rejestr OCR1A Rejestr Output Compare 1A
Rejestr OCR1A Bit OCR1AH OCR1AL Dostp Warto pocztkowa

R/W 0

R/W 0

R/W 0

4 3 OCR1A[15:8] OCR1A[7:0] R/W R/W 0 0

R/W 0

R/W 0

R/W 0

Patrz opis rejestru OCR1B. Rejestr OCR1B Rejestr Output Compare 1B


Rejestr OCR1B Bit OCR1BH OCR1BL Dostp Warto pocztkowa

R/W 0

R/W 0

R/W 0

4 3 OCR1B[15:8] OCR1B[7:0] R/W R/W 0 0

R/W 0

R/W 0

R/W 0

Rejestry OCR1A i OCR1B zawieraj 16-bitowa warto, ktra stale jest porwnywana z wartoci rejestru licznika 1 (TCNT1). Moment ich zrwnania moe by wykorzystany do generowania przerwania, albo do generowania przebiegu na wyjciu pinw OC1A OC1B. Uwaga: Ze wzgldu na 8-bitow szyn danych mikrokontrolera, dostp do rejestrw odbywa si poprzez dwie operacje na jedno bajtowych czciach tego rejestru, najpierw starszej OCR1BH, po czym modszej OCR1BL. Rejestr ICR1 Rejestr Input Capture 1 (ICR1H, ICR1L)
Rejestr ICR1 Bit ICR1H

4 3 ICR1[15:8]

27

Rejestr ICR1 ICR1L Dostp Warto pocztkowa R/W 0 R/W 0 R/W 0 ICR1[7:0] R/W R/W 0 0 R/W 0 R/W 0 R/W 0

Rejestr Input Capture jest aktualizowany wartoci licznika 1 (TCNT1) za kadym wystpieniem zdarzenia na pinie ICP1 (lub opcjonalnie na wyjciu komparatora analogowego, patrz opis rejestru ACSR komparatora analogowego). Rejestr ICR1 moe by rwnie uyty do okrelania grnej wartoci (TOP) dla licznika. Uwaga: Ze wzgldu na 8-bitow szyn danych mikrokontrolera, dostp do rejestrw odbywa si poprzez dwie operacje na jedno bajtowych czciach tego rejestru, najpierw starszej ICR1H, po czym modszej ICR1L. Rejestr TIMSK Rejestr maskowania przerwa licznikw
Rejestr TIMSK Bit Dostp Warto pocztkowa

7
OCIE2

6
TOIE2

5
TICIE1

4
OCIE1A

3
OCIE1B

2
TOIE1

1
OCIE0

0
TOIE0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

TICIE1 -

OCIE1A -

OCIE1B -

TOIE1 -

Odblokowanie przerwania Input Capture licznika 1. Ustawienie bitu TICIE0 na 1 oraz flagi przerwa I w przerwanie Input Capture. Odblokowanie przerwania Output Compare A licznika 1. Ustawienie bitu OCIE1A na 1 oraz flagi przerwa I w przerwanie output compare A, ktre bdzie generowane licznika 1 i rejestrem OCR1A. Odblokowanie przerwania Output Compare B licznika 1. Ustawienie bitu OCIE1B na 1 oraz flagi przerwa I w przerwanie output compare B, ktre bdzie generowane licznika 1 i rejestrem OCR1B. Odblokowanie przerwania na przepenienie licznika 1. Ustawienie bitu TOIE1 na 1 oraz flagi przerwa I w przerwanie na przepenienie licznika 1.

SREG odblokowuje

SREG odblokowuje przez zrwnanie si

SREG odblokowuje przez zrwnanie si

SREG odblokowuje

Rejestr TIFR Rejestr flag przerwa licznikw


Rejestr TIFR Bit Dostp Warto pocztkowa

7
OCF2

6
TOV2

5
ICF1

4
OCF1A

3
OCF1B

2
TOV1

1
OCF0

0
TOV0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

ICF1 -

Flaga Input Capture licznika 1. 28

OCF1A -

OCF1B -

TOV1 -

Flaga ICF0 jest ustawiana, gdy nastpi zdarzenie na pinie ICP1. Jeli rejestr ICR1 jest uywany jako grna warto (TOP) poprzez bity WGM13:0, wwczas flaga ICF1 jest ustawiana, kiedy licznik osignie grn warto. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki). Flaga Output Compare A licznika 1. Flaga OCF1A jest ustawiana, gdy nastpi zrwnanie wartoci rejestru OCR1A z wartoci licznika 1 (TCNT1). Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki). Flaga Output Compare B licznika 1. Flaga OCF1B jest ustawiana gdy nastpi zrwnanie wartoci rejestru OCR1B z wartoci licznika 1 (TCNT1). Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki). Flaga przepenienia licznika 1. Ustawienie tej flagi jest zalene od ustawienia bitw WGM13:0. W trybie Normalnym lub CTC (clear timer on compare) flaga TOV1 jest ustawiana przy przepenieniu licznika. W innych przypadkach zachowanie flagi opisane jest w tabeli przy opisie rejestru TCCR1A (bity WGM). Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki).

6.3. 8-bitowy licznik 2 z PWM i prac asynchroniczn Gwne waciwoci oraz moliwoci zastosowa 8-bitowego licznika 2: Licznik jedno kanaowy. Automatyczne kasowanie i restart timera w trybie porwnania. Generator czstotliwoci. Generator przebiegu PWM. Licznik zdarze zewntrznych. 10-bitowy programowalny preskaler. rdo przerwa (przepenienie, zrwnanie). Moliwe taktowanie z zewntrznego rda niezalenie od zegara wewntrznego.

Rejestr licznika (TCNT2) oraz rejestr output compare (OCR2) s 8-bitowe. Licznik moe by taktowany synchronicznie ze rda wewntrznego przez ukad preskalera lub asynchronicznie z zewntrznych pinw TOSC1/2. Asynchroniczne operacje s definiowane

29

w rejestrze ASSR. Piny TOSC1/2 s przystosowane do bezporedniego podczenia zegarkowego oscylatora kwarcowego 32kHz bez dodatkowych kondensatorw. Blok logiczny wyboru zegara, kontroluje wybr tego rda oraz rodzaj zbocza, ktre bdzie licznik inkrementowa lub dekrementowa. Gdy rdo taktowania nie zostao wybrane, licznik pozostaje nieaktywny. Zegar i preskaler okrela si bitami CS22:0 w rejestrze TCCR2. Licznik 2 posiada swj indywidualny preskaler, ktry daje moliwo wybrania jednego z siedmiu dzielnikw czstotliwoci. W celu synchronizacji licznika z preskalerem (np. przy uruchomieniu licznika), moliwe jest zresetowanie preskalera bitem PSR2 w rejestrze SFIOR. W trybie output compare zawarto rejestru OCR2 jest stale porwnywana z wartoci rejestru licznika TCNT2. Zdarzenie zrwnania wartoci licznika i rejestru OCR2 ustawi flag OCF2, ktra moe by rdem dania przerwania. Przerwanie output compare moe zosta wygenerowane, jeli ustawiona jest flaga przerwa OCIE2 oraz globalna flaga przerwa w SREG. Wynik porwnania moe suy generowaniu przebiegw PWM lub sygnau o zmiennej czstotliwoci na wyjciu pinu OC2. Praca w trybie z korygowaniem fazy zapobiega powstawaniu szpilek (glitch). Najprostszy sposb pracy to tzw. tryb Normal, przy ustawieniu WGM21:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osigniciu grnej wartoci TOP = 0xFF licznik przekrca si i restartujc od 0. Flaga TOV2 zostaje ustawiona gdy licznik osignie warto 0. Normalnie ta flaga nie jest kasowana. Kasowanie automatyczne nastpuje przy wykorzystaniu przerwania przy przepenieniu. W kadej chwili warto licznika moe by nadpisana inn liczb. W trybie normalnym moliwe jest take generowanie przebiegu za pomoc Output Compare, jednak do tego celu zalecane jest skorzystanie z innych trybw. Rejestr TCCR2 Rejestr kontroli licznika/timera 2
Rejestr TCCR2 Bit Dostp Warto pocztkowa

7 FOC2 W 0

6
WGM20

R/W 0

5 COM21 R/W 0

4 COM20 R/W 0

3
WGM21

R/W 0

2 SC22 R/W 0

1 CS21 R/W 0

0 CS20 R/W 0

Wymuszenie trybu output compare. Bit ten jest aktywny tylko, gdy bity WGM okrelaj tryb inny ni PWM. Dla zapewnienia kompatybilnoci z przyszymi ukadami, ten bit musi by ustawiany na 0 przy zapisie do rejestru. Ustawienie tego bitu na 1 spowoduje natychmiastowe wymuszenie zdarzenia compare, a wycie OC2 zostanie zmienione zgodnie z ustawieniami bitw COM21:0. Wymuszenie output compare nie spowoduje jednak ustawienia flagi OCF2 i wygenerowania przerwania. WGM21:0 - Tryb generowania przebiegu.

FOC2 -

30

Bity te kontroluj proces zliczania licznika. Obsugiwane s nastpujce tryby pracy licznika: normalny, kasowanie timera przy zrwnaniu (CTC) oraz dwa tryby pracy PWM.
WGM21 0 0 1 1 WGM20 0 1 0 1 Tryb pracy Normalny PWM, korekcja fazy CTC Szybkie PWM TOP 0xFF 0xFF OCR2 0xFF Aktualizowanie OCR2 Natychmiast TOP Natychmiast TOP Ustawianie flagi TOV2 MAX BOTTOM MAX MAX

TOP - warto koczca zliczanie (np. OCR2), MAX - osignicie wartoci (0xff), BOTTOM - osignicie minimum (0x00), CTC kasowanie przy zrwnaniu (clear timer on compare)

COM21:0 -

Tryb pracy output compare (compare match output mode). Te bity kontroluj zachowanie pinu wyjciowego OC2. Jeli ktry z tych bitw jest ustawiony, funkcja OC staje si nadrzdn nad innymi funkcjami IO tego pinu. Mimo to jego DDR musi by ustawione jako wyjciowe. Funkcja ustawiona przez bity COM21:0 jest uzaleniona od ustawie WGM21:0.
Tryb nie-PWM (patrz WGM21:0): COM21 0 0 1 1 COM20 0 1 0 1 Opis Normalna praca portu, OC2 odczone Przeczanie OC2 przy zrwnaniu Kasowanie OC2 przy zrwnaniu Ustawianie OC2 przy zrwnaniu

Tryb szybkie PWM (patrz WGM21:0): COM21 0 0 1 1 COM20 0 1 0 1 Opis Normalna praca portu, OC2 odczone Zarezerwowane Kasowanie OC2 przy zrwnaniu, ustawia OC2 przy TOP Ustawianie OC2 przy zrwnaniu, kasuje OC2 przy TOP

Tryb PWM, korygowana faza (patrz WGM21:0): COM21 0 0 1 1 COM20 0 1 0 1 Opis Normalna praca portu, OC2 odczone zarezerwowane Kasowane OC0 przy zrwnaniu podczas zliczania w gr, ustawia przy zrwnaniu podczas zliczania w d Ustawiane OC0 przy zrwnaniu podczas zliczania w gr, kasuje przy zrwnaniu podczas zliczania w d

31

CS22:0 -

Ustawienia rda zegara dla licznika 2:


CS22 0 0 0 0 1 1 1 1 CS21 0 0 1 1 0 0 1 1 CS20 0 1 0 1 0 1 0 1 Opis Nie wybrane rdo zegara, licznik zatrzymany clkT2S (bez preskalera) clkT2S / 8 (preskaler) clkT2S / 32 (preskaler) clkT2S / 64 (preskaler) clkT2S / 128 (preskaler) clkT2S / 256 (preskaler) clkT2S / 1024 (preskaler)

Rejestr TCNT2 Rejestr licznika/timera 2 Rejestr pozwalajcy na odczyt lub zmian stanu licznika 2. Modyfikacja zliczajcego licznika moe spowodowa pominicie momentu zrwnania z OCR2.
Rejestr TCNT2 Bit Dostp Warto pocztkowa

7 R/W 0

6 R/W 0

5 R/W 0

4 3 TCNT2[7:0] R/W R/W 0 0

2 R/W 0

1 R/W 0

0 R/W 0

Rejestr OCR2 Rejestr Output Compare Zawarto rejestru OCR2 stale jest porwnywana z wartoci rejestru licznika TCNT2. Moment ich zrwnania moe by wykorzystany do generowania przerwania, albo do generowania przebiegu na wyjciu pinu OC2.
Rejestr OCR2 Bit Dostp Warto pocztkowa

7 R/W 0

6 R/W 0

5 R/W 0

4 3 OCR2[7:0] R/W R/W 0 0

2 R/W 0

1 R/W 0

0 R/W 0

Rejestr ASSR Rejestr asynchronicznych operacji licznika W zamyle producenta, tryb asynchroniczny jest przygotowany do roli licznika/zegara czasu rzeczywistego (RTC). Do pinw TOSC1/2 mikrokontrolera mona podczy bezporednio kwarc zegarkowy 32kHz, do tego naley ustawi bit AS2 w rejestrze ASSR, jednoczenie wyczajc inne funkcje I/O pinw TOSC1/2 (PC6, PC7).

32

Rejestr ASSR Bit Dostp Warto pocztkowa

7 R 0

6 R 0

5 R 0

4 R 0

3
AS2

2
TCN2UB

1
OCR2UB

0
TCR2UB

R/W 0

R 0

R 0

R 0

Rejestr TIMSK Rejestr maskowania przerwa licznikw


Rejestr TIMSK Bit Dostp Warto pocztkowa

7
OCIE2

6
TOIE2

5
TICIE1

4
OCIE1A

3
OCIE1B

2
TOIE1

1
OCIE0

0
TOIE0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

OCIE2 -

TOIE2 -

Odblokowanie przerwania output compare licznika 2. Ustawienie bitu OCIE2 na 1 oraz flagi przerwa I w SREG odblokowuje przerwanie output compare, ktre bdzie generowane przez zrwnanie si zawartoci licznika 2 i wartoci w rejestrze OCR2. Odblokowanie przerwania na przepenienie licznika 2. Ustawienie bitu TOIE2 na 1 oraz flagi przerwa I w SREG odblokowuje przerwanie na przepenienie licznika 2.

Rejestr TIFR Rejestr flag przerwa licznikw


Rejestr TIFR Bit Dostp Warto pocztkowa

7
OCF2

6
TOV2

5
ICF1

4
OCF1A

3
OCF1B

2
TOV1

1
OCF0

0
TOV0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

OCF2 -

TOV2 -

Flaga output compare licznika 2. Bit OCF2 jest ustawiony, gdy nastpi zrwnanie wartoci rejestru OCR2 z licznikiem 2. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania. W innym przypadku flaga moe by kasowana przez wpisanie 1 (logicznej jedynki). Flaga przepenienia licznika 2. Bit TOV2 jest ustawiony, gdy nastpi przepenienie licznika TCNT2. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania, albo moe by kasowana programowo przez wpisanie 0. W trybie PWM z korygowaniem fazy, bit TOV2 jest ustawiany przy zmianie kierunku zliczania przy wartoci 0x00.

Rejestr SFIOR Rejestr funkcji specjalnych

33

Rejestr SFIOR Bit Dostp Warto pocztkowa

7
ADTS2

6
ADTS1

5
ADTS0

R/W 0

R/W 0

R/W 0

4 R 0

3
ACME

2
PUD

1
PSR2

0
PSR10

R/W 0

R/W 0

R/W 0

R/W 0

PSR2 -

Reset preskalera licznika 2. Wpisanie 1 do tego bitu spowoduje reset preskalera licznika 2. Po resecie preskalera bit jest automatycznie ustawiany na 0.

7. Komparator analogowy Komparator analogowy porwnuje wartoci wejciowe na pinie dodatnim AIN0 i ujemnym AIN1. Jeli napicie na pinie dodatnim jest wiksze ni na ujemnym, ustawiane jest wyjcie ACO komparatora. Pojawienie si sygnau na wyjciu komparatora moe suy jako moment przechwycenia dla funkcji Input Capture licznika 1. Oprcz tego zmiana zbocza na wyjciu komparatora moe by rdem niezalenego przerwania komparatora. Za pomoc multipleksera ADC moliwe jest podczenie jednego z pinw ACD7..0 do wejcia komparatora.

Rys. 7. Schemat blokowy komparatora analogowego Rejestr SFIOR Rejestr funkcji specjalnych
Rejestr SFIOR Bit Dostp Warto pocztkowa

7
ADTS2

6
ADTS1

5
ADTS0

R/W 0

R/W 0

R/W 0

4 R 0

3
ACME

2
PUD

1
PSR2

0
PSR10

R/W 0

R/W 0

R/W 0

R/W 0

ACME -

Odblokowanie multipleksera komparatora analogowego. 34

Wpisanie 1 do tego bitu podczas gdy przetwornik ADC jest wyczony, podcza wyjcie multipleksera ADC do ujemnego wejcia komparatora. Rejestr ACSR Rejestr kontroli i statusu komparatora analogowego
Rejestr ACSR Bit Dostp Warto pocztkowa

7 ACD R/W 0

6 ACBG R/W 0

5 ACO R n.d.

4 ACI R/W 0

3 ACIE R/W 0

2 ACIC R/W 0

1 ACIS1 R/W 0

0 ACIS0 R/W 0

ACD -

ACBG -

ACO -

ACI -

ACIE -

ACIC -

Odczenie komparatora analogowego. Wpisanie 1 do tego bitu odcza zasilanie od komparatora analogowego. Bit moe by ustawiony w dowolnej chwili, aby komparator zosta wyczony, co obnia pobr mocy. Przed zmian stanu bitu ACD, przerwanie komparatora musi by zablokowane, przez wykasowanie bitu ACIE (w ACSR), gdy w przeciwnym razie nastpi wygenerowanie przerwania. Wybranie rda referencyjnego (Bandgap). Kiedy ten bit jest ustawiony na 1, do wejcia dodatniego komparatora, zamiast pinu AIN0, podczone jest referencyjne rdo napiciowe bandgap (skompensowane termicznie) o napiciu ok. 1.23V (min.1,15V max.1,35V). Jeli bit ma warto 0, to do dodatniego wejcia komparatora podczony jest pin AIN0. Wyjcie komparatora analogowego. Wyjcie komparatora analogowego jest synchronizowane i bezporednio podczone do ACO. Synchronizacja wprowadza opnienie ok. 1-2 cykli zegara. Bit ACO bdzie mia warto 1 gdy napicie pinie AIN0 (dodatnie wejcie komparatora) jest wysze ni na AIN1 (ujemne wejcie). Flaga przerwania komparatora analogowego. Bit ten jest ustawiany sprztowo kiedy na wyjciu komparatora analogowego nastpi zdarzenie okrelone jako rdo przerwania bitami ACIS1:0. Kod obsugi przerwania zostanie wykonany jeli przerwanie od komparatora jest odblokowane (bit ACIE) oraz gdy ustawiona jest globalna flaga przerwa. Flaga ACI jest kasowana automatycznie przy wykonywaniu kodu obsugi przerwania lub przez wpisanie logicznej jedynki do tego bitu. Odblokowanie przerwania komparatora analogowego. Ustawienie tej flagi na 1 oraz globalnej flagi przerwa, aktywuje przerwanie na zdarzenie na wyjciu komparatora analogowego (okrelone bitami ACIS). Wpisanie wartoci 0 blokuje przerwanie. Funkcja Input Capture z komparatora analogowego. Wpisanie do tego bitu 1, pozwala aby aktualizacja rejestru ICR1 (Input Capture licznika 1) nastpia na skutek zdarzenia na wyjciu komparatora

35

ACIS1:0 -

analogowego. Wyjcie komparatora zostaje bezporednio poczone do ukadu Input Capture (patrz schemat blokowy licznika 1). Wybr sposobu wywoania przerwania komparatora analogowego. Tymi bitami okrela si, jaki rodzaj zdarzenia na wyjciu komparatora analogowego moe by rdem przerwania od komparatora. Przed zmian stanu bitw ACIS, przerwanie komparatora musi by zablokowane (bit ACIE w ACSR), gdy w przeciwnym razie na skutek zmiany nastpi wygenerowanie przerwania.
ACIS1 0 0 1 1 ACIS0 0 1 0 1 Tryb przerwania komparatora Przerwanie od przeczenia wyjcia Zarezerwowane Przerwanie od zbocza opadajcego na wyjciu Przerwanie od zbocza narastajcego na wyjciu

Przeczane wejcie komparatora Do ujemnego wejcia komparatora analogowego, zamiast AIN1 moe by podczony jeden z pinw ADC7..0. Do tego uywany jest multiplekser wej przetwornika ADC, pod warunkiem e ADC jest wyczony. Naley odblokowa multiplekser komparatora ustawieniem bitu ACME w rejestrze SFIOR oraz wyczy przetwornik ADC bitem ADEN w rejestrze ADCSRA. Od tej chwili bitami MUX2:0 w rejestrze ADMUX dokonuje si wyboru wejcia pinw ACDn. Tabela 2.7. Multipleksowane wejcie komparatora
ACME 0 1 1 1 1 1 1 1 1 1 ADEN x 1 0 0 0 0 0 0 0 0 MUX2:0 xxx xxx 000 001 010 011 100 101 110 111 Wejcie ujemne komparatora AIN1 AIN1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7

8. Przetwornik ADC Mikrokontroler ATmega16 wyposaony jest w 10-bitowy przetwornik ADC z sukcesywn aproksymacj. ADC podczony jest do 8 kanaowego multipleksera pozwalajc na przyczenie omiu napi wejciowych do kadego z pinw portu A. 36

Moliwe jest take 16 kombinacji podczenia napicia rnicowego. Dwa z rnicowych wej (ADC1, ADC0 oraz ADC3, ADC2) s wyposaone w programowalny stopie wzmacniajcy, pozwalajc na wzmocnienie 0dB (1x), 20dB (10x) i 46dB (200x) zanim sygna wejciowy zostanie poddany konwersji. Tryb rnicowy nie bdzie tu szczegowo opisany, gdy wspierany jest w ukadach ATMega16 w obudowach innych ni uyta w pracy PDIP40.

Rys. 8. Schemat blokowy przetwornika ADC Do zasilania przetwornika zosta specjalnie wyprowadzony pin AVCC. Napicie zasilajce ADC nie moe si rni wicej ni o 0,3 od VCC. Dla lepszego zabezpieczenia przed szumami z zewntrz, moliwe jest zasilanie przetwornika z filtra dolnoprzepustowego LC. Pytka testowa zestawu laboratoryjnego zostaa w taki filtr wyposaona. ADC wyposaony jest take w zintegrowane rdo napicia referencyjnego o wartoci 2,56V. Dodatkowo mona podczy do pinu VREF kondensator filtrujcy. Przez pin VREF mona take podczy zewntrzne napicie referencyjne.

37

Dziaanie Minimalna przetwarzana warto reprezentowana jest przez GND, a maksymalna przez napicie na pinie VREF minus 1LSB. rdem napicia referencyjnego moe by AVCC, wewntrzne rdo referencyjne 2,56V albo zewntrzne napicie podczane do pinu VREF. Przy korzystaniu z wewntrznego rda take moliwe te jest podczenie do pinu VREF kondensatora odsprzgajcego, poprawiajcego odporno na zakcenia. Przetwornik jest wczany przez ustawienie bitu ADEN w rejestrze ADCSRA. Wczeniejsze wybieranie rda referencyjnego czy kanau nie przyniesie wic adnego efektu. Zanim ADEN nie zostanie ustawiony, to przetwornik pozostaje wyczony i nie pobiera prdu. Zalecane wic jest wyczenie ADC zanim mikrokontroler bdzie wprowadzony w tryb upienia. ADC normalnie pracuje w trybie 10 bitowym, moe te pracowa w trybie 8 bitowym. Wynik konwersji przechowywany jest w rejestrach danych przetwornika ADCH i ADCL. Posta 10 bitowa jest reprezentowana w postaci right adjusted (wyrwnanej do prawej) i odczytuje si dwuetapowo, najpierw z ADCL po czym ADCH. Odczytanie samego ADCL zablokuje aktualizowanie wyniku konwersji a do odczytania ADCH. Jeli wynik nie zostanie odczytany, to moe zosta utracony poprzez nadpisanie wynikiem z kolejnej konwersji. Tryb left adjusted jest 8 bitowy, a do odczytania wyniku wystarczy odczyta rejestr ADCH. Zakoczona konwersja moe by zdarzeniem generujcym przerwanie. Konwersja pojedyncza Pojedyncza konwersja rozpoczyna si wpisaniem logicznej jedynki do bitu ADSC, a po jej zakoczeniu bit jest automatycznie kasowany. Konwersja wyzwalana automatycznie Konwersja automatyczna moe by wyzwalana przez rne rda. Automatyczne wyzwalanie wczane jest przez ustawienie bitu ADATE w ADCSRA. rdo wybierane jest za pomoc bitw ADTS w rejestrze SFIOR. Pojawienie si zdarzenia wyzwalajcego powoduje zresetowanie preskalera i rozpoczcie konwersji. Pozwala to na wyzwalanie konwersji w staych odstpach czasu (np. gdy do wyzwalania zostanie skonfigurowany timer). Flaga przerwania bdzie ustawiana bez wzgldu na to czy globalne przerwania w rejestrze statusu SREG s wczone czy nie. Automatyczne wyzwalanie nie musi generowa przerwania, ale wwczas flaga przerwania i tak musi by wyzerowana przed kolejnym wyzwalajcym zdarzeniem. Preskaler Wbudowany przetwornik z sukcesywn aproksymacj wymaga aby zegar taktujcy mieci si w granicach 50-200kHz (ustawiane w ADCSRA). Gdy rozdzielczo przetwornika

38

moe by mniejsza, to mona zwikszy szybko zegara i tym samym szybko prbkowania. Modu przetwornika ADC posiada ukad preskalera, ktry moe podzieli zegar CPU, gdy jest szybszy ni 100kHz. Preskaler ustawia si bitami ADPS2:0 w rejestrze ADCSRA. Rozpoczyna on prac od momentu wczenia ADC bitem ADEN w ADCSRA, a konwersja moe si rozpocz od kolejnego narastajcego zbocza zegara ADC (nie myli wczenia przetwornika z rozpoczciem konwersji). Normalna konwersja w trybie cigym trwa 13 cykli zegara ADC. Pierwsza konwersja po ustawieniu ADRN wymaga natomiast 25 cykli, z ktrych cz potrzebna jest na zainicjowanie analogowej czci przetwornika. Po zakoczeniu konwersji wynik zapisywany jest w rejestrach ADCL ADCH oraz ustawiany jest bit ADIF. W trybie wyzwalania pojedynczego bit ADSC za kadym razem jest kasowany. Kolejne programowe ustawienie tego bitu rozpoczyna kolejn konwersj. W czasie pracy z wyzwalaniem automatycznym (auto triggered conversion) preskaler jest resetowany kiedy pojawia si zdarzenie. Zapewnia to stae opnienie czasowe od zdarzenia wyzwalajcego do rozpoczcia konwersji. Wybr kanau i rda referencyjnego W rejestrze ADMUX znajduj si bity MUX4:0 oraz REFS1:0 odpowiedzialne za wybr kanau i rda referencyjnego. W trybie wyzwalania pojedynczego, kana zawsze naley wybiera przed rozpoczciem konwersji. Zmian najatwiej jest wykonywa po zakoczeniu konwersji poprzedniej. Zmiana kanau czy rda referencyjnego w czasie trwajcej konwersji zostanie zapamitana a multiplekser uaktualniony przed rozpoczciem kolejnej konwersji. Przy pracy z wyzwalaniem automatycznym naley zwrci uwag na przeczanie kanau czy rda, gdy moment wyzwolenia moe by nieprzewidywalny. Jeli podczone jest zewntrzne rdo napicia ref. do pinu VREF to nie mona wybiera innego wewntrznego, gdy nastpi zwarcie z tym podczonym do zewntrznego pinu. Jeli natomiast zewntrzne rdo nie jest podczone, to mona wybra jako referencyjne AVCC, albo wewntrzny wzorzec 2,56V. Pierwsza konwersja po zmianie rda moe by niedokadna i powinna by pominita. Rejestr ADMUX Rejestr konfiguracji multipleksera ADC
Rejestr ADMUX Bit Dostp Warto pocztkowa

7 REFS1 R/W 0

6 REFS0 R/W 0

5 ADLAR R/W 0

4 MUX4 R/W 0

3 MUX3 R/W 0

2 MUX2 R/W 0

1 MUX1 R/W 0

0 MUX0 R/W 0

REFS1:0 -

Bity wyboru rda referencyjnego.

39

Jeli te bity zostan zmienione podczas trwajcej konwersji, to zmiana bdzie uwzgldniona dopiero przy kolejnej konwersji (ustawiony ADIF w rejestrze ADCSRA). Nie mona uywa wewntrznych rde, jeli podczone jest napicie do pinu VREF.
REFS1 0 0 1 1 REFS0 0 1 0 1 Wybrane rdo referencyjne pin AREF, wewntrzne Vref wyczone AVCC z zewntrznym kondensatorem podczonym do VREF Kombinacja zarezerwowana Wewntrzne 2,56V z zewntrznym kondensatorem przy pinie VREF

ADLAR -

MUX4:0 -

Wyrwnanie wyniku konwersji do lewej. Ustawienie bitu ADLAR wpywa na reprezentacj wyniku w rejestrach danych przetwornika. Wpisanie 1 powoduje wyrwnanie do lewej (tryb 8-bitowy), natomiast 0 do prawej (tryb 10bit) (zobacz opis rejestrw ADCL i ADCH). Wybr kanau (oraz wzmocnienia). Za pomoc kombinacji bitw MUX dokonuje si wyboru pinu, ktry bdzie podczony przez multiplekser do przetwornika ADC. Wzmocnienie ustala si dla trybu rnicowego, ktry w tej pracy nie jest omawiany.
MUX4:0 (bin) 00 000 00 001 00 010 00 011 00 100 00 101 00 110 00 111 MUX4:0 (dec) 0 1 2 3 4 5 6 7 Wybrany kana ADC 0 ADC 1 ADC 2 ADC 3 ADC 4 ADC 5 ADC 6 ADC 7

Rejestr ADCSRA Rejestr kontrolny i statusowy przetwornika ADC Piszc program, w kodzie programu naley uywa nazwy ADCSR, gdy nazwa ADCSRA nie figuruje w oryginalnym pliku nagwkowym od ATMega16.
Rejestr ADCSRA Bit Dostp Warto pocztkowa

7 ADEN R/W 0

6 ADSC R/W 0

5 ADATE R/W 0

4 ADIF R/W 0

3 ADIE R/W 0

2 ADPS2 R/W 0

1 ADPS1 R/W 0

0 ADPS0 R/W 0

ADEN -

Odblokowanie przetwornika, wpisanie 1 wcza przetwornik, 0 wycza.

40

ADSC -

ADATE -

ADIF -

ADIE -

ADPS2:0 -

Bit rozpoczcia konwersji. W trybie pojedynczego wyzwalania, wpisanie 1 powoduje rozpoczcie kadej konwersji. W trybie automatycznego wyzwalania, wpisanie jedynki uruchamia ten proces. Tryb automatyczny moe by rozpoczty rwnoczenie z wczeniem przetwornika, przez wpisanie odpowiedniej wartoci do ADCSRA. Tryb automatycznego wyzwalania. Ustawienie bitu na 1 powoduje wczenie trybu automatycznego wyzwalania konwersji. ADC rozpoczyna konwersj od narastajcego zbocza wybranego sygnau wyzwalajcego. rdo wybiera si ustawieniem bitw ADTS w rejestrze SFIOR. Flaga przerwania ADC. Ten bit jest ustawiony na 1 gdy ADC zakoczy konwersj i zaktualizuje rejestr danych konwersji ostatnim wynikiem. Przerwanie zwizane z zakoczeniem jest wykonywane, gdy ustawione s bity ADIE oraz bit I w rejestrze SREG. Flaga jest sprztowo kasowana przez wykonywanie kodu obsugi przerwania, lub naley kasowa programowo przez wpisanie 1. Wczenie przerwania ADC. Kiedy bit zostanie ustawiony na 1 i ustawiona jest te flaga I w SREG, to zakoczenie konwersji ADC wywoa przerwanie. Bity wyboru preskalera. Przez odpowiednie ustawienie bitw aktywuje si dzielnik czstotliwoci kwarcu aby dobra odpowiedni zegar dla ADC. Dopuszczalny zakres z jakim moe pracowa to 50-200kHz (wic dla kwarcu 8Mhz bdzie to 64 lub 128).
ADPS2 0 0 0 0 1 1 1 1 ADPS2 0 0 1 1 0 0 1 1 ADPS2 0 1 0 1 0 1 0 1 Dzielnik czstotliwoci 2 2 4 8 16 32 64 128

Rejestry ADCL i ADCH Rejestry danych przetwornika ADC 41

ADLAR = 0
Bit ADCH ADCL Bit Dostp Warto pocztkowa 15 ADC7 7 R R 0 0 14 ADC6 6 R R 0 0 13 ADC5 5 R R 0 0 12 ADC4 4 R R 0 0 11 ADC3 3 R R 0 0 10 ADC2 2 R R 0 0 9 ADC9 ADC1 1 R R 0 0 8 ADC8 ADC0 0 R R 0 0

ADLAR = 1
Bit ADCH ADCL Bit Dostp Warto pocztkowa 15 ADC9 ADC1 7 R R 0 0 14 ADC8 ADC0 6 R R 0 0 13 ADC7 5 R R 0 0 12 ADC6 4 R R 0 0 11 ADC5 3 R R 0 0 10 ADC4 2 R R 0 0 9 ADC3 1 R R 0 0 8 ADC2 0 R R 0 0

Kiedy konwersja przez przetwornik ADC dobiegnie koca, te dwa rejestry zostaj uaktualnione o wynik konwersji. Jeli nastpio odczytanie ADCL rejestry nie s uaktualniane a do odczytania ADCH. Jeli wystarczy wynik 8 bitowy (ADLAR=1), to naley odczyta tylko ADCH. Bit ADLAR ustawia si w rejestrze ADMUX. Rejestr SFIOR Rejestr funkcji specjalnych
Rejestr SFIOR Bit Dostp Warto pocztkowa 7
ADTS2

6
ADTS1

5
ADTS0

R/W 0

R/W 0

R/W 0

4 R 0

3
ACME

2
PUD

1
PSR2

0
PSR10

R/W 0

R/W 0

R/W 0

R/W 0

ADTS2:0 -

rdo automatycznego wyzwalania ADC. Jeli bit ADATE w rejestrze ADCSRA jest ustawiony, to warto bitw ADT wskazuje na rdo automatycznego wyzwalania startu przetwarzania ADC. Wyzwalanie nastpuje na zboczu narastajcym rda.
ADTS2 0 0 0 0 1 1 1 1 ADTS1 0 0 1 1 0 0 1 1 ADTS0 0 1 0 1 0 1 0 1 rdo wyzwalania Tryb Free Running (automatyczne wyzwalanie po zakoczonej konwersji) Komparator analogowy Zewntrzne danie przerwania Licznik 0, przy zrwnaniu Licznik 0, przepenienie Licznik 1, przy zrwnaniu B Licznik 1, przepenienie Licznik 1, zdarzenie przechwycenia

42

9. Interfejs USART Obecny w mikrokontrolerach szeregowy dwukierunkowy interfejs USART (lub UART) najczciej suy do komunikacji z komputerem lub innym mikrokontrolerem. Moduy do tego typu transmisji integrowane w mikrokontrolerach, pozwalaj czsto na zaawansowan konfiguracj i wygodn obsug, a przy tym odciaj CPU. Wybrane istotne cechy moduu USART: Peny duplex (dziki niezalenym rejestrom nadawania i odbioru). Praca synchroniczna lub asynchroniczna. Precyzyjny generator szybkoci transmisji. Obsuga ronych konfiguracji ramek i kontroli parzystoci. Wykrywanie bdw transmisji. Filtrowanie przeciwzakceniowe. Trzy niezalene rda przerwa. Tryb podwjnej szybkoci w trybie asynchronicznym. Tryb komunikacji wieloprocesorowej.

Rys. 9. Schemat blokowy moduu USART

43

USART kontra UART Od ukadu UART, w ktrego czsto wyposaone s inne starsze mikrokontrolery Atmela, np. AT90S9515 rni si midzy innymi tym, e moe pracowa w trybie synchronicznym. W wikszoci przypadkw zachowana jest zgodno ze starszym UART, jednak dwa ulepszenia mog zaburzy kompatybilno. Dodany zosta drugi bufor odbiorczy, a rejestr przesuwny odbiornika moe peni rol trzeciego bufora. Przez to e dwa bufory odbiorcze pracuj jako obrotowy FIFO, odczyt UDR wykonuje si tylko raz na kady nowy odebrany pakiet danych. Bity statusu (FE, DOR) oraz 9 bit danych, musz by odczytywane przed odczytem UDR, gdy potem s tracone. Pin XCK uywany jest tylko w trybie pracy synchronicznej. W zestawie laboratoryjnym, ktry jest tematem niniejszej pracy, przewidziana jest tylko praca w popularnym trybie asynchronicznym. Generator szybkoci transmisji Rejestr szybkoci transmisji UBRR wraz z licznikiem liczcym w d stanowi programowalny preskaler lub generator szybkoci transmisji. Licznik pracuje z czstotliwoci zegara systemowego. Do okrelenia szybkoci transmisji konieczne jest odpowiednie dobranie wartoci rejestru UBRR. Do wyliczenia tej wartoci naley skorzysta z nastpujcej zalenoci: f OSC UBRR = 1 16 BAUD gdzie: fOSC czstotliwo oscylatora [Hz] (pracy mikrokontrolera), BAUD podana warto szybkoci transmisji [bps] Ponisza tabela zawiera zestawienie wartoci UBRR dla kilku wybranych szybkoci transmisji przy czstotliwoci oscylatora z moliwie maym bdem (0,2 %). Tabela 8. Zestawienie przykadowych wartoci UBBR BAUD 2400 4800 9600 19200 UBRR (fOSC = 8MHz) 207 103 51 25 UBRR (fOSC = 12MHz) 312 155 77 38

Inicjalizacja transmisji Przed jakkolwiek transmisj, modu USART musi zosta zainicjalizowany. Inicjalizacja obejmuje ustawienie szybkoci transmisji, wybr formatu ramki oraz odblokowanie ukadu odbiorczego i/lub nadawczego. Jeli operacje USART maj by rdem przerwa, to inicjalizacja powinna by wykonana z wykasowan globaln flag przerwa.

44

Rejestr UDR Rejestr danych IO USART


Rejestr UDR Bit

RXB[7:0] (odczyt) TXB[7:0] (zapis)

Dostp Warto pocztkowa

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

Rejestr nadawczy i odbiorczy USART wspdziel ten sam adres przestrzeni adresowej IO. Zapis do rejestru spowoduje umieszczenie danych w buforze nadawczym (TXB), natomiast poprzez odczyt spod adresu tego rejestru spowoduje odczytanie danych rejestru odbiorczego (RXB). Bufor nadawczy moe by nadpisany tylko wwczas, gdy jest ustawiona flaga UDRE w rejestrze UCSRA, w innym przypadku prba wpisania jest ignorowana. Wpisanie danych do buforu nadawczego, podczas gdy modu nadawczy (transmitter) jest odblokowany, spowoduje przeniesienie danych do rejestru przesuwnego (jeli rejestr przesuwny jest pusty), a to jest rwnoznaczne z rozpoczciem transmisji na pinie TXD. Bufor odbiorczy skada si z dwch buforw FIFO. Ze wzgldu na budow, nie naley korzysta z instrukcji bitowych pod adresem rejestru, gdy zmieni one stan buforu. Rejestr UCSRA Rejestr A kontroli i statusu USART
Rejestr UCSRA Bit Dostp Warto pocztkowa

7 RXC R 0

6 TXC R/W 0

5 UDRE R 1

4 FE R 0

3 DOR R 0

2 PE R 0

1 U2X R/W 0

0 MPCM R/W 0

RXC -

TXC -

UDRE -

Odbir zakoczony. Flaga jest ustawiona, jeli w buforze odbiorczym znajduj si nie odczytane dane. Flaga jest wykasowana, jeli bufor jest pusty. Wyczenie ukadu odbiornika kasuje zawarto buforu, wic i bit RXC jest take kasowany. Flaga RXC moe generowa przerwanie zakoczenia odbioru (zob. opis RXCIE). Transmisja zakoczona. Flaga jest ustawiana, gdy caa ramka zostanie wysana z nadawczego rejestru przesuwnego, oraz bufor nadawczy jest pusty. Flaga jest automatycznie kasowana przy wykonywaniu instrukcji spod wektora przerwa zwizanego z zakoczeniem transmisji, lub moe by skasowana przez wpisanie jedynki. Flaga TXC moe generowa przerwanie zakoczenia transmisji (zob. opis bitu TXCIE). Pusty rejestr danych.

45

FE -

DOR -

PE -

U2X -

MPCM -

Flaga UDRE pojawia si jeli bufor UDR jest gotowy na przyjcie nowych danych. Flaga UDRE moe generowa przerwanie, gdy rejestr transmisji danych bdzie pusty (zob. opis bitu UDRIE). Po resecie mikrokontrolera flaga jest ustawiana na 1. Bdna ramka. Bit ten jest ustawiony jeli nadchodzca ramka w buforze odbiorczym jest bdna np. bit stopu w nadchodzcej ramce ma warto 0. Bit jest wany do odczytania buforu odbiorczego UDR. Bit FE ma warto 0, gdy bit stopu odebranych danych ma warto 1. Zapisujc do UCSRA naley zawsze przypisa temu bitowi warto 0. Przepenienie danych. Ten bit ma warto 1, gdy zostao wykryte zdarzenie przepenienia danych. Zdarzenie to nastpuje, gdy bufor odbiorczy jest peny, a zosta wykryty kolejny bit startu. Bit jest wany a do odczytania buforu odbiorczego (UDR). Zapisujc do UCSRA naley zawsze wpisywa temu bitowi warto 0. Bd parzystoci. Bit ten ma warto 0, gdy zawarto rejestru odbiorczego ma bd parzystoci oraz jest wczona kontrola parzystoci (UPM1=1). Bit traci wano z chwil odczytania rejestru odbiorczego. Zapisujc do UCSRA naley wpisywa 0. Podwjna szybko transmisji. Bit ma znaczenie tylko w transmisji asynchronicznej. Przy korzystaniu z trybu synchronicznego naley go zawsze zerowa. Ustawienie bitu na 1 zmniejsza dzielnik szybkoci transmisji z 16 na 8, co wcza tryb podwjnej szybkoci dla transmisji asynchronicznej. Tryb komunikacji midzy procesorami. Jeli MPCM zostanie ustawiony na 1, wszystkie nadchodzce ramki odbierane przez odbiornik USART, ktre nie zawieraj informacji o adresie, zostan zignorowane. MPCM nie ma wpywu na prac nadajnika.

Rejestr UCSRB Rejestr B kontroli i statusu USART


Rejestr UCSRB Bit Dostp Warto pocztkowa

7 RXCIE R/W 0

6 TXCIE R/W 0

5 UDRIE R/W 0

4 RXEN R/W 0

3 TXEN R/W 0

2 UCSZ2 R/W 0

1 RXB8 R 0

0 TXB8 R/W 0

RXCIE -

TXCIE -

Odblokowanie przerwania zakoczenia odbioru. Ustawienie tego bitu zezwala na generowanie przerwania na pojawienie si flagi RXC. Aby przerwanie zostao wygenerowane, musz by ustawione flagi RXCIE oraz globalna flaga przerwa I. Odblokowanie przerwania zakoczenia nadawania.

46

UDRIE -

RXEN -

TXEN -

UCSZ2 -

RXB8 -

TXB8 -

Ustawienie tego bitu zezwala na generowanie przerwania na pojawienie si flagi TXC. Aby przerwanie zostao wygenerowane, musz by ustawione flagi TXCIE oraz globalna flaga przerwa I. Odblokowanie przerwania na pusty rejestr danych. Ustawienie tego bitu zezwala na generowanie przerwania na pojawienie si flagi UDRE. Aby przerwanie zostao wygenerowane, musz by ustawione flagi UDRIE oraz globalna flaga przerwa I. Odblokowanie odbiornika. Ustawienie tego wcza odbiornik USART. Wczenie odbiornika powoduje, e funkcja RxD staje si nadrzdn nad normalnymi funkcjami IO tego pinu. Wyczenie odbiornika czyci zawarto rejestru odbiorczego oraz uniewania flagi FE, DOR i PE. Odblokowanie nadajnika. Ustawienie tego wcza nadajnik USART. Wczenie nadajnika powoduje, e funkcja TxD staje si nadrzdn nad normalnymi funkcjami IO tego pinu. Wyczanie nadajnika (wpisywanie 0 do TXEN) nie bdzie dawao rezultatu, jeli nie nastpi zakoczenie trwajcego nadawania. Rozmiar znaku. Bit UCSZ2 wraz z bitami UCSZ1:0 stanowi kombinacj, ktra konfiguruje liczb bitw danych w ramce. 8 bit danych odbieranych. RXB8 stanowi 9 bit danych odbieranego znaku, jeli operacje transmisji obywaj si w ramkach o takim formacie. Odczyt tego bitu musi nastpi przed odczytaniem pozostaej czci z rejestru UDR. 8 bit danych nadawanych. TXB8 stanowi 9 bit danych znaku do nadania, jeli operacje transmisji obywaj si w ramkach o takim formacie. Ustawienie tego bitu musi nastpi przed zapisem pozostaej czci do rejestru UDR.

Rejestr UCSRC Rejestr C kontroli i statusu USART Rejestr UCSRC wspdzieli ten sam adres przestrzeni adresowej IO wraz z rejestrem UBRRH. Zobacz opis bitu URSEL.
Rejestr UCSRC Bit Dostp Warto pocztkowa

7 URSEL R/W 0

6 UMSEL R/W 0

5 UPM1 R/W 0

4 UPM0 R/W 0

3 USBS R/W 0

2 UCSZ1 R/W 0

1 UCSZ0 R/W 0

0 UCPOL R/W 0

URSEL -

Wybr rejestru. Bit ten suy do przeczania dostpu midzy rejestrami UBRRH i UCSRC. Ma warto 1 jeli odczytany zosta rejestr UCSRC. Chcc zapisa do rejestru 47

UMSEL -

UPM1:0 -

UCSRC naley do tego bitu wpisywa warto 1. Porwnaj z opisem dla rejestru UBRRH. Wybr trybu USART. Bit ten suy do wyboru midzy prac synchroniczn a asynchroniczn. Do pracy asynchronicznej bit musi mie warto 0, natomiast do synchronicznej naley wpisa ustawi na 1. Tryb parzystoci. Za pomoc tych bitw ustawia si rodzaj parzystoci, ktra jest generowana przy nadawaniu oraz sprawdzana odbieraniu kadej ramki:
UPM1 0 0 1 1 UPM0 0 1 0 1 Tryb parzystoci Parzysto wyczona zastrzeone Wczony, tryb nieparzystoci Wczony, tryb parzystoci

USBS -

Wybr bitu stopu. Ustawienie tych bitw decyduje o liczbie bitw stopu ustawianych przy nadawaniu ramki. Ustawienie to nie ma wpywu na prac odbiornika.
USBS 0 1 Liczba bitw stopu 1 bit 2 bity

UCSZ1:0 -

Liczba bitw danych w ramce. Bit UCSZ2 (rejestr UCSZB) wraz z bitami UCSZ1:0 stanowi kombinacj, ktra konfiguruje liczb bitw danych w ramce i jest uywana przez nadajnik i odbiornik.
UCSZ2 0 0 0 0 1 1 1 1 UCSZ1 0 0 1 1 0 0 1 1 UCSZ0 0 1 0 1 0 1 0 1 Rozmiar znaku 5 bitw 6 bitw 7 bitw 8 bitw zastrzeone zastrzeone zastrzeone 9 bitw

UCPOL -

Polaryzacja zegara. Bit ten jest uywany tylko w trybie pracy synchronicznej. Przy pracy asynchronicznej naley go ustawia na warto 0.

Rejestry UBRRL i UBRRH Rejestr szybkoci transmisji Rejestr UBRRH wspdzieli ten sam adres przestrzeni adresowej IO wraz z rejestrem UCSRC. Zobacz opis bitu URSEL.

48

Rejestr UBRR Bit UBRRH UBRRL Dostp Warto pocztkowa

7 URSEL R/W R/W 0 0

6 R R/W 0 0

5 R R/W 0 0

4 3 UBRR[7:0] R R/W R/W R/W 0 0 0 0

2 1 UBRR[11:8] R/W R/W 0 0 R/W R/W 0 0

R/W R/W 0 0

Wybr rejestru. Bit ten suy do przeczania dostpu midzy rejestrami UBRRH i UCSRC. Ma warto 0 jeli odczytany zosta rejestr UBRRH. Zapisujc do rejestru UBRRH naley do tego bitu wpisywa warto 0. Porwnaj z opisem dla rejestru UCSRC. Bity 6:4 Zarezerwowane do przyszych zastosowa, zapisujc ustawia na warto 0. UBRR11:0 - Rejestr szybkoci transmisji. Te bity stanowi 12 bitowy rejestr wyboru szybkoci transmisji moduu USART. UBRRH zawiera 4 najbardziej znaczce bity, natomiast UBRRL 8 mniej znaczcych. Nadpisanie bitw UBRR wprowadza natychmiastow zmian preskalera w generatorze szybkoci transmisji. Jak oblicza warto UBRR napisano w punkcie Generator szybkoci transmisji. 10. Interfejs SPI

URSEL -

Rys. 10. Schemat blokowy moduu SPI 49

Interfejs SPI (Serial Peripheral Interface) umoliwia synchroniczny transfer (full-duplex) danych midzy ATmega16 i ukadami peryferyjnymi lub midzy kilkoma ukadami AVR. Ukadami peryferyjnymi s ukady o specjalizowanych funkcjach, jak np. pamici szeregowe EEPROM, potencjometry cyfrowe, a take bardziej zoone ukady sterowane cyfrowo jak np. zintegrowany w jeden ukad system audio wraz ze filtrami, wzmacniaczami, mieszaczami. Jest to interfejs 3-przewodowy (lub 4), skadajcy si z dwch linii danych w obu kierunkach (MISO, MOSI) oraz linii synchronizujcej (SCK). W przypadku poczenia dwch ukadw przez SPI, jeden z nich peni role nadrzdn (master) a drugi podrzdn (slave). W przypadku komunikacji midzy dwoma urzdzeniami, lini (Slave Select) mona pomin podczajc j w urzdzeniu podrzdnym do masy.

Rys.11. Schemat pocze midzy ukadami master (z lewej) i slave (z prawej) Rejestr SPCR Rejestr kontroli SPI
Rejestr SPCR Bit Dostp Warto pocztkowa

7 SPIE R/W 0

6 SPE R/W 0

5 DORD R/W 0

4 MSTR R/W 0

3 CPOL R/W 0

2 CPHA R/W 0

1 SPR1 R/W 0

0 SPR0 R/W 0

SPIE SPE DORD -

MSTR -

CPOL -

Odblokowanie przerwania SPI. Bit wczenia interfejsu SPI. Ustawienie tego bitu na 1 powoduje odblokowanie / wczenie SPI. Kolejno danych. Kiedy bit DORD jest ustawiony na 1, dane przesyane s od najmniej znaczcego bitu (LSB). DORD = 0 oznacza wysyanie od bitu najbardziej znaczcego (MSB). Wybr master/slave. Przez wpisanie 1, tym bitem wcza si tryb master (rol ukadu jako nadrzdnego). SPI bdzie pracowa jako slave jeli ten bit bdzie mia warto logicznego zera. Do pracy ukadu jako master, pin powinien by wczeniej ustawiony jako wyjciowy. Polaryzacja zegara. 50

CPHA -

SPR1:0 -

Jeli do CPOL jest wpisane 1, to SCK w spoczynku jest w stanie wysokim, jeli 0, to w stanie niskim. Faza zegara. CPHA=1 pierwsze zbocze sygnau zegarowego prbkuje dane wejciowe a drugie przesuwa dane w rejestrze, CPHA=0 pierwsze zbocze przesuwa dane w rejestrze a drugie prbkuje dane wejciowe. Szybko zegara SPI. Bity kontrolujce szybko taktowania zegara SCK dla urzdzenia skonfigurowanego jako Master (nadrzdny), w stosunku do czstotliwoci oscylatora mikrokontrolera. Dla pracy jako slave, ustawienie nie ma znaczenia.
SPI2X 0 0 0 0 1 1 1 1 SPR1 0 0 1 1 0 0 1 1 SPR0 0 1 0 1 0 1 0 1 Czstotliwo SCK fOSC / 4 fOSC / 16 fOSC / 64 fOSC / 128 fOSC / 2 fOSC / 8 fOSC / 32 fOSC / 64

Rejestr SPSR Rejestr statusowy SPI


Rejestr SPSR Bit Dostp Warto pocztkowa

7 SPIF R 0

6 WCOL R 0

5 R 0

4 R 0

3 R 0

2 R 0

1 R 0

0 SPI2X R/W 0

SPIF -

WCOL -

SPI2X -

Flaga przerwania SPI. Flaga jest ustawiana po zakoczeniu transmisji. Przerwanie jest generowane jeli ustawiony jest bit SPIE w rejestrze SPCR oraz ustawiona globalna flaga przerwa I. Flaga jest ustawiana take, gdy pin jest ustawiony jako wejciowy i w pojawi si na nim stan niski, a SPI ustawiony jest jako master. Flaga jest sprztowo kasowana przy wykonywaniu programu spod wektora przerwa SPI. Flaga kasowana sprztowo jest take, gdy po odczytaniu rejestru SPSI, nastpi dostp (odczyt lub zapis) do rejestru danych SPDR. Flaga kolizji zapisu. Bit jest ustawiony, gdy nastpi zapis do SPDR podczas trwajcej transmisji. Flaga jest kasowana gdy po odczytaniu rejestru SPSI nastpi dostp do rejestru danych SPDR. Podwjna szybko SPI.

51

Ustawienie tego bitu na 1 podwaja szybko pracy SPI (czstotliwo SCK). Zobacz te opis bitw SPR1:0 w rejestrze SPCR. Rejestr SPDR Rejestr danych SPI Rejestr danych SPI suy do odczytu i zapisu transmitowanych danych. Zapis do rejestru inicjuje transmisj. Odczytywanie rejestru powoduje odczyt buforu odbiorczego rejestru przesuwnego.
Rejestr SPSR Bit Dostp Warto pocztkowa

7 MSB R 0

6 R 0

5 R 0

4 R 0

3 R 0

2 R 0

1 R 0

0 LSB R/W 0

11. Interfejs TWI Interfejs TWI (two wire interface) jest w peni zgodny z popularnym I2C firmy Philips, a Atmel uywa innej nazwy aby nie ama praw patentowych. Interfejs I2C podobnie jak SPI, zosta stworzony do komunikacji midzy ukadami scalonymi w obrbie jednego urzdzenia. Komunikacja odbywa si dwuprzewodowo, lini danych SDA oraz lini zegara SCL, ktre s mog by wsplne dla wszystkich ukadw w systemie. Pomimo jednej linii danych, transmisja moe odbywa si dwukierunkowo, jednak ze stosunkowo niewielk transmisj. W wikszoci przypadkw spotyka si moliwo pracy przy czstotliwoci linii SCL do 100kHz, a rzadziej do 400kHz. Modu TWI wbudowany w ATmega16 umoliwia prac w obu tych trybach. Wsppraca wielu ukadw po tych samych przewodach jest moliwa dziki temu, i kademu z urzdze przypisuje si indywidualny adres. Liczba urzdze podczonych jednoczenie jest ograniczona jedynie maksymaln pojemnoci linii 400pF oraz 7-bitow przestrzeni adresow dla urzdze podrzdnych. Projektujc magistral TWI (I2C) nie naley zapomnie o rezystorach podcigajcych.

Rys. 12. Schemat pocze w magistrali TWI (I2C)

52

12. Interfejs JTAG Waciwoci interfejsu JTAG w mikrokontrolerze ATMega16: Interfejs JTAG zgodny ze standardem IEEE 1149.1. Moliwoci skanowania wyprowadze zgodnie ze standardem JTAG. Dodatkowe instrukcje diagnostyczne IDCODE, AVR_RESET. Instrukcje zapewniajce moliwo programowania pamici flash. Funkcje wspomagajce debugowanie i ledzenie dziaania programu w ukadzie. Idea cieki obserwacyjno-testujcej pozwala rozwiza problem testowania coraz bardziej skomplikowanych systemw w moliwie prosty i tani sposb, co ma szczeglne znaczenie przy produkcji wielkoseryjnej. cieka diagnostyczna w systemie w oparciu o magistral IEEE 1149.1 pozwala na wyizolowanie fragmentu obwodu i przetestowaniu go poprzez doprowadzenie wymuszenia i obserwacji reakcji. Daje na przykad moliwo wysterowania i obserwacji poziomw logicznych na cyfrowych pinach wejcia/wyjcia. Z poziomu systemu, wszystkie ukady wyposaone w funkcje JTAG s poczone szeregowo przez linie danych TDI/TDO tworzc dugi rejestr przesuwny. Zewntrzny kontroler poprzez niego konfiguruje piny wyjciowe ukadw i obserwuje wartoci wejciowe otrzymane od innych ukadw. Kontroler porwnuje otrzymane dane ze spodziewanymi wynikami i w ten sposb skanowanie krawdziowe daje moliwo testowania pocze i poprawno dziaania. Fizyczny dostp do interfejsu JTAG umoliwiaj cztery wyprowadzenia mikrokontrolera. Piny te stanowi dostpowy port testowania TAP (Test Acces Port). Tymi pinami s: TMS (test mode select), TCK (test clock), TDI (test data in), TDO (test data out). Zalenie od bitu bezpiecznika JTAGEN, piny te mog peni rol normalnych pinw portw I/O mikrokontrolera lub dziaa jako piny portu TAP. Jeli JTAGEN jest zaprogramowany, normaln prac IO mona wymusi bitem JTD w rejestrze MCUCSR. Oprcz obowizkowych instrukcji definiowanych standardem JTAG, w mikrokontrolerze ATMega16 obecne s dodatkowe instrukcje wspomagajce diagnostyk, s to IDCODE oraz AVR_RESET. Za pomoc IDCODE moemy zidentyfikowa ukad w systemie. Instrukcja AVR_RESET moe si przyda np. do przetestowania systemu, gdy zajdzie potrzeba wprowadzenia mikrokontrolera w stan resetu. Poza moliwociami diagnostycznymi, za pomoc interfejsu JTAG moliwe jest programowanie pamici mikrokontrolera w systemie (poza programowaniem ISP). Dziki zestawowi instrukcji wspierajcych programowanie otrzymujemy moliwo programowania i odczyt zawartoci pamici flash, EEPROM, oraz bitw zabezpieczajcych i konfiguracyjnych. Magistrala JTAG zaimplementowana w ATMega16 umoliwia debugowanie programu w zaprogramowanym mikrokontrolerze bdcym fizycznie czci systemu. Zastosowane rozszerzenia pozwalaj na ledzenie programu krok po kroku, ustawianie puapek czy obserwowanie lub modyfikowanie zawartoci rejestrw. Aby byo moliwe korzystanie z tych 53

udogodnie, konieczne jest skorzystanie ze specjalizowanego interfejsu JTAG ICE (lub zgodnego) do poczenia komputera z mikrokontrolerem. Programowym rodowiskiem na komputerze jest darmowe rodowisko programistyczne AVRStudio dostarczane przez firm Atmel i zawarty w nim symulator. Rejestry zwizane z JTAG Rejestr MCUCSR
Rejestr MCUCSR Bit Dostp Warto pocztkowa

7 JTD R/W 0

6 ISC2 R/W 0

5 R 0

4 JTRF R/W

3 2 1 WDRF BORF EXTRF R/W R/W R/W zobacz w opisie bitw

0 PORF R/W

JTD -

JTRF -

Odczenie interfejsu JTAG . Jeli bezpiecznik JTAGEN jest zaprogramowany, wwczas ustawienie bitu JTD na warto 1 umoliwia wyczenie interfejsu JTAG i moliwo pracy pinom tego interfejsu jako normalne piny IO mikrokontrolera. W celu nieprzypadkowego wyczenia JTAGa, bit JTD musi by zapisany dwukrotnie w cigu 4 cykli zegarowych. Bezpiecznik JTAGEN w fabrycznie nowym ukadzie ATMega16 jest zaprogramowany. Udostpniony w zestawie laboratoryjnym egzemplarz ma JTAGEN nie zaprogramowany, wic nie jest konieczne wyczanie bitem JTD. Flaga resetu JTAG. Bit ten jest ma warto 1, gdy reset mikrokontrolera zosta spowodowany instrukcj AVR_RESET przez JTAG.

Tryby oszczdzania energii Rnorodne tryby oszczdzania energii, pozwalaj na znaczne wyduenie czasu dziaania urzdze zasilanych bateryjnie, a take wpywaj na redukcj emitowanych zakce w rodowiskach, gdzie ma to szczeglne znaczenie. Idle Tryb Idle (bezczynnoci) zatrzymuje jednostk CPU pozwalajc na prac ukadw interfejsw USART, TWI, SPI, przetwornika ADC, systemu przerwa, watchdoga, komparatora analogowego. W tym trybie zegary clkCPU i clkFLASH s zatrzymane podczas gdy inne mog pracowa. Wybudzenie moliwe jest przez wewntrzne lub zewntrze przerwanie. Jeli ukad nie musi by wzbudzany przez komparator, to take komparator mona wyczy dla zwikszenia oszczdnoci energii. Jeli ADC jest wczone, to po wejciu w tryb Idle nastpi automatyczne wystartowanie konwersji.

54

Power-down Tryb Power-down (wyczonego zasilania) wycza mikrokontroler. W tym trybie zewntrzny oscylator jest zatrzymany dotd, a pojawi si przerwanie zewntrzne, dopasowania adresu TWI, watchdoga, reset zewntrzny lub Brown-out. Wyczone zostaj wszystkie zegary pozostawiajc dziaajce moduy asynchroniczne. Ponowne uruchomienie nastpuje z pewnym opnieniem, aby rozpocz ponowne generowanie sygnau zegarowego i aby osign on stabilno. Czas wybudzania jest okrelany przez te same bity zabezpieczajce CKSEL, ktre definiuj opnienie resetu. Power-save Tryb Power-save (oszczdnoci zasilania) jest podobny do Power-down. Jednyn rnic jest moliwo pracy Timera/Licznika2 w sposb asynchroniczny (np. ustawiony bit AS2 w rejestrze ASSR). Moe nastpi przerwanie wybudzajce spowodowane przez timer/licznik 2, jeli odpowiedni bit wczajcy to przerwanie jest ustawiony w TIMSK oraz oglny bit przerwa i w SREG jest ustawiony. Jeli timer asynchroniczny nie bdzie pracowa z zegara asynchronicznego, wwczas zalecane jest zamiast Power-save uycie trybu Powerdown. ADC Noise Reduction Tryb ADC Noise Reduction (redukcji szumw przetwornika ADC) zatrzymuje CPU pozwalajc na prac i wybudzenie przez ADC, zewntrzne przerwania, monitorowanie adresu TWI, timera/licznika2 i watchdoga. Tryb ten pozwala zminimalizowa szum przeczania podczas trwania konwersji przetwornika ADC dla zapewnienia wikszej dokadnoci. Jeli przetwornik jest wczony, to wejcie w stan upienia spowoduje automatyczne rozpoczcie konwersji. Tryb ten powoduje zatrzymanie zegarw clkCPU ,clkI/O i clkFLASH, podczas gdy inne mog pracowa. Standby W trybie Standby (czuwania) rezonator kwarcowy pracuje, podczas gdy reszta ukadu jest w upieniu. Tryb ten moe by uyty tylko jeli ukad skonfigurowany jest do pracy z zewntrznym rdem zegarowym. Podobny jest do trybu Power-down, z t rnic e w poczeniu z bardzo niskim poborem mocy pozwala na bardzo szybkie wybudzenie ukadu. Extended Standby Tryb Extended Standby (rozszerzonego czuwania) od trybu Power-save roni si tym e oscylator pozostaje wczony. Wybudzenie nastpuje w cigu szeciu cykli zegarowych.

55

Rejestr MCUCR Aby wprowadzi ukad w ktry ze stanw oszczdzania energii, naley ustawi bit SE w rejestrze MCUCR, oraz wykona instrukcj SLEEP. Wykonywanie rozkazw zostaje wstrzymane w miejscu wywoania SLEEP i jest kontynuowane z tego miejsca po wybudzeniu. Jeli wybudzenie nastpuje na skutek przerwania, to zachowanie si ukadu jest identyczne, jak by w tym momencie nastpio to przerwanie podczas normalnej pracy. Podany tryb wybiera si konfigurujc bity SMn w MCUCR.
Rejestr MCUCR Bit Dostp Warto pocztkowa

7 SM2 R/W 0

6 SE R/W 0

5 SM1 R/W 0

4 SM0 R/W 0

3 ISC11 R/W 0

2 ISC10 R/W 0

1 ISC01 R/W 0

0 ISC00 R/W 0

SE -

SM2:0 -

Odblokowanie oszczdzania energii (sleep enable). Ustawienie tego bitu w stan 1 umoliwia wprowadzenie mikrokontrolera w jeden z 6 trybw oszczdzania energii. W celu zapobiegnicia przypadkowego wprowadzenia w stan upienia, zalecane jest ustawienie tego bitu na 1 bezporednio przed instrukcj SLEEP oraz wyczyszczenie SE na 0 tu po wybudzeniu. Bity wyboru trybu upienia:
SM2 0 0 0 0 1 1 1 1
(1)

SM1 0 0 1 1 0 0 1 1

SM0 0 1 0 1 0 1 0 1 Idle

Tryb

ADC Noise Reduction Power-down Power-save Konfiguracja zastrzeona Konfiguracja zastrzeona Standby (1) Extended Standby (1)

tryby dostpne tylko z zewntrznym rdem zegara

Tabela 9. Zestawienie rde wybudzania zalenie od trybw oszczdzania energii:


rda wybudzania INT0 SPM/ Pasujcy Pozostae Tryb upienia INT1 Timer 2 EEPROM ADC adres TWI I/O INT2 Ready Idle X X X X X X ADC Noise Reduction X(3) X X X X Power Down X(3) X Power Save X(3) X X(2) (3) Standby X X Extended Standby X(3) X X(2) (2) (3) jeli jest ustawiony bit AS2 w rejestrze ASSR; tylko INT2 lub poziom przerwania INT1 i INT0;

56

Poza wprowadzaniem mikrokontrolera w tryb upienia, dodatkowo mona zmniejsza pobr mocy innymi metodami, jak np. wyczanie niepotrzebnych podukadw. 13.Programowanie w systemie (ISP) Zarwno pami flash jak i EEPROM, a take bity konfiguracyjne i zabezpieczajce mog by programowane za pomoc szeregowego interfejsu w systemie (In-System Programming - ISP). Programowanie w systemie oznacza, e zaprogramowanie i weryfikacja zawartoci pamici ukadu jest moliwa w mikrokontrolerze bdcym fizycznie na docelowej pytce drukowanej wraz z innymi ukadami. Jest to charakterystyczna cecha wszystkich mikrokontrolerw z szerokiej rodziny AVR firmy Atmel. Programowanie szeregowe w systemie moe odbywa si za pomoc szyny SPI jak i JTAG. Jeli w systemie magistrala JTAG nie jest wykorzystywana, to uywanie tego sposobu wycznie do programowania jest mao praktyczne. Do tego celu konieczne by byo zrezygnowanie z 4 pinw mikrokontrolera normalnie dziaajcych jako piny portw IO. W przypadku programowania przez SPI nie ma takiej koniecznoci. Jest to moliwe, gdy jest wysterowany niskim poziomem (zwarty do masy), odbywa si to, gdy pin a wwczas (w stanie resetu) wszystkie piny IO mikrokontrolera s w stanie wysokiej impedancji. W niniejszym ukadzie uruchomieniowym przewidziana zostaa moliwo programowania ISP za porednictwem szyny SPI.

Rys. 13. Sposb podczenia programatora szeregowego Do poczenia z komputerem, wykorzystany bdzie programator typu STK200 PonyProg (nazwany rwnie AVR-ISP), podczany do portu rwnolegego. W poczeniu z darmowym programem PonyProg 2000, z poziomu ukadu bdzie zgodny z zalecanym przez firm Atmel programatorem STK200. Konstrukcja samego programatora nie jest skomplikowana i przedstawia j rysunek 14.

57

Rys.14. Schemat programatora SKT200 PonyProg 14. Opis instrukcji asemblera W poniszym zestawieniu instrukcji, w argumentach uywane s nastpujce oznaczenia: Rd R0-R31, rejestr docelowy operacji (take rdowy), czasem np. 16 d 31, Rr R0-R31, rejestr rdowy, czasem np. 16 r 31, b staa o wartoci 0-7, do oznaczania numeru lub nazwy bitu, np. OCIE0, s staa o wartoci 0-7, bit rejestru statusowego SREG, np. V, Z, P staa (0-31/63) okrelajca adres z przestrzeni adresowej I/O, np. PORTA, K staa (0-31/63) okrelajca adres z przestrzeni adresowej I/O, np. R16, PORTA, k staa z przedziau wartoci zalenego od instrukcji, q staa (0-63) okrelajca warto przesunicia przy adresowaniu porednim, X rejestr adresowania poredniego, X=R27:26, Y rejestr adresowania poredniego, Y=R29:28, Z rejestr adresowania poredniego, Z=R31:30. Opis oznacze flag rejestru statusowego SREG (szczegy w rozdziale Zarys budowy rdzenia AVR): C flaga przeniesienia (carry), Z flaga zera, N flaga wyniku ujemnego, V wskanik przepenienia uzupenienia do dwch, S S = N V, do testw znaku, H flaga przeniesienia powkowego (half carry), T bit transferowy, uywany przez instrukcje BLD i BST, I globalna flaga przerwa. Opis kolumn: Mnemonik skadnia instrukcji asemblera, Opis skrcony opis operacji realizowanej przez instrukcj, Operacja logiczny zapis operacji wykonywanej przez instrukcj,

58

Clk liczba taktw zegara systemowego potrzebnych na wykonanie operacji. Pozostae oznaczenia uywane w zestawieniu instrukcji: SP wskanik stosu (stack pointer), STACK stos adresw powrotnych i przechowywanych rejestrw. W przypadku uywania zoonych instrukcji jak np. mnoenie (MULS, FMULS itd.), zalecane jest skorzystanie z opisu w pomocy programu AVRStudio lub dokumentacji instrukcji mikrokontrolerw AVR [4]. Instrukcje arytmetyczne i logiczne
Mnemonik
ADD Rd, Rr ADC Rd, Rr ADIW Rdl,K SUB Rd, Rr SUBI Rd, K SBC Rd, Rr SBCI Rd, K SBIW Rdl,K AND Rd, Rr ANDI Rd, K OR Rd, Rr ORI Rd, K EOR Rd, Rr COM Rd NEG Rd SBR Rd,K CBR Rd,K INC Rd DEC Rd TST Rd CLR Rd SER Rd MUL Rd, Rr MULS Rd, Rr MULSU Rd, Rr FMUL Rd, Rr FMULS Rd, Rr FMULSU Rd, Rr

Opis
Dodaj dwa rejestry Dodaj dwa rejestry z CARRY Dodaj sta do sowa Odejmij rejestr od rejestru Odejmij sta od rejestru (16 d 31) Odejmij rejestr od rejestru z CARRY Odejmij sta od rejestru z CARRY (16 d 31) Odejmij sta od sowa Logiczny AND, dwa rejestry Logiczny AND, rejestr i staa Logiczny OR, dwa rejestry Logiczny OR, rejestr i staa (16 d 31) Exclusive OR, dwa rejestry Dopenienie do $FF Dopenienie do $00 Ustaw bit(y) w rejestrze (16 d 31) Wyczy bit(y) w rejestrze (16 d 31) Incrementuj Dekrementuj Test czy zero lub minus Wyczy rejestr Ustaw rejestr (16 d 31) Mnoenie bez znaku Mnoenie ze znakiem (16 d,r 31) Mnoenie liczby ze znakiem i bez (16 d,r 23) Uamkowe mnoenie bez znaku (16 d,r 23) Uamkowe mnoenie ze znakiem (16 d,r 23) Uamkowe ze znakiem lub bez (16 d,r 23)

Operacja
Rd Rd + Rr Rd Rd + Rr + C Rdh:Rdl Rdh:Rdl + K Rd Rd - Rr Rd Rd K Rd Rd - Rr - C Rd Rd - K - C Rdh:Rdl Rdh:Rdl - K Rd Rd Rr Rd Rd K Rd Rd v Rr Rd Rd v K Rd Rd Rr Rd $FF Rd Rd $00 Rd Rd Rd v K Rd Rd ($FF - K) Rd Rd + 1 Rd Rd 1 Rd Rd Rd Rd Rd Rd Rd $FF R1:R0 Rd * Rr R1:R0 Rd * Rr R1:R0 Rd * Rr R1:R0 (Rd * Rr) << 1 R1:R0 (Rd * Rr) << 1 R1:R0 (Rd * Rr) << 1

Flagi
Z,C,N,V,H Z,C,N,V,H Z,C,N,V,S Z,C,N,V,H Z,C,N,V,H Z,C,N,V,H Z,C,N,V,H Z,C,N,V,S Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V Z,C,N,V Z,C,N,V,H Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V adne Z,C Z,C Z,C Z,C Z,C Z,C

Clk
1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2

59

Instrukcje organizujce rozgazienia


Mnemonik
JMP k RJMP k IJMP RCALL k ICALL CALL k RET RETI CPSE Rd,Rr CP Rd,Rr CPC Rd,Rr CPI Rd,K SBRC Rr, b SBRS Rr, b SBIC P, b SBIS P, b BRBS s, k BRBC s, k BREQ k BRNE k BRCS k BRCC k BRSH k BRLO k BRMI k BRPL k BRGE k BRLT k BRHS k BRHC k BRTS k BRTC k BRVS k BRVC k BRIE k BRID k

Opis
Skok bezporedni Skok wzgldny Skok poredni do (Z) Skok wzgldny ze ladem Skok poreni ze ladem Skok bezporedni Powrt z procedury Powrt z obsugi przerwania Porwnaj, pomi jeli rwne Porwnaj Porwnaj z CARRY Porwnaj rejestr ze sta (16 d 31) Pomi jeli bit w rejestrze rwny 0 Pomi jeli bit w rejestrze rwny 1 Pomi jeli bit w rejestrze I/O rwny 0 Pomi jeli bit w rejestrze I/O rwny 1 Skok gdy flaga STATUS rwna 1 Skok gdy flaga STATUS rwna 0 Skok gdy rwne Skok gdy nierwne Skok gdy CARRY rwne 1 Skok gdy CARRY rwne 0 Skok gdy wiksze lub rwne Skok gdy mniejsze Skok gdy minus Skok gdy plus Skok gdy wik. lub rwne, ze znakiem Skok gdy mniej ni zero, ze znakiem Skok gdy flaga HALF CARRY = 1 Skok gdy flaga HALF CARRY = 0 Skok gdy flaga T = 1 Skok gdy flaga T = 0 Skok gdy flaga OVERFLOW = 1 Skok gdy flaga OVERFLOW = 0 Skok gdy przerwania wczone Skok gdy przerwania wyczone

Operacja
PC k PC PC + k + 1 PC Z PC PC + k + 1 PC Z PC k PC STACK PC STACK if (Rd = Rr) PC PC + 2 or 3 Rd Rr Rd Rr C Rd K if (Rr(b)=0) PC PC + 2 or 3 if (Rr(b)=1) PC PC + 2 or 3 if (P(b)=0) PC PC + 2 or 3 if (P(b)=1) PC PC + 2 or 3 if (SREG(s) = 1) then PCPC+k + 1 if (SREG(s) = 0) then PCPC+k + 1 if (Z = 1) then PC PC + k + 1 if (Z = 0) then PC PC + k + 1 if (C = 1) then PC PC + k + 1 if (C = 0) then PC PC + k + 1 if (C = 0) then PC PC + k + 1 if (C = 1) then PC PC + k + 1 if (N = 1) then PC PC + k + 1 if (N = 0) then PC PC + k + 1 if (N V= 0) then PC PC + k + 1 if (N V= 1) then PC PC + k + 1 if (H = 1) then PC PC + k + 1 if (H = 0) then PC PC + k + 1 if (T = 1) then PC PC + k + 1 if (T = 0) then PC PC + k + 1 if (V = 1) then PC PC + k + 1 if (V = 0) then PC PC + k + 1 if ( I = 1) then PC PC + k + 1 if ( I = 0) then PC PC + k + 1

Flagi
adne adne adne adne adne adne adne I adne Z, N,V,C,H Z, N,V,C,H Z, N,V,C,H adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne

Clk
2 2 2 3 3 3 4 4 1/2/3 1 1 1 1/2/3 1/2/3 1/2/3 1/2/3 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2

60

Instrukcje transferu danych


Mnemonik
MOV Rd, Rr MOVW Rd, Rr LDI Rd, K LD Rd, X LD Rd, X+ LD Rd, - X LD Rd, Y LD Rd, Y+ LD Rd, - Y LDD Rd,Y+q LD Rd, Z LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q LDS Rd, k ST X, Rr ST X+, Rr ST - X, Rr ST Y, Rr ST Y+, Rr ST - Y, Rr STD Y+q,Rr ST Z, Rr ST Z+, Rr ST -Z, Rr STD Z+q,Rr STS k, Rr LPM LPM Rd, Z LPM Rd, Z+ SPM IN Rd, P OUT P, Rr PUSH Rr POP Rd

Opis
Przelij z rejestru do rejestru Kopiuj sowo rejestru aduj sta do rejestru (16 d 31) aduj porednio aduj porednio i inkrementuj indeks Dekrementuj indeks i aduj porednio aduj porednio aduj porednio i inkrementuj indeks Dekrementuj indeks i aduj porednio aduj porednio z przesuniciem aduj porednio aduj porednio i inkrementuj indeks Dekrementuj indeks i aduj porednio aduj porednio z przesuniciem aduj bezporenio z SRAM-u Zachowaj porednio Zachowaj porednio i inkrementuj indeks Dekrementuj indeks i zachowaj porednio Zachowaj porednio Zachowaj porednio i inkrementuj indeks Dekrementuj indeks i zachowaj porednio Zachowaj porednio z przesuniciem Zachowaj porednio Zachowaj porednio i inkrementuj indeks Dekrementuj indeks i zachowaj porednio Zachowaj porednio z przesuniciem Zachowaj bezporednio w SRAM-ie aduj pami programu aduj pami programu aduj pami programu i postinkrementuj Zachowaj pami programu Czytaj port Wylij na port Wylij na stos Pobierz ze stosu

Operacja
Rd Rr Rd +1:Rr Rr +1:Rr Rd K Rd (X) Rd (X), X X + 1 X X - 1, Rd (X) Rd (Y) Rd (Y), Y Y + 1 Y Y - 1, Rd (Y) Rd (Y + q) Rd (Z) Rd (Z), Z Z + 1 Z Z - 1, Rd (Z) Rd (Z + q) Rd (k) (X) Rr (X) Rr, X X + 1 X X - 1, (X) Rr (Y) Rr (Y) Rr, Y Y + 1 Y Y - 1, (Y) Rr (Y + q) Rr (Z) Rr (Z) Rr, Z Z + 1 Z Z - 1, (Z) Rr (Z + q) Rr (k) Rr R0 (Z) R0 (Z) R0 (Z) , Z Z+1 (Z) R1:R0 Rd P P Rr STACK Rr Rd STACK

Flagi
adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne adne

Clk
1 1 1 2

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 1 1 2 2

61

Instrukcje operacji bitowych


Mnemonik
SBI P,b CBI P,b LSL Rd LSR Rd ROL Rd ROR Rd ASR Rd SWAP Rd BSET s BCLR s BST Rr, b BLD Rd, b SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLS SEV CLV SET CLT SEH CLH NOP SLEEP WDR

Opis
Ustaw bit w rejestrze I/O Wyczy bit w rejestrze I/O Logiczne przesunicie w lewo Logiczne przesunicie w prawo Rotacja w lewo przez CARRY Rotacja w prawo przez CARRY Arytmetyczne przesunicie w prawo Zamie zawartoci starszej i modszej poowy rejestru Ustaw flag Wyczy flag Przepisz bit z rejestru do T Zaaduj bit rejestru stanem T Ustaw flag CARRY Wyczy flag CARRY Ustaw flag N ( flaga NEGATIVE ) Wyczy flag N ( flaga NEGATIVE ) Ustaw flag ZERO Wyczy flag ZERO Wcz przerwania Wycz przerwania Ustaw flag S ( flaga SIGNED TEST ) Wyczy flag S ( flaga SIGNED TEST ) Ustaw flag V (TWOS COMPLEMENT OVERFL) Wyczy flag V (TWOS COMPLEMENT OVER) Ustaw T w SREG Wyczy T w SREG Ustaw flag H (flaga HALF CARRY) w SREG Wyczy flag H (flaga HALF CARRY) w SREG Nic nie rb Wejd w stan Sleep Resetuj Watchdoga

Operacja
I/O(P,b) 1 I/O(P,b) 0 Rd(n+1) Rd(n), Rd(0) 0 Rd(n) Rd(n+1), Rd(7) 0 Rd(0)C,Rd(n+1) Rd(n),CRd(7) Rd(7)C,Rd(n) Rd(n+1),CRd(0) Rd(n) Rd(n+1), n=0..6 Rd(3..0)Rd(7..4),Rd(7..4)Rd(3..0) SREG(s) 1 SREG(s) 0 T Rr(b) Rd(b) T C1 C0 N1 N0 Z1 Z0 I1 I0 S1 S0 V1 V0 T1 T0 H1 H0 ---zobacz opis trybw pracy zobacz opis watchdoga

Flagi
adne adne Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V adne SREG(s) SREG(s) T adne C C N N Z Z I I S S V V T T H H adne adne adne

Clk
2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1

62

You might also like