Servo-Ansteuerung für Weichenbefehle

Lorenzo
Beiträge: 34
Registriert: 20.04.2019, 19:24
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von Lorenzo » 12.05.2019, 12:11

Die Massen sind verbunden. Das sollte also kein Problem sein.

Du kennst deine Struktur besser: könnte es sein, dass verschachtelte Interrupts auftreten, gerade wenn auch WLAN verbunden wird?

little.yoda
Site Admin
Beiträge: 882
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von little.yoda » 12.05.2019, 14:37

Kann ich dir nicht 100%ig beantworten. Halbwissen voraus:

Im Prinzip läuft auf dem esp8266 ein rtos. Das eigentliche Programm läuft in einem Thread. Der ganze Rest (WLAN, usw.) läuft in anderen Threads. Du weißt also nie, ob ein Teil deines Programm nicht zu einen Hintergrundthread unterbrochen wird.

Du könntest in der NmraDcc2 in Zeile 279 die beiden folgenden Zeilen ans Ende der Funktion 442 verschieben. Damit wäre die ganze DCC-Routine geschützt.

Code: Alles auswählen

	DCC_IrqRunning = true;
	sei(); // time critical is only the micros() command,so allow nested irq's

Gruß,
Sven

Lorenzo
Beiträge: 34
Registriert: 20.04.2019, 19:24
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von Lorenzo » 12.05.2019, 16:39

Es bleibt mysteriös :cry:

Ich habe deinen Änderungsvorschlag implementiert, aber ohne Erfolg.

Zusätzlich habe ich mal während eines stabilen Betriebs das WLAN ausgeschaltet (mein ESP meldet sich an einem externen WLAN an). Nach Wiedereinschalten des WLANs erneut Crash. Mittlerweile gehen mir die Ideen aus. Vielleicht ist die Nutzung des ESP mit externen Interrupts doch keine so gute Idee...

Folgende Info habe ich auf der Webseite http://stefanfrings.de/esp8266/ gefunden:

Code: Alles auswählen

Interrupt-Handler Routinen müssen mit dem Makro ICACHE_RAM_ATTR gekennzeichnet werden, sonst stürzt der Mikrocontroller ab. Innerhalb von Interruptroutinen darf man keine WLAN-Funktion benutzen, den ADC nicht auslesen und auch nicht delay() oder yield() benutzen. Ich rate davon ab, Interrupts überhaupt zu verwenden, weil es dabei sehr oft zu unerwarteten Störungen kommt. 
Vielleicht werde ich auch noch mal einen anderen ESP 12E verwenden. Unter Umständen gibt es ja Probleme mit einzelnen Chargen. Muss ich mir die Tage aber erst einmal besorgen.

EDIT: Wenn der ESP als AP läuft, habe auch ich keinen Absturz :?: . Nur wenn er sich in meinem WLAN anmelden soll bzw. angemeldet hat, kommen die Abstürze.

little.yoda
Site Admin
Beiträge: 882
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von little.yoda » 12.05.2019, 19:25

Versuche es mal mit der neuen Version:
https://github.com/littleyoda/littleyod ... e/gh-pages

ICACHE_RAM_ATTR zumindest für den Interrupt-Handler hinzugefügt.

Ich schaue aber gerade, ob das ICACHE_RAM_ATTR für den Interrupt-Handler reicht.

Lorenzo
Beiträge: 34
Registriert: 20.04.2019, 19:24
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von Lorenzo » 12.05.2019, 19:51

Hallo Sven,

ich kann dir gar nicht genug für deine Mühen danken. Aber bei dieser Version hören die Resets nicht mehr auf. Sie erfolgen auch schneller. Im Gegensatz zu vorher (Exception 0) gibt es jetzt Exception 3. Und zwar unabhängig davon, ob DCC Interrupts anliegen oder nicht :cry:

Kannst du denn die Abstürze bei dir nachvollziehen, wenn du den Controller in deinem WLAN anmeldest?

beste Grüße
Lorenzo

little.yoda
Site Admin
Beiträge: 882
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von little.yoda » 12.05.2019, 21:57

Testen kann ich es gerade nicht. Mit viel Glück morgen, sonst wohl erst ab Freitag.

Ich habe nochmal ein paar Änderungen vorgenommen. Vielleicht testest du es nochmal.

Leider ist das Thema Interrupt kaum dokumentiert. Was ich bislang gefunden habe:
- Interrupt Handler mit ICACHE_RAM_ATTR deklarieren
- Nach Möglicchkeit sollten Variablen, die Daten zwischen dem ISR und dem Restprogramm austuaschen als volatile static deklariert sein

Punkt 1 habe ich jetzt hoffentlich erfüllt. Punkt zwei ist schwierig, da ich bei den bei Structs Fehlermeldungen bekomme, wenn ich sie als volatile static deklariere.

Wenn diese Version auch abstürzt, dann poste bitte mal die Ausgaben von der Kommandozeile.

little.yoda
Site Admin
Beiträge: 882
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von little.yoda » 13.05.2019, 09:26

Ich konnte es heute noch mal testen:

Testumgebung:
- WLAN Router (eigenes Netz)
- z21
- Computer + Handy + ESP8266 (D1 Mini) greifen auf das Netzwerk zu

Ergebnis:
- Update über serielle Schnittstelle kein Problem.
- Update über die Webseite (/firmware) funktioniert auch
(Wobei nach dem Neustart erst einmal der Watchdog zuschlägt und nach dem erzwungenen Neustart es dann funktioniert)

Auch wenn das Fehlen von "ICACHE_RAM_ATTR" sicherlich ein Fehler war, glaube ich aber gerade nicht mehr, dass dein Problem auf ein Software Problem zurückzuführen sind.

Mir wäre es ganz lieb, wenn du es nochmal mit einem anderen ESP8266 oder Optokoppler probieren könntest.

Lorenzo
Beiträge: 34
Registriert: 20.04.2019, 19:24
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von Lorenzo » 13.05.2019, 09:34

Hallo Sven,

ich habe gerade einige Tests mit deiner letzten Version durchgeführt. Offensichtlich hat ICACHE_RAM_ATTR zum Erfolg geführt. Ich habe jetzt ungefähr 20 Resets und 20 firmware updates durchgeführt, ohne dass es dabei zu einem Absturz gekommen ist.
Ich denke, mit der letzten Version von gestern sollte das jetzt soweit funktionieren. Ich werde das aber heute abend noch weiter testen. Aber nach aktuellem Stand: :D :D :D

Lorenzo

EDIT: den Optokoppler Test habe ich bereits durchgeführt, ohne dass es zum Erfolg geführt hätte. Sobald ich mir noch mal neue ESP beschafft habe, teste ich gerne auch noch mal ein anderes Exemplar. Das sollte so gegen Ende dieser Woche möglich sein.

little.yoda
Site Admin
Beiträge: 882
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von little.yoda » 13.05.2019, 10:28

Interessant .... Aber schön zu hören, dass es jetzt funktioniert.

Lorenzo
Beiträge: 34
Registriert: 20.04.2019, 19:24
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Servo-Ansteuerung für Weichenbefehle

Beitrag von Lorenzo » 17.05.2019, 09:56

Kleines Update.
Ich habe jetzt noch einmal unterschiedliche firmware mit einem weiteren ESP 12E sowie mit einem NodeMCU durchgeführt. Auch hier der gleiche Effekt. Mit ICACHE_RAM_ATTR funktionierts, ohne nicht. Das scheint in meiner Gesamtkonfiguration offensichtlich durchgängig zu sein. Keine Ahnung, was die Ursache dafür ist. Aber im Ergebnis zeigt sich jetzt, dass die Version mi ICACHE_RAM_ATTR auch bei mir zuverlässig und stabil arbeitet :D

Großen Dank an Sven!!!

Beste Grüße
Lorenzo

Antworten