mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer1 in Assembler


Autor: Mike Dupo (hero2992)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike Dupo (hero2992)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike Dupo (hero2992)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Mike Dupo (hero2992)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

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

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike Dupo (hero2992)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Mike Dupo (hero2992)
Datum:

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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.