timer -> 1 sekunde

Gast #44935
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

@ 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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren