Gast
#2382011
Hi, ich habe einen Atmega 16 und möchte den Timer0 im CTC Modus laufen lassen. Ich habe mir auf sämtlichen Internetseiten durch gelesen wie man den Timer0 im CTC Modus laufen lässt und hab alles beachtet was dort steht, aber trotzdem funktioniert der unten stehende code nicht. Kurz zur Erklärung was der code tun sollte: Also es wird wie gesagt der Timer0(8 bit Timer) verwendet den ich aber mit dem OCR0 nur bis 100 zählen lassen will und bei jedem Overflow wird die ISR ausgeführt. Die If befehle und die Zählvariable sind dafür da das die LED's die an den PINs angeschlossen sind ganz langsam blinken, damit ich die Zeit stoppen und überprüfen kann, ob alle Zeiten richtig sind. Ich hoffe mir kann jemand sagen was ich falsch gemacht habe. Danke schon mal im Voraus. #include <avr/io.h> #include <avr/interrupt.h> //Zählvariable deklarieren int i=0; ISR(TIMER0_COMP_vect) { //Bei jedem Overflow Zählvariable um eins erhöhen i++; //Nach 10.000 Overflows PINs auf high setzen entsprich einer sekunde if(i == 10000) { PORTD = 0b01100000; } //10.000 overflows später PINs auf low setzen entspricht einer sekunde if(i == 20000) { PORTD = 0b00000000; //Zählvariable auf null setzen damit das ganze von vorn beginnt i=0; } } int main() { //Datenrichtung definieren DDRD = 0b01100000; //Timer 0 initialisieren TCCR0 = (1<<CS01), (1<<WGM00); //Interrupts aktivieren TIMSK |= (1<<TOIE0); //Überlaufwert bei 100 OCR0 = 100; //Globale Interrupts aktivieren sei(); while(1) { //hier könnte ihr programm stehn!!! } }