Forum: Mikrocontroller und Digitale Elektronik Taster abfragen Anfängerfrage


von Tobi (Gast)


Lesenswert?

Hi!
Ich programmiere jetzt schon einige Zeit den Atmega8 mit avr-gcc, habe 
aber bisher nur mit handy-displays und leds rumgespielt, und würde jetzt 
gern den Status von Tastern abfragen..
Die Taster schliessen geöffnet den Stromkreis, bei Tastendruck wird 
selbiger unterbrochen, mir ist die genaue Bezeichnung dieser 
Schalter-Art entfallen..

Da ich auf der Platine aus Platzgründen eher schlecht mit Vcc oder Gnd 
auf den Schalter kann, hab ich die zwei Leitungen des Schalters auf PD0 
und PD1 gelegt. Dann im Programm:

----------------------------------
DDRD = 0x02  // binär: 00000010, also PD1 als Ausgang, Rest Eingänge?!
PORTD = 0xff // Pull-Up Widerstände einschalten und PD1 auf high setzen

if(!(PIND & (1 << PIND1))){
    stop_that();
}
----------------------------------

Ich habe an PORTD leds angeschlossen, die ich in stop_that() ausschalte.
Sobald das Programm des Atmegas startet, wird umgehend stop_that() 
aufgerufen, obwohl an PD1 die Ausgangsspannung von PD0 anliegt..

Was hab ich falsch gemacht?

von Slowflyer (Gast)


Lesenswert?

PIND1 ist als Ausgang High geschaltet, somit wird PIND1 immer High 
anzeigen.

von Gregor B. (gregor54321)


Lesenswert?

1
DDRD  |=  (1<<PD1)  // PD1 als Ausgang
2
DDRD  &= ~(1<<PD0)  // PD0 Als Eingang
3
4
PORTD |=  (1<<PD1)  // PD1 auf High
5
6
7
if(!(PIND & (1 << PIND0))) {
8
    stop_that();
9
}

PS: Und immer an das Prellen der Tasten denken...

von Tobi (Gast)


Lesenswert?

Ich glaube du meinst:


if(!(PIND & 0x01 )) //Pin D1 überprüfen
    stop_that();

von Tobi (Gast)


Lesenswert?

Gregor war schneller :-) Und ich meinte ja D0

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.