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?
PIND1 ist als Ausgang High geschaltet, somit wird PIND1 immer High anzeigen.
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...
Ich glaube du meinst: if(!(PIND & 0x01 )) //Pin D1 überprüfen stop_that();
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.