ich suche eine einfache Möglichkeit bis zu 16 on-off-on Schalter mit einem µC zu lesen. Die ADC-Variante mit ADC des µC und pullup-pulldown geht nicht (weil belegt).
Ideen:
man könnte eine externen I2C-ADC nehmen. Am besten einen, bei dem man wie etwa beim STM32Gxx pullup/pulldown gleichzeitig einschalten kann.
man könnte einen I2C-I/O Expander nehmen, wie etwa PI4IOE5V6416, bei dem man auch pullup oder pulldown einschalten kann, und man liest dann zweimal, einmal mit pu eingeschaltet und einmal mit pd eingeschaltet.
Man kann die als 8x4 Matrix verschalten und dann einlesen. Z.B. mit einem 74HC164 8 * nacheinander Low anlegen und auf 4 Pins mit Pullup einlesen. Das benötigt 6 IO-Pins. Sollen mehrere Taster gleichzeitig betätigt werden, müssen noch Dioden rein, damit keine Phantomtasten entstehen.
Ich muss die Frage präzisieren: die Anbindung an den µC per I2C ist in meinem Fall sehr günstig, das I2C auf dem Board schon genutzt wird und der phys. Abstand zu den Schaltern nicht weit ist. Außerdem werden die Schalter sowieso auf einem einem getrennten Board untergebracht.
Die Verbindung könnte ich nun über QWIIC (4-Draht) machen. Auf dem Board sitzen die Schalter und bspw. ein I2C-IO-Expander.
Ich finde die Alternative 2 gut. Braucht keine weiteren externen
Bauteile, wenn man mit den 100 kOhm Pull-up/Pull-down leben kann.
Das hoffe ich schon, denn die Schalter und der IO-Expander sollen auf dasselbe kleine Board. Aber vllt gibt es ja IO-Expander, die kleinere PU/PD haben?
Auf jeden Fall mehrfach einlesen, und nicht nur 2x. Wenn dann noch die Verbindungen zwischen Expander und Schalter kurz sind sollte das schon funktionieren.
Moin,
vielleicht könnte man einen ATtiny z.B. 4213 als I2C Slave laufen lassen. Der hätte dann 15 (16) freie Eingänge und Du kannst ihn programmieren. Das funktioniert bei mir problemlos.
Gruß
Carsten
Wie die LEDs beim Charlieplexing, die Dioden antiparallel. Dann immer einen Ausgang auf L und die anderen auf Eingang mit Pullup. Oder hab ich noch nen Denkfehler?
P.S. War wohl auf dem Holzweg. Beim Charlieplexing von Schaltern ist trotzdem Ghosting möglich. Der Trick bei den LEDs besteht im Tristate der Ausgänge. Danke für den Wink mit dem Zaunspfahl. https://github.com/thanks4opensource/markoplexing
Wenn es denn I²C sein muss, nimm halt was wie den MCP23017. Dann hast Du schon mal 2 Ausgänge und 14 Eingänge. Dazu noch sowas wie ein 74xx153 und ein paar Transistoren oder OC-Inverter und alles bleibt digital.
Wenn es denn I²C sein muss, nimm halt was wie den MCP23017. Dann hast Du
schon mal 2 Ausgänge und 14 Eingänge. Dazu noch sowas wie ein 74xx153
und ein paar Transistoren oder OC-Inverter und alles bleibt digital.
Es muss nicht I2C sein, ist aber als 2-Draht sehr sparsam.
Warum sollte ich den MCP23016/17/18 nehmen, wenn ich mit einem PI4IOE5V6416 tatsächlich alles realisieren kann (s.o.)?
die Anbindung an den µC per I2C ist in
meinem Fall sehr günstig, das I2C auf dem Board schon genutzt wird
Was bedeutet denn on-off-on? Ich interpretiere, dass Du drei Zustände lesen willst, Low-Open-High? Damit fallen digitale I2C-Expander aus, weil offen unzulässig ist. Du hast dann pro Schalter zwei Widerstände und entweder High, halbe Spannung oder low - da müssen Analogeingänge her.
Jetzt musst Du nur noch einen AD finden, der genug Eingänge hat oder 4 Stück ADS1015 oder PCF8591 einsetzen. Oder einen Analogmultiplexer aufbauen, das werden noch mehr Bauteile.
die Anbindung an den µC per I2C ist in
meinem Fall sehr günstig, das I2C auf dem Board schon genutzt wird
Was bedeutet denn on-off-on? Ich interpretiere, dass Du drei Zustände
lesen willst, Low-Open-High? Damit fallen digitale I2C-Expander aus,
weil offen unzulässig ist.
Quatsch.
Du hast dann pro Schalter zwei Widerstände
und entweder High, halbe Spannung oder low - da müssen Analogeingänge
her.
Ich habe oben beschrieben, wie das geht.
Jetzt musst Du nur noch einen AD finden, der genug Eingänge hat oder 4
Stück ADS1015 oder PCF8591 einsetzen. Oder einen Analogmultiplexer
aufbauen, das werden noch mehr Bauteile.
Genau diese Frage habe ich oben gestellt: "danke" für die Wiederholung.
statt PI4IOE5V6416 einen uC mit Analog-Eingängen und UART verwenden.
Entprellung passiert auf der Schalter-Platine, über das Kabel geht nur genau ein Zeichen bei einer Änderung einer Schalterstellung -> der Hauptprozessor muss nicht pollen.
optimale EMV (kein externer Multiplexer)
keine exotischen Bauteile
wenn's sein muss, noch ein Signal weniger als mit I2C
statt PI4IOE5V6416 einen uC mit Analog-Eingängen und UART verwenden.
Entprellung passiert auf der Schalter-Platine, über das Kabel geht nur
genau ein Zeichen bei einer Änderung einer Schalterstellung -> der
Hauptprozessor muss nicht pollen.
optimale EMV (kein externer Multiplexer)
keine exotischen Bauteile
wenn's sein muss, noch ein Signal weniger als mit I2C
Ja, das war meine erste Idee ... geht auch, wenn ich noch einen Uart-Rx frei bekomme.
Gewöhnlich bedeutet das, dass es sich um einen Umschalter handelt, der zusätzlich eine Mittelstellung besitz, in der keiner der beiden Kontakte geschlossen ist.
Mit Low/High hat das nichts zu tun. Der Schalter hat mehr als zwei Zustände, die digital erfasst werden sollen. Welche Pegel sich hinter den Stellungen verbergen, ist völlig egal und bei Platzierung in einer Matrix können das beliebig wechselnde Logiklevel sein - je nach Steuerzustand.
man könnte einen I2C-I/O Expander nehmen, wie etwa PI4IOE5V6416, bei
dem man auch pullup oder pulldown einschalten kann, und man liest dann
zweimal, einmal mit pu eingeschaltet und einmal mit pd eingeschaltet.
Was soll das bringen?
Dem geschlossenen Kontakt ist die Polung vollkommen wurscht.
Er will doch pro Umschalter nur einen Digitaleingang verwenden. Der eine Kontakt zieht auf L, der andere auf H und den Pull-Up/Down braucht es zur Erkennung der Mittelstellung (Z).
Da du die meisten deiner Rahmenbedingungen verschweigst: nein
Keiner weiss, wie viele Digitalpins dein uC übrig hätte, um die Decodierung zu übernehmen, inklusive Pins die zwar mit anderem (Display...) belegt sind aber dual use verwendbar wären.
Niemand weiss, ob das mit Bauteilen gehen muss die du zu Hause rumliegen hast, bei Reichelt bestellen könntest, oder ob LCSC als Quelle ausreicht.
Selbst wenn deine Analogeingänge alle belegt sind gibt es manchmal die Möglichkeit dass ein Analogkomparator noch frei ist und benutzt werden könnte, vor allem wenn man viel Zeit zum Einlesen hat.
Keiner weiss, welche Platz oder Versorgungsspannungsanforderungen du noch nachschieben wirst.
Daß die Schalter statisch eine Off-Position haben, glaub ich Dir gerne.
Es muß aber auch mechanisch garantiert sein, daß eine Kontaktfeder beim Betätigen nicht bis zum 2. Kontakt hinüber schwingt. Insbesondere, da ja heutzutage alles möglichst klein und billig sein soll, werden die Abstände immer weiter minimiert.
Ist ja alles richtig, was Du schreibst, aber die Schaltung war ja die Idee des TO. Jeder andere nimmt die Version mit der Matrix, egal ob mit extra Mikrocontroller, Portextender oder Schieberegister.
Zwei, ein 100n und ein PCA9505. Der hat 40 Eingänge mit internem Pull-Up, I2C und einen Interrupt-Ausgang. Wenn man das eine Signal zusätzlich spendiert, muss man nur nach einem Interrupt per I2C einmal abfragen.
Bonus: echte Eingangsschutzdioden, die ±20mA vertragen.
Ja, die habe ich mit dem PCA6416 (s.o.) auch. Oder mit einem G030 im 20-pol Gehäuse mit der Freiheit, über seriell zu gehen (3-ppol Verbinding).
Der hat 40 Eingänge mit internem
Pull-Up, I2C und einen Interrupt-Ausgang. Wenn man das eine Signal
zusätzlich spendiert, muss man nur nach einem Interrupt per I2C einmal
abfragen.
Ich bleibe bei den Qwiic-Steckern, auch kann ich mit dem polling gut leben.
Oder mit einem G030 im 20-pol Gehäuse mit der Freiheit,
über seriell zu gehen (3-ppol Verbinding).
STM32G030? In dem Fall wäre eine 4-polige Verbindung interessant, also UART-TX und -RX. Dann könnte man den internen Bootloader nutzen. Die Umschaltung Bootloader/Anwendung muss man nicht mit dem BOOT-Pin machen, der kann fest mit VDD verbunden sein. Der G030 startet dann immer erst den Bootloader und im normalen Betrieb sendet die Hauptplatine den Bootloader-Befehl "GO 0x08000000".
Schön das wir helfen konnten. So macht ein Thread Spass🤥
Ja, zwar nicht nicht fachlich ...
Falsch. Du hast hier von einigen Usern Vorschläge und Lösungsansätze erhalten. Die interessieren Dich aber scheinbar nicht. Eine fertige Schaltung wird DIR hier niemand präsentieren, so wie Du hier auftrittst.
und Deine Beiträge spielten dabei ein große Rolle.
Wieder falsch. Ich habe den HT16K33 vorgeschlagen. Zu mehr hatte ich allerdings keine Lust mehr, der Grund dafür steht weiter oben.
Ich kann mir auch nicht vorstellen dass in diesem Thread noch viel passiert, was ganz allein an Dir liegt.
Du bist auch schon >6 Jahre im Forum angemeldet, wenn auch mit sehr wenigen Beiträgen. Port-Expander, Schieberegister (parallel In, seriell Out) usw. solltest Du daher schon mal gehört haben.
Schön das wir helfen konnten. So macht ein Thread Spass🤥
Ja, zwar nicht nicht fachlich ...
Falsch. Du hast hier von einigen Usern Vorschläge und Lösungsansätze
erhalten. Die interessieren Dich aber scheinbar nicht. Eine fertige
Schaltung wird DIR hier niemand präsentieren, so wie Du hier auftrittst.
Falsch.
Ich habe sie mit Interesse zur Kenntnis genommen, allerdings waren sie nicht einfacher, eleganten, billiger als meine im Eingangspost beschriebene Variante.
und Deine Beiträge spielten dabei ein große Rolle.
Wieder falsch. Ich habe den HT16K33 vorgeschlagen. Zu mehr hatte ich
allerdings keine Lust mehr, der Grund dafür steht weiter oben.
Falsch. Der HT16K33 hat mich aus den o.g. Gründen nicht interessiert.
Ich kann mir auch nicht vorstellen dass in diesem Thread noch viel
passiert, was ganz allein an Dir liegt.
Falsch. Die einfache Lösung steht in meinem Eingangsbeitrag.
Du bist auch schon >6 Jahre im Forum angemeldet, wenn auch mit sehr
wenigen Beiträgen. Port-Expander, Schieberegister (parallel In, seriell
Out) usw. solltest Du daher schon mal gehört haben.
Schön das wir helfen konnten. So macht ein Thread Spass🤥
Ja, zwar nicht nicht fachlich ...
Falsch. Du hast hier von einigen Usern Vorschläge und Lösungsansätze
erhalten. Die interessieren Dich aber scheinbar nicht. Eine fertige
Schaltung wird DIR hier niemand präsentieren, so wie Du hier auftrittst.
Falsch.
Ich habe sie mit Interesse zur Kenntnis genommen,
Merkt man gar nicht.
allerdings waren sie nicht einfacher, eleganten, billiger als meine
im Eingangspost beschriebene Variante.
Das sind ja gleich 3 Wünsche auf einmal. Billi ist dabei natürlich ganz wichtig, denn die vorgeschlagenen Lösungen sind ja unbezahlbar.
und Deine Beiträge spielten dabei ein große Rolle.
Wieder falsch. Ich habe den HT16K33 vorgeschlagen. Zu mehr hatte ich
allerdings keine Lust mehr, der Grund dafür steht weiter oben.
Falsch. Der HT16K33 hat mich aus den o.g. Gründen nicht interessiert.
Dann kann man das auch ruhig mal schreiben.
Ich kann mir auch nicht vorstellen dass in diesem Thread noch viel
passiert, was ganz allein an Dir liegt.
Falsch. Die einfache Lösung steht in meinem Eingangsbeitrag.