Forum: Mikrocontroller und Digitale Elektronik Tri-State Schieberegister - High-Z


von neuling (Gast)


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

von (prx) A. K. (prx)


Lesenswert?


von tux (Gast)


Lesenswert?

Hi,

analoge Schieberegister sind eher exotisch

z.bsp DRS4

https://www.psi.ch/ltp/cdct-projects#DRS4_chip:_allows_for_affordable_34high_speed_oscilloscopes_34

LG tux

von hp-freund (Gast)


Lesenswert?

Noch ein Atmega als SPI Slave?

von neuling (Gast)


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.

von Sebastian S. (amateur)


Lesenswert?

Ein 8-Bit Schieberegister mit 8 Enable/Z-State Eingängen wirst Du Dir 
wohl selber bauen müssen.
Am besten dem Rat des HP-Freundes folgen.

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von neuling (Gast)


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.

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von holger (Gast)


Lesenswert?

MCP23S17

von (prx) A. K. (prx)


Lesenswert?

holger schrieb:
> MCP23S17

Pullup-Transistor bei 4,5V: 0,7V/3mA => 233 Ohm. Real sicherlich weit 
darunter, aber viel besser als der 74HC4051 sieht das nicht aus.

von michael_ (Gast)


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?

von Jens G. (jensig)


Lesenswert?

Wenn es CMOS wie diesen http://www.cmos4000.de/cmos/5025.html noch 
irgendwo gäbe, könnte man zwei Schieberegister hernehmen - das eine 
steuert dessen Eingänge an, das andere dessen Enable-Eingänge

von Mike J. (linuxmint_user)


Lesenswert?

> Tri-State Schieberegister - High-Z

TC4094, 74HC4094 oder ähnliche sind Tristate-Schieberegister.

"MOS 4094" (31Cent) oder "SMD 4094" (27Cent) bei Reichelt.

von neuling (Gast)


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! :)

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.