mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kontinuierlicher Reset-Interrupt ?


Autor: Gert Tannheim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spezialisten,

ich habe ein Problem mit dem Interruptsystem des Mega32. Ich habe ein 
Programm erstellt zunächst völlig ohne Interrupts und es funktioniert 
alles sehr gut. Jetzt möchte ich einen zyklischen 
Timer2-Overflow-Interrupt hinzufügen.

Mein Problem: Es wird nach Aufruf von sei() ständig in einer 
"Endlosschleife" der Reset-Vector ausgeführt und mein Programm arbeitet 
zyklisch immer wieder die Initialisierung ab bis zum Aufruf sei(). Woran 
kann das liegen? Woher bekommt der Mega32 den Reset bei Aufruf von sei() 
?

Danke für jegliche Hinweise!

Programmcode (compilierbares Projekt mit allen Dateien für WINAVR) ist 
im Anhang.

Danke,
Gert

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der SEI ist nicht fuer den Reset zustaendig. Dann ist was anderes 
Falsch. Ich mag den code nicht entzippen.

Autor: Randy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für alle Interrupts die aktiv sind musst du auch eine ISR-Funktion im 
Code haben. Die Standard-Aktion (beim gcc) wenn ein Interrupt auftritt 
zu dem keine ISR definiert ist ist ein Reset.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin jetzt nicht den ganzen Source durchgegangen, aber
TIMSK=0x40; //enable timer2 ovf interrupt
und als einzige ISR, die ich gefunden habe,
ISR(TIMER0_OVF_vect)
(Timer 2 vs. 0) wollen mir nicht zusammenpassen.

Es gibt übrigens die wunderbare Möglichkeit, Sourcecode durch 
Einrückungen lesbar zu gestalten und durch Verwendung von Bitnamen statt 
„0x40“ übersichtlich zu halten.

Autor: Klaus T. (gauchi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADCSRA=0xFF; //ADC on in freerunning mode with prescaler 128 = 125kHz@16MHz cpu clock

kann es sein, dass du da den adc interrupt aktivierst?

Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

erstmal vielen Dank für die Tips, komme eben erst zum Lesen.

Zum Code: Ja, nicht der schönste Stil, ist aus vielen Programmen 
zusammengestückelt. Ich schäme mich :-)

@Klaus:
Ja, ich habe den ADC-Interrupt aktivieren "müssen" weil ich den ADC im 
Freerunning Mode laufen habe. Er läuft sonst nicht wenn ich den 
ADC-Interrupt sperre. Der ADC läuft bei mir kontinuierlich im 
Hintergrund und aktualisiert nur das Ergebnisregister ADCH auf welches 
ich dann jederzeit schnell zugreifen kann.

@Randy:
Danke für den Hinweis, das war mir nicht bekannt! Zusammen mit dem Tip 
von Klaus würde das passen: ich habe den ADC Interrupt aktiviert aber 
keine ADC-ISR im Code. Das bedeutet nach Randy dann einen Reset! Würde 
passen! Ich teste es gleich morgen mal!

Schonmal vielen Dank an die Profis ! Super!!

Gert

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.