Hallo Besucher, der Thread wurde 2,9k mal aufgerufen und enthält 26 Antworten

letzter Beitrag von Ruudi am

ESP-12 Rx/Tx anderweitig nutzen

  • Hallo zusammen,


    es geht um mein aktuelles Projekt, ein nRF24 Gateway mit dem ESP-12.


    Das Board an sich ist soweit fertig, ein Protoyp wurde auf Lochraster aufgebaut und getestet.

    Als Finale wollte ich noch etwas an der Kosmetik machen, darunter auch 2 LEDs für RF Aktivität (zur visuellen Info und Belustigung) aufnehmen.


    Alle GPIOs sind belegt. Damit fängt auch das Gröbeln an.

    - Ein IO-Expander würde viel Platz beanspruchen. Für das Vorhaben etwas unrentabel.

    - Eine größere MCU mit mehr IOs kommt aus designtechnischen Gründen nicht in Frage.


    Die Überlegung geht nun in Richtung, die onboard TX LED und oder Leitung zu kastrieren. Das wäre nicht so helle, dann kann man gleich Serial Debugging und WiFi vergessen.


    - Die Leitung doppelt belegen, nutzen wenn keine UART RX/TX Aktivität stattfindet.

    - Einen IO freischaufeln, auf 3-state setzen, eine Duo-LED (bidirektional) dranhängen. Ich könnte u.U. auf den CS/SS verzichten und ihn permanent auf low legen, da es keine weiteren SPI devices gibt. Glaube ich zumindest.

    - Softwaretechnisch die UART deaktivieren und 2 IOs bekommen. Nur bräuchte ich dann wieder eine Erweiterung für die Wiederaktivierung. Ergibt irgendwie wenig Sinn.


    Das wären so meine Überlegungen bzw. Ideen. Leide finde ich keine optimale Lösung. Vielleicht hat jemand von euch noch einen Ansatz oder Vorschlag?


    Die TX-Leitung+LED ist auf dem ESP-12 natürlich per default aktiv und fest verdrahtet, und ist low active. Ich darf da nicht unkontrolliert hineingreifen. Da muss bischen Hardware+Software her.


    Schaut euch einfach den Abschnitt Indicators im Schaltplan an. Einen LEDctrl Pin habe ich schon mal vorbereitet und im Board vorgerouted.


    Vielen Dank.

  • Also wenn Du die Software und somit die GPIOs selbst im Griff hast, dann würde ich einfach jeweils LEDs samt passenden Vorwiderständen anstelle von R4 und R5 verbauen und die entspr. GPIOs als Ausgang gg. GND (eh besser wg. Stromtragfähigkeit), also logisch invertiert betreiben. Vorwiderstände etwas kleiner und somit Strom größer, dafür aber mittels eines regelmäßigen Interrupts ähnlich einer Soft-PWM eine Tastlücke programmieren, in der die GPIOs auf Eingang geschaltet werden und dort die Taster dann nach Entprellzeit (also kurz vorm Wiedereinschalten der LEDs) abfragen.


    Das Gleiche geht natürlich auch mit dem Ausgang zu LEDCtrl, da ist allerdings dann entweder gar kein externer Transistor mehr nötig, oder aber 2, wenn der Strom nicht reicht (einen zum nochmals invertieren...). Denn wer die LEDs "oben" mit Strom versorgt, das ist den Schaltern unten egal, so lange nur die Spannung oben nicht größer wird, als die Vcc der Schalterstufe unten...


    Möglicherweise geht das sogar im Polling, also umschalten auf input, auf low testen, wieder umschalten auf Output (alter LED-State). Muss man eben die Taste vielleicht ein klein wenig länger drücken dann... Während man die Taste drückt, leuchtet die LED natürlich auch, its not a bug, its a feature ;-)

  • Du kannst die Switch-Eingänge als LED-Ausgänge verwenden. Musst dann halt alle n Perioden kurz umschalten auf Eingang und die Switches prüfen (sofern das nicht per Interrupt erledigt wird).

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Du kannst die Switch-Eingänge als LED-Ausgänge verwenden. Musst dann halt alle n Perioden kurz umschalten auf Eingang und die Switches prüfen (sofern das nicht per Interrupt erledigt wird).

    Ach ja, Ergänzung, damit's nicht knallt:


    LEDs low-aktiv; wenn sie aus sein sollen -> Port tristaten bzw. auf Eingang stellen (Pseudo-Open-Collector). Dann geht auch nix kaputt, wenn die Switches gegen GND schalten.

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Möglicherweise geht das sogar im Polling, also umschalten auf input, auf low testen, wieder umschalten auf Output (alter LED-State).

    Ui genial, ja klar - an die beiden IOs der Taster kann ich rangehen.

    Abwechselnd den Keyscan als input und LEDs für output. Das bekomme ich mit Software hin.


    Das Gleiche geht natürlich auch mit dem Ausgang zu LEDCtrl, da ist allerdings dann entweder gar kein externer Transistor mehr nötig, oder aber 2, wenn der Strom nicht reicht (einen zum nochmals invertieren...).

    Den LEDctrl habe ich nur herausgezogen um kontrolliert den Ablauf oberhalb zu steuern. Die Idee war folgende:

    - Serial per Software abschalten und den LEDctrl einschalten.

    - Die Indikatoren betreiben

    - Beim Moduswechsel dann umgekehrt.

    - Indikatoren aus, Serial an

    - Mit dem Aufbau würde nichts hineingetreut. Ergo käme an RX nichts hinein, und TX würde durch die Bodydiode einfach ins Nirwana durchpusten.


    Eben war ich dabei versuchsweise einen OR/XOR Gatter an die TX/RX zu hängen und entgegengesetzt anzusteuern. Softwareseitig ist Serial/Wifi ziemlich tief im Source verankert. Da möchte ich ungern groß herumpfuschen.


    Aber euer Vorschlag ist durchaus besser. Danke!

  • Ach ja, Ergänzung, damit's nicht knallt:


    LEDs low-aktiv; wenn sie aus sein sollen -> Port tristaten bzw. auf Eingang stellen (Pseudo-Open-Collector). Dann geht auch nix kaputt, wenn die Switches gegen GND schalten.

    Das i.d.F. mit Vorsicht zu genießen. Viele IOs bei einer MCU möchten kein low sehen - Daher auch die Pullups.

    Sonst fahren sie z.B. wie hier bei IO0 in den Flashmode. Da ist man mit high-active auf der sicheren Seite.

  • Da ist man mit high-active auf der sicheren Seite.

    Dann musst du aber auch die Switches gegen "H" ziehen. Sonst schließt du mit dem Switch gegen GND den LED-Ausgang kurz.


    Außerdem bilde ich mir ein, dass ich dauernd LEDs sehe, die auf "L" gezogen werden. Aber ich bin in dem Thema nicht so drin. Es war nur ein Gedankenblitz beim Betrachten des Schaltplans. Die (primitiven) MCUs, die ich so verwendet habe, hätten damit jedenfalls kein Problem. Ich bin auch schon wieder still, mehr kann ich eh nicht beitragen. Du machst das schon. ^^

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Dann musst du aber auch die Switches gegen "H" ziehen. Sonst schließt du mit dem Switch gegen GND den LED-Ausgang kurz.


    Außerdem bilde ich mir ein, dass ich dauernd LEDs sehe, die auf "L" gezogen werden.

    Ja, da hast du Recht.

    Vor langer Zeit habe ich mal mal so einen Keyscan+LED in einem Projekt verbaut. Muss mich wieder auffrischen und den Teil suchen :)

  • Sonst schließt du mit dem Switch gegen GND den LED-Ausgang kurz.

    Je nach Controller ist das vielleicht auch egal, wenn er eine Strombegrenzung hat.

    Mir stellen sich aber trotzdem dabei die Nackenhaare auf. Ich hab gelernt: Sowas macht man nicht. ^^

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Ich glaube am besten klatsche ich da einfach ein Shiftregister 74595 o.ä. rein.

    Weis der Geier welche Ideen noch künftig kommen oder zusätzliche LEDs gebraucht werden :)


    Je nach Controller ist das vielleicht auch egal, wenn er eine Strombegrenzung hat.

    Die neuen kleinen sind da ziemlich empfindlich, tolerieren es meist nicht.

    Mit TTL/CMOS war alles irgendwie harmloser :)

  • Ich glaube am besten klatsche ich da einfach ein Shiftregister 74595 o.ä. rein.

    Weis der Geier welche Ideen noch künftig kommen oder zusätzliche LEDs gebraucht werden :)

    Dann gleich einen I²C, dann bist du flexibel. :-D

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • IO4+5 sind leider dem SPI zum Opfer gefallen :)

    Bin froh überhaupt, bei den wenigen Pins, komplett SPI+IRQ herausgequetscht zu haben.


    Trotzdem strebt man immer nach mehr, mehr, mehr

    Das macht man dann doch in Software, oder? :bgdev

    Gut, jetzt bin ich wirklich still.

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Ruudi Vielen Dank für die Infos. Echt schade dass es nicht publik ist. Die Inhalte sind sehr wertvoll und hilfreich.


    Charlieplexing sagt mir was. Für 2 LEDs bleibt es beim gleichen. Nur in- und outputs kann man nicht mischen?


    Dann kam mir der Gedanke einen Blick auf den Logikpegel zu werfen.

    Graus. Eine LED hat ja schon eine Vf von etwa ~2.1V. Als Rest (bei LL3V3) verblieben im besten Fall noch etwa 1.2V. Das liegt in der Grauzone, weder H noch L.

    Den VIL weiter auf 0.8V herunterdrücken geht einfach, nur dann wäre der Input auf low, was eben nicht geht.

    Mit "etwas mehr" Aufwand könnte man den Arbeitspunkt verlagern.


    Als nächstes kam die Idee, warum nicht einfach die beiden LEDs auf einen IO legen, die Buttons auf den anderen. Oder Zumindest kritische IOs, welche nicht low sein dürfen, verlagern.

    Ginge auch, nur damit bekäme man

    - beim input der Taster einen floating Pin

    - beim output der LEDs läge man wieder auf low.


    Wenn man sich z.B. für die Schieberegister-Variante entscheidet führt es auch nicht zum Ziel. Zunächst bräuchte man mind. 3 Pins. Dann auch noch jeweils einen SIPO (74595) und PISO (74165).


    Mittlerweile finde ich den, zu schnell ausgeschlossenen, Gedanken einen IO Expander dranzuhängen schlicht falsch und durchaus sinnvoll.

    Dummerweise gibt meine Grabbelkiste gerade keinen SPI-Expander her, dafür mehrere I2C. Danke kinzi auch deinen Beitrag habe ich nicht verworfen, jetzt kommt er in Betracht.

    Die 2 Pins für I2C könnte ich mit viel Mühe herauspressen in dem ich ein paar IOs tausuche. SPI wäre in diesem Aufbau passender.


    Ich frage einfach mal hier in die Runde (Marktplatz ist immer noch deny):

    Hat jemand ein-zwei SPI Expander, in SO/SOP übrig?

    4bit würde schon reichen, 8 Ports gingen natürlich auch, mehr ist nicht nötig.

    Ergo etwas i.d.A. MCP23S17,MCP23008...


    Wir könnten auch gegen I2C tauschen (MCP23017,PCF8574,TCA9548).

    Hab echt keinen Bock wg. 80ct eine Bestellung auszulösen.

  • Dann kam mir der Gedanke einen Blick auf den Logikpegel zu werfen.

    Graus. Eine LED hat ja schon eine Vf von etwa ~2.1V. Als Rest (bei LL3V3) verblieben im besten Fall noch etwa 1.2V. Das liegt in der Grauzone, weder H noch L.

    Den VIL weiter auf 0.8V herunterdrücken geht einfach, nur dann wäre der Input auf low, was eben nicht geht.

    Mit "etwas mehr" Aufwand könnte man den Arbeitspunkt verlagern.

    Das ist doch völlig egal.

    Die LED macht doch nur 2,1 V Spannungsabfall, wenn der GPIO als Ausgang geschaltet ist.

    Wird er auf Eingang umgeschaltet, schaltest du die Pull-Ups dazu, dann ist alles klar: "H" in Ruhe, "L" bei "button pressed".

    Ich verstehe das Problem gerade nicht ...

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Ich weiß nicht, warum Du Angst davor hast, die GPIO auf Low zu schalten?


    Das MÜSSEN die abkönnen!


    Was Anderes ist es, die per Beschaltung schon beim Einschalten auf Low zu legen, wenn das irgendne Spezialfunktion des ESP auslöst, aber das dürfte doch eigentlich nur ganz wenige der I/Os betreffen, GPIO heisst ja nun "general purpose I/O", also für allgemeine Verwendung...


    Und beim Einschalten wären sie mit LED + parallelen Pullup-Widerstand und NICHT gedrückter Taste ja auf High!


    Wie schon geschrieben, die LED muss mit einem Pullup überbrückt werden, um nen ordentlichen Hi-Pegel zu bekommen, wenn auf Eingang umgeschaltet wird, um den Taster rückzulesen.


    Grundsätzlich gehen an einem Portpin 2 LEDs und 1 Schalter. Wenn der Portpin auch noch intern schaltbaren Pullup hat, dann kann man mittels Tricks sogar 2 Schalter und 2 LEDs ansteuern, die LED natürlich gepulst, um die kurzen Pausen für die Eingangsabfrage rauszuschinden.


    "Leider" reagiert unser Auge recht empfindlich auf unregelmäßiges Flimmern "Flackern", d.h. ist es schon sinnvoll, sich für den Task nen Timer aufzuziehen und das per IRQ zu machen, aber es geht rein technisch auch gepollt, aber möglicherweise sieht man dann trotz winziger Unterbrechungen resp. eigentlich fürs Auge zu hoher Wiederholfrequenz ab und an was flackern...


    SPI Portexpander würde natürlich gehen, halte ich aber für die aktuelle Anwendung als "over-engineered", I2C ist langsamer und vom Protokoll her aufwändiger und nachdem ja eh schon ein SPI dran hängt, würde ich es dort lieber mit in die Kette stellen. Muss übrigens auch gar kein Portexpander sein, ein Serial in, parallel out Schieberegister aus der 74xx Familie tuts da auch (74HC(T)595)


    Apropos, hattest Du ja auch mal gefragt: Entweder eigenen Pin opfern für separates CS/SS, oder einfach mit durchtakten. /SS ganz auf GND zu hängen, geht nur sehr begrenzt, da manche SPI-Slaves, aber eben auch der 595 auf ein "Ende"-Signal warten, um die dann in den Registerbits stehenden Daten auch zu übernehmen...

  • Hallo zusammen,


    wollte mich kurz mit ein paar Testergebnissen zurückmelden.

    Heute habe ich mehrere Varianten mit 2 MCUs durchprobiert. Beide verhalten sich unterschiedlich. Auf interne Pullups kann und darf man sich jedenfalls nicht verlassen.


    Ich der Anlage ist eine Skizze mit Kritzeleien. Hoffentlich könnt ihr daraus etwas herauslesen.

    Auf der rechten Seite gab es teils positive Ergebnisse, aber auch Nebeneffekte. Zu dem auch funktionierend bzw. nichtfunktionierend bei unterschiedlichen Bauteilwerten.


    Der Aufbau auf der linken Seite konnte mich überzeugen. Die Werte muss ich dann final beim bestücken ausloten und etwas anpassen. Ich denke die Teilschaltung kann ich soweit ins Board übernehmen.


    Soweit eine kleine praktisch Rückmeldung.

    Vielen Dank für euere Geduld und die Hilfestellung.

  • Der Aufbau auf der linken Seite konnte mich überzeugen

    Nun, wenn die einzelnen I/Os wirklich 20mA je Pin können (wie viel denn gesamt für den ganzen Chip?), dann ist der gezeichnte NPN eigentlich gar nicht notwendig...


    Aber ok:


    Wenn ein solcher als N-FET dann verbaut wird, dann kann eine absichtlich massiv erhöhte Gatekapazität (z.B. 1µF X7R!) gg. GND zusammen mit einem rel. hohen Gatewiderstand von z.b. 10k dafür sorgen, dass die LED selbst bei unregelmäßiger Abfrage des Schalters NICHT flackert. Das wird sie nur tun, wenn der Schalter dann (länger) gedrückt wird, Entprellung gibts also auf die Weise auch noch umsonst ;-)


    Den FET lässt das im wahrsten Sinne kalt, denn 20mA Last sind selbst für die "kleinen" FETs fast gar nix, da kann auch mal der lineare Bereich durchlaufen werden...


    Der FET sollte nur angesichts der nur 3.3V Steuerspannung eine sehr niedrige Gateschwellspannung haben...