Lesen von 16 DTSP (on-off-on) Schaltern

OP #7603788
Lesenswert?

Hallo zusammen,

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:

  1. man könnte eine externen I2C-ADC nehmen. Am besten einen, bei dem man wie etwa beim STM32Gxx pullup/pulldown gleichzeitig einschalten kann.

  2. 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.

Zu 1) habe ich keine ADC gefunden.

Zu 2) scheint mir ok.

Andere Ideen?

Danke!

OP #7603829
Lesenswert?

Ok, danke!

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.

#7603866
Lesenswert?

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

OP #7603966
Lesenswert?

Flunder schrieb:

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.)?

#7604071
Lesenswert?

Randy B. schrieb:

man könnte eine externen I2C-ADC nehmen. Am besten einen, bei dem man wie etwa beim STM32Gxx pullup/pulldown gleichzeitig einschalten kann.

Ein ADC mit pullup/pulldown am Eingang klingt etwas widersinnig, weil die gegen die Meßgröße arbeiten würden.

Randy B. schrieb:

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.

OP #7604075
Lesenswert?

Manfred P. schrieb:

Randy B. schrieb:

man könnte eine externen I2C-ADC nehmen. Am besten einen, bei dem man wie etwa beim STM32Gxx pullup/pulldown gleichzeitig einschalten kann.

Ein ADC mit pullup/pulldown am Eingang klingt etwas widersinnig, weil die gegen die Meßgröße arbeiten würden.

Wohl kaum: der PU ist 100k, die "Meßgröße" ist ein Schalter mit ungefähr 0Ohm.

Randy B. schrieb:

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.

#7604087
Lesenswert?

  1. 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
OP #7604205
Lesenswert?

Bauform B. schrieb:

  1. 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.

#7604207
Lesenswert?

Manfred P. schrieb:

Was bedeutet denn on-off-on?

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.

#7604220
Lesenswert?

Randy B. schrieb:

Na prima ... erfüllt aber meine Anforderungen nicht.

Dann nenne mal Deine seltsamen Anforderungen. 32 Kontakte geht doch prima als 8*4 Matrix am MCP230xx oder auf GND bezogen an 2 Stück.

Randy B. schrieb:

  1. 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.

#7604391
Lesenswert?

Randy B. schrieb:

Andere Ideen?

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.

#7604395
Lesenswert?

Mario M. schrieb:

Randy B. schrieb:

bis zu 16 on-off-on Schalter

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.

#7604548
Lesenswert?

Randy B. schrieb:

Aber ich kann gerne jetzt noch hinzufügen:

Salamischeiben !!

möglichst geringe Anzahl von Verbindungen zum Main-Board.

Also 2: Masse und single wire.

möglichst geringe Anzahl von Bauteilen.

Also 1 (das dann mindestens 35 Anschlüsse hat).

Leider hat der DS2408 nur 8. Sieht also nach custom chip aus. Na ja, die Salamischeibe gibt es ja nicht, geht also

OP #7604632
Lesenswert?

Bauform B. schrieb:

Randy B. schrieb:

  1. möglichst geringe Anzahl von Bauteilen.

Zwei, ein 100n und ein PCA9505.

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.

#7604661
Lesenswert?

Randy B. schrieb:

Michael B. schrieb:

Also 1 (das dann mindestens 35 Anschlüsse hat).

Ach Du lieber Himmel, ohne Stützkondensator ... nanana

Randy B. schrieb:

Peter D. schrieb:

1 * 16 Bit I2C-IO-Expander (PCF8575, MCP23017, TCA6416A, ...) 3 Leitungen zum MC (I2C + 1 * Output-Pin).

Und bei Dir kommt die Versorgung dann auch aus der Batterie? Nenene ...

Verarschst Du die User hier, oder trollst Du einfach nur?

Michael B. schrieb:

Randy B. schrieb:

Aber ich kann gerne jetzt noch hinzufügen:

Salamischeiben !!

Ja, aber vegan.

#7604865
Lesenswert?

Randy B. schrieb:

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".

OP #7606625
Lesenswert?

Michael B. schrieb:

Randy B. schrieb:

Und dann batteriebetrieben, oder was ;-)

Zu blöd, dir das genannte IC DS2408 anzugucken ?

Michael B. schrieb:

Leider hat der DS2408 nur 8. Sieht also nach custom chip aus.

Warum sollte ich mir das DB anschauen, wenn Du als Oberexperte das schon ausschließt. Übrigens heißt es one-wire oder 1-wire

Hach, ich liebe dieses Forum mit seinen selbsternannten Gurus ;-)

#7607609
Lesenswert?

Randy B. schrieb:

Jörg R. schrieb:

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.

OP #7607835
Lesenswert?

Jörg R. schrieb:

Randy B. schrieb:

Jörg R. schrieb:

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.

Ja, wie Du im Eingangspost schon lesen konntest.

#7607845
Lesenswert?

Randy B. schrieb:

Jörg R. schrieb:

Randy B. schrieb:

Jörg R. schrieb:

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.

Dann setze sie um.

#7607849
Lesenswert?

Randy B. schrieb:

  1. man könnte eine externen I2C-ADC nehmen. Am besten einen, bei dem man wie etwa beim STM32Gxx pullup/pulldown gleichzeitig einschalten kann.

Das Reference Manual RM0444 sagt dazu:

1
7.3.12 Analog configuration
2
When the I/O port is programmed as analog configuration:
3
 • The output buffer is disabled
4
 • The Schmitt trigger input is deactivated, (...)
5
 • The weak pull-up and pull-down resistors are disabled by hardware

Aber als Digital Input konfigurieren, umschalten und zweimal lesen geht natürlich immer noch viel besser als per I2C.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren