Arduino als Komponente

Hi @Joe91 , definitiv kämpfe ich schon seit >2 Jahren mit meinen PCB´s und Störgeräuschen und habe das hier auch schon öfter angesprochen. Es trat erst mit der Umstellung auf SD_MMC auf, mit SD_SPI ist es nicht. Es ist hauptsächlich beim Booten und beim Titelwechsel hörbar. Ich habe das mit verschiedenen DAC´s probiert, MS6324, PCM5102A, PT8211. Mit dem MAX98357 passiert es seltsamerweise nicht, der Chip ist resistent.

Viel besser wurde es erst als @tueddy den SD_Zugriff beschleunigt hat. Es ist aber immer noch minimal hörbar, vor allem wenn zeitgleich das Browserfenster aktiv ist, also für mich ganz klare Zeitprobleme.

Ich verwende aus Platzgründen auch 2 Boards als Sandwich und habe beide neu in 4L erstellt. Das habe ich gemacht weil @biologist damit positive Erfahrungen gemacht hat. Und tatsächlich ist bei mir der Fehler weg wenn das Develboard in 4L ist. Mein altes Audioboard in 2L ist auch in Kombi mit dem neuen Develboard still. Mich würde brennend interessieren warum das so ist. Ich habe alles Mögliche versucht mit Kondensatoren, Feritten und Abschirmung, nichts hat geholfen. Nur ein räumliches Trennen von 3-4 cm zwischen Audioboard und Develboard, egal ob daneben oder darüber, brachte Erfolg. Ich verwende jetzt wegen LiFePo4 auch einen anderen Laderegler und anderen Spannungsregler. Ob es daran liegt oder an der zusätzlichen Abschirmung innerhalb des PCB mit GND-Plane , keine Ahnung.

2 „Gefällt mir“

@compactflash Danke für Deine Erfahrungen, deutet wohl auf Hardwareprobleme hin.
Softwareseitig könnte man einmal die Taskauslastung prüfen. Das wurde von @tuniii schonmal gemacht mit vTaskGetRunTimeStats() Diese Funktion wird stadardmässig nicht mit einkompliert aber kann hier jetzt recht leicht aktiviert werden mit diesen Flags:

CONFIG_FREERTOS_USE_TRACE_FACILITY=y
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y

Sucht mal im Projekt nach ENABLE_ESPUINO_DEBUG, Ist Alles schon da

Vielen Dank für diese Antworten. Nicht wirklich befriedigend diese Situation :slight_smile: .
Werde auf jeden Fall erstmal kein 4-Layer-Board besorgen sondern davor nochmal schauen ob ich das irgendwie anders in den Griff bekomme. Da der Unterschied unüberhörbar ist für mich will ich da erstmal noch weiter dran herumspielen. Muss ja irgendeinen Zusammenhang geben.
Vielleicht gibt es ja eine einfache Lösung…
Aber der Branch / die Funktion läuft ja nicht weg :wink:

Der Grund wurde scheinbar gefunden. Der default-CPU-Takt war zu langsam, jetzt läuft es absolut vergleichbar mit dem dev-Branch.
PR ist vorbereitet (Arduino as component by Joe91 · Pull Request #261 · biologist79/ESPuino · GitHub)

Ein paar Worte dazu:
wenn das in den Dev-Branch kommt, kann in der Plattformio.ini einfach zwischen den Versionen umstellen:

;framework = arduino
framework = arduino, espidf

Damit wird die Datei „sdkconfig.default“ wirksam, in der man beliebige Einstellungen und Konfigurationen ändern oder anpassen kann.

Der offizielle Weg das zu tun ist wie folgt:
In Platformio den Befehl „Run Menuconfig“ ausführen.
grafik

Es öffnet sich ein Menü im Konsolenbereich:

Darin können jetzt ganz viele Einstellungen geändert werden, oder auch geänderte Einstellungen wieder geladen werden.
Über die Option „Save minimal config“ wird der Diff zu Default gespeichert. Dieser Inhalt entspricht dann dem in der sdkconfig.defaults (und kann in eben diese Datei übernommen werden).
Sobald in dieser Datei (sdkconfig.defaults) eine Änderung gemacht wurde bedeutet das, dass beim nächsten build alles neu gebaut werden muss. Das dauert deutlich länger als bis jetzt (bei mir aktuell ca. 2 min).
Natürlich können auch händisch Änderungen hinzugefügt werden, idealerweise werden diese dann aber nochmal duch „laden“ und „speichern“ entsprechend formatiert…

Soweit mal in aller kürze :slight_smile:
Viel Spaß beim experimentieren und optimieren!
Joe

5 „Gefällt mir“

@Joe91 Sehr geil, vielen Dank!
Ja, ist ist letztlich genau das, was es für mich gebraucht hat. Ich habe WPA3 deaktiviert und habe jetzt, wenn ich aus der Web-GUI einen Restart mache, nach 1-2 Sekunden wieder meine Verbindung.

Im ersten Versuch (auf meinem Mac), als ich die Umgebung umgestellt habe, bin ich in einen Fehler gelaufen. Da musste ich noch ein Python-Modul installieren:

/Users/torsten/.platformio/penv/.espidf-4.4.4/bin/pip install chardet

https://blog.finxter.com/fixed-modulenotfounderror-no-module-named-chardet/

Danach lief es und ich konnte make menuconfig aufrufen.

1 „Gefällt mir“

Hab’s getestet und es funktioniert wirklich einfach, nur die eine Zeile in der Platform.ini ändern, fein!

700KB/s Uploadrate ist auch da.
Und weniger Speicherbedarf.

Beim ersten Build komme ich mit 2 Minuten nicht aus, aber danach geht’s flott. Hhast Du einen Apple M123?
Ist Deine Konfiguration nur für ESP-32 Revision 3 oder auch für ältere Boards?

Aus meiner Sicht der richtige Schritt für die Zukunft @Joe91 :+1:

Habe bei mir eben so 650 kB/s etwa gemessen. Sau cool!

Ich muss zugeben da bin ich bissl zu sehr „raus“, um das beurteilen zu können.

Ja ich denke, wenn man nicht gerade nen Apple ARM64 hat, dann wird’s ggf bissl dauern.

Was ich mich spontan frage: Bei der Sache mit den WLAN-Connect-Problemen bin ich ja nicht alleine; das haben schon mehrere Leute berichtet. Kriegen wir das irgendwie komfortabel selektierbar (àla settings.h) bei uns unter? Weil ich denke bei den sonstigen Optionen werden die wenigsten Leute aktiv was anpassen wollen.

1 „Gefällt mir“

Super! Dann am besten auch gleich die Einstellung für WPA3 in die sdkconfig.defaults mit reinnehmen, sobald es im Dev-Branch ist :+1: :slight_smile:
Da hat die erste Modifikation nicht lange auf sich warten lassen :slight_smile:

Mein PC ist halbwegs aktuell, auf meinem Laptop braucht es deutlich länger beim Clean-build :wink:

Aus meiner Sicht spricht nichts dagegen aus diesem Grund WPA3 generell zu deaktivieren.
Wir können sonst auch die sdkconfig.defaults abhängig von Compileflags per Script editieren, würde aber spontan nur eine Version (und im Zweifelsfall die mit den meisten Vorteilen) bevorzugen.

Man könnte aber auch mehrere Dateien ablegen und je nach Einstellung eine andere anziehen, macht die Sache aber wieder unübersichtlich…

Ich sehe das jetzt vor allem als einen Start, von dem aus wir Stück für Stück immer noch besser werden können da wir nicht mehr eingeschränkt sind sondern jetzt ganz viele Möglichkeiten offen stehen.

2 „Gefällt mir“

Kriegen wir das irgendwie komfortabel selektierbar (àla settings.h) bei uns unter?

WPA-3 macht ja Probleme, ich würde es jetzt werksseitig deaktivieren und wer es unbedingt haben will, der schaltet es dann halt ein. Das wird aber nur über die SDK-Konfiguration möglich sein. Also „Unsupported-Experten Modus“. sozusagen.

Was mir gefällt: Der Weg löst die bekannten Probleme, bringt Vorteile wie Webspeed & man kann es schrittweise einführen.

2 „Gefällt mir“

Ich habe mir das menuconfig gerade noch ein bisschen angeschaut.
ETH_USE_SPI_ETHERNET könnte auch raus. Modbus ebenfalls (komplett, alles). Und auch SPIFFs, weil wir das nicht nutzen.

Super gute Weiterentwicklung! Ich muss das unbedingt ausprobieren. Ist so viel einfacher als den Lib-Builder zu verwenden.

Ich hab noch eine Verständnisfrage:
Könnte man die Konfiguration nicht initial mit dieser erstellen: https://github.com/espressif/esp32-arduino-lib-builder/tree/master/configs

Dann müsste man doch exakt die gleiche Ausgangsbasis haben wie zuvor ?
Oder?

1 „Gefällt mir“

Hi Christian,

Wir haben das hier als Basis verwendet:

Die Stelle von dir kannte ich tatsächlich noch nicht und hatte die auch nicht gefunden.
Wenn man dort die passenden Files zusammenfügt sollte es jetzt hoffentlich auf das gleiche oder ein sehr ähnliches Ergebnis kommen, das schaut ich mir aber nochmal an. :slight_smile: .

Bin gespannt und melde mich wenn ich Ergebnisse verglichen habe.

Ziel ist aber immer gewesen auf der möglichst identischen Basis zu starten und dann von dort aus zu optimieren.

Vielen Dank dir für den Hinweis!

1 „Gefällt mir“

Habe den PR jetzt direkt übernommen. „espidf“ aka „Arduino als Komponente“ ist wie oben beschrieben zunächst deaktiviert und kann über eine Zeile in platform.ini umgeschaltet werden.
So können alle Interessierte an den Einstellschrauben drehen um das beste Ergebnis zu finden.

@Joe91 Danke für Deine Arbeit!

3 „Gefällt mir“

kein „run Menuconfig“ :frowning:

make kennt er auch nicht :frowning:

Was fehlt mir?

Wenn du die Ini geändert hast braucht er erstmal bisschen bis er das Projekt aktualisiert hat. Hast du bisschen gewartet und passiert was wenn du auf build drückst?
Gibt es sonst irgendwelche Fehlermeldungen?

ah einmal oben auf Refresh Tasks und der Eintrag ist da

aber jetzt kann ich da nicht pfeil hoch / runter machen… (im Menü)

Enter geht, ESC auch…

1 „Gefällt mir“

Manchmal funktioniert es nur mit J und K statt den Pfeiltasten. Keine Ahnung woran das liegt. Bei mir war das zwischendurch auch mal so, jetzt gehen die Pfeiltasten aber wieder ganz normal…

1 „Gefällt mir“

Guter Vorschlag, habe jetzt mal SPI-Ethernet, BLE, BT-HFP & Modbus deaktiviert. Bei SPIFFS habe ich mich nicht getraut, evt. wird das nochmal eingesetzt? So sehen jetzt die Speicherwerte im Vergleich aus:

Arduino (ohne Komponente):

RAM:   [===       ]  31.8% (used 104236 bytes from 327680 bytes)
Flash: [====      ]  35.2% (used 2307673 bytes from 6553600 bytes)
[ 556 ]  Freier Heap-Speicher nach Setup-Routine: 109440

Arduino als Komponente bisher:

RAM:   [===       ]  31.4% (used 103020 bytes from 327680 bytes)
Flash: [===       ]  34.9% (used 2289281 bytes from 6553600 bytes)
[ 565 ]  Freier Heap-Speicher nach Setup-Routine: 119688

Arduino als Komponente mit o.g. Änderungen, Softwarestand 20231002-1 :

RAM:   [===       ]  29.6% (used 96864 bytes from 327680 bytes)
Flash: [===       ]  30.4% (used 1992453 bytes from 6553600 bytes)
[ 580 ]  Freier Heap-Speicher nach Setup-Routine: 120108

Da kann man sicher noch mehr optimieren aber Speicher ist jetzt schon ausreichend vorhanden.

Edit: Was mich wundert: Messung der Taskauslastung zur Laufzeit scheint immer aktiv zu sein:

Das ist eigentlich ein Debug-Feature & die Flags
CONFIG_FREERTOS_USE_TRACE_FACILITY & CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS sollten standardmässig nicht aktiv sein?

3 „Gefällt mir“

Sehr cool!
Ich halte das für sinnvoll, dass die Flags erstmal aktiv sind. Auf diese Art können wir viel besser Probleme finden und identifizieren. Sollte auch nicht viel an Performance kosten. Wenn wir dann Mal weiter sind können wir sie ja ganz einfach raus nehmen.
Über das define in der settings.h sollte aber eigentlich die Ausgabe des debug Zeug deaktiviert sein. Oder?

1 „Gefällt mir“