Um eine Schließer-Logik verwenden zu können, würden an dieser Stelle eigentlich interne Pull-Down-Widerstandände benötigt werden. Diese sind beim Arduino jedoch nicht hardwareseitig integriert. Es besteht jedoch die einfache Möglichkeit, den Quellcode aus dem Kapitel "Taster mit internem Pull-Up-Widerstand" umzuschreiben und die Öffner-Logik in eine Schließer-Logik zu wandeln, indem die Bit-Abfrage auf den Wert 0 erfolgt anstelle von 1.

Umwandlung

Von Öffner-Logik (Pull-Up):

if((PINB & (1 << PORTB1)))

Zu Schließer-Logik (Pull-Down):

if((PINB & (1 << PORTB1)) == 0)

Auch hier lässt sich anhand der grünen LED die Logik erkennen.

Der Aufbau bleibt identisch mit dem aus dem vorherigen Abschnitt:

Aufbau

Abb.: Schalten von LEDs mittels softwarerealisiertem Pull-Up Widerstand -> Umwandlung in Schließerlogik; Quelle: BBS2 Wolfsburg


Bei Betätigung des Tasters leuchtet nun die grüne LED (Schließer-Logik). Ist der Taster nicht betätigt, leuchtet die rote LED.


#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 )) == 0) 
            {                                      // Taster an Pin 9 ist gedrückt
                PORTD |= (1 << PORTD7);            // grüne LED einschalten
                PORTD &= ~(1 << PORTD6);           // rote LED ausschalten
            }
        else
            {                                     // Taster an Pin 9 ist nicht gedrückt
                PORTD |= (1 << PORTD6);          // rote LED einschalten
                PORTD &= ~(1 << PORTD7);         // grüne LED ausschalten
            }
    }
}

Das Ergebnis wird im folgenden Video gezeigt:

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