Programm hängt sich auf - Fehlersuche

Gast #2278171
Lesenswert?

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
Angehängte Dateien:
Gast #2278186
Lesenswert?

> 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.
Moderator Persönliche Seite #2278706
Lesenswert?

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.
Gast #2280720
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren