Gast
#114622
Hi! Ich programmiere gerade ein Spiel für den AT Mega 8(L). Dort habe ich einmal nen unregelmäßigen Timer-Interrupt für die Hintergrundmusik (Timer2, OCR wird immer auf den jeweiligen Wert für die Note gesetzt). Ein weiterer, regelmäßiger Interrupt (Timer1, ca. 1-2 Sekunden) macht etwas im Spielgeschehen. Als Eingabe benutze ich einen handelsüblichen Joystick: Anschluss PortC 0 und 1 X und Y Achse mit jeweils 100k Pulldown, Port C 2 und 3 die Buttons 1/2. PortC 0 und 1 werte ich per ADC aus. Dazu gleich ne weitere Frage: Kann ich trotz aktiviertem ADC ganz normal per in temp, PORTC den Port einlesen (dann halt nicht die ADC Werte sondern in dem Fall für die Buttons)? Damit hab ich auch noch Probleme, die sind allerdings erstmal egal. Zurück zum Hauptproblem: Das Programm läuft einige Zeit wunderbar. Jedoch irgendwann gehts los: Es scheint sich der Vorteiler für den Timer zu verstellen (Musik läuft langsamer). Dann plötzlich überspringt er einfach mal einen Wert und macht nur noch scheisse (Ausgabe auf LED Display spinnt total, Musik hat keine Ähnlichkeit mehr mit dem Soll), ich speichere im EEPROM die Musik immer 1 byte note, nächstes Byte die Notenlänge. Da wird er einfach mal exakt 1 oder 3 Bytes überspringen, sodass er dann die Notenlänge als Notenwert hat und umgekehrt ;-). Und ne kurze Zeit später, bzw. manchmal auch direkt, is dann ganz leise. Beide Timerinterrupts scheinen deaktiviert oder die Timer gestoppt. Jedoch kann ich die "Spielfigur" noch per Joystick links/rechts bewegen, also ADC läuft noch, auch Ausgabe. Demnach hängt sich der AVR also nicht richtig auf. Hat jemand eine Ahnung, wieso das so ist? Sind allgemein Probleme mit instabilitäten des AVRs bekannt? Das hier ist erst meine 2. Anwendung (die erste war ne Lüftersteuerung per 4x Software PWM und serieller Schnittstelle). Achso: programmieren tu ich in Assembler. Im Code ist es UNMÖGLICH, dass irgendwie die interrupts deaktiviert werden und/oder der Prescaler verstellt wird. das wird einmalig beim Reset getan und diese Stelle wird nie wieder angesprungen. Ich danke euch schonmal! cu Matze