Forum: Mikrocontroller und Digitale Elektronik Tri-State-Eingang abfragen


von Sven (Gast)


Lesenswert?

Jaja, schon richtig gelesen. Es geht wirklich um einen
Tri-State-Eingang.

Ich möchte mehrere Pins eines AVR abfragen, ob sie gegen GND oder Vcc
geschalten oder offen sind (also 3 Zustände). Irgendwo hab ich dazu mal
ein Beispiel gesehen, weiss aber nicht mehr, nach was und wo (App-Note?)
ich suchen soll.

Eine Idee wäre, die Pull-Ups einzuschalten und zu schauen, ob GND oder
Vcc/offen. Dann kurz als Ausgang und low setzen und schauen, ob Vcc
(sollte dann immer noch high sein) oder offen (sollte dann low sein).
Dabei wird aber kurz ein Schluss erzeugt und der Pin liefert seinen
max. Strom, der bei den Megas ja doch recht hoch sein kann. Ist also
nicht so schön.

Es muss aber irgendwie gehen...

Sven

von Michael Wilhelm (Gast)


Lesenswert?

Verlager die abzufragenden Pins in den Analogbereich des Controllers.
Einen hochohmigen Spannungsteiler (>100KOhm) von Vcc nach Gnd (in der
Mitte der Pin), dann kannst du den Analogwert auslesen. Die
Folgeschaltung, wenn also nicht Tristate, kann die Pins trotzdem auf
Vcc oder Gnd ziehen.

MW

von A.K. (Gast)


Lesenswert?

Widerstand 470K an GND. Ohne programmierbaren Port-Pullup 0, mit Pullup
1 => Tristate. Bischen störempfindlich könnte der Port so allerdings
sein.

von Michael Wilhelm (Gast)


Lesenswert?

@ A.K.
Hast du das schon getestet? Atmel gibt ja einen ziemlichen Bereich für
den Pull-Up an, 30 bis 100K, wenn ich es recht in Erinnerung habe.

MW

von A.K. (Gast)


Lesenswert?

Nö, aber darum ja 470K und nicht weniger. Macht schlimmstenfalls
100K/570K = ~17%, was vom Pegel her ausreichen sollte.

von Michael Wilhelm (Gast)


Lesenswert?

Gute Idee!

MW

von A.K. (Gast)


Lesenswert?

Lass dem Widerstand ein bischen Zeit - es dauert etwas bis der den Port
runter gezogen hat (Grössenordnung 10*R*100pF). Und wenn signifikante
Leckströme auftreten, geht's so nicht.

von Irgwer (Gast)


Lesenswert?

@Sven

Vielleicht meinst du die Design-Note von avrfreaks:

http://www.avrfreaks.net/modules/FreaksFiles/files/562/DN_044.pdf

von Hagen (Gast)


Lesenswert?

Eventuell kannst du auf die externen Widerstände etc. verzichten.

Du benötigst dazu einen weiteren Pin als Ausgang. Angenommen du
möchtest 8 DIP abfragen dann verbindest du sie auf einer Seite nach
GND. Die andere Seite zum Pin 9 der als Ausgang geschaltet wurde. Die
Mittelanschlüsse der 8 Schalter an einen 8 Bit Port.

Das Auslesen erfolgt nun so:

1. Ausgabepin 9 auf GND legen.
2. 8Bit Port mit Pullups aktivieren und auslesen in Register A. Alle
Bits auf 1 in diesem Port sind "High-Z" Schalter
3. Ausgabepin 9 auf VCC legen
4. 8Bit Port mit Pullups einlesen in register B. Alle Bits die 0 sind
wurden auf GND geschaltet.

Schalterstellungen sind dann

High-Z = A
HIGH   = B and not A
LOW    = not B

wobei dann immer 1 als beschaltet kennzeichnet.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Ach und den Ausgabepin 9 kannst du per entsprechenden Widerstand zb.
300k auf einen einfachen ON/OFF Schalter nach GND legen.

Um diesen abzufragen wird der 8Bit Port auf Input gesetzt und Pin 9 als
Input mit Pullup.

So hättest du 8 Tristate Schalter und 1 Binären.

Gruß Hagen

von Sven (Gast)


Lesenswert?

Danke, lauter gute Ideen, am besten gefällt mir die mit dem zusätzlichen
Pin. An sowas hatte ich auch schon gedacht, und es braucht keine ext.
Bauteile.

Die Idee mit dem "mal kurz auf GND ziehen" haltet ihr also auch nicht
für so gut?

Sven

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.