100ms Interrupt mit 16bit-Timer Atmega16

OP #2639088
Lesenswert?
• ▲
▼
Guten Abend

Ich benötige einen ziemlich genauen Sekunden Takt bei meinem Atmega16.

Dazu wollte ich den 12MHz Quarz und einen Timer verwenden.

Hier mein Vorgehen:

Atmega hat keinen ClkDiv aktiviert.

Timer1 bekommt seinen Takt mittels 64x Vorteiler (CS11 & CS10)
Dannach habe ich 187,5KHz bzw. 187500Hz

Nun konfiguriere ich den Timer für den CTC Modus (WGM12)
Setze die Obergrenze auf einen zehntel also auf 18750 - 1
OCR1A = 18749

Im interrupt zähle ich nun auf 10, da ein Durchgang ja 100ms entspricht.

Doch leider blinkt die LED mit weitaus mehr als 1Sekunde.

Ein Interrupt durchgang entspricht ca. 350ms (mit Oszi gemessen)

Hier mein Code
1
void init_timer(void)
2
{
3
  TCCR1A |= (1<<WGM12);  //CTC
4
  TCCR1B |= (1<<CS11) | (1<<CS10); // 64Div = 187,5 KHz (mit Variable /10 = 18.75KHz);
5
  TIMSK |= (1<<OCIE1A); //Int für OC1A
6
  OCR1A = 18750 - 1;
7
}

Was ist hier nur falsch?

danke schonmal
Gast #2639149
Lesenswert?
• ▲
▼
Claudio Hediger schrieb:
> Timer1 bekommt seinen Takt mittels 64x Vorteiler (CS11 & CS10)
> Dannach habe ich 187,5KHz bzw. 187500Hz

Bei deinen 187,500 kHz kannst du guten Gewissens zwei Nullen streichen. 
So genau ist dein Quarz nicht. Falls du Uhrgenauigkeit brauchst, wirst 
du um einen Abgleich z.B. per Softwarealgorithmus nicht drumrum kommen.
OP #2639224
Lesenswert?
• ▲
▼
... schrieb:
> Claudio Hediger schrieb:
>> Ich benötige einen ziemlich genauen Sekunden Takt bei meinem Atmega16.
>
> Im Titel schreibst du "100 ms". Was denn nun.

Im Titel habe ich geschrieben "100ms Interrupt"

Und es ging hier auch um einen 100ms Interrupt.
Mit diesem wird dann die genaue Sekunde erzeugt.

Wolfgang schrieb:
> Bei deinen 187,500 kHz kannst du guten Gewissens zwei Nullen streichen.
> So genau ist dein Quarz nicht. Falls du Uhrgenauigkeit brauchst, wirst
> du um einen Abgleich z.B. per Softwarealgorithmus nicht drumrum kommen.

Vielen Dank für den Tipp :)

Ich habe bereit eine RTC in meinem Projekt. Von dieser werde ich von 
Zeit zu Zeit synchronisieren :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.