Forum: Mikrocontroller und Digitale Elektronik ESP32 Watchdog Error


von Jonas B. (holocron)


Lesenswert?

Hallo,
ich wollte mit dem ESP32 einige (16.000; brauche eine relative hohe 
sampling rate) Spannungswerte mit dem ADC2 einlesen und die Ausgabe zur 
Kontrolle printen. Allerdings bekomme ich etwas kryptische Meldungen 
(s.u.). Hat jemand eine Idee was das zu bedeuten hat? Die ausgegeben 
Spanungswerte ergeben ebenfalls kein Sinn, es wird immer 4095, also der 
Maximalwert ausgegeben. Selbst wenn der Pin der als Eingang dient (und 
die Spannung misst) an nichts angeschlossen ist.
Allerdings macht printf irgendwie allgemein Probleme. Bei 
printf("\nHello World \n Hallo Welt\n"); wird bspw. nur "Hello World" 
ausgegeben.

E (10307) task_wdt: Task watchdog got triggered. The following tasks did 
not reset the watchdog in time:
E (10307) task_wdt:  - IDLE (CPU 0)
E (10307) task_wdt: Tasks currently running:
E (10307) task_wdt: CPU 0: main
E (10307) task_wdt: CPU 1: IDLE
E (10307) task_wdt: Print CPU 0 (current core) backtrace


Backtrace:0x400D628F:0x3FFB0800 0x40081FDD:0x3FFB0820 
0x400D15E6:0x3FFC5C50 0x400D2058:0x3FFC5C70 0x400D11EB:0x3FFC5CA0 
0x4000BD83:0x3FFC5CC0 0x4000117D:0x3FFC5CE0 0x400592FE:0x3FFC5D00 
0x4005937A:0x3FFC5D20 0x40058BBF:0x3FFC5D40 0x400DA793:0x3FFC5D70 
0x400DFD4B:0x3FFC5DA0 0x400D6C39:0x3FFC60B0 0x400D45D0:0x3FFC6100 
0x400E41EE:0x3FFC6120
0x400d628f: task_wdt_isr at 
/home/jonas/esp/esp-idf/components/esp_common/src/task_wdt.c:187

0x40081fdd: _xt_lowint1 at 
/home/jonas/esp/esp-idf/components/freertos/xtensa/xtensa_vectors.S:1105

0x400d15e6: uart_tx_char at 
/home/jonas/esp/esp-idf/components/vfs/vfs_uart.c:160 (discriminator 1)

0x400d2058: uart_write at 
/home/jonas/esp/esp-idf/components/vfs/vfs_uart.c:217

0x400d11eb: esp_vfs_write at 
/home/jonas/esp/esp-idf/components/vfs/vfs.c:422 (discriminator 4)

0x400da793: __sprint_r at 
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/ 
stdio/vfprintf.c:433
 (inlined by) __sprint_r at 
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/ 
stdio/vfprintf.c:403

0x400dfd4b: _vfprintf_r at 
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/ 
stdio/vfprintf.c:1781  (discriminator 1)

0x400d6c39: printf at 
/builds/idf/crosstool-NG/.build/xtensa-esp32-elf/src/newlib/newlib/libc/ 
stdio/printf.c:56  (discriminator 5)

0x400d45d0: app_main at 
/home/jonas/Public/Detection_of_Hand-Washing_using-Capacitive_Sensing/sr 
c/build/../main/main.c:22  (discriminator 3)

0x400e41ee: main_task at 
/home/jonas/esp/esp-idf/components/freertos/xtensa/port.c:537


E (10307) task_wdt: Print CPU 1 backtrace


Backtrace:0x400836E5:0x3FFB0E00 0x40081FDD:0x3FFB0E20 
0x4000BFED:0x3FFC7540 0x400860DD:0x3FFC7550 0x400D652C:0x3FFC7570 
0x400D653B:0x3FFC7590 0x400D3FA6:0x3FFC75B0 0x40084940:0x3FFC75D0
0x400836e5: esp_crosscore_isr at 
/home/jonas/esp/esp-idf/components/esp32/crosscore_int.c:77

