Forum: Mikrocontroller und Digitale Elektronik Sprung in Interrupt Routine nach Interrupt Enable AtMega128


von thomas (Gast)


Lesenswert?

Hallo!

Folgendes Problem.

Verwende einen AtMega128.
Entwicklungsumgebung: AvrStudio mit WinAVR.

Es wird ein Echo mittels Interrupt0 bei fallender Flanke detektiert.
Der momentane Zählerstand wird dan in einem Register gespeichert
und dann zum PC übertragen.
Funktioniert auch das erste Mal.
Doch beim zweiten Mal springt das Programm nach dem aktivieren
des Intterupt0 sofort in die dazugehörige Inetrruptroutine
und es wird natürlich ein falscher Zählerstand ausgelesen.
Nach einem Reset funktioniert das ganze wieder für einmal.

Vl. hatte schon jemand mal ein ähnliches Problem.

Mit bestem Dank im Voraus.

thomas

von Matthias L. (Gast)


Lesenswert?

Der Fehler ist in Programmzeile 42.

von holger (Gast)


Lesenswert?

In Zeile 2323 deines Programmes hast du einen Fehler gemacht.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Da kann einer Hellsehen! Dann brauch ich ja mein Kugel nich auszupacken 
*g Jetzt wo'se grad vom Service gekommen is.

von STK500-Besitzer (Gast)


Lesenswert?

Guck mal ins Datenblatt. Mache Interrupts muß man manuell zurücksetzen.

von Peter D. (peda)


Lesenswert?

thomas wrote:
> Doch beim zweiten Mal springt das Programm nach dem aktivieren
> des Intterupt0 sofort in die dazugehörige Inetrruptroutine
> und es wird natürlich ein falscher Zählerstand ausgelesen.

Dann wird der AVR wohl recht haben und es ist inzwischen eine Flanke 
aufgetreten.

Der AVR kann ja nicht wissen, welches Ereignis Du willst, er setzt das 
Flag sobald das erste Ereignis eintritt.

Wenn Du willst, daß alle Ereignisse vor der Interruptfreigabe ignoriert 
werden, mußt Du vor der Freigabe erst das Interruptflag löschen, indem 
Du es setzt.


Peter

von thomas (Gast)


Lesenswert?

hallo!

habe das Problem gelöst.
Bin mit meinem JTAG durchgesteppt.
Dabei ist aufgefallen, dass nach dem enbable des Int0 das Int0Flag 
gesetzt wurde.
Habe jetzt einfach nach dem enable das  Int0Flag manuell zurückgesetzt.

Danke für die Antworten.

thomas

von Stefan (Gast)


Lesenswert?

eigendlich musst du es durch setzen vor der interruptaktivierung 
zurücksetzen, wie Peter schon schrieb.

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.