Forum: Mikrocontroller und Digitale Elektronik PullUp und PullDown bei Mikrocontrollern


von helau (Gast)


Lesenswert?

Hallo Leute,
ich lerne derzeit auf ein Fach Elektrotechnik und habe ein Datenblatt 
eines Mikrocontrollers vor mir. (ATmega16)

Ich hätte eine kleine Frage zum Verständnis. Könnten Ihr mich 
verbessern, falls ich falsch liege.


Es gibt DDRx und PORTx.


Bei DDRx kann ich nun definieren, ob die Pins als Eingang oder Ausgang 
genutzt werden.


Bei 1 in DDRx wird es als Ausgang definiert und der PullUP deaktiviert 
und an den Ausgängen HIGH-Pegel.
Bei 0 in DDRx wird es als Eingang definiert.

Wenn ich es als Eingang definiere, kann ich nun in PORTx 1 schreiben, um 
der PullUP zu aktivieren und eine 0, um den Pullup zu deaktivieren?


1. Meine Frage nun. Habe ich das richtig verstanden?
2. Für was ist eigentlich ein PullUP (bin Anfänger :()?
3. Wie ist da smit dem HIGH- und LOW-Pegeln zu verstehen. Wenn ich DDRx 
ja mit 1'en fülle, habe ich ja HIGH-Pegel an den Ausgängen. (Sonst LOW 
oder?)


Über kleine Tipps würde ich mich sehr freuen. Ich stocke gerade voll 
beim weiterlernen

Grüße
Ela

von helau (Gast)


Lesenswert?

Ich habe auch diesen Beitrag gelesen:
http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand

D.h., wenn man einen PullUP hat, dann ist dauerhaft doch ein HIGH-Pegel 
vorhanden. In meiner Erklärung oben (was ich von einem Kommilitonen 
erklärt bekommen habe) wird bei 1'en im DDRx der PullUP deaktiviert 
(laut dem Schaltplan sieht es auch so aus, dass es deaktiviert wird) und 
anscheinend an den Ausgängen HIGH-Pegel angelegt.

Wenn ich aber den PullUP deaktiviere, dann habe ich doch kein 
HIGH-Pegel, sondern einen undefinierten Zustand oder, wenn der nicht 
aktiv ist? Oder LOW-Pegel?

Irgendwo denke ich total falsch

von Peter (Gast)


Lesenswert?

Du schreibst etwas wirr.

Wenn Dein Pin ein Ausgang ist, brauchst Du keinen Pull-Up keinen 
Pull-Down, garnix. Die Spannung kommt vom Mikrocontroller.

Ist Dein Pin ein Eingang, hast Du folgendes Problem:

Angenommen Dein Taster ist nicht gedrückt, liegt keine Spannung am 
Eingang an. Normalerweise würdest Du jetzt gerne eine Null auslesen.
Dein Pegel ist aber nicht Null, sondern undefiniert. Ein Mini-mini 
Spannung, die irgendwo sonst aus Deiner Schaltung her kommt, reicht, 
dass Du eine Eins liest.

Also, schaltest Du Du Deinen Pin über einen größeren Widerstand auf 
Masse oder halt auf Versorgungspannung (Pull-Up). Wenn Dein Taster nicht 
gedrückt ist, erhält er über den Widerstand z.B. Massepotential. Wenn Du 
Deinen Taster jetzt drückst, kriegt er z.B. high-signal, also sagen wir 
5V.

Dein Controller hat das schon eingebaut. Schaltest Du die internen 
Pull-Ups ein, wirst Du immer eins lesen, bis Du außen auf Masse legst.

von helau (Gast)


Lesenswert?

Hallo,
danke für die schnelle und ausführliche Antwort.


