Forum: Mikrocontroller und Digitale Elektronik Mega644 reset


von Iwiki I. (iwiki)


Lesenswert?

Hallo

Ich habe eine Schaltung mit einem Mega644 laufen die im Grund über 
Schieberegister div. 230V Relais ansteuert.
Die Anweisungen kommen von div. Tastern und Schaltern die ausgewertet 
werden.
Zusätzlich gibt das Programm alle 20 sec. den aktuellen Status der 
Verbraucher über die Serielle Schnittstelle in eine Log-Datei aus.

Soweit so gut.... Das funktioniert im Grund seit Jahren.

Es gibt jedoch eine Kleinigkeit die leider auch seit Jahren nicht 
funktioniert. Leider hatte ich nie Zeit ihr auf den Grund zu gehen.

Alle paar Stunden ( unregelmäßig ) startet das Programm neu. Zu erkennen 
daran dass sich eine Zählervariable zurücksetzt und natürlich die zu 
diesem Zeitpunkt angeschalteten Verbraucher abschalten bzw. in den 
Ausgangszustand zurückfallen ( für jeden Verbraucher voreingestellt )

Da das auch passiert wenn keine Taster/Schalter betätigt werden bzw. 
kein Verbraucher an ist kann ich Rückkopplungen/ungewollte 
Spannungsspitzen und dergleichen ziemlich ausschließen. Die Serielle 
Schnittstelle läuft auch sauber. Keine undefinierbaren Zeichen im Log. 
Auch nach dem Reset nicht.
Scheint also so zu sein dass das Reset nicht während der Übertragung 
auftritt.

Stromausfall kann auch nicht der Grund sein da die Schaltung an einer 
handelsüblichen USV-Anlage hängt. ( Die gleiche mit der auch der Server 
versorgt wird, der nicht abstürzt )
Die Spannungsversorung selbst läuft über ein Laptopnetzteil und einem 
Spannungswandler mit entsprechender Kondensatorbestückung.

Für mich sind keine äußeren Einflüsse erkennbar die zu diesem Neustart 
des Programms führen können.
Da es so unregelmäßig und in großen Abständen passiert ist es auch 
schwer das Ganze zu beobachten.

Hat jemand eine Idee wie ich an die Sache am besten herangehen könnten 
um die Ursache ausfindig zu machen.

LG
iwiki

von M. K. (sylaina)


Lesenswert?

Erstmal sehe ich da nur die Möglichkeit, dass du einen Logger dran 
hängst um zu schaun wie der Pin-Status vor dem Reset ist. Sowas ist 
immer doof rauszufinden.

von Jim M. (turboj)


Lesenswert?

Iwiki I. schrieb:
> Stromausfall kann auch nicht der Grund sein da die Schaltung an einer
> handelsüblichen USV-Anlage hängt. ( Die gleiche mit der auch der Server
> versorgt wird, der nicht abstürzt )

Der hält normalerweise 2-3 ausgefallene Halbwellen aus.

> Die Spannungsversorung selbst läuft über ein Laptopnetzteil und einem
> Spannungswandler mit entsprechender Kondensatorbestückung.

Da würde ich mal ein DSO ranhalten. Trigger so ca. 10% unterhalb der 
normalen Spannung und dann einfach laufen lassen.

Weiter mögliche Falle: EMV Einstreuung in den Reset Pin.

von spess53 (Gast)


Lesenswert?

Hi

Erste Möglichkeit wäre festzustellen welcher Reset erfolgt -> Auslesen 
von MCUSR nach einem Reset.

MfG Spess

von Топ торкнилх (Gast)


Lesenswert?

Ein Foto des Layouts und des Aufbaus bitte.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Iwiki I. schrieb:
> Hat jemand eine Idee wie ich an die Sache am besten herangehen könnten
> um die Ursache ausfindig zu machen.

 Gleich am Anfang Register und Memory dump.

von Rainer B. (katastrophenheinz)


Lesenswert?

Für Ursachenforschung auf der Software-Seite:
- BADISR_vect implementieren mit Log-Output
- RAM-Verbrauch mit arme-Leute-Methode messen: RAM bei Start mit 
bekanntem Muster beschreiben, periodisch gucken, wieviel davon noch da 
ist.
- Auf aus dem Ruder laufende Zeigervariablen/Pufferüberlauf checken

von Iwiki I. (iwiki)


