|
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!
|