Forum: Mikrocontroller und Digitale Elektronik ESP8266: Imax gegen Masse


von Trampel (Gast)


Angehängte Dateien:

Lesenswert?

Bei meinem Midi Controller Bastel Projekt empfängt ein ATMega32A Midi 
Daten. Ein ESP8266 (in Form eines ESP12 Moduls) soll den Midi Eingang 
abkoppeln können, um selbst ungestört Daten an den ATMega32A schicken zu 
können.

Im Schaltplanausschnitt übernimmt diese Aufgabe der Transistor Q6, von 
GPIO5 angesteuert. Setzt GPIO5 den Emmiter von Q6 auf high, dann kann Q6 
nicht durchschalten und das Midi Eingangssignal ist blockiert. Ist GPIO5 
jedoch low, dann kann Q6 MIDI_IN auf low ziehen und Mididaten kommen 
durch.

Das war die Idee.

In der Praxis schaffe ich es irgendwie nicht den ESP dazu zu überreden 
GPIO5 ordentlich auf low zu ziehen. Bei high liegen erwartungsgemäß 3.3V 
an, aber bei low dümpelt GPIO5 irgendwo bei halbherzigen 1.7V rum.
Ziehe ich den ESP aus seinem Sockel und schließe GPIO5 mit einer 
Drahtbrücke gegen Masse, funktioniert die Schaltung wie gewünscht. Durch 
die Drahtbrücke messe ich dann ein Strömchen von 0.58mA. Im Datenblatt 
http://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf 
ist Imax für GPIOs mit 12mA angegeben. Kann nicht sein, dass der ESP mit 
der Last überfordert ist.
Fühlt sich irgendwie eher so an, als hätte ich GPIO5 mit internem 
Pulldown als Eingang konfiguriert oder sowas. Anbei ein minimales 
Progrämmchen (für nonos sdk), das zeigt, wie ich GPIO5 zu initialisieren 
versuche.

Siehst Du in der Soft- (oder Hardware), wo ich Fehler mache?

von Stefan F. (Gast)


Lesenswert?

Für mich liest sich das so, als ob du den Pin als Ausgang konfigurieren 
musst. Allerdings sieht dein Code meiner Meinung nach Ok aus.

Es önnte der Low-Side Transistor des GPIO Pins defekt sein. Du könntest 
zur Probe mal auf GPIO4 wechseln.

von Trampel (Gast)


Lesenswert?

Stefan U. schrieb:
> Für mich liest sich das so, als ob der Low-Side Transistor des
> GPIO Pins
> defekt sei. Du könntest zur Probe mal auf GPIO4 wechseln.

Guter Tip! Das habe ich sogar tatsächlich schon versucht. Sogar das 
komplette ESP12 Modul hatte ich getauscht. Leider ohne Erfolg. 
Hoffentlich habe ich jetzt nicht gleich zwei ESP12 mit je 2 kaputten 
GPIOs erzeugt...

von Mario M. (thelonging)


Lesenswert?

Also für mich sieht es so aus, als ob GPIO5 mit TXD(ESP) über Q6 
kurzgeschlossen wird.

von Trampel (Gast)


Lesenswert?

Tadaaa, genau das war's! Danke! Ich muss natürlich erst TX deaktivieren, 
also als Eingang schalten, wenn ich externen Midi Empfang erlauben 
möchte!
1
void midi_in_enable(const uint8_t enable) {
2
  if (enable) {
3
    // If we don't disable our transmission we might short circuit GPIO01 and GPIO5 
4
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1);
5
    GPIO_DIS_OUTPUT(FUNC_GPIO1);
6
    
7
    // connect emittor with gnd -> midi in jack is enabled.
8
    GPIO_OUTPUT_SET((MIDI_IN_DISABLE_PIN), 0);
9
  } else {
10
    GPIO_OUTPUT_SET((MIDI_IN_DISABLE_PIN), 1);
11
    
12
    // reenable tx
13
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
14
  }
15
}

Solved!

von Stefan F. (Gast)


Lesenswert?

> Also für mich sieht es so aus, als ob GPIO5 mit TXD(ESP) über Q6
> kurzgeschlossen wird.

Ich nehme mal an daß TxD deaktiviert ist, sonst würden da mehr als 
0.58mA fließen.

von Trampel (Gast)


Lesenswert?

Stefan U. schrieb:
> Ich nehme mal an daß TxD deaktiviert ist, sonst würden da mehr als
> 0.58mA fließen.

Bei meiner Messung war der gesamte ESP aus dem Sockel gezogen, somit 
konnte TX sich auch nicht mit GPIO5 kloppen.

von Stefan F. (Gast)


Lesenswert?

Aha, dann nimm mal den TxD Pin unter die Lupe. Vielleicht musst du ihn 
vorher deaktivieren oder auf Low schalten.

von Trampel (Gast)


Lesenswert?

Ja, genau das muss ich machen. Wir haben vermutlich gleichzeitig 
gepostet und Du hast noch nicht gesehen, dass ich unmittelbar vorher 
schon korrigierten Code gesendet hatte. Damit funktioniert es schon mal 
grundsätzlich.

Vielen Dank für die Mühe und Hilfe!

von Stefan F. (Gast)


Lesenswert?

> Du hast noch nicht gesehen, dass ich unmittelbar vorher
> schon korrigierten Code gesendet hatte

Stimmt, hat sich zeitlich überlappt.

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.