Hallo liebes Forum,
ich versuche derzeit erfolglos den Timer0 bei einem Atmega88 im Fast PWM
Modus 7 mit benutzerdefiniertem Maximalwert einzustellen.
Der Timer ignoriert meinen im OCR0A-Register eingestellten Maximalwert
einfach, und zählt bis 255 durch.
Hier mein Quellcode:
1 | #include <avr/io.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | DDRD |= 1<<PD5; // Port mit LED auf Ausgang schalten
|
6 | OCR0A = 20; // MAX-Wert des Timers
|
7 | OCR0B = 10; // COMPARE-Wert
|
8 | TCCR0A |= (1<<WGM02)|(1<<WGM01)|(1<<WGM00) // Timer auf FAST PWM mit OCR0A als MAX (MODE 7)
|
9 | TCCR0A |= (1<<COM0B1)|(0<<COM0B0) // Lösche OCB0 bei Compare Match
|
10 | TCCR0B |= (0<<CS02)|(0<<CS01)|(1<<CS00); // Timer-Frequenz = F_CPU
|
11 |
|
12 | while(1)
|
13 | {
|
14 | __asm("nop"); // Hilfsbefehl für Break-Point im Simulator
|
15 | }
|
16 | }
|
Im CTC Modus zählt der Timer ordnungsgemäß bis zum eingestellten
Maximalwert.
Weiß jemand Rat? Danke für eure Hilfe.
Link zum Datenblatt:
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf