Forum: Mikrocontroller und Digitale Elektronik Timer0 für Atmega8


von Martina (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

weiß jemand wie der Timer0 in der oben angehängter Programm 
funktioniert. Irgendwie komme ich nicht dahinter wie er funktioniert?

Kann mir da jemand helfen?

von Karl H. (kbuchegg)


Lesenswert?

Ab wo verstehst du die Timerbehandlung nicht mehr?

So wie ich das sehe, wird der Timer ganz normal als
Overflow Timer benutzt, d.h. in regelmäßigen Zeitabständen
wird der Overflow Interrupt ausgelöst. Da diese
regelmäßigen Zeitabstände noch zu klein sind, werden
daher in der ISR weitere Zähler benutzt um den Zeittakt
für die eigentliche Anwendung noch herunterzuteilen.

So nach em Muster: Wenn man 60 mal 1 Sekunde wartet,
hat man in Summe auch 1 Minute gewartet.

von Martina (Gast)


Lesenswert?

Ja das habe ich auch so verstanden, und eigentlich sollte dann irgend 
wann mal der Interrupt angesprungen werden, das passiert leider nie. Und 
auf STK500 passiert da leider auch nichts. Ich meine Blinken und 
Einschaltverzögerung!

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Der Code ist grauenhaft formatiert und es ist ein klassisches Beispiel 
dafuer, wie man den Praeprozessor in C nicht verwenden sollte... und die 
Registerwerte sind auch noch hart codiert, das fiesel ich jetzt nicht 
auseinander.

Michael

von Karl H. (kbuchegg)


Lesenswert?

Martina wrote:
> Ja das habe ich auch so verstanden, und eigentlich sollte dann irgend
> wann mal der Interrupt angesprungen werden, das passiert leider nie.

Das mag durchaus sein.
Aber der Timercode ist so erst mal in Ordnung.
0x02 in TIMSK ist der Overflow Interrupt im Timer 0,
ein 'sei' wird gemacht, der Timer hat einen
Vorteiler eingestellt

Das sind dann eigentlich schon alle Bedingungen, damit
der Timer läuft und einen Interrupt beim Overflow
auslöst.

> Und
> auf STK500 passiert da leider auch nichts. Ich meine Blinken und
> Einschaltverzögerung!

Setz doch einfach mal zusätzlichen Code in die Overflowfunktion
und lass dort eine LED einschalten, dann weist du ob der Timer
läuft und einen Overflow auslöst oder nicht.

Zwischen dem Timer und den 'SPS Ausgängen' sitzt ja
noch eine Softwareschicht die ebenfalls Fehler enthalten
kann. Die will ich mir jetzt aber nicht antun :-) Die
ist grauenhaft geschrieben.

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.