Hallo Mario,
Hallo an alle

in noch keinem Thread habe ich so viele richtige aber unverständliche Antworten gesehen.

Auszug aus dem Datenblatt:
The simpliest method to ensure a defined level of an unused pin is to enable the internal pull-up.
auf deutsch:
Die einfachste Methode um einen definierten Pegel an einen unbenutzten Eingang zu legen ist den internen Pull-up-Widerstand zu aktivieren.

Hier die (vereinfachte) Schaltung aus dem Datenblatt:
(Die genaue Schaltung steht im ATmega8-Datenblatt auf Seite 50)

Bild hier  


1.) Der Pull-up-Widerstand (kurz:Pull-up) kann zwischen einen Eingang und die Betriebsspannung(Vcc) geschaltet werden.
2.) Der Pull-up hat laut Datenblatt zwischen 20 und 50 KOhm. Man sollte also mit etwa 33 KOhm rechnen.
3.) Der Pull-up kann nur aktiviert werden, wenn der Port als Eingang definiert ist.
4.) Ist der Port als Ausgang definiert, ist der Pull-up abgeschaltet.
5.) Nach einem Reset sind alle Pull-ups abgeschaltet.
6.) Mit dem Bit PUD im Spezial-Function-IO-Register SFIOR können alle Pull-ups abgeschaltet werden.
7.) Der FET im Schaltbild ist dann und nur dann durchgeschaltet wenn
a) der Pin als Eingang definiert ist und
b) das Port-Bit auf 1 gesetzt ist und
c) das PUD-Bit 0 ist (Standard)

Wenn der Pull-up aktiviert ist und man einen Schalter nach Masse anschließt ergibt sich folgende Situation:
Ist der Schalter offen, hat man dank des Pull-ups eine 1 am Pin liegen.
Ist der Schalter geschlossen, liegt eine 0 am Pin an.
Ohne Pull-up würde bei offenem Schalter ein undefinierter Pegel anliegen. Was dann passiert steht im Buch von Roland Walter auf Seite 45 im Kapitel "Das zweite Programm" ganz genau beschrieben und kann auch im Demoprogramm ausprobiert werden.

@darwin:
Was du da als Schaltbild angehängt hast ist kein Pull-up, sondern ein Lastwiderstand oder LED-Vorwiderstand, geht also leider am Thema völlig vorbei und hat mit den internen Pull-ups der Atmel-Mikrocontroller nix zu tun.

felack