Angehängte Dateien:

Lesenswert?

Hallo

Danke für das rege Interesse und die Antworten.
Ein bisschen habe ich ja schon befürchtet dass es auf Fotos und Layout 
hinauslaufen wird.
Schätze jetzt kriege ich das erste Mal Schimpfe :-)


Ich fürchte ich brauche die Lösungsvorschläge etwas laienhafter:

- Logger dranhängen: ich schreibe das Programm in den Chip ( mySmartUSB 
light ) und stecke den Chip dann in die Schaltung. Anschließend habe ich 
nur noch die Serielle Schnittstelle als Verbindung. Welche Art von 
Logger ist hier gemeint.

- Wie ihr am Programm sehen könnte arbeite ich vor allem mit globalen 
variablen. Wenn sich hier Speicherplätze überschreiben weil doppelt 
belegt müsste ich das an undefinierte Programmzuständen merken??? oder?
=> Konnte da bisher nicht feststellen. Software läuft korrekt.

von Thomas E. (thomase)


Lesenswert?

Iwiki I. schrieb:
> Schätze jetzt kriege ich das erste Mal Schimpfe

Naja, bei dem Vogelnest kannst du froh sein, daß es überhaupt 
funktioniert.

Für den Anfang würde ich Reset fest auf Vcc legen. Damit kannst du schon 
mal ausschließen, daß er sich den Reset von außen einfängt.

Das Basic-Programm kann ich nicht beurteilen.

von Rainer B. (katastrophenheinz)


Lesenswert?

Oh, Basic. Dann funktionieren meine Software-Tips leider nicht.

Logger: So wie Jim oben geschrieben hat: Falls vorhanden, DSO auf dem 
Reset-Pin anklemmen und passend triggern. Falls es einen Resetimpuls 
gibt, sollte der Trigger auslösen. Ansonsten tut's auch ein billiges 
RS-Flipflop mit einer LED am Ausgang, das bei fallender Flanke schaltet.

Oder zweiten avr nehmen, INTx dieses zweiten mit Reset-Pin des ersten 
verbinden und auf fallende Flanke lauschen.

von Alex D. (allu)


Lesenswert?

Hallo iwiki,

mir erscheinen die Stacks und speziell der hwstack sehr knapp bemessen. 
Allein ein IRQ benötigt 32 Byte vom hwstack.

$hwstack = 40
$swstack = 60
$framesize = 60

on_tint1:                          32
    Timsek = Timsek + 5
    Call Timerchecken()

Sub Timerchecken()                 34
   For T = 1 To P(3)
   ----- einige Befehle
            Call Serialstatus(x)   36    usw.

Wenn weitere Calls oder Subs dazukommen oder vor dem IRQ bereits etwas 
auf den Stack abgelegt war, könnte es zu einem Überlauf kommen. Meine 
Empfehlung ist die Stacks mal probeweise zu verdoppeln oder wenigstens 
den hwstack deutlich zu vergrößern.

Gruß  Alex

von Iwiki I. (iwiki)


Lesenswert?

Hallo

:-) Ja mir ist durchaus bewußt das man das auch aufgeräumter bauen 
kann.... aber so ist das halt mit gewachsenen Struckturen.
Gebaut habe ich das ursprünglich mal als Modeleisenbahnsteuerung.... 
naja was soll ich sagen..... Relais getauscht... dort ein Schalter dazu, 
Bewegungsmelder braucht es auch..... und ein Dämmerungsschalter wäre gut 
und natürlich soll das Licht angehen wenn einer die Klingel 
drückt....Kompressor vergess ich auch immer ausschalter.. na dann nehmen 
wir den doch auch mit rein. .....
Also mal schnelle ein Kabel ran und probieren ob es 
funktioniert......klappt also lassen wirs mal so. Aufräumen kann man 
später.

Wenn ich mal in Pension bin mach ich das alles neu und viel besser :-)


Ich werde den Tip mit Reset auf VCC mal probieren und die Stacks 
vergrößern. Das lässt sich leicht umsetzen.

DSO habe ich leider nicht.... Das mit dem FlipFlop lass ich mir mal 
durch den kopf gehen wenn der Tip mit VCC nicht hilft. ... Ist einfacher 
umzusetzen auf die Schnelle und zielt auf das selbe ab.


Vielen Dank erstmal... und noch einen schönen Abend

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
Noch kein Account? Hier anmelden.