Hallo, ich habe ein kleines Problem und ich hoffe mir kann jemand helfen. Mein Programm (siehe Anhang) hängt sich sporadisch auf und ich hab keine Ahnung wieso. Exakt ist es auch nicht zu reproduzieren aber nach einer gewissen weile kommt es immer zum hängenbleiber. Ich erleutere mal gerade die Funktion des Programms. in festen intervallen (100ms) werden zwei IO Pins abgefragt PIND4 & 5. Pin D4 habe ich mit einer Abfallverzögerung versehen. Wenn also PIND5 = 0 ist und PIND4 nicht länger als seit 2sek. 1 ist wird die LED angeschaltet. Wenn dann noch die Drehzahl die durch den INT0 berechnet wird kleiner als eine Zieldrehzahl ist, wird der PORTC0 und 1 auf 1 geschaltet. Dahinter hängt ein MOSFET der ein Magnetventil auf Masse schaltet. Insb. wenn es zum Anschalten des MOSFETS gekommen ist, bleibt das Programm gerne hängen. Äussern tut sich das dadurch das die LED nicht mehr an geht, obwohl beide eingänge den richtigen Pegel haben. Hat jemand ne Idee? bzw. Tipp zur Fehlereingrenzung
> Dahinter hängt ein MOSFET der ein Magnetventil auf Masse schaltet. > Insb. wenn es zum Anschalten des MOSFETS gekommen ist, bleibt das > Programm gerne hängen. Spannungsspitzen beim Schalten könnten deinen µC verwirren. Vcc mit Scope überprüfen.
Evtl. liest du Mist aus den 16-Bit Variablen, die sich ISR und Programm teilen, weil nicht atomar darauf zugegriffen wird.
Das hier sieht verdächtig aus:
1 | N = (150000L*8) / T_N_PLS; |
2 | T_N_PLS = 0; |
T_N_PLS wird nach der Division auf 0 gesetzt. Damit ist das für den nächsten EXT_INT0-Interrupt ein Kandidat für Division durch 0. Wenn Du natürlich garantieren kannst, dass der nächste TIM1_OVF schneller kommt als der EXT_INT0, dann ist alles in Butter. Unschön ist es trotzdem. Abfangen würde ich das allemal.
Hallo, vielen Dank für die Tipps... Programmtechnisch hab ich vor die Abfragen von N in der Hauptschleife jetzt die Interrupts kurz deaktiviert, so das das 16Bit Label nicht zwischendrin halb umgeschrieben wird. Eine Abfrage auf T_N_PLS > 0 hab ich noch eingefügt, wobei das eigentlich nicht vorkommen dürfte. Hast aber recht, ist unsauber. Zudem hab ich dem Mosfet eine separate Masse gegeben und dem Prozessor noch 200nF Pufferkondensatoren... damit scheint es jetzt zu gehen... bisher keine Ausfälle. Danke
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.