Forum: Mikrocontroller und Digitale Elektronik Timer1 in Assembler


von Mike D. (hero2992)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Mike D. (hero2992)


Lesenswert?

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...

von Flo (Gast)


Lesenswert?

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 ;-)

von spess53 (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Mike D. (hero2992)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Wenn du genau 5s haben willst, erreichst du das mit einem OCR-Wert von 
$464F (Vorteiler 1024).

MfG Spess

von Mike D. (hero2992)


Lesenswert?

hi

kann ich den Timer auch manuel (=> durch Taster)
starten lassen??

und beim ersten overflow (nach 5 sekunden) wieder anhalten?

von STK500-Besitzer (Gast)


Lesenswert?

>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.

von Mike D. (hero2992)


Lesenswert?

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...

von STK500-Besitzer (Gast)


Lesenswert?

>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.)

von Mike D. (hero2992)


Lesenswert?

Ach  ja... einfach 0x00 in das reg TCCR1B laden... Danke

von Uwe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.