AVR-Pin als Eingang+Ausgang beschalten

OP #1292906
Lesenswert?

Moin,

mal ne Frage an euch, hoffe zwar, dass ich da keinen Denkfehler drin 
hab, aber zu Sicherheit... ;)

Will einen AVR-Port zu Testzwecken so beschalten, dass ich ihn sowohl 
als Ausgang als auch als Eingang nutzen kann ohne ihn kaputt machen zu 
können. Genauer gesagt, ich will ihn schalten können, aber ebenso
auch die Möglichkeit haben eine LED daran anzusteuern.

Ist folgende Konstruktion möglich?:

    / \ + 5V
     |
    | | R=4K7
    | |
     |
P >--+
    _|_
    \ /  LED (2V, 20mA)
     |
    | |
    | | R=180
     |
     |
     o
      \
       \-| Schalter
     o  o
    _|_
    GND

Meiner Berechnung zufolge sollte es klappen, aber die große Frag:
Habe ich auch recht? ;)

Danke schonmal

Grüße EJoerns
Gast #1292917
Lesenswert?

Wenn du die LED gegen Vcc (5V) (die LED "rutscht hoch") schaltest, 
kannst du dir den Widerstand sparen.
Du musst die Ausgangsfunktion des Ports dann mit dem DD-Register steuern 
und das Port-Register =0 setzen.
Die LED leuchtet dann, wenn der Port als Ausgang geschaltet ist, und den 
Taster kannst du abfragen, wenn der Port als Eingang geschaltet ist. 
DAnn leuchtet die LED auch nicht...
Gast #1293106
Lesenswert?

Hallo Enrico,

wenn Du schon eine LED an einen Port anschließt, solltest Du sie 
vielleicht so verdrahten, dass sie bei geeigneter Ansteuerung des Pins 
leuchtet.

Das tut sie bei der oben gezeigten Schaltung nicht.

Sie leuchtet, nur, wenn Du den Taster drückst. Dies ist eigentlich 
unnötig, denn Du weißt ja, ob Du gedrückt hast.

Gruß bix
Gast #1293138
Lesenswert?

Ah, ja.

Da ob von Testzwecken die Rede war, hatte ich angenommen, der Schalter 
sollte zu Eingabe genutzt werden können.

Das ist wohl nicht geplant - mein Irrtum.

>als Eingang nutzen kann ohne ihn kaputt machen zu können.

kaputt machen geht immer ;-)

Du könntest den unnötigen Pullup (der AVR hat interne Pullups) gegen 
eine Diode ersetzen, die mit Kathode gegen Vcc geschaltet ist. Diese 
kann dann Induktionsspannungen ableiten, falls Du mal ein Relais an den 
Ausgang schaltest.

Gruß bix
Gast #1293186
Lesenswert?

>Doch, der Schalter soll zur Eingabe genutzt werden

Dann könnte die Serienschaltung mit LED und Vorwiderstand problematisch 
sein, da beim Schließen des Schalters die 2V der LED und die 
Abfallspannung des Vorwiderstands am Pin anliegen.
Die Eingangsspannung des Pins wird also möglicherweise nicht weit genug 
gegen Ground heruntergezogen, um eine einwandfreie Erkennung zu 
gewährleisten.

Gruß bix
Gast #1293190
Lesenswert?

Ich würde es einfach über einen Jumper lösen, über den man entweder die 
Taste oder die LED an den Pin legt. Dazu genügt ein Drei-Pin-Jumper und 
das ist auch bequem zu handhaben. LED und Taste permanent gleichzeitig - 
nein danke. Ich glaube, irgendwie wird da immer nur was Halbherziges bei 
rauskommen.
OP #1293216
Lesenswert?

@bix: mh.. die 2V Abfall sind natürlich schon iwie müll^^ damit sollten 
die 0,7V (!?) für low minimal überschritten sein^^ mh.. vllt. nochmal 
überlegen

@Gast: jumper wollt ich vermeiden aus 2 gründen:
1. ich will den ganzen Port so bauen und Lochraster verwenden -> 
3-Pin-Jumper = doof

2. damit kann ich mich immernoch verjumpern und dem AVR warme gefühle 
bescheren.. ;)

