mikrocontroller.net

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


Autor: thomas (Gast)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Fehler ist in Programmzeile 42.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Zeile 2323 deines Programmes hast du einen Fehler gemacht.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck mal ins Datenblatt. Mache Interrupts muß man manuell zurücksetzen.

Autor: Peter Dannegger (peda)
Datum:

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

Autor: thomas (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

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

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.