Servo-Ansteuerung für Weichenbefehle
-
- Beiträge: 34
- Registriert: 20.04.2019, 19:24
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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?
Du kennst deine Struktur besser: könnte es sein, dass verschachtelte Interrupts auftreten, gerade wenn auch WLAN verbunden wird?
-
- Site Admin
- Beiträge: 876
- Registriert: 14.09.2018, 19:05
- Hat sich bedankt: 32 Mal
- Danksagung erhalten: 143 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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.
Gruß,
Sven
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
-
- Beiträge: 34
- Registriert: 20.04.2019, 19:24
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Servo-Ansteuerung für Weichenbefehle
Es bleibt mysteriös
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:
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.

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.
EDIT: Wenn der ESP als AP läuft, habe auch ich keinen Absturz

-
- Site Admin
- Beiträge: 876
- Registriert: 14.09.2018, 19:05
- Hat sich bedankt: 32 Mal
- Danksagung erhalten: 143 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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.
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.
-
- Beiträge: 34
- Registriert: 20.04.2019, 19:24
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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
Kannst du denn die Abstürze bei dir nachvollziehen, wenn du den Controller in deinem WLAN anmeldest?
beste Grüße
Lorenzo
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

Kannst du denn die Abstürze bei dir nachvollziehen, wenn du den Controller in deinem WLAN anmeldest?
beste Grüße
Lorenzo
-
- Site Admin
- Beiträge: 876
- Registriert: 14.09.2018, 19:05
- Hat sich bedankt: 32 Mal
- Danksagung erhalten: 143 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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.
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.
-
- Site Admin
- Beiträge: 876
- Registriert: 14.09.2018, 19:05
- Hat sich bedankt: 32 Mal
- Danksagung erhalten: 143 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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.
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.
-
- Beiträge: 34
- Registriert: 20.04.2019, 19:24
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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:
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.
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:



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.
-
- Site Admin
- Beiträge: 876
- Registriert: 14.09.2018, 19:05
- Hat sich bedankt: 32 Mal
- Danksagung erhalten: 143 Mal
Re: Servo-Ansteuerung für Weichenbefehle
Interessant .... Aber schön zu hören, dass es jetzt funktioniert.
-
- Beiträge: 34
- Registriert: 20.04.2019, 19:24
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Servo-Ansteuerung für Weichenbefehle
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
Großen Dank an Sven!!!
Beste Grüße
Lorenzo
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

Großen Dank an Sven!!!
Beste Grüße
Lorenzo