Forum: Mikrocontroller und Digitale Elektronik Wie realisiert man einen 16 Bit-Timer?


von MikroMan (Gast)


Lesenswert?

Hallo,

helft mir doch mal bitte kurz bei folgenden Fragen mit ein paar Tipps,
Beispielcode oder Links weiter.

Wie realisiert man einen 16 Bit-Timer, wenn man

a) nur einen 8-Bit-Timer hat?
b) zwei 8 Bit-Timer/Counter hat?

Wie schafft man es am sinnvollsten, daß man beim implementierten
16-Bit-Timer eine compare Funktion hat? Ließe sich ein
Compare-Interrupt auslösen?

Kann man bei b) den einen Timer(z.B. 0) als Timer laufen lassen und den
anderen als Counter benutzen, der jedesmal beim Überlauf von Timer0
weiterzählt?


Vielen Dank für Eure Hilfe!!!

von Ronny F. (ronny)


Lesenswert?

Also zu b): ja,bei einigen Mikrocontroller Arten ist das sogar so
vorgesehen.Häufig kann man dann auch 2 16 Bittimer zu 32 Bit zusammen
fassen.Nur beim Auslesen musst du dann halt aufpassen,das der untere
Timer nicht gerade überläuft.Sonst wäre der obere Timer schon um eins
höher als er eigentlich sein sollte.

Und mit einem einzelnen 8 Bit Timer kann man dann per Software höhere
Stufen simulieren.Dazu wird dann im Überlauf-Interrupt eine Variable
hochgezählt.Wenn die überläuft dann wieder eine andere und so
weiter.Wird dann nur programmiertechnisch etwas komplizierter,aber das
sollte man hinbekommen.Eine Uhr ist ja nix anderes,nur laufen da einige
Variablen schon bei 24 bzw 60 über...

von MikroMan (Gast)


Lesenswert?

Ja, so ähnlich habe ich mir das vage vorgestellt.

Gibts dafür irgendwo fertigen Code?

Was mir noch nicht klar ist, ist die Realisierung von compare mit
Interruptauslösung im Fall a)

Wie würde man das machen?

von Ronny F. (ronny)


Lesenswert?

naja,man löst den Interrupt aus indem man die unteren 8 Bit ins
Compareregister schreibt.Im Interrupt prüft man dann,ob die oberen auch
stimmen.Bei sehr grossen Compare-Werten kann man vielleicht auch etwas
an den Vorteilern drehen.Dann ist die Auflösung nichtmehr soo gut,dafür
kann sinkt aber die Rechenlast deutlich

von Peter D. (peda)


Lesenswert?

"Gibts dafür irgendwo fertigen Code?"

Könnte sein.
Dazu müßte man aber erstmal den MC-Typ wissen und welche
Programmiersprache.


Ob und was die Timer können, hängt hauptsächlich von der Architektur
ab. Wenn Du keinen Compareinterrupt hast, dann geht auch kein
Compareinterrupt.

Wenn Du aber nur ne bestimmte Zeitdauer haben willst, gehe umgekehrt
vor. Setze den Timer auf die negative Zeitdauer und nimm den
Überlaufinterrupt.

Soll die Zeitdauer aber periodisch sein, dann muß man die negative Zeit
zu der bereits vergangen Zeit addieren, sonst gibts Fehler durch die
Interrupteintrittszeit und eventuelle andere Interrupts.


Peter

von MikroMan (Gast)


Lesenswert?

Als Controller kommen ATtiny 13 oder 15 in Frage.

Programmiersprache wäre C oder Assembler.

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.