@Peter: Du nutzt dann interne Pull-Up? Mh.. löst natürlich das 
2V-Abfall-Problem :D Das funktioniert bei dir so wie in der 
schaltskizze?
#1293504
Lesenswert?

Enrico J. schrieb:
> Mir ist nicht ganz klar wie du das Teil gegen Masse kriegst mit nem
> 3,9k..?

Der 3,9k ist wichtig, damit die LED nicht ausgeht beim Drücken.
Er muß nur den internen Pullup (~50k) runterziehen.

Taste und LED sind völlig unabhängig.
Du kannst also auch programmieren, daß S1 LED2 schaltet und S2 dann 
LED1.


Peter
OP #1293517
Lesenswert?

Mh.. war davon ausgegangen das der Pull-Up kleiner ist ;)

Und jetzt noch mein E-Technik-Defizit:
Welche Spannung liegt am Port, wenn ich den Schalter offen habe und den 
AVR als Eingang?
Und was genau passiert, wenn ich nen Widerstand in Serie zu ner Diode 
schalte? Der 2V-Abfall müsste dann ja nicht mehr stimmen, richtig?

Danke
Gast #1293780
Lesenswert?

---------------o-----
               |
              _|_
              \ /
              ¯|¯
               |
              [ ] 1k
               |
               |
---+         Jumper
   |           |
   |    330    |
   +----[ ]----o
   |           |
   |           |
---+           |
             Taste
               |
               |
               |
---------------o-----

Wie wärs damit?

Vorteile: 1. Der Portpin ist durch den 330-Ohm-Widerstand auf jeden Fall 
geschützt. 2. Wenn der Pin als Input konfiguriert ist, wird er beim 
Druck auf die Taste sicher auf L gezogen, auch bei aktiviertem internen 
Pullup. 3. LED-Zweig kann durch Öffnen des Jumpers stillgelegt werden. 
4. Nur Zwei-Pin-Jumper nötig.

Nachteil: Bei gesetztem Jumper leuchtet die LED stets bei 
niedergedrückter Taste ("überstimmt" Portpegel).
Gast #1293904
Lesenswert?

@Falk:

Ich kenne Peters Lösung. Sie ist clever, funktioniert zweifellos bestens 
und hat allen Respekt verdient. Andererseits würde ich jedoch bei einem 
Experimentierboard nicht gezwungen sein wollen, für die Abfrage der 
Pinzustände den Komparator verwenden zu müssen. Da fände ich es eher 
sinnvoll, so nahe wie möglich an der "Standardschaltungsvariante" 
(heißt: Taster gegen GND; LED über R an VCC) zu bleiben, und dadurch die 
Pins auch über das PIN-Register einlesen zu können.
#1294031
Lesenswert?

Gast schrieb:
> Andererseits würde ich jedoch bei einem
> Experimentierboard nicht gezwungen sein wollen, für die Abfrage der
> Pinzustände den Komparator verwenden zu müssen.

Warum nicht?
Du kriegst von Atmel kein Geld zurück, wenn Du den Komparator nicht 
benutzt.


> Da fände ich es eher
> sinnvoll, so nahe wie möglich an der "Standardschaltungsvariante"
> (heißt: Taster gegen GND; LED über R an VCC) zu bleiben, und dadurch die
> Pins auch über das PIN-Register einlesen zu können.

Standard erfüllt, aber Ziel nicht erfüllt, ist doch nicht sinnvoll.

Der Sinn des ganzen soll ja sein, daß Taster und LED unabhängig sind, 
d.h. die LED-Helligkeit nicht durch die gedrückte Taste merkbar 
beeinflußt wird.
Das wirst Du mit Deiner "Standardschaltung" nicht wuppen können.


Peter
Gast #1294115
Lesenswert?

@Peter:

Der OP schrieb...

>"...soll das Teil ja als Ausgang und Eingang genutzt werden können.
>Für ein Testboard halt...".

