Forum: Mikrocontroller und Digitale Elektronik ATmega8 - ASM 1Hz Problem


von Manuel U. (manuel-1987)


Angehängte Dateien:

Lesenswert?

Hallo,

ich fange gerade mit Assembler an und hab ein kleines Problem bei dem 
ich nicht rausfinde, was falsch sein soll. Ihr habt doch bestimmt eine 
Idee, woran es liegen könnte.

Ich versuche an sich nur eine Led leuchten zu lassen. 1sek an - 1sec aus 
(quasi 0,5Hz, nicht 1 Hz wie im Betreff).

Das Problem ist, dass für mein Verständnis, der Code richtig ist, auch 
der AVRStudio Simulator macht das, was ich mir vorstelle. Aber wenn ich 
den Chip mit dem hex-file flashe, dann leuchtet die Led dauerhaft.

Der ATmega ist auf High Frequenz Quarz eingestellt, also da liegt der 
Fehler schon mal nicht.

Das ganze läuft im CTC Modus.

Timer1 Einstellungen: 16.000.000Hz / 8 (TCCR1B) = 2.000.000Hz
                      2.000.000Hz / 20.000 (OCR1A) = 100Hz
in der ISR-Routine einen Zähler von 0 bis 100 erhöhen -> 1 Sekunde

Hab ich evtl. doch einen Fehler im Code? (Der Quelletext ist mit 
Angefügt.)

von Karl H. (kbuchegg)


Lesenswert?

Gewöhn dir bei 16-Bit Registern folgendes an:

Die Reihenfolge in der Register (High/Low) beschrieben/gelesen werden, 
ist wichtig. Bei manchen Registern verriegelt der eine Zugriff das 
Register gegen Änderungen und diese Verriegelung wird erst durch den 
Zugriff auf das andere Register wieder gelöst und erst dann wird die 
Veränderung tatsächlich durchgeführt.


Beschreiben:  Zuerst High, dann Low
Auslesen:     Zuerst Low, dann High

Ansonsten sieht dein Programm nicht so schlecht aus. Die Timer 
Konfiguration hab ich noch nicht kontrolliert. Bist du sicher, dass dein 
µC mit 16 Mhz läuft? Hast du mal 16 Sekunden gewartet, ob die LED dann 
ausgeht?

von Manuel U. (manuel-1987)


Lesenswert?

Perfekt!!! Danke für die schnelle Antwort und danke für den schon 
gefundenen Fehler!

Es lag tatsächlich an der Reihenfolge in der ich das OCR1A Register 
beschrieben hatte. Dem Simulator schein das egal zu sein, aber der reale 
Chip braucht, wie du schon gesagt hast erst das High-Byte und dann das 
Low-Byte.

Danke nochmal!

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.