Lolin D32 + SD_MMC + RC522 + 3 Buttons

nach längerer, gezwungener Abwesenheit habe ich nun endlich wieder ein bisserl mehr Zeit mich wieder mit dem ESPuino auseinanderzusetzen. Nachdem unsere Jungs kürzlich von einer originalen T***Box eines Freundes ziemlich begeistert waren möchte ich Ihnen nun endlich auch Ihre eigenen ESPuinos bauen.

Ich habe mich mal ein bisschen mit dem Schaltplan beschäftigt und ihn auf unsere Anforderungen abgeändert:

  • Lolin D32
  • SD_MMC
  • RC522 (wird ein kleiner reader, da kaum Platz im Gehäuse ist)
  • 3 beleuchtete Buttons (daher auch 3 Pins pro Button mit SW_Power3.3 für die LEDs)
  • Rotary Encoder

Könntet Ihr bitte bei Gelegenheit mal über den Schaltplan schauen, ob das alles so passt?
Tonuino D32.sch.pdf (105,7 KB)
Vielen Dank schon mal!

Ich denke das sieht ok aus. Eine Sache: Für R4 reichen 100k. Ja, ich weiß, bei mir steht’s auch mit 10k drin :slight_smile:.
Ansonsten bitte das Projekt ESPuino nennen. Ich weiß, auch das steht bei mir teilweise noch falsch drin. Das stammt noch aus Zeiten, als ich im Nachbarforum zu Gast war und mein Projekt noch nicht ESPuino hieß.

Achso: Und gemäß der Diskussion von vor ein paar Tagen, würde ich an MAX.SD auch mal einen Spannungsteiler einplanen. Vielleicht mit einem PullUp von SD zu 3.3V und einem PullDown von SD zu GND. Musst es ja erstmal nicht bestücken, aber damit hast du später zumindest die Möglichkeit, die Spannung nachträglich zurecht zu drücken/ziehen, so dass stereo möglich ist.
Infos: Kopfhörerplatine basierend auf UDA1334 / PJ306b - #18 von biologist und nachfolgende Posts. Dort habe ich den Spannungsteiler etwas anders angeschlossen (der Ausgang des Port-Expanders sind dort die 3.3 V). Das ist bei deiner Platine hier jedoch etwas anders, da HP_DETECT (welches ja direkt auf SD geht) als INPUT konfiguriert ist. Das unterscheidet sich also ein bisschen.

Danke für die Antwort und die Idee mit der zusätzlichen Schaltung. im angehängten Schaltplan habe ich mal versucht das alles umzusetzen. Vielleicht kann ja nochmal jemand drüber schauen ob das so passt? PCB Design folgt dann als Nächstes.
v5_ESPuino_BB.pdf (101,9 KB)

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.

:arrow_forward: 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.

:arrow_forward: 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 :slight_smile:.

Vielen Dank für die super ausführliche Antwort.
Ich habe tatsächlich den richtigen Pin am MAX verdusselt und den Spannungsteiler am Gain angeklemmt… sorry dafür! :dizzy_face:

Habe mir nochmal den Schaltplan der Kopfhörerplatine von @compactflash angeschaut
https://forum.espuino.de/t/kopfhoererplatine-mit-pcm5102a-und-tda1308/40
Verstehe ich es richtig, dass wenn der Klinkenstecker eingesteckt ist am SD 0V (GND) anliegt und wenn der Klinkenstecker entfernt ist 3,3V an SD anliegen? (ich min mir gerade nicht sicher, was am PMOS an Spannung abfällt…)

Dann könnte ich doch einfach an dieses Signal - kommend von der Kopfhörerplatine - den Spannungsteiler anklemmen und so die richtige Spannung für den MAX einstellen, oder sehe ich das komplett falsch?

Nee, da hast du Recht. Ich muss zugeben, dass ich das nicht so auf dem Schirm hatte. Meine Kopfhörerplatine schaltet auch GND, aber wenn nix eingesteckt ist, dann kommt 3.3 V über einen 10 k Pullup. Insofern: Das klingt nach einem guten Plan, die 3.3 V der Kopfhörerplatine in den Spannungsteiler zu stecken. Die Frage ist nur was passiert, wenn keine Kopfhörerplatine angeschlossen ist. Idee: Machst eine 3er-Lötbrücke (oder Pinheader mit Jumper) rein und kannst darüber einstellen, ob die 3.3 V über die Kopfhörerplatine oder über „normale“ 3.3 V in den Spannungsteiler gehen. Überhaupt ist es manchmal gut, wenn man sich mehrere Möglichkeiten offenhält, weil es einem im Zweifelsfalle eine weitere Bestellung erspart :slight_smile: Nicht, dass ich selbst darin Meister wäre, aber ich sag’s nur, hrhr.

Den Spannungsabfall auf dem PMOS kannst vernachlässigen, da Rds sehr klein ist.

so, nun bin ich nochmal über den Schaltplan gegangen und habe die oben genannten Änderungen eingearbeitet. Außerdem habe ich noch einen Spannungsteiler zur Einstellung der Verstärkung des MAX eingebaut. Danke für die Inspiration :slight_smile:
v5_ESPuino_BB_v0.2.pdf (110,6 KB)
Kommentare sind wie immer herzlich Willkommen! Danke schon mal…

Na das sieht doch gut aus.
Nachdem ich am WE noch das inverted-Power-Feature hochgeladen habe, kannst dir noch überlegen, ob du R6 und Q1 entfernen möchtest, um mit 1k (R5 bleibt also) dann nicht das Gate des IRL anzusteuern, sondern das des NDP. Oder alternativ, wenn du dem Braten nicht traust, machst eine Lötbrücke rein, die ausgehend von R5, R6 und Q1 überbrücken kann. Dann kannst du es dir aussuchen.

Tataaa…
hoffentlich ist das nun die finale Version des Schaltplans, mit dem ich in die Erstellung des PCB gehen kann.
v5_ESPuino_BB_v0.3.pdf (112,2 KB)

An dieser Stelle nochmal Danke für Deine großartige Hilfe @biologist

Ja, kannste so machen :+1:
Ich dachte jetzt eher an eine 2er-Lötbrücke, da man da ja eigentlich nicht hin und herwechselt. Weil wenn man R6 und Q1 nicht einlötet, dann stören die Bauteile ja nicht. Aber 3er geht natürlich auch.