Programmierung des Mikrocontrollers mit C



4. Taster anschließen (Eingänge digital abfragen)

Es gibt drei Möglichkeiten, Taster an einen Mikrocontrollereingang zu schließen.

In unseren Beispielen schließen wir einen Taster an PB0.

Damit PB0 ein Eingang wird, muß das Datenrichtungsregister an der PB0-Stelle gelöscht sein (also LOW sein):
DDRB &= ~_BV(PB0)




    1. Möglichkeit: der geschlossene Schalter liefert ein HIGH (also 5V) an PB0.

   

Der Widerstand R1 hat die Aufgabe, den Eingang PB0 vor einem nichtdefinierten Zustand zu schützen.
Wäre R1 nicht da und der Taster offen, läge nämlich überhaupt kein Signal an PB0! Dies ist ein verbotener Zustand. Und so ein offener Eingang empfängt dann Rauschen oder Radiowellen.
Da  R1 den Eingang "herunter" zu GND (also LOW) zieht, nennt mann ihn auch Pull Down Widerstand.

Der Befehl, um zu testen, ob an PB0 ein High anliegt, lautet: if (bit_is_set(PINB,0)) {machirgendwas}




    2. Möglichkeit: der geschlossene Schalter liefert ein LOW (also GND bzw. 0V) an PB0.

   

Der Widerstand R1 hat hier die Aufgabe, bei nichtbetätigtem Taster den Eingang PB0 nach High zu ziehen und heißt deshalb PULL UP WIDERSTAND.

Der Befehl, um zu testen, ob an PB0 ein Low anliegt, lautet: if (bit_is_clear(PINB,0)) {machirgendwas}




    3. Möglichkeit: wie Variante 2 - aber der Pull-up-Widerstand ist im Mikrocontroller.

   

Die Ports besitzen interne Pull-Up-Widerstände.
Die aktivierst Du, indem Du das entsprechende bit im Port setzt.
Hier mal ein komplettes Beispiel:

DDRB &= ~_BV(PB0); // PB0 ist nun ein Eingang
PORTB |= _BV(PB0); // Pull Up an der Stelle PB0 setzen
if (bit_is_clear(PINB,0))
{machirgendwas}




Ein beliebter Fehler ist es, statt richtig (PINB,0) sowas wie (PORTB,0) zu schreiben!





weiter