Forum: Mikrocontroller und Digitale Elektronik Timer 1 beim ATmega 16 initialisiren?


von Heiner H. (Gast)


Lesenswert?

Hallo,
kann mir jemand sagen wie ich das programm schreiben muss, damit ich den 
timer 1 mit dem vorteiler 1024 laufen lasse?
kennt jemand einen programmcode in assembler?

Schon mal vielen DAnk im vorraus.
Grüße
Heiner

von crazy horse (Gast)


Lesenswert?

TCCR1B=0x05;

von Malte (Gast)


Lesenswert?

In Assemler (definiertes Temp-Register vorausgesetzt):

ldi temp, 0x05
out TCCR1B, temp

von Ingmar R. (irosenhagen)


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?

von Karl H. (kbuchegg)


Lesenswert?

Poste bitte dein Programm so wie es ist (per Cut&Paste).
Das von dir gepostetet strotzt nur so von Fehlern.

von Johannes M. (johnny-m)


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.

von Ingmar R. (irosenhagen)


Lesenswert?

Die Programmteile sind per C&P hier reingewandert.
CTC hab ich mir eben mal angeguckt, werd das Programm wohl mal umändern.
Preload bin ich noch von 8051 gewohnt ;)

von Karl H. (kbuchegg)


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.

von Johannes M. (johnny-m)


Lesenswert?

@Karl Heinz:
Naja, unterbrechbare ISRs werden im WINAVR schon so ähnlich vereinbart, 
nur sind dann die Klammern um den Vektornamen zu viel...

von Ingmar R. (irosenhagen)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

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.