MechMac
28.08.2010, 22:45
Hallo,
ich habe probiert einen Timer zu verwenden. Allerdings wird er nie aktiviert.
void Timer0_init(void)
{
TCCR0A = (1<<WGM01); // Timer im CTC-Modus
TCCR0A |= (1<<CS02) | (0<<CS01) | (1<<CS00); // Prescaler auf 1024
OCR0A = 156; // um ca. 10ms zu erreichen
TIMSK0 |= (1<<OCIE0A); // Interrupt "TIMER0_COMPA_vect" aktivieren
}
Es muss an diesem Code liegen.
Vermutlich passt das nicht zusammen. Ich weiß leider nicht was OCIE0A ist, oder was der Unterschied zwischen Match A und Match B ist.
Ist OCIE0A =Match A und OCIE0B = Match B ?
Ein Buch mit sieben Siegeln. Habe auch noch keine Lektüre gefunden wo das verständlich erklärt ist.
Wäre nett wenn mir jemand sagt, wo der Fehler in dem Code oben ist.
Ich möchte das der Timer etwa alle 10ms auslöst und in der ISR Routine einen Zähler hochzählt.
Dazu muss ich wissen wo oben der Fehler liegt und ob das überhaupt mit Compare Match A geht.
Gruß, Andreas
*********EDIT**************
Ich habe nochmal nachgesehen, das mit dem CTC scheint so falsch nicht zu sein, denn ich will ja das er nur bis 156 geht und nicht die Hardware-grenze nimmt.
nd der Vergleich mit dem Wert aus OCR0A ist dann diese Compare Match A Geschichte.
Warum das bei mir nicht geht weiß ich allerdings nicht.
Habe nen 16 Mhz Quarz. Diese Info fehlte noch um den Wert für den Prescaler nachzuvollziehen.
Habe den Code aus der ISR übrigens mal in die Main gepackt. Er funktioniert einwandfrei. Es muss also daran liegen das die ISR nicht ausgelöst wird.
ich habe probiert einen Timer zu verwenden. Allerdings wird er nie aktiviert.
void Timer0_init(void)
{
TCCR0A = (1<<WGM01); // Timer im CTC-Modus
TCCR0A |= (1<<CS02) | (0<<CS01) | (1<<CS00); // Prescaler auf 1024
OCR0A = 156; // um ca. 10ms zu erreichen
TIMSK0 |= (1<<OCIE0A); // Interrupt "TIMER0_COMPA_vect" aktivieren
}
Es muss an diesem Code liegen.
Vermutlich passt das nicht zusammen. Ich weiß leider nicht was OCIE0A ist, oder was der Unterschied zwischen Match A und Match B ist.
Ist OCIE0A =Match A und OCIE0B = Match B ?
Ein Buch mit sieben Siegeln. Habe auch noch keine Lektüre gefunden wo das verständlich erklärt ist.
Wäre nett wenn mir jemand sagt, wo der Fehler in dem Code oben ist.
Ich möchte das der Timer etwa alle 10ms auslöst und in der ISR Routine einen Zähler hochzählt.
Dazu muss ich wissen wo oben der Fehler liegt und ob das überhaupt mit Compare Match A geht.
Gruß, Andreas
*********EDIT**************
Ich habe nochmal nachgesehen, das mit dem CTC scheint so falsch nicht zu sein, denn ich will ja das er nur bis 156 geht und nicht die Hardware-grenze nimmt.
nd der Vergleich mit dem Wert aus OCR0A ist dann diese Compare Match A Geschichte.
Warum das bei mir nicht geht weiß ich allerdings nicht.
Habe nen 16 Mhz Quarz. Diese Info fehlte noch um den Wert für den Prescaler nachzuvollziehen.
Habe den Code aus der ISR übrigens mal in die Main gepackt. Er funktioniert einwandfrei. Es muss also daran liegen das die ISR nicht ausgelöst wird.