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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.