Die Spannung kommt bei einem Ausgang vom Mikrokontroller. Und die dachte 
ich, kommt evtl. dann vom aktivierten PullUP.
Du sagst, die Spannung kommt ja vom Mikrokontroler. In unserem Script 
steht: "Bei 1 in DDRx = Definition Ausgang (oki klar) PullUP deaktiviert 
(oki klar), HIGH Pegel an Ausgängen (was meint man nun hiermiet? Werden 
gleich 1'er dort gesetzt am Anfang oder wie ist das zu verstehen?)

Danke bzgl. der Erklärung des Eingangs. Mit dem PullUp definiere ich da 
praktisch, ob Masse oder Versorgungsspannung.


a) Nehmen wir an, ich schalte bei einem Eingang PullUP, sehe ich immer 1 
an diesem Pin, bis etwas auf Masse gelegt wird, dann sehe ich 0 (Es 
passiert kein Kurzschluss, da ja ein Wiederstand vorhanden ist)
Wenn ich an diesem Pin zusätzlich 5V anlege, bzw. 1, dann ändert dies 
nichts, da eh bereits 1 anliegt? Richtig? Technisch gesehen sollte auch 
nichts passieren, dass Stromtechnisch dort etwas passiert, wenn 
zusätzlich 5V angelegt wird?

b)Nehmen wir nun an, dass ich bei einem Eingang Pullup deaktiviere, also 
kein Pullup aktiviere, dann liegt dort 0 an, also Masse. Wenn nun Masse 
drauf kommt, passiert nicht. 0 liegt weiterhin an. Wenn nun 5V oder 1 
angelegt wird, sehe ich ganz normal die 1, Stromtechnisch auch kein 
Problem. Auch richtig?


Grüße

von helau (Gast)


Lesenswert?

Dieses Tutorial von euch hat mir jetzt echt gut weitergeholfen, vielen 
Dank:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

Echt sehr schön beschrieben.

von Herr M. (herrmueller)


Lesenswert?

Nochmal ganz kurz: DDRx ist das Datenrichtungsregister, da stellt man 
ein, ob ein Pin Eingang oder Ausgang ist. PORTx ist das Register, in 
dem, bei den auf Ausgang geschalteten Pins, der Pegel (1 oder 0) 
eingestellt wird.
Da PORTx bei Eingängen keinen Sinn macht, benutzt Atmel es als 
Zweitfunktion, um die Pullups anzuschalten. Wichtig! Der Zustand der 
Eingänge muss über PINx abgefragt werden.

Wenn der Pin als Ausgang geschaltet ist, kann der Strom bis 40mA sein, 
das geht über den Pulllup nicht (ca. 20k-50kOhm). Der Pullup ist nur 
dafür gedacht, einen momentan offenen Eingang auf einen definierten 
Pegel (1) zu bringen, zB bei nicht gedrücktem Taster gegen Masse.
Wenn Du den Port mit DDRx (Datenrichtungs Register) auf Ausgang 
schaltest, dann liegen an den Pins die Pegel an, die gerade im PORTx 
Register angegeben sind. Also 5V (je nach Betriebsspannug) bei einer 1, 
und 0V bei einer 0.

>>Danke bzgl. der Erklärung des Eingangs. Mit dem PullUp definiere ich da
>>praktisch, ob Masse oder Versorgungsspannung.<<

Der Pull-UP zieht den Eingang immer auf Vcc, wenn der Pin offen ist, nix 
mit Masse. Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts, 
da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm < 
0.2mA

Wenn Du an einem Eingang immer entweder 1 oder 0 hast zB von einer 
anderen Elektronik, dann brauchst Du den Pullup nicht, da die Pegel 
immer definiert sind.

von Stampede (Gast)


Lesenswert?

>b)Nehmen wir nun an, dass ich bei einem Eingang Pullup deaktiviere, also
>kein Pullup aktiviere, dann liegt dort 0 an, also Masse.
Nein! Du weisst es nicht, da weder Pullup noch pulldown vorhanden sind. 
Genau das willst du ja verhindern, dass ein undefinitierter Pegel 
herrscht.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Ela,
helau schrieb:

