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.)
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.