timer -> 1 sekunde

Gast #44935
hallo.
ich habe einen 8Bit timer.
ich kann ihn mit
4000000 Hz
500000 Hz
62500 Hz
15625 Hz
3906 Hz
laufen lassen.
wie könnt ich damit einen sekundentakt hinbekommen?

hab das natürlich schon versucht, aber es ist keine sekunde.
ich habs quasi nicht hinbekommen.
drum wollt ich mal nach anderen lösungsvorschlägen fragen.

gruß
dieter
Gast #44936
Den Timer in der ISR so initialisieren, das er nach 217 Takten erneut
einen Interupt auslöst und mit einer Variablen 18 ISR-Einsprünge
Zählen. Ergibt dann genau* eine Sekunde.

217*18=3906

Je nach Prozessor können allerdings die Einsprünge in die ISR
unterschiedlich lange dauern. Daher ist diese Methode nicht 100%-ig.
Ist z.B. beim PIC mit TMR0 nicht so.

Steffen
Gast #44938
Also ich hab das letztes mal auch versucht, und hab einfach den Timer1
genommen (bei nem ATmega8) und den in den CTC Modus geschaltet, und
dann hatte ich einen 100%igen 1Hz Takt. Vielleicht ne dumme Frage, aber
wieso nimmst du nicht einfach den 16bit-Timer ... is einfacher?
ansonsten würd ich sagen einfach den Takt im CTC Modus sauber
einstellen und dann einfach über den Interrupt auf ne Zählung gehen die
nach nem bestimmten Wert in das Unterprogramm geht für das du den Takt
brauchst ... glaub nicht das das ne Musterlösung für das Problem ist
aber funktionieren tuts allemal

MFG Alexthbe
Gast #44939
Hallo,

bei 4MHz und einem 8bitTimer denke ich an folgendes:

4MHz % 256(Durchlauf des Timer) = 15625d oder 3D09h

Also, jedesmal wenn der Interrupt für Timer0 kommt, eine 16Bit-Variable
von 3D09h runterzählen, danach mit 0 vergleichen. Wenn gleich, dann
Zeit ist rum.
Dabei kann es zu einem winzigen Fehler kommen, je nach Programmierung.
Ansonsten nur bis 3D08h zählen und die restlichen Schritte so
erledigen(zB nop's), beim letzten NOP ist dann die Zeit korrekt rum.

Die erste Version sollte aber reichen
Sascha
Gast #44940
@ sascha

so wie du hab ichs gemacht.
ich zähl bis 15625d
nach ungefähr ner stunde läuft die "uhr" schon so eine sekunde
hinterher.

ich würd jett mal probieren bis 15624 zu zählen.

aber wie bekomm ich raus, wieviele nop's ich machen soll?
Gast #44942
probiers im Simulator aus, dann siehst du genau, wiviele Takte/Zeit
vergehen. Sollte das stimmen, kannst du einen Software-Fehler
ausschliessen, liegt dann am Quarz bzw Beschaltung.
Prinzipiell sind die MC-Quarze nicht sonderlich genau.
Gast #44943
Hi!
Wird wohl eher am ungenauen Quarz liegen, versuche einfach mal 15624.
Dann 1 Stunde warten. Abweichung bestimmen und die Diff. zur 15625 Zeit
errechnen. Die Diff./256 ist dann deine Zeit pro NOP und nur noch eine
kleine Rechenübung.

MFG Uwe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 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.