Gast
#895171
Hallo,
ich suche gerade einen Fehler im Mega32 Timer 0.
Ich verliere öfter mal einen Interrupt, so sieht es jedenfalls aus.
Der Timer läuft mit 40us und hat laut Simulator und eigenen Messungen
eine eigene Laufzeit von maximal 23us.
Es läuft kein anderer Interrupt!
Ich gebe bei jedem Aufruf Daten auf Port A raus und kann somit auch nach
messen was passiert.
Tja aber öfter bleibt ein Interrupt aus. Habe auch das ganze mit dem ICE
geprüft. Und da sind die Laufzeiten auch sauber, aber auch die Aussetzer
weniger. Warum auch immer das der Fall ist.
Ich komme einfach nicht dahinter, was hier abgeht. Vielleicht kann mir
da jemand helfen.
Viele Grüsse
Dirk
Der Code ist der ganz normale kram.
Init (Auszug):
cli();
TCCR0 = 0x00; //stop
TCNT0 = 0xf6; //set counter
OCR0 = 0x0A;
TCCR0 = 0x03; //start timer
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x40; // T0 Der Wert ist gerade geraten --> kann falsch
sein!
sei();
unsigned char Output;
Timer Int:
ISR (TIMER0_OVF_vect)
{
/* int neu setzen */
/* 40us takt*/
/* int neu setzen bei 8 bit ohne auto-reload*/
TCNT0 += 0xf6; //reload counter value mit zeit ausgleich
// Viel Code .....
Output ++;
PORTA = Output;
// hier ist der TCNT0 auf maximal 0xFB
}