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!!!
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...
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?
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
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.