Forum: Mikrocontroller und Digitale Elektronik AVR-Pin als Eingang+Ausgang beschalten


von Enrico. J. (ejoerns)


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

von STK500-Besitzer (Gast)


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...

von Enrico. J. (ejoerns)


Lesenswert?

Wieso kann ich mir da nen Widerstand sparen, und welchen?

Über die sonstige Ansteuerung eines AVR-Ports bin ich im Bilde ;)

von STK500-Besitzer (Gast)


Lesenswert?

Du kannst dir dann den 4k7 sparen.

von Enrico. J. (ejoerns)


Lesenswert?

Dann muss ich aber aufpassen, dass ich den Schalter nicht ausversehen 
schließe.. ;)

von STK500-Besitzer (Gast)


Lesenswert?

Wieso? Der ist doch parallel zum AVR-Pin geschaltet.
Wenn man den Schalter schliesst leuchtet die LED auf jeden Fall.

von Enrico. J. (ejoerns)


Lesenswert?

Und wenn ich den Port als Ausgang setze und high schalte...?

von holger (Gast)


Lesenswert?

>Und wenn ich den Port als Ausgang setze und high schalte...?

Peng! Port futsch.

von Enrico. J. (ejoerns)


Lesenswert?

Eben!

von STK500-Besitzer (Gast)


Lesenswert?

Kannst du. Wenn du dann aber den Schalter schliesst, qualmt's...
Sollte man im Programm aber vermeiden können.

von Enrico. J. (ejoerns)


Lesenswert?

Wie soll ich nen Kurzchluss in der Software vermeiden???

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

von aha (Gast)


Lesenswert?

180 Ohm als LED Vorwiderstand ist auch total uebertrieben. Ein 4.7k ist 
auch genug.

von Enrico. J. (ejoerns)


Lesenswert?

Was bitte?^^

von bix (Gast)


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

von Enrico. J. (ejoerns)


Lesenswert?

Wenn er gedrückt (bzw. im Realfall wohl er gejumpert) ist, hängt es doch 
noch davon ab wie ich die LED über den Port ansteuere!?
Weil bei 4k7 Vorwiderstand dürfte die LED (nicht low-current) nicht 
allzu viel sagen.

von bix (Gast)


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

von Enrico. J. (ejoerns)


Lesenswert?

Doch, der Schalter soll zur Eingabe genutzt werden, aber halt nur wenn 
auf dem Controller gerade ne software ist wo dies von Nöten ist, 
ansonsten soll das ganze als Ausgang fungieren.
Halt, dass ich verschiedene Sachen testen kann ohne ne feste Belegung 
der IOs zu haben.

von bix (Gast)


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

von Gast (Gast)


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.

von Peter D. (peda)


Lesenswert?


von Enrico. J. (ejoerns)


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?

von Enrico. J. (ejoerns)


Lesenswert?

Neuer Vorschlag:

    / \ + 5V
     |
     |
    | | R=4K7
    |_|
     |
P >--+----------.
    _|_         |
    \ / 2V     | | R=270
     |         |_|
    | |         |
    |_| R=180   o
     |           \
     |            \-|
     |          o  o
     |          |
    _|_        _|_
    GND

? ;)

von Sebastian (Gast)


Lesenswert?

Wie wärs mit 3-Pin-Jumper und in den Tasterzweig nen R seriell zum 
Taster? Dann kann nichts passieren, auch wenn du dich verjumpert hast.

Sebastian

von Enrico. J. (ejoerns)


Lesenswert?

Joa, wär evlt. nen kompromiss, aber dann müsste ich, trotz dass sie mir 
wie gesagt widerstreben, die 3-pin dinger nehmen.. ;)

Und schalten müsst ich das ja praktisch fast wie in der letzten skizze, 
wenn ich will, dass die LED den Portzustand nicht invertiert!?

von Enrico. J. (ejoerns)


Lesenswert?

Muss euch nochmal mit einem meiner kognitiven Ergüsse belästigen ;)

What about this one?

      / \
       |
      | |
      | | 270
       |
       o
        \
         \--|
       o  o
       |
<>-----|
       |
      | |
      | | 1K
       |
      _|_
      \_/ low current
       |
      _|_


Danke schonmal für die Bisherigen Ratschläge :)

von Peter D. (peda)


Lesenswert?

Enrico J. schrieb:
> What about this one?

Was gefällt Dir denn an diesem Schaltplan nicht?

Beitrag "Re: Taster + LED am selben Draht (4*)"


Peter

von Enrico. J. (ejoerns)


Lesenswert?

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

von Peter D. (peda)


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

von Enrico. J. (ejoerns)


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

von Gast (Gast)


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).

von Falk B. (falk)


Lesenswert?

@  Gast (Gast)

>4. Nur Zwei-Pin-Jumper nötig.

Unnötig.

>Nachteil: Bei gesetztem Jumper leuchtet die LED stets bei
>niedergedrückter Taste ("überstimmt" Portpegel).

Den Nachteil hat die Lösung von Peter nicht. Ergo. Vergiss diesen 
Ansatz.

MFG
Falk

von Peter D. (peda)


Lesenswert?

Enrico J. schrieb:
> Welche Spannung liegt am Port, wenn ich den Schalter offen habe und den
> AVR als Eingang?

Die LED-Schwellspannung, also bei einer roten LED etwa 1,5V.
Das sind 0,4V Störabstand bis zur 1,1V Triggerschwelle des Komparators.


Peter

von Gast (Gast)


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.

von Peter D. (peda)


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

von Gast (Gast)


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.

:-)

von Falk B. (falk)


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

von Enrico. J. (ejoerns)


Angehängte Dateien:

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

von Gast (Gast)


Lesenswert?

Ja, nimm diese Schaltung. Die ist super.

von Tibi (Gast)


Lesenswert?

holger schrieb:
>>Und wenn ich den Port als Ausgang setze und high schalte...?
>
> Peng! Port futsch.

Bin noch relativ neu in der Elektronik. Kann mir jemand erklären, warum?

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.