Forum: Mikrocontroller und Digitale Elektronik timer -> 1 sekunde


von Dieter (Gast)


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

von Steffen (Gast)


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

von Dieter (Gast)


Lesenswert?

ich hab nen ATmega103, also nen Mikrcontroller.
ob des damit funktioniert?

und gibt es denn eine 100%ige methode?

von Alexthbe (Gast)


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

von Sascha Coesfeld (Gast)


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

von Dieter (Gast)


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?

von Dipl. Ing. Til Stork (Gast)


Lesenswert?

Toggle eine Pin nach "deiner Sekunde" und halt ein Ozilloskop dran,
dann kannst du es genau einstellen.

von crazy horse (Gast)


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.

von Uwe (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.