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
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.
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.
Da könnte man ja zum Test einfach mal hartcodierte Zahlen mit printf ausgeben, anstatt den ADC abzufragen.
Jonas B. schrieb: > (16.000; brauche eine relative hohe > sampling rate) Oder die Samplingrate mal halbieren. mfg Klaus
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.