Ansteuerung von LEDs per Taster mit internem Pull-Up-Widerstand

Die Mikrocontroller der Atmega-Familie wurden mit internen Pull-Up-Widerständen für ihre digitalen Ports ausgestattet. Die internen Pull-Up Widerstände müssen per Software "aktiviert" werden.

In diesem Programmbeispiel wird gezeigt, wie man einen Taster mit internem Pull-Up-Widerstand zur LED-Steuerung nutzt.

Ein gedrückter Taster liefert eine 0 (Low-Pegel) am Eingang, die rote LED leuchtet. Ein nicht gedrückter Taster eine 1 (High-Pegel), die grüne LED leuchtet.


Anschlussplan

Abb.: Schalten von LEDs mittels softwarerealisiertem Pull-Up Widerstand; Quelle: BBS2 Wolfsburg

Der dazugehörige Quellcode sieht wie folgt aus:

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>


int main(void)
{
    DDRD = (1 << 7) | (1 << 6); // Pin 7 und 6 als Ausgänge setzen
    DDRB =  (0<<PORTB1);       // Pin 9 als Eingang setzen
    PORTB |= (1 << PORTB1);  // Pull Up Widerstand setzen
 
    while (1)
    {
        if((PINB & (1 << PORTB1 ))) 
            {                                      // Taster an Pin 9 ist nicht gedrückt
                PORTD |= (1 << PORTD7);            // grüne LED einschalten
                PORTD &= ~(1 << PORTD6);           // rote LED ausschalten
            }
        else
            {                                     // Taster an Pin 9 ist gedrückt
                PORTD |= (1 << PORTD6);          // rote LED einschalten
                PORTD &= ~(1 << PORTD7);         // grüne LED ausschalten
            }
       
    }
}

Zeile 10 im Quellcode sorgt für die softwaretechnische Zuschaltung des Pull-Up-Widerstandes.

Die Logik lässt sich einfach anhand der grünen LED erklären. Ist der Taster nicht gedrückt, leuchtet sie. Ist der Taster gedrückt, erlischt sie. Es handelt sich als um eine Öffner-Logik (wenn der Taster eigentlich ein Schließer ist).


Das Ergebnis wird im folgenden Video gezeigt:

Zuletzt geändert: Montag, 21. Februar 2022, 08:42