Timers/Counters
Counter Register
Karşılaştırıcısız çözüm olur mu? A Simple Design (Counting 4 People) First Design (Counter Register has initial value of zero) Sensor Karşılaştırıcısız çözüm olur mu?
Karşılaştırıcısız çözüm A Simple Design (Counting 4 People) Second Design (Counter Register has initial value of 0xFC) Sensor Karşılaştırıcısız çözüm
A Simple Design (Making 4 Clock Cycles Delay) Bu sayıcı bir sensör yerine periyodik bir saat sinyali ile tetiklendiği için bir zamanlayıcıya dönüşmüştür.
A Generic Timer/Counter Delay generating Counting Wave-form generating
Timers/Counters in AVR ATMega328PU Two 8-bit Timers/Counters (0-255) Timer 0 Timer 2 One 16-bit Timer/Counter (0-65535) Timer 1
Timer Registers and Flags TCNTn (Timer/CouNTer Register) TOVn (Timer OVerflow Flag) TCCRn (Timer/Counter Control Register) OCRn (Output Compare Register) OCFn (Output Compare Match Flag) TIFRn (Timer Interrupt Flag Register) TCCRn TCNTn TOVn = OCFn n 0, 1 veya 2 değerini alır. OCRn
Normal Mode (Timer 0) 1 FF FE 2 1 TOV0 = 1 TOV0: 0xFF TCNT0 TOV TOV time 1 TOV0 = 1 1 TOV0:
Example 1: Write a Program that Waits 14 Machine Cycles in Normal Mode. $100 -$0E $F2 $F2 Question: How to calculate the delay generated by the timer? Answer: 1) Calculate how much a machine clock lasts. T= 1/f 2) Calculate how many machine clocks it waits. 3) Delay = T * number of machine cycles
Finding Values to be Loaded into the Timer 0 Calculate the period of clock source. Period = 1 / Frequency E.g. For XTAL = 8 MHz T = 1/8MHz Divide the desired time delay by period of clock. Perform 256 - n, where n is the decimal value we got in Step 2. Set TCNT0 = 256 - n
CTC (Clear Timer on Compare Match) Mode (Timer 0) TCNT0 0xFF OCR0 OCF0 OCF0 OCF0 time OCR0 xx 2 1 TOV0: TOV0 = no change OCF0 = 1 1 OCF0:
Prescaler
Timer 1 (A 16-bit Timer)
Timer 1 OCR1B (OCR1BH + OCR1BL) = TCCR1A TCCR1B OCF1B TCCR1A TCCR1B TCNT1 (TCNT1H + TCNT1L) TOV1 = OCF1A OCR1A (OCR1AH + OCR1AL)
Timer 1 Registers
Timer Clock Selector (CS1x) 6 Timer Clock Selector (CS1x) 7
Timer Mode Selector (WGM1x)
Wrap Times (Fcpu=16 MHz) TIMER 0 is 8-bit (0−255) when prescaler = 1, reaches full count in 16 ms when prescaler = 1024, full count in 16.384 ms TIMER 1 is 16-bit (0−65536) when prescaler = 1, reaches full count in 4.096 ms when prescaler = 1024, full count in 4.194 seconds TIMER 2 is 8-bit (0−255) These wrap times set limits on timed interrupts makes TIMER 1 attractive, for its 16 bits
A Complete Timer 1 AVR C Example (V1) (Normal Mode) Yoklama (Polling). Kesmeden Farkı? Bayrağı Silmek İçin Set Etmek Gerekli??
A Complete Timer 1 AVR C Example (V2) (Normal Mode)
A Complete Timer 1 AVR C Example (CTC Mode)
AVR C Definitions for ATMega328P The bit values WGM12, CS10, etc. are defined in iom328p.h Its location is hardware/tools/avr/avr/include/avr/ For example: #define CS10 0 #define CS11 1 #define CS12 2 #define WGM12 3 #define WGM13 4 #define ICES1 6 #define ICNC1 7 #define OCR1A _SFR_MEM16(0x88) #define OCR1AL _SFR_MEM8(0x88) #define OCR1AH _SFR_MEM8(0x89) #define TIMER1_COMPA_vect _VECTOR(11) // Timer1 Compare Match A
Generating Large Delays Using loop Prescaler Bigger counters
The Difference Between Timer 0 and Timer 2 CS02 CS01 CS00 Comment 0 0 0 Timer/Counter stopped 0 0 1 clk (No Prescaling) 0 1 0 clk / 8 0 1 1 clk / 64 1 0 0 clk / 256 1 0 1 clk / 1024 1 1 0 External clock on T0 (falling edge) 1 1 1 External clock on T0 (rising edge) CS22 CS21 CS20 Comment 0 0 0 Timer/Counter stopped 0 0 1 clk (No Prescaling) 0 1 0 clk / 8 0 1 1 clk / 32 1 0 0 clk / 64 1 0 1 clk / 128 1 1 0 clk / 256 1 1 1 clk / 1024
Atmel AVR ATMega328P Mikrodenetleyicisinin Pinout Diyagramı