Liczniki/czasomierze (T/C) należą do standardowego składu wewnętrznych układów peryferyjnych (WEP) mikrokontrolerów. Często różnią się znacznie pod względem funkcji, które rozszerzają proste zliczanie sygnałów. Omówimy przykłady 8-mio bitowego licznika z wyposażenia ADuC812 (CISC 51) oraz mikrokontrolera ATMega128 należącego do rodziny AVR. ATMega128 to 8-bitowy następca wcześniejszych konstrukcji wywodzących się z procesorów RISC o (zmodyfikowanej) architekturze Harwardzkiej utworzonych w 1996 r. przez dwóch norweskich studentów. Alf-Egil Bogen oraz Vegard Wollan zaprojektowali i wdrożyli RISC procesor, który był ich odpowiedzią na dominujące układy 8051. Odniesienia były ważne do tego stopnia, że pierwszy mikrokontroler AVR w obudowie 40-nóżkowej miał identyczne funkcje wszystkich pinów jak odpowiednik 8051 mógł być wlutowany na jego miejsce. PODAJE SIĘ, ŻE POMIĘDZY 1997 A 2003 ATMEL, KTÓRY PRZEJĄŁ PRODUKCJĘ AVR, ROZPROWADZIŁ 500 MILIONÓW TYCH MIKROKONTROLERÓW. Czasomierze zliczają sygnały będące zwykle związane z taktowaniem mikrokontrolerów, więc temat jest okazją do uwag o gospodarce czasowej. 1/ 17
ADuC812 (CISC 51) T0 / T1 tryb 0 T0 / T1 tryb 1 T0 / T1 tryb 3 T0 / T1 tryb 2 2/ 11
ADuC812 (CISC 51) REJESTRY SPECJALNEGO PRZEZNACZENIA (Special Function Registers) : Rejestr TCON przeznaczony (wraz z rejestrem TMOD, opisanym dalej) do sterowania pracą układów licznikowych T0 i T1. TCON ma adres 088H i jest zatem dostępny bitowo. TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 7 6 5 4 3 2 1 0 TF1, TF0 WSKAŹNIKI PRZERWANIA, USTAWIANE I ZEROWANE SPRZĘTOWO, TR1, TR0 BITy WŁĄCZAJĄCE I WYŁĄCZAJĄCE UKŁADY LICZNIKOWE (1 i 0, odpowiednio). Np.: komenda SETB TR1 ; spowoduje uruchomienie licznika T1 (nie zeruje!) IE1, IE0 BITY ZEZWOLEŃ NA PRZERWANIA ZEWNĘTRZNE, IT1, IT0 STEROWANIE PRZERWANIAMI ZEWN.: 0 PRZERWANIA OD NISKIEGO POZIOMU, 1 PRZERWANIE OD OPADAJĄCEGO ZBOCZA Wiele mikrokontrolerów posiada więcej niż dwa wewnętrzne układy licznikowe. Sterowanie pracą tych dodatkowych liczników odbywa się poprzez użycie dodatkowych SFR. Na przykład mikrokontrolery C52, CL52, C55... wyposażone są w trzy 16-bitowe układy licznikowe. Dodatkowy rejestr T2 ma odpowiadające mu rejestry specjalne, T2CON (0C8H) (T2MOD 0C9H), RCAP2L, RCAP2H, T2L, T2H, które służą do sterowania jego pracy, nieco różniącej się od pracy liczników T0 i T1. 3/ 11
ADuC812 (CISC 51) REJESTRY SPECJALNEGO PRZEZNACZENIA (Special Function Registers) : Rejestr TMOD, o adresie 089H, używany jest dla ustawienia pracy układu albo jako licznika cykli maszynowych albo licznika sygnałów zewnętrznych i wybrania trybu pracy, GATE C/T M1 M0 GATE C/T M1 M0 7 6 5 4 3 2 1 0 GATE (TMOD.7, lub TMOD.3) BIT STERUJĄCY. C/T - M1 0 STEROWANIE WYŁĄCZNIE PRZEZ TR1, 1- ZLICZANIE, GDY /INT1 I TR1=1 0 ZLICZANIE CYKLI MASZYNOWYCH ( CZASOMIERZ ) 1 - ZLICZANIE IMPULSÓW ZEWNĘTRZNYCH ( LICZNIK ) M0 0 0 TRYB 0, układ pracuje jako 13-bitowy czasomierz/licznik 0 1 TRYB 1, układ pracuje jako 16-bitowy czasomierz/licznik 1 0 TRYB 2, układ pracuje jako 8-bitowy licznik z automatycznym przeładowaniem 1 1 TRYB3, działania T0 i T1 różnią się, w tym trybie. T0 wykorzystuje swoje liczniki TL0 i TH0 jako niezależne, 8-mio bitowe liczniki. TLO działa podobnie jak licznik w trybie 0, a THO jako czasomierz, który startuje i zatrzymuje bit TR1 i którego przepełnienie sygnalizuje TF1. Przez to działanie licznika T1 jest zubożone. 4/ 17
ADuC812 (CISC 51) coś z życia: ;. konfiguracja MOV TCON,#01H ;set IT0, IT1 for "falling edge" mode SETB PX0 ;INT0 - highest priority MOV SCON,#10010000B ;SERIAL IN MODE 2, READ ENABLE MOV TMOD,#00010001B ;Timer0 - mod1 (16BIT), TIMER1 - mod1 (16 bit) SETB EA ;interrupts allowed SETB EX0 ;from external 0 (always ON for AddressStrobe) SETB ET0 ;from TIMER0 SETB ET1 ; TIMER1 SETB ES ; serial port ;. tnul: PUSH ACC PUSH PSW MOV A,LASTON JZ tnu1 DEC LASTON tnu1: POP PSW POP ACC RETI Obsługa przerwań tone: PUSH ACC PUSH PSW MOV A,ASKED JZ tonf DEC ASKED SJMP tonfi tonf: CLR TR1 tonfi: POP PSW POP ACC RETI 5/ 17
ADuC812 (CISC 51), AVR WEWNĘTRZNE UKŁADY PERYFERYJNE MIKROKONTROLERÓW WYMAGAJĄCE TAKTOWANIA KORZYSTAJĄ NAJCZĘŚCIEJ WPROST LUB POŚREDNIO ( NP. PRZEZ DZIELNIKI) Z TAKTOWANIA CPU. CZĘSTO TEŻ TAKTOWANIE CPU MOŻE BYĆ NARZUCONE PRZEZ URZĄDZENIE PERYFERYJNE (NP.: MAGICZNY KWARC 11.0592 MHz DLA RS232) 6/ 17
ADuC812 (CISC 51) AVR 7/ 17
40-TO NÓŻKOWA OBUDOWA ATMEGA32 NIE JEST JUŻ WIERNĄ KOPIĄ 8051. MAPA I ZNACZENIE FUNKCJI WYPROWADZEŃ (CZĘSTO PODWÓJNYCH LUB POTRÓJNYCH) JEST WAŻNYM ŹRÓDŁEM INFORMACJI O DANYM MIKROKONTROLERZE Z RYSUNKU OBOK WIDAĆ, ŻE ATMega32 MA CZTERY 8-BITOWE PORTY PA, PB, PC i PD 8-MIO KANAŁOWY PRZETWORNIK ADC INTERFEJS SZEREGOWY I2C INTERFEJS SZEREGOWY SPI INTERFEJS SZEREGOWY UART DWA TIMER/COUNTERs 0 i 1 DWA WEJŚCIA ANALOGOWE DWIE LINIE PRZERWAŃ ZEWNĘTRZNYCH 8/ 17
MAPA WYPROWADZEŃ µ-kontrolera ATMega128 W OBUDOWIE DO MONTAŻU POWIERZCHNIOWEGO PRZYNOSI PODOBNE INFORMACJE 9/ 17
RZUT OKA NA SCHEMAT BLOKOWY ATMega128 10/ 17
8-mio bitowy licznik/czasomierz ATMega 128 przykład ewolucji WUP (wewnętrznych układów peryferyjnych) 11/ 17
I JEGO 16-BITOWA ODMIANA 12/ 17
Tryby pracy 8-bitowego Licznika/Czasomierza ATMega 128: - normalny (WGM01:0 = 0) - CTC ( Clear Timer on Compare) zeruj przy zrównaniu (WGM01:0 = 2) - tryb szybkiej modulacji szerokości impulsu (Fast PWM mode) (WGM01:0 = 3) - tryb wysokiej rozdzielczości fazowej (WGM01:0 = 1) - praca asynchroniczna ZERUJ rejestr TCNT0 GDY ZRÓWNA SIĘ Z rejestrem OC0 13/ 17
c.d. przeglądu trybów pracy 8-mio bitowego Licznika/Czasomierza ATMega 128 (architektura AVR) TRYB SZYBKIEJ MODULACJI SZEROKOŚCI IMPULSU ( NA WYJŚCIU OC0 ) 14/ 17
Tryb pracy Czasomierza/Licznika z wysoką rozdzielczością (precyzją) kontroli fazy przebiegu fali prostokątnej. Jak się to robi? Jak zwykle: konfigurując właściwe rejestry! 15/ 17
REJESTRY STERUJĄCE PRACĄ 8-MIO BITOWEGO LICZNIKA CZASOMIERZA DLA ATMega128: TCCR0, TCNT0, OCR0, ASSR, TIMSK, TIFR, SFIOR TCCR0: FOC0 7 W WGM00 6 R/W COM01 5 R/W COM00 4 R/W WGM01 3 R/W CS02 2 R/W CS01 1 R/W CS00 0 R/W FOC0 Force Output Compare bit aktywny jedynie dla trybów NORMAL i CTC. Działa jako strobe, wymusza compare match WGM01:WGM00 para bitów sterująca trybem pracy C0/T0 COM01:COM00 - para bitów sterująca wyjściem OC0 ( non-pwm mode): 00 OC0 odłączone, zwykła operacja linii portu 01 OC0 zmienia stan przy compare match 10 OC0 zerowane przy compare match 11 OC0 ustawiane przy compare match ( Fast PWM mode): 00 OC0 odłączone, zwykła operacja linii portu 01 nieużywane ( reserved 10 OC0 zerowane przy compare match, a ustawiane dla TOP 11 OC0 ustawiane przy compare match, a zerowane dla TOP TOP zależnie odtrybu pracy może oznaczać 0xFF lub wartość ustawioną w OCR0 ( Phase Correct PWM mode): 00 OC0 odłączone, zwykła operacja linii portu 01 nieużywane ( reserved 10 OC0 zerowane przy compare match UP, a ustawiane dla DOWN count 11 OC0 ustawiane przy compare match, UP a zerowane dla DOWN 16/ 17
REJESTRY STERUJĄCE PRACĄ 8-MIO BITOWEGO LICZNIKA CZASOMIERZA DLA ATMega128: TCCR0, TCNT0, OCR0, ASSR, TIMSK, TIFR, SFIOR TIMSK: OCIE2 7 R/W T0IE0 6 R/W TICIE1 5 R/W OCIE1A 4 R/W OCIE1B 3 R/W TOIE1 2 R/W OCIE0 1 R/W TOIE0 0 R/W OCIE0 - Bit 1 Timer/Counter Output Compare Match interrupt enable TOIE0 - Bit 0 Timer/Counter Overflow interrupt enable TIFR: OCF2 7 R/W T0V2 6 R/W ICF1 5 R/W OCF1A 4 R/W OCF1B 3 R/W TOV1 2 R/W OCF0 1 R/W TOV0 0 R/W OCF0 - Bit 1 Output Compare Flag 0 (zerowana sprzętowo, ale też przez wpisanie w nią jedynki!!!) TOV0 - Bit 0 Timer/Counter Overflow Flag. (j.w.) SFIOR: TSM 7 R/W - 6 R - 5 R - 4 R ACME 3 R/W PUD 2 R/W PSR0 1 R/W PSR321 0 R/W TSM - Bit 7 Timer/Counter synchronization mode (gdy 0 to PSR0 zerowany sprzętowo i liczniki synchr.) PSR0 - Bit 1 Prescaler Reset Timer/Counter0 (gdy 1, to prescaler zostanie resetowany) 17/17