Timer 1 beim ATmega 16 initialisiren?

#726777
Lesenswert?

Kurze Frage zu den Timern (geht bei mir um den ATMega2561 Timer1, CPU 
mit 14.7456MHz):

In der main lade ich den Timer:


TCCR1B = 0x05;      //Prescaler = 1024            TCNT1=0x1ed7; 
//Interrupt every 4 seconds
TIMSK1 = 1<< TOIE1;      //Timer 1 Interrupt enable bit   sei();

In der ISR folgt dann:

void  (TIMER1_OVF_vect) (void)    //ISR  Timer1
{
TCCR1B = 0x05;      //Prescaler = 1024
TCNT1=0x1ed7;      //Interrupt every 4 seconds
TIMSK1 = 1<< TOIE1;      //Timer 1 Interrupt enable bit

sei();
  TimerCount++;
    if (TimerCount == 2)
    {
      Record_On=false;
      TimerCount=0;
    }
}

Die main wartet nach dem Timer-Start auf Record_on==false. Also ca. 12 
Sekunde (3 Timerdurchläufe). Der Haken an der Sache ist das "sei();" in 
der ISR. Lasse ich das weg, startet der Timer nicht nochmal. Ich hab im 
main dann eine Endlosschleife.
Sollten die Interrupts nicht eigentlich aktiviert bleiben wenn sei(); 
einmal in der main aufgerufen wird?
#726792
Lesenswert?

> void  (TIMER1_OVF_vect) (void)    //ISR  Timer1
Von welchem Compiler ist denn die Syntax? Wenn das ein geschachtelter 
Interrupt beim WINAVR sein soll, dann lass mal die Klammern um den 
Vektornamen weg. Verwirrt nur. Und in dem Fall sollte eigentlich im 
Handler kein sei() erforderlich sein.

Timer-Preload macht man beim AVR auch eigentlich nicht. Dafür gibts den 
CTC-Modus.
#726907
Lesenswert?

OK. Dann muss das wohl so sein, dass gewisse Codeteile
auskommentiert sind. Zb das sei() in dem was ich mal für einen
Auszug aus main() halte.
1
TCCR1B = 0x05;      //Prescaler = 1024            TCNT1=0x1ed7;
2
//Interrupt every 4 seconds
3
TIMSK1 = 1<< TOIE1;      //Timer 1 Interrupt enable bit   sei();

Nur so Zwecks Neugier: Welcher Compiler ist das?
gcc kanns nicht sein, denn dort werden ISR anders vereinbart.


> Sollten die Interrupts nicht eigentlich aktiviert bleiben wenn sei();

Beim gcc ist das so. Ob dein Compiler das auch macht, kann man
ohne Kenntnis des Compilers nicht sagen.
#727677
Lesenswert?

Ingmar Rosenhagen wrote:
> Nö, die auskommentierten Programmteile kommen natürlich durch C&P.
> Eigentlich stehen die jeweils eine Zeile weiter und nicht mehr im
> Kommentar.

Genau das meine ich:
Stell sicher, dass dein Programm hier genauso präsentiert
wird, wie es auch compiliert wird. Ich such mir doch nicht
einen Wolf um rauszufinden welche Programmteile jetzt
gültig sind und welche du mit Absicht auskommentiert hast
und welche zufällig durch Fehler bei der Übernahme ins
Posting passiert sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren