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
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.
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.
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.
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.
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.
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.
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?
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
> Tri-State Schieberegister - High-Z
TC4094, 74HC4094 oder ähnliche sind Tristate-Schieberegister.
"MOS 4094" (31Cent) oder "SMD 4094" (27Cent) bei Reichelt.
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! :)