mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer von eine sekunde wie macht man dass


Autor: patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo leute ich möschte eine timer machen der alle sekunden genau ein 
interrupt auslöst!!!

Ich benutze ein ATmega8. Ich habe ein CLOCK von 16 MHz.

Und er wäre gut wenn er genau alle sekunden den interrupt gibt!!

Könnte mir jemanden da helfen??

Autor: Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So:
TCCR1A = 0b00000000;
TCCR1B = _BV(ICES1)|_BV(WGM12)|_BV(CS12)|_BV(CS10)|_BV(ICNC1);// Prescaler /1024, CTC - Mode 
TCNT1 = 0;    // Timer rücksetzen
  
OCR1A = 15624;    // OCR1A = 15625 (16MHz / 1024 / 15625 = 1s)

Beispiel vom Mega 32, Bits nochmal kontrollieren!

Autor: Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, vergessen:
TIMSK = BV(OCIE1A);  // Timer starten
SREG |= (1<<SREG_I);  // globalen Interrupt freigeben

Die ISR heißt:
SIGNAL (SIG_OUTPUT_COMPARE1A)   // Sekundentimer
{
  // Code hier wird 1x pro sec. ausgeführt
}

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der Codesammlung nach 'genaue Sekunde' suchen...

...

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem hatte ich auch schon mal...

Beitrag "Interrupt jede Sekunde (ATTINY26)"

Autor: Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal.
Die Innitialisierung von Timer1.
TCCR1A = 0b00000000;
TCCR1B = _BV(WGM12)|_BV(CS12)|_BV(CS10);// Prescaler /1024, CTC - Mode 
TCNT1 = 0;    // Timer rücksetzen
  
OCR1A = 15624;    // OCR1A = 15625 (16MHz / 1024 / 15625 = 1s)

TIMSK = _BV(OCIE1A);  // Output-Compare-INT freigeben
SREG |= (1<<SREG_I);  // globalen Interrupt freigeben

und die ISR (ausserhalb der main-Funktion):
SIGNAL (SIG_OUTPUT_COMPARE1A)   // Sekundentimer
{
  // Code hier wird 1x pro sec. ausgeführt
}

Probier's aus, das funktioniert sicher!

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.