kramann.info
© Guido Kramann

Login: Passwort:










3.2 Verwendung der internen Pullup-Widerstände

Kann man auf die Zusatzwiderstände bei Tastern verzichten?

  • Das folgende Schaltbild zeigt die interne Anordnung an den digitalen Ein- und Ausgängen.
  • Neben den Verpolschutzdioden, gibt es dort auch einen Pullup-Widerstand, der mittels eines MOSFET-Transistors gegen die 5Volt Versorgungsspannung geschaltet werden kann.
  • Geschieht dies, so wird bei Nichtbeschaltung des entsprechenden Pins der Eingang auf einen definierten positiven Pegel gezogen. Er steht dann logisch auf 1.
  • Schließt man bei durchgeschaltetem Pullup-Widerstand einen Taster an, so muß man ihn gegen Masse schalten (vergl. Bild unten).
  • Bei Betätigen des Tasters wechselt der Eingangszustand dann von 1 auf 0. (...also umgekehrt als bei den Beispielen in der Einführung, wo ein "Pulldown"-Widerstand gegen Masse geschaltet wird und der Taster gegen +5Volt.)
ersatz.png

Bild 3.2-1: Ersatzschaltbild I/O-Pin

  • In Register SFIOR Bit 2 (3. Bit) wird PUD - "PullUp Disable" genannt.
  • Ist PUD gesetzt (1), so sind für alle Ports die Pullup-Widerstände deaktiviert.
  • Ist PUD nicht gesetzt (0), so sind für alle Ports die Pullup-Widerstände aktiviert.
  • Setzen von PUD ohne Beeinflussung der anderen Bits: SFIOR |= 1<<PUD;
  • Löschen von PUD ohne Beeinflussung der anderen Bits: SFIOR &= 255 - (1<<PUD);
  • Der folgende Auszug aus dem Datenblatt zeigt außerdem, dass auch noch die Bits des Port-Registers (PORTA, B, C, D) auf 1 gesetzt sein müssen, damit die Pullup-Widerstände aktiv sind:
ersatz.png

Bild 3.2-2: Auszug aus dem Datenblatt: Zur Aktivierung der Pullup-Widerstände muß auch das korrespondierende PORT-Bit gesetzt sein.

  • Zum Testen der Pullup-Widerstände, wird im folgenden Testprogramm Port A als Eingang verwendet.
  • Die Pullup-Widerstände werden für Port A aktiviert und der Zustand von PortA nach Port C geschrieben, um den aktuellen Zustand von Port A dezimal in der Anzeige zu sehen (2. Mikrocontroller).
#include<avr/io.h>

int main()
{
    DDRA = 0b00000000;
    DDRC = 0b11111111;

    SFIOR &= 255 - (1<<PUD);
    PORTA = 0b11111111;

    while(1)
    {
        PORTC = PINA;
    }

    return 0;
}
 

Code 3.2-1: Testen der Pullup-Widerstände.

Projekt Download pullup.zip
  • Folgendes Bild zeigt die Testanordnung, wobei Bit 7 und 0 von Port A hier über Drähte auf Masse gezogen sind.
  • Dadurch ergibt sich als Bitmuster 0b01111110, oder dezimal die angezeigte 126:
ersatz.png

Bild 3.2-1: Test mit Pullup-Widerständen am Experimentierboard unter Verwendung des obigen Programms.