mikrocontroller.net

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


Autor: Manuel U. (manuel-1987)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Manuel U. (manuel-1987)
Datum:

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

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.