Hallo, ich habe einen Interrupt-gesteuerten Timer gebastelt, der mir sec, min, hour über usart ausgeben soll. funktioniert auch soweit. jetzt habe ich zusätzlich einen Externen Interrupt eingebaut, der es mir erlaubt die Zeit nur auf Tastendruck über die serielle schnittstelle auszugeben. Dabei rufe ich meine "usart_tx"-funktion in der ISR() des externen Inetrrupts auf. Das Problem ist: nach jedem Externen Interrupt, beginnt der Timer wieder von vorne. sprich die werte (sec, min, h) werden zurückgesetzt. woran liegt das, muss ich die Timer-Variablen irgendwo sichern/kopieren, bevor ich sie an die Uart-Ausgabe übergebe? habe sie als "volatile unsigned int" deklariert. Danke im Voraus
Du landest aufgrund eines Programmfehlers im Reset oder an Adresse 0. Den Rest hat mir die Glaskugel nich varraten.
Hallo Thom, beim Eintritt in die Interruptroutine solltes du die Register, die du veränderst mit PUSH auf dem Stack sichern. Und am Ende mit POP in umgekehrter Reihenfolge wieder herstellen (FILO). Gruß Stefan
"Wenn ich bei meinem Auto zuviel Gas gebe, klapperts vorne links. Was ist da nicht in Ordnung?" Das kann ungefähr 328 verschiedene Gründe haben. Ohne Source darfst Du mehr als irgendwelche Ins-Blaue-Vermutungen nicht erwarten.
sry, für den fehlenden quelltext. habs jetzt angehängt. hoffe, das liest jetzt noch einer. anbei main.c und die uart_funktionen grüsse thom
Du aktivierst den Timer1A Compare Match Interrupt, hast aber keine Handler dafür...
den hab ich noch wegen der auskommentierten pwm-ausgabe aktiviert. das problem bleibt aber bestehen, auch wenn ich den timer1 compare-match interrupt nicht aktiviere. du meinst doch das setzen des OCIE1A-Bits, oder? (TIMSK =(1<<OCIE1A)
Du hast auch noch den Transmit Complete Interrupt enabled ohne einen Handler dafür zu haben. Wenn dein µC resettet, dann hat das meistens 2 Ursachen * ein Hardwareproblem, welches die Versorgungsspannnug versaut * irgendein Interrupt, für den es keinen Handler gibt ist eingeschaltet. Sowas findet man, indem man alle Konfigurationen durchgeht und nachsieht welche Bits in die Konfig-Register geschrieben werden. Und zwar ausnahmslos alle!
danke für die hilfe. hab das transmit complete Interrupt enable deaktiviert, jetzt läufts ohne probleme:)
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.