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
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
Widerstand 470K an GND. Ohne programmierbaren Port-Pullup 0, mit Pullup 1 => Tristate. Bischen störempfindlich könnte der Port so allerdings sein.
@ 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
Nö, aber darum ja 470K und nicht weniger. Macht schlimmstenfalls 100K/570K = ~17%, was vom Pegel her ausreichen sollte.
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.
@Sven Vielleicht meinst du die Design-Note von avrfreaks: http://www.avrfreaks.net/modules/FreaksFiles/files/562/DN_044.pdf
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.