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.)
|
Bild 0-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:
|
Bild 0-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 0-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:
|
Bild 0-1: Test mit Pullup-Widerständen am Experimentierboard unter Verwendung des obigen Programms.