Taster an Mikrocontroller anschließen



Irgendwie muß man natürlich dem Mikrocontroller, während er läuft , irgendwelche "Befehle" eingeben können.
Also nach der Art: "Wenn dieser oder jener Taster gedrückt ist, dann mache dieses oder jenes.

Wir wollen einen Taster an PC0 anschließen. Wenn dieser betätigt wird, soll die LED an PD0 leuchten.

Baue untenstehende Schaltung auf oder benutze einfach unser Experimentierboard:



Wird der Taster betätigt, ist PC0 mit GND verbunden - erhält also den Pegel "LOW".

Achtung!
Wird der Taster nicht betätigt, hängt PC0 "in der Luft", was ein nicht erwünschter (man kann sagen "verbotener") Zustand ist. Wir könnten zur Vermeidung dieses Zustands PC0  über einen Widerstand (z. B. 10K) mit 5V (also HIGH) verbinden. So haben wir das nämlich auch mit dem RESET-Eingang gemacht. Damit wäre PC0 erstmal mit "HIGH"-Pegel verbunden, solange der Taster nicht gedrückt ist. Solche Widerstände werden "Pull-Up-Widerstände" genannt ("pull up" =  "hochziehen), weil sie den Pegel "auf HIGH ziehen".

Wir brauchen das aber nicht mit einem externen (=äußeren)  Widerstand zu tun, da unser Mikrocontroller über interne Widerstände für diesen Zweck verfügt. Diese muß man nur "einschalten".

DDRC &= ~_BV(PC0);  //Eingang definieren (Taster)
PORTC|= _BV(PC0);   //internen Pull-Up-Widerstand einschalten

Ob an userem Eingang (PC0) gerade HIGH (5V) oder LOW (GND) anliegt, kannst Du abfragen mit:

if (bit_is_set(PINC,0)) {mach irgendwas} oder
if (bit_is_clear(PINC,0)) {mach irgendwas}



Hier unser komplettes Programm:

#include <avr/io.h>

int main(void){
 
    DDRD |= _BV(PD0);      //Ausgang definieren (LED)
   
    DDRC &= ~_BV(PC0);     //Eingang definieren (Taster)
    PORTC|= _BV(PC0);      //internen Pull-Up-Widerstand einschalten
   
    while(1){
        if (bit_is_clear(PINC,0))
            {PORTD &=~_BV(PD0);} //LED an
            else
            {PORTD |=_BV(PD0);}  //LED aus        
    }
 
    return(0);
}
 

Hier der Ordner zum Programmieren.


Anmerkungen:

  • Ein typischer Anfängerfehler ist es, statt für z.B. PC0 als Eingang nicht wie hier richtig (PINC,0), sondern falsch (PORTC,0) oder ähnliches zu versuchen.

  • Nimm entweder den internen oder einen externen (z. B. 10k) Pull-Up-Widerstand, nicht beide gleichzeitig!