Dave schrieb:
> Und ich wundere mich: Wird der Taster durch einen Widerstand gegen
> Ground angeschlossen? Ich dacht, ich kann einfach einen Taster (mit oder
> ohne R) an VCC und Pin hängen und der Ground läuft über den Ground vom
> µC?
Ein als Eingang geschalteter Pin hängt grundsätzlich erst einmal in der
Luft, ist also weder auf VCC- noch auf GND-Level, sondern nimmt den
Pegel an, den man ihm von außen aufzwingt. Ein Taster/Schalter - ich
gehe hier von einem Schließer aus - dient dazu, den Pin niederohmig mit
einem der beiden Niveaus zu verbinden, man muss aber sicherstellen, dass
sicher das andere Niveau angenommen wird, solange der Taster nicht
gedrückt wird. Das geschieht in der Regel etwas hochohmiger mit einem
Widerstand.
Je nachdem, ob man den Taster "active-low" (Taster zieht Pin auf GND)
oder "active-high" (Taster zieht Pin auf VCC) einsetzen möchte, ergeben
sich folgende Reihenschaltungen:
Active low: VCC --- Widerstand --- Pin --- Taster --- GND
Active high: VCC --- Taster --- Pin --- Widerstand --- GND
Der Widerstand bei active low zieht den Pin bei offenem Taster "nach
oben" auf VCC und wird daher als Pull-Up-Widerstand bezeichnet, bei
active high zieht der Widerstand auf GND und wird deshalb Pull-Down
genannt.
Da es bei den Atmel-Controllern interne Pull-Ups gibt, die man per
Software aktivieren kann, aber keine internen Pull-Downs, nutzen die
meisten Programmierer Taster und Schalter in Active-Low-Verschaltung -
man spart sich einfach ein externes Bauteil.
> Also ich habe folgendes gelernt zum Thema:
> DDR-> Ein oder Ausgang -> (1<<DDA0)
> PORT -> Bei Ausgang Spannung geben und bei Eingsng Pull-up aktivieren ->
> (1<<PA0)
> PIN -> zur Abfrage eines Zustands an einem Pin (ist Spannung drauf oder
> nicht?) -> (1<<PINA0)
Das ist so korrekt. Willst du also D2 als deinen Tasterpin mit aktivem
Pull-Up nutzen, lautet die Einstellung:
1 | DDRD &= ~(1<<PD2);
|
2 | PORTD |= (1<<PD2);
|
Im Programm kannst du dann mit
1 | if(!(PIND & (1<<PD2))) {
|
2 | ...
|
3 | }
|
abfragen, ob der Taster gedrückt ist (also der Pin auf GND gezogen ist),
und die entsprechenden Aktionen veranlassen. Das Thema "Prellen" lasse
ich dabei zunächst mal außen vor.