Tri-State Schieberegister - High-Z

Gast #4824907
Lesenswert?

Hallo,

ich lese aktuell eine sich ständig verändernde Widerstandsmatrix mit 
einem Arduino aus. Leider reichen die Pins nicht aus, weshalb ich 
Schieberegister benutzen möchte.

Die Schieberegister müssen jedoch gegen GND und VCC schalten können, 
aber auch einen "High-Z" Modus haben, also so als ob gar nichts damit 
verbunden wäre. Beim Atmega hab ich dazu die Pins einfach auf Eingang 
geschaltet.

Ich habe nun etwas recherchiert, konnte aber kein Bauteil finden bzw. 
verstehen wie es funktioniert. Könnt ihr mir ein Bauteil empfehlen, das 
quasi ein Schieberegister ist aber die oben gennanten drei Zustände 
(High, Low, High-Z) annehmen kann?

Vielen Dank!

Viele Grüße
neuling
Gast #4824922
Lesenswert?

A. K. schrieb:
> 74HC595

Danke für den Vorschlag, soweit ich den Typen aber verstanden habe kann 
ich doch immer nur alle Ausgänge auf High-Z schalten oder keinen, 
korrekt? Laut Datenblat hat er ja auch nur einen 8Bit Puffer, womit man 
ja nur einen Zustand pro Ausgang speichern kann oder versteh ich was 
falsch?

In meinem Anwendungsfall wären alle Ausgänge High-Z, bis auf einen der 
gegen GND bzw. VCC und dieser wandert dann quasi durch.
#4824962
Lesenswert?

neuling schrieb:
> In meinem Anwendungsfall wären alle Ausgänge High-Z, bis auf einen der
> gegen GND bzw. VCC und dieser wandert dann quasi durch.

Schon an 74HC4051 gedacht? Der schiebt zwar nicht, tut aber genau das, 
was du willst. Weil der AVR-Pin mit seinen 3 Zuständen durchgereicht 
wird.

Analogschalter wie diesen gibts bestimmt in Hülle und Fülle, auch 
niederohmiger falls nötig.
Gast #4824970
Lesenswert?

A. K. schrieb:
> Schon an 74HC4051 gedacht?

Also würde ich dann im Grunde einen Multiplexer nutzen, dessen Ausgänge 
immer High-Z sind bis auf den einen, der an einen Pin durchgereicht 
wird. Diesen Pin kann ich dann auf GND oder VCC legen.

Der Widerstand ist aber doch bei ~100 Ohm und damit recht hoch für meine 
Anwendung... einen Innenwiderstand konnte ich auch nicht finden aber der 
Leak wird mit 0,1 µA angegeben was passen sollte.
#4824973
Lesenswert?

neuling schrieb:
> Der Widerstand ist aber doch bei ~100 Ohm und damit recht hoch für meine
> Anwendung...

Da gibts garantiert bessere als diesen Oldie. Analogschalter sind kein 
seltenes Gut. Bloss kenne ich keinen auswendig.

Übrigens haben 74HC Logikbausteine auch einen Innenwiderstand. Sogar AVR 
Ausgänge: Da sind es bei 5V um die 30 Ohm, bei kleinerer Spannung mehr.
#4824993
Lesenswert?

NB: Den Innenwiderstand des AVR-Ausgangs kann man rausrechnen, indem man 
dafür einen als I/O-Pin genutzten ADC-Pin verwendet und nebenbei misst, 
was am Ausgang tatsächlich rauskommt. Der Trick ist beispielsweise bei 
resistiven Touchscreens nötig, da die recht niederohmig sind.

Bei einem Schieberegister, wie du dir das vorstellst, geht das nicht. 
Geht auch nicht mit jedem µC, die PICs beispielsweise können an den Pins 
nicht gleichzeitig I/O und ADC, sondern nur entweder oder.
Gast #4825128
Lesenswert?

neuling schrieb:
> ich lese aktuell eine sich ständig verändernde Widerstandsmatrix mit
> einem Arduino aus. Leider reichen die Pins nicht aus, weshalb ich
> Schieberegister benutzen möchte.
>
> Die Schieberegister müssen jedoch gegen GND und VCC schalten können,
> aber auch einen "High-Z" Modus haben, also so als ob gar nichts damit
> verbunden wäre. Beim Atmega hab ich dazu die Pins einfach auf Eingang
> geschaltet.

Ich verstehe nicht recht, du hast Eingänge und willst die gegen GND und 
VCC schalten?
Benutzt du die gleichzeitig als Ausgänge?
Kannst du mal eine Grundschaltung darstellen?
Gast #4827498
Lesenswert?

Ich habe mal unten einen Schaltplan angehängt. Es handelt sich um eine 
Matrix aus Widerständen (die sich permanent ändern können) welche ich 
auslesen will. Dazu schalte ich jeweils einen Anschluss links (A, B, C, 
...) gegen GND und einen Anschluss von unten (1, 2, 3, ...) wie in der 
Skizze unten gezeigt, also mit einem Widerstand gegen VCC und davor eine 
Leitung an den ADC. Durch die abfallende Spannung kann ich dann den Wert 
eines Widerstandes ermitteln. Alle anderen Anschlüsse müssen während der 
Messung unbelastet sein, da ansonsten das Ergebnis stark verfälscht 
wird.

        +---------+      +---------+     +---------+
A +-----+ Resistor+--+---+ Resistor+--+--+ Resistor+---+
        +---------+  |   +---------+  |  +---------+   |
                     |                |                |
        +---------+  |   +---------+  |  +---------+   |
B +-----+ Resistor+--+---+ Resistor+--+--+ Resistor+---+
        +---------+  |   +---------+  |  +---------+   |
                     |                |                |
        +---------+  |   +---------+  |  +---------+   |
C +-----+ Resistor+--+---+ Resistor+--+--+ Resistor+---+
        +---------+  |   +---------+  |  +---------+   |
                     |                |                |
                     +                +                +
                     1                2                3

 ADC (vorher OpAmp als Spannungsfolger)
  |     +---------+
--+-----+ Resistor+--- VCC
        +---------+

Die Matrix ist jedoch sehr groß, weshalb ich sehr viele Pins benötige. 
Ich werde nun zunächst einmal die Variante mit dem Multiplexer testen, 
auf jeden Fall schon mal vielen Dank für die vielen Tipps! :)

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