Hallo ich arbeite mit dem AT Mega8 und Assembler... Nun möchte ich einen Timer (z.B. Timer1) 5Sekunden im Hintergrund laufen lassen...nur habe ich jetzt mit Probleme die richtige Zeit einzustellen... Ich habe ein mal ein programm geschrieben, in dem ich eine Zeit von 20ms generiert Habe... Jedoch weiss ich nicht mehr wie ich das ausgerechnet habe...Da wollte ich euch mal um einen Rat bitten... MFG Mike
Hi >Hallo ich arbeite mit dem AT Mega8 und Assembler... Aber du hast doch bestimmt auch einen Controller der mit einer bestimmten Taktfrequenz läuft? >Nun möchte ich einen Timer (z.B. Timer1) 5Sekunden im Hintergrund laufen >lassen...nur habe ich jetzt mit Probleme die richtige Zeit einzustellen... Und das ist nun mal taktabhängig. Was soll denn nach den 5s passieren? MfG Spess
Hallo oh ja sorry hab die Frequenz vergessen = 3,6864 Mhz... Während den 5 Sekunden besteht die Möglichkeit einen Taster zu betätigen der eine LED in einer LEDleiste nach links schiebt...dann wieder das gleiche nur bleibt die vorherige LED in der Leiste bestehen...
3,6864 MHz / Prescaler (würd 1024 nehmen) = 3,6 kHz -> 3600 als Wertzuwachs pro Sekunde 5 sekunden willste haben, also 5* 3600 = 18000 Wertzuwachs mit nem Aufwärtszähler mit 16 Bit (Timer1) musst du deinen Startwert (TCNT1H und TCT1L) auf 65536 - 18000 = 47536 einstellen. sobald dann der Timer läuft, wird nach 5 Sekunden der Overflow ausgelöst. Hoffe ich hab mich nicht verrechnet ;-)
Hi Ein 16-Bit-Timer hat mit einem Vorteiler von 256 bei deinem Takt alle 4,55s einen Overflow. Reicht dir das. Rechnung: 65536*Vorteiler/IO-Takt MfG Spess
Hi >mit nem Aufwärtszähler mit 16 Bit (Timer1) musst du deinen Startwert >(TCNT1H und TCT1L) auf 65536 - 18000 = 47536 einstellen. Höre bitte mit diesem Quatsch auf. Dafür gibt es OCR-Register und den entsprechenden Interrupt. MfG Spess
Danke ihr beiden habt mir sehr geholfen... hatte das mit dem Vorteiler bisher auch nie richtig verstanden... Ich werds dann warscheinlich doch mit dem Prescaler 1024 machen...auch wenn die Zeit nur annähernd 5 Sekunden sein muss... Gruss Mike
Hi Wenn du genau 5s haben willst, erreichst du das mit einem OCR-Wert von $464F (Vorteiler 1024). MfG Spess
hi kann ich den Timer auch manuel (=> durch Taster) starten lassen?? und beim ersten overflow (nach 5 sekunden) wieder anhalten?
>kann ich den Timer auch manuel (=> durch Taster) >starten lassen?? >und beim ersten overflow (nach 5 sekunden) wieder anhalten? Ja. Guck dir dazu mal das Tutorium und das Datenblatt an.
hi... habe mir das datenblatt angeschaut und das einzigste worauf ich nur auf die möglichkeit sties den OC1A abzuschalten (weiss nicht was das ist) das geht wiefolgt: Bit 7 + 6 (COM1A1 + COM1A0) der I/O reg TCCR1A Habe nicht mehr gefunden.. verstehe das buch auch nicht richtig... denke auch das das mir nicht weiterhilft... daher frag ich nochmal ... in welchem register( oder wie auch immer ) ich den Timer starten und ausschalten kann...
>daher frag ich nochmal ... in welchem register( oder wie auch immer ) ich >den
Timer starten und ausschalten kann...
Da wo du den Prescaler einstellst. Da gibt es auch den Prescaler
"unendlich"... (den Begriff habe ich mir gerade ausgedacht, weil er die
Funktion beschreibt.)
Hi!
>daher frag ich nochmal ... in welchem register( oder wie auch immer ) ich >den
Timer starten und ausschalten kann...
Timer Start: Vorteiler = 1024
Timer Stop: Vorteiler = 0 = Timer Off
Mit (COM1A1 + COM1A0) kannst du nur festlegen was der Ausgang machen
soll wenn die Zeit abgelaufen ist.
00 = garnichts, OC1A ist ein ganz normaler Ausgang
01 = Toggeln des Ausgangs
10 = Ausgang = 0
11 = Ausgang = 1
Die beste Übersicht bietet immernoch das Datenblatt.
Viel Erfolg, 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.