> Bei DDRx kann ich nun definieren, ob die Pins als Eingang oder Ausgang
> genutzt werden.

Stimmt.

> Bei 1 in DDRx wird es als Ausgang definiert und der PullUP deaktiviert
> und an den Ausgängen HIGH-Pegel.
> Bei 0 in DDRx wird es als Eingang definiert.

Die Richtungsangaben stimmen. Ob der Ausgang 1 oder 0 ist, hängt von 
PORTx ab.

> Wenn ich es als Eingang definiere, kann ich nun in PORTx 1 schreiben, um
> der PullUP zu aktivieren und eine 0, um den Pullup zu deaktivieren?

Stimmt.

> 1. Meine Frage nun. Habe ich das richtig verstanden?

Ja :-).

> 2. Für was ist eigentlich ein PullUP (bin Anfänger :()?

Ein Pull-Up-Widerstand wird vom Eingangspin nach VCC eingefügt. Damit 
sieht das PINx-Register immer eine 1. Ein Taster o.ä. schaltet den Pin 
auf GND. Dann sieht man in PINx eine 0.
Die Pull-Ups werden ausgeschaltet, wenn an diesem Eingang direkt ein 
anderes IC angeschlossen ist.

> 3. Wie ist da smit dem HIGH- und LOW-Pegeln zu verstehen. Wenn ich DDRx
> ja mit 1'en fülle, habe ich ja HIGH-Pegel an den Ausgängen. (Sonst LOW
> oder?)

Ja, wenn es ein Ausgang ist.

An PINx kann man beim Atmel immer den Zustand des Pins ablesen. Also 
auch dann, wenn der Pin als Ausgang geschaltet ist. Nur wenn eine 
Sonderfunktion aktivert wurde (ADC...) ist PINx meist nicht verwendbar.

Grüße, Kurt

von G a s t (Gast)


Lesenswert?

Im Datenblatt unter "Ports as General Digital I/O" wird das 
Zusammenwirken der einzelnen Register am I/O Pin im Prinzipschaltbild 
dargestellt. Da findet sich alles.

Den Fall mit einem Pull-up am Ausgang gibt es natürlich auch, wenn man 
z.B. wie beim I2C/TWI-Bus mit mehreren Ausgängen auf eine Leitung 
zugreifen will. Dann wird der Ausgang aber zwischen "Aktiv Low" und 
"Tri-State" umgeschaltet (Stichwort: Open-Drain).

von helau (Gast)


Lesenswert?

Hey Leute,
vielen Dank an Euch allen. Hat mit sehr viel gebracht. Meine Arbeit in 
der Schule war ganz okey hoffentlich naher auch die Note :-)

Was ich in den Beiträgen oben nur noch nicht verstanden habe, ist 
dieses:

> Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts,
> da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm <
> 0.2mA

Der letzte Teil mit 5V/30KOhm??


Ansonsten, falls ich später mal neue fragen zu einem anderen 
Themengebiet des Mikrocontrollers haben sollte, würde ich mich gerne 
nochmals in einem neuen Thread melden, falls ich über Google oder meinen 
Scripten nicht fündig werde :-)


Grüße

von Karl H. (kbuchegg)


Lesenswert?

helau schrieb:

>> Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts,
>> da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm <
>> 0.2mA
>
> Der letzte Teil mit 5V/30KOhm??

Ohmsches Gesetz.

Strom rinnt nur, wenn es eine Spannungsdifferenz gibt. Wieviel Strom 
sagt dir das Ohmsche Gesetz  U = R * I

Umgestellt nach I:   I = U / R

U (also die Spannungsdifferenz) gleich 5 Volt
R (der Widerstand, über dem die Spannung abfällt) gleich 30000 Ohm

I (der Strom, der durch den Widerstand rinnt)  = 5 / 30000 = 0.1 mA

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.