0x40081fdd: _xt_lowint1 at 
/home/jonas/esp/esp-idf/components/freertos/xtensa/xtensa_vectors.S:1105

0x400860dd: vPortExitCritical at 
/home/jonas/esp/esp-idf/components/freertos/xtensa/port.c:471

0x400d652c: esp_task_wdt_reset at 
/home/jonas/esp/esp-idf/components/esp_common/src/task_wdt.c:333

0x400d653b: idle_hook_cb at 
/home/jonas/esp/esp-idf/components/esp_common/src/task_wdt.c:88

0x400d3fa6: esp_vApplicationIdleHook at 
/home/jonas/esp/esp-idf/components/esp_common/src/freertos_hooks.c:51 
(discriminator 1)

0x40084940: prvIdleTask at 
/home/jonas/esp/esp-idf/components/freertos/tasks.c:3834

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Vom ESP8266 kenne ich es so, dass er zuverlässig abschmiert, wenn man 
den ADC zu oft hintereinander benutzt. Denn die Firmware nutzt den ADC 
auch, um die Sendeleistung zu steuern. Wenn sie zu lange keinen Zugriff 
auf den ADC hat (da schon belegt), kommt es zu dem Fehler.

Ich rate mal, dass du das gleiche Problem hast. Da der ADC sowieso nur 
ein grobes Schätzeisen ist, würde ich an deiner Stelle einfach einen 
externen ADC mit SPI oder I²C Schnittstelle verwenden. Der MCP3208 ist 
sehr einfach anzuwenden.

von Εrnst B. (ernst)


Lesenswert?

Jonas B. schrieb:
> (16.000; brauche eine relative hohe
> sampling rate) Spannungswerte mit dem ADC2 einlesen und die Ausgabe zur
> Kontrolle printen.

das kann auch das Problem sein... wenn du schneller printest, als die 
Serielle Schnittstelle die Werte weitergeben kann, läuft irgendwann der 
Sende-Buffer voll.
Kann sein dass das printf dann blockiert bis der Buffer wieder leer ist, 
und damit den Watchdog anstößt.
Würde zum Stacktrace printf->...->uart_tx_char passen.

==> Baudrate hochdrehen oder Ausgabe drosseln, nochmal versuchen.

von Stefan F. (Gast)


Lesenswert?

Da könnte man ja zum Test einfach mal hartcodierte Zahlen mit printf
ausgeben, anstatt den ADC abzufragen.

von Klaus R. (klara)


Lesenswert?

Jonas B. schrieb:
> (16.000; brauche eine relative hohe
> sampling rate)

Oder die Samplingrate mal halbieren.
mfg Klaus

: Bearbeitet durch User
von Jonas B. (holocron)


Lesenswert?

Hallo,
danke für die Hilfe. Es war eine Mischung aus allem. Das printender 
Werte hab ich nach dem Messen gemacht und die 16 k Werte zu printen (in 
einer Schleife) hat dann den Watchdog ausgelöst.



Grüße

Stefan ⛄ F. schrieb:
> Ich rate mal, dass du das gleiche Problem hast. Da der ADC sowieso nur
> ein grobes Schätzeisen ist, würde ich an deiner Stelle einfach einen
> externen ADC mit SPI oder I²C Schnittstelle verwenden. Der MCP3208 ist
> sehr einfach anzuwenden.

Oh tatsächlich, ist der ADC vom ESP32 nicht so gut? Und danke für den 
Tipp, ich schau's mir mal an.

von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> ist der ADC vom ESP32 nicht so gut?

Durch die Nähe zum relativ leistungsstarken HF Sender empfängt der ADC 
Störungen. Der Nullpunkt hat einen deutlichen Offset um 150mV, die 
Referenzspannung kann 10% vom Ideal abweichen.

Und so schön linear, wie Espressif es in 
(https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html) 
darstellt, ist er auch nicht.
Siehe https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/

Summa Summarum musst du mit etwas mehr als 20% Abweichung rechnen, wenn 
gerade nicht gesendet wird. Ansonsten noch viel mehr.

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.