ATMEGA16 Timeri/counteri Sistemi u realnom vremenu Laboratorijske vježbe br. 5 Timeri/counteri Sposobnost mikrokontorlera da obavljaju vremenski-zavisne zadatke je jedan od glavnih razloga za njihovo korištenje Mikrokontroler se može programirati da pali/gasi neki vanjski uređaj u određeno vrijeme Složenija aplikacija bi bila korištenje mikrokontrolera za generiranje kompleksnih digitalnih valnih oblika (PWM) npr. za upravljanje DC motora 1
Osnova sistema za timere je vremenski signal clocka. Frekvencija kristala mikrokontrolera kreira osnovni signal clocka, koji osvježava sadržaj registra brojača. Registar brojača se inkrementira na rastuću ili padajuću ivicu signala clocka. Npr, ako je frekvencija clocka 2 MHz, brojač se inkrementira svakih 0.5 μs. Na ovaj je način moguće: Mjeriti vremenske intervale Izmjeriti vrijeme dešavanja nekog događa Generirati signale Mjerenje perioda signala, širinu implusa, ili vrijeme logičke promjene signala 2
Za izlazne funkcije timera, mikrokontroler koristi komparator, brojač, logičke prekidače i registre posebne namjene. Komparator provjerava vrijednost registra brojača i uspoređuje sa sadržajem drugog registra posebne namjene gdje programer upisuje neku vrijednost. Pri svakom ciklusu clocka vrši se provjera, i kada se desi podudaranje, hardverski sistem inicira promjenu logike na il izlaznom pinu. Na ovaj način moguće je kreirati jednostavnu promjenu logike u nekom vremenskom trenutku: impuls željene širine ili PWM signal za upravljanje servo ili DC motora. Timeri se mogu koristiti i za mjerenje širine impulsa aperiodičkih signala Na primjer, ako su vremena rastuće i padajuće ivice signala 1,5s i 1,6s respektivno, možemo to iskoristiti da izračunamo da je trajanje signala 0,1s 3
Ako je frekvecija mikrokontrolera 2MHz, a registar brojača je 16-bitni, period clocka je 0.5 μs, prema tome registar se napuni za vrijeme 32,78 ms (brojanje od 0 do 65536). Nakon što se registar napuni generira se interrupt koji se može koristiti za inkrementiranje neke varijable i na taj način se mjeri vrijeme ATMEGA16 Timeri Atmel ATmega16 ima tri timer kanala (Timer 0, Timer 1, and Timer 2) Dva su 8-bitni, a jedan 16-bitni Svaki je kanal opremljen prescalerom (skalira a signal sg takta a mikrokontrolera o oe pri čemu usporava brojač) 4
Svaki od kanala ima sposobnost generiranja PWM signala, generiranja periodičnog signala specifične frekvencije, brojanja događaja i generiranja preciznih signala korištenjem izlaznih kanala Dodatno, Timer 1 ima Input Capture mogućnost 5
A Timer 0 block diagram is shown in Figure 5.6. The clock source for Timer 0 is provided via an external clock source at the T0 pin (PB0) of the microcontroller. Timer 0 may also be clocked internally via the microcontroller s main clock ( fclk I/O). This clock frequency may be too rapid for many applications. Therefore, the timing system is equipped with a prescaler to subdivide the main lock frequency down to timer system frequency (clktn). The clock source for Timer 0 is selected using the CS0[2:0] bits contained in the Timer/Control Register (TCCR0). The TCCR0 register 6
also contains the WGM0[1:0] and the COM0[1:0] bits, which are used to select the mode of operation for Timer 0 as well as tailor waveformgeneration for a specific application. The timer clock source (clktn) is fed to the 8-bit Timer/Counter Register (TCNT0). This register is incremented (or decremented) on each clktn clock pulse. Timer 0 is also equipped with an 8-bit comparator that constantly compares the counts of TCNT0 to the Output Compare Register (OCR0). The compare signal fromthe 8-bit comparator is fed to the waveformgenerator. The waveform generator has a number of inputs (top, bottom, WGM0[1:0], and COM0[1:0]) to perform different operations with the timer system. The BOTTOM signal for the waveform generation and the control logic, shown in Figure 5.6, is asserted when the timer counter TCNT0 reaches all 0 s (0x00). The MAX signal for the control logic unit is asserted when the counter reaches all 1 s (0xFF). The TOP signal for the waveform generation is asserted by either reaching the maximum count values of 0xFF on the TCNT0 register or reaching the value set in the OCR0. The setting for the TOP signal will be determined by the timer s mode of operation. Timer 0 also uses certain bits within the Timer/Counter Interrupt Mask Register (TIMSK) and the Timer/Counter Interrupt Flag Register (TIFR) to signal interrupt-related events. Timer 0 shares these registers with the other two timer channels. Načini rada Svi timeri mogu raditi na četiri načina: Normalni, CTC, fast PWM i Phase Correct PWM. Način rada se određuje preko WGM00 i WGM01, bita iz registra TCCR0. 7
Načini rada Normalan način rada Timer kontinualno broji od count from 0x00 (BOTTOM) do 0xFF (TOP). Kada se TCNT0 vrati na 0, setuje se Timer/Counter Overflow Flag (TOV0) Normal mode je koristan za generiranje periodičkog signala koji se koristi za računanje proteklog vremena ili generiranje delaya u sistemu. 8
Načini rada Clear Timer on Compare Match (CTC) Kod ovog načina rada timer se resetuje svaki puta kada brojač TCNT0 dostigne vrijednost u OCR0. Kada se to dogodi setuje se Output Compare Flag 0 (OCF0). The OCF0 zastavica se omogućuje setovanjem bita Timer/Counter 0 Output Compare Interrupt Enable (OCIE0) u registru TIMSK i I-bita u SREG. CTC način rada generira precizan digitalni signal kao što je periodički signal ili samo jedan impuls. Korisnik mora definirati trajanje kao funkciju clock tickova Timera 0 Načini rada Phase Correct PWM Mode Kod ovog načina rada TCNT0 registar broji od 0x00 do 0xFF i nazad do 0x00 Svaki put kada se vrijednost TCNT0 poklopi op sa vrijednošću TCNT0 registra, egs setuje se zastavica OCF0 i dođe do promjene PWM signala. 9
Načini rada Fast PWM Slično kao Phase Correct PWM, samo što je frekvencija dvostruko veća. Kada TCNT0 registar dostigne vrijednost postavljenu u OCR0 registar, događa se promjena na izlazu određenom kao PWM. Nastavlja brojanje do kraja, i u tom trenutku se setuje Timer/Counter 0 Overflow Flag (TOV0). 10
Registri Timera 0 Timer/Counter ControlRegister 0 (TCCR0) odabir načina rada Timera 0, korištenjem bita Waveform Mode Generation (WGM0[1:0]) Detaljnije preciziranje načina rada za pojedini način bitima Compare Match Output Mode (COM0[1:0]) Određivanje izvora takta bitima CS0[2:0]. Timer/CounterRegister (TCNT0) 8-bitni i brojač č za Timer 0. Output Compare Register (OCR0). Vrijednost koja se konstantno komparira sa TCNT0 Timer/Counter InterruptMaskRegister (TIMSK) p g ( ) Koriste ga sva tri timera Omogućava timere kao interrupte Za Timer 0: Timer/Counter 0 Output CompareMatch Interrupt Enable (OCIE0) Timer/Counter 0 Overflow Interrupt Enable (TOIE0) Timer/Counter Interrupt Flag Register (TIFR). Za Timer 0: OCF0 bit output compare match. TOV0 bit setuje kad se desi overflow timera 11
TCCR0 registri 12
Timer1 registri Timer1 registri 13
Timer2 registri Zadatak 1 Izvršiti programiranje ATmega16 mikrokontrolera na razvojnoj ploči STK500 tako da program koji prikazuje sekunde na led diodama. Ukoliko je broj sekundi 60 pokazivanje se resetuje na nulu i ponovo ispocetka. Pokazivanje a je u obliku BCD. Frekvencija clocka je 4 MHz. Preskaler counter/timer = 256. 14
Rješenje 15
16
Zadatak 2 Klasične sijalice u prostorijama uvijek rade na maksimumu, trošeći na taj način maksimum energije pri čemu previše osvjetljavaju prostoriju. Kreirati sistem u realnom vremenu, koji će se automatski prilagoditi vanjskim uticajima i uvijek održavati konstanim nivo svjetlosti u prostoriji. Time se kao prvo štedi energija, a kao drugi bitan aspekt je da imamo ugodnu i dovoljnu količinu svjetlosti u prostoriji. Rješenje 17
18
19