...und ich kann daraus nicht herauslesen, ob er einen Pin in einem 
Projekt (quasi-)gleichzeitig als A und E nutzen will, oder ob er 
wünscht, einen Pin in einem Projekt als A und in einem anderen Projekt 
als E konfigurieren zu können. Im ersten Fall wäre Deine Lösung die 
Methode der Wahl, im zweiten meine zumindest eine Alternative.

>Der Sinn des ganzen soll ja sein, daß Taster und LED unabhängig sind,
>d.h. die LED-Helligkeit nicht durch die gedrückte Taste merkbar
>beeinflußt wird.

Das ist mir schon klar. Nein, mit diesem Feature kann meine Variante 
nicht glänzen, aber im "zweiten Fall" (s. o.) wäre das irrelevant.

Bei einem allgemeinen Experimentierboard würde ich Wert darauf legen, 
möglichst wenig eingeschränkt zu sein, und es würde mir sicher 
missfallen, meine Software auf die Hardware anpassen zu müssen. Es wäre 
z. B. der Fall denkbar, wo ich den Komparator in einem Projekt für etwas 
anderes benutzen möchte, ihn dann aber von der Portabfrage in Anspruch 
genommen fände --> wenig erfreulich.

>Du kriegst von Atmel kein Geld zurück, wenn Du den Komparator nicht
>benutzt.

:-)
#1294330
Lesenswert?

@  Gast (Gast)

>Experimentierboard nicht gezwungen sein wollen, für die Abfrage der
>Pinzustände den Komparator verwenden zu müssen.

Musst du doch gar nicht! Das ist nur mal wieder einer von Peters 
Macharten.
Den Pin kann man direkt aus dem PINx Register lesen. Der Trick besteht 
schlicht darin, eine LED zu nutzen, der Flußspannung über der 
AVR-Schaltschwelle von Vcc/2 liegt. Wenn das von vorn herein nciht 
gegeben ist, z.B. rote LEDs mit 1,8V bei 5V VCC nimmt man ein oder zwei 
1N4148 dazu in Reihe, und schon ist das Problem gelöst.

Ist doch ganz einfach. In einem Timer periodisch den Pin als Eingang mit 
Pull-Up aktivieren. Der Taster kann ausgelesen werden, man muss nur ein 
paar Dutzend us warten, um ggf. grössere Kabelkapazitäten umzuladen. 
Taster nicht gedrückt, Pull-Up zieht auf HIGH. Taster gedrück, 
wesentlich niderohmiger 3K9 zieht über Taster auf LOW. Danach den Pin 
wieder auf Ausgang schalten. Diese kurze Ausschalten der LED sieht 
keiner und macht sie nahezu unmessbar geringfügig dunkler.

MFG
Falk
OP #1296608
Lesenswert?

Sodele, nu bin ich auch mal wieder hier ;)

Also erstmal danke für die rege Diskussion die noch aufgekommen ist :).
Um alle Klarheiten zu beseitigen möchte ich noch ein paar Details zu 
meinen Ansprüchen an die Schaltung hinterher schicken.

1. Möglichst wenig verbaute Komponenten
2. Pin soll in jedem zu testenden Projekt entweder NUR als Ausgang oder
   NUR als Eingang konfiguriert sein. Keine gleichzeitige
   Doppelverwendung!
2. Möglichst totale Unabhängigkeit von der Test-Software auf dem µC.
   -> eig. auch Pull-Up nicht voraussetzbar
3. LED soll Pegel anzeigen (HIGH=Licht)
   -> Schaltung von VCC gegen Pin suboptimal
4. Zustand der LED bei Input-Nutzung nicht soo wichtig ;)


Daher ist das mit der Schaltung von Peter noch ein gaanz bisschen an 
meinen Träumen vorbei ;)
Laut Spec. ist die normale V_IH auch leider erst ab 3.5V garantiert...


Und weil es so schön ist hab ich auch noch einen weiteren Kandidaten 
(Anhang), allerdings auch mit dem Spannungsproblem... zur Not wohl doch 
Jumper.. :( ^^

@Note: RP, evlt. 330Ohm, RPA10 evlt. 47k. Im Zeifelsfall RP auch für 
Low-Current-LED, damit Port-Max-Strom bei 8-facher Fehlschaltung nicht 
überstrapaziert wird :D
Angehängte Dateien:

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