mikrocontroller.net

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


Autor: Heiner H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1B=0x05;

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Assemler (definiertes Temp-Register vorausgesetzt):

ldi temp, 0x05
out TCCR1B, temp

Autor: Ingmar Rosenhagen (irosenhagen)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ingmar Rosenhagen (irosenhagen)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
TCCR1B = 0x05;      //Prescaler = 1024            TCNT1=0x1ed7;
//Interrupt every 4 seconds
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.

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Ingmar Rosenhagen (irosenhagen)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.