Forum: Mikrocontroller und Digitale Elektronik Problem mit Comp.-Int B Timer 1


von Thomas M. (t-mundhenke)


Lesenswert?

Hallo NG,
ich verstehe folgendes Verhalten des Timer 1 nicht:

Eine Routine, die definierte Verzögerungzeiten ermöglicht:
übergeben werden prescaler und wert für compare register

void T1_delay( u08 prescaler, u16 value )      // d = {
 // Timer 1 Timer register mit Werten laden
 // währenddessen Interrupts global sperren
     CLI();
    OCR1A=value;
    TCNT1=0;
    TCCR1A=0;
    TCCR1B=prescaler;
    TCCR1B |=8;
    T1_Delay_Flag=FALSE;
    TIMSK |=1<<OCIE1A;TIFR = 1 <<OCF1A;
          SEI();
 // Endlosschleife, bis Timer abgelaufen ist, INT-Routine setzt Flag neu 
!
   while(T1_Delay_Flag==FALSE);
         // dann Timer aus
   TIMSK &= ~(1 << OCIE1A);
}
// Nach Ablauf der Zeit wird das Sperrflag rückgesetzt
void TimerCompA_Int(void)
{
 T1_Delay_Flag=TRUE;
}

Klappt sowohl mit CompReg. A. oder mit dem Timer Overflow

CompReg. B geht aber nicht, es wird schlichtweg kein Comp-Int. B 
ausgelöst.
Wo ist mein Denkfehler ?
(µC ist ATMega 16!)
Danke für Eure Hilfe,
Gruss Thomas

von Stefan E. (sternst)


Lesenswert?

Wozu überhaupt der Interrupt? Wenn du eh nur darauf wartest, kannst du 
auch genauso gut (oder eigentlich besser) einfach nur direkt auf das 
Interrupt-Flag warten.

von Thomas M. (t-mundhenke)


Lesenswert?

Es geht mir nicht um die Lösung der Delay Routine, sondern um's Prinzip. 
Laut Handbuch müßten sich Comp-Reg. A und B gleich verhalten, das ist 
das Problem !
Gruß Thomas

von spess53 (Gast)


Lesenswert?

Hi

Mit 'TCCR1B |=8;' stellst du Timer-Mode 4 ein. OCR1A ist dann Top vom 
Timer. Bei Erreichen von OCR1A wird der Timer zurückgesetzt ind der 
Interrupt ausgelöst. Einen Timer-Mode, bei den OCR1B Top ist gibt es 
nicht.

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.