Das stimmt so nicht ganz.
Du hast den Spannungsteiler 51/10k jetzt an GAIN angeschlossen. Von Gain willst du aber nur, je nachdem, welchen Gain-Level du willst (3, 6, 9, 12, 15 dB) , 100k oder 0 Ohm oder gar nix gegen 3.3V oder GND. Der Spannungsteiler 51/10k, sofern der denn passt, gehört an SD. Also dort, wo auch HP-Detect drankommt vom ESP32 und der Kopfhörerplatine. Weil dort willst du eine Spannung einstellen, die ohne eingestecktem Kopfhörer zu einem Stereosignal führt und mit eingestecktem Kopfhörer zum Standby des MAX führt.
Aber das Thema ist (hier) ein bisschen schwieriger. Weil beim Port-Expander (PE) mache ich das so:
- Ein PE-Ausgang, um MAX.SD anzusteuern
- Ein PE-Eingang, um HP_Detect zu erkennen
- Ist HP_Detect HIGH (also kein Kopfhörer eingesteckt), dann schaltet auch der PE-Ausgang HIGH auf MAX.SD, so dass der Lautsprecher eingeschaltet ist. In diesem Falle erkennt ESPuino „Lautsprechermodus“ und limitiert die maximale Lautstärke auf das, was für Lautsprecher konfiguriert wurde.
- Ist HP_Detect LOW (also Kopfhörer eingesteckt), dann schaltet auch der PE-Ausgang LOW auf MAX.SD, so dass der Lautsprecher ausgeschaltet ist. In diesem Falle erkennt ESPuino „Kopfhörermodus“ und limitiert die maximale Lautstärke auf das, was für Kopfhörer konfiguriert wurde.
HP_Detect und SD sind nicht direkt miteinander gekoppelt, sondern die Logik am PE-Ausgang ist Teil des ESPuino-Codes.
Beim hier genannten Board ist das Ganze nicht entkoppelt sondern passiert automatisch in Hardware durch direkte Verdrahtung:
- HP_Detect liegt auf einem GPIO des D32 und ist als Eingang mit PullUp konfiguriert.
- Ist kein Kopfhörer eingesteckt, so ist die Spannung an SD automatisch in aller Regel hoch genug, so dass der MAX aktiviert ist. Ich sage „in aller Regel“, weil Leute auch schon Probleme hatten mit dem Board hier - sie haben dann einen extra PullUp-Widerstand benötigt. Gleichzeitig erkennt der ESP32 via GPIO: Lautsprechermodus, da HP_DETECT=HIGH.
- Ist ein Kopfhörer eingesteckt, so wird GND auf HP_Detect (des ESP32) und auf SD geschaltet. Daraufhin erkennt einerseits der ESP32 (wegen HP_Detect=LOW), dass er nun Kopfhörermodus aktiv sein muss und der MAX geht aus, weil die Spannung hinreichend niedrig ist.
Das ist so ein bisschen eine Sparlösung, um nicht unnötig viele GPIOs zu brauchen. Punktuell hatten Leute, wenn sie keine Kopfhörerplatine angeschlossen hatten und damit ein PullUp gefehlt hat, Probleme. Ist eine angeschlossen, so hat man jedoch keine. Also zumindest ich hatte das Problem nie. Aber es sind hier nicht so arg viele Leute, die eine Kopfhörerplatine verwenden.
Kurzum: Man wird es ausprobieren müssen mit der Stereosache. Aus dem Bauch heraus würde ich sagen, dass man vielleicht einen Spannungsteiler nimmt, der oben an 3.3 V von angeschlossen wird. Zwischen den beiden Widerständen gibt es einen Knotenpunkt, an dem der GPIO ankommt und auch der Anschluss an MAX.SD erfolgt. Und von diesem Knotenpunkt geht ein Pulldown-Widerstand weg und hier hängt auch HP_Detect der Kopfhörerplatine dran. Aber muss man testen, ob das so klappt.
Offen ist jedoch die Frage, wie groß die Widerstände des Spannungsteilers sein müssen, weil nicht klar ist, wie groß der interne PullUp-Widerstand des ESP32 ist.
Ob der Spannungsteiler mit 51/10k wie von mir beschrieben im Setting am Port-Expander funktioniert, muss ich auch erstmal testen. Der PCB kam heute an, ich teste das jetzt am WE. Aber aus meiner Sicht sind das eh andere Gegebenheiten, weil der PE halt als Ausgang an der Stelle arbeitet und nicht als Eingang. Dann hat er halt mehr „Kraft“.
TL;DR: Es ist nicht so einfach mit dem Spannungsteiler .