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
>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.
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
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)"
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.