www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schon wieder ne Frage zu Interrupts


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen Forum!!

Ich weiss, dass es schon viele Fragen zu diesem Thema gibt. Genau 
deshalb, muss ich auch noch eine stellen, weil ich aus den anderen nicht 
die richtige Antwort gefunden habe.

In einem Projekt verwende ich den AT90CAN32. Der soll eine CAN-Nachricht 
empfangen und, je nach Daten in der Nachricht, einen DC-Motor über PWM 
ansteuern (links/rechts/stopp). Über den Sense-Ausgang des verwendeten 
Motortreibers (L6201) wird am uC am ADC der Motorstrom gemessen. Wird 
der zu hoch, schaltet der Motor ab. Eine blinkende LED zeigt an, dass 
auf dem uC ein Programm ausgeführt wird.

Folgende 3 Interrupts werden verarbeitet:
- Eintreffen einer CAN-Nachricht
- ADC-Messung abgeschlossen, anschliessende Kontrolle des Wertes
- Timer 2 overflow, um die LED zu toggeln

Soweit so gut. Nun zu meiner Frage:
Können sich diese Interrupts in die Quere kommen? Also wenn grad der 
Timer 2 überläuft aber gleichzeitig eine CAN-Nachricht eintrifft. Kann 
das dazu führen, dass er auf die CAN-Nachricht nicht reagiert?

Danke für Eure Antworten

Gruss
Patrick

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Können sich diese Interrupts in die Quere kommen? Also wenn grad der
>Timer 2 überläuft aber gleichzeitig eine CAN-Nachricht eintrifft.

Nein. AVR haben eine ganz einfache Interrupt-Behandlungsmethode:
Immer nur einer zur Zeit. Alle anderen, die zur gleichen Zeit auftreten 
werden erst nach Beenden der ISR abgearbeitet.
Es werden die Interrupt-Flags gespeichert.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort. Dann liegt der Fehler wo anders :-(

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Patrick,

es ist natuerlich moeglich, dass Interrupt-Ereignisse verloren gehen, 
wenn ein aktiver Interrupt zu lange dauert, denn mehr als ein Ereignis 
kann nicht vorgemerkt werden (1-Bit-Flag, keine Liste). Es ist moeglich, 
geschachtelte Interrupts zu erlauben, aber man sollte dann schon wissen, 
was man tut. Warum postest Du nicht einfach mal Deinen Code und 
beschreibst Deinen Fehler exakt?

lg,
Michael

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael

Das Problem war folgendes:
Die CAN-Befehle für den Motor werden von einem Handschalter ausgelöst. 
Die Befehle habe ich mit dem CANalyzer untersucht und sie werden zu 
jeder Zeit korrekt abgesendet.
Nun ist aber sporadisch der Motor stehen geblieben, obwohl eine 
CAN-Nachricht vom Handschalter versendet wurde. Zuerts dachte ich, die 
CAN-Nachrichten kämen nicht korrekt beim Motor an. Aber es hat sich 
herausgestellt, dass die softwaremässige "Strombegrenzung" manchmal beim 
starten des Motors sofort anspricht, und so der Motor gleich wieder 
abstellt.
Gelöst habe ich das über eine kurze Zeitverzögerung (ca. 65ms), die erst 
nach ca. 65ms nach dem Start des Motors den ADC für die Strommessung 
aktiviert.

Der Dauertest mit der neuen Software läuft bereits und bis jetzt sieht 
alles gut aus.

Du hast recht, ich hätte den Code hier veröffentlichen sollen.

Beitrag "Frage zu meinem Code (C)"

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.