Forum: Mikrocontroller und Digitale Elektronik Taster Auslesen funktioniert nicht bei Atmega


von Jules (Gast)


Lesenswert?

Hallo,

ich will bei einem Atmega einen Taster an einem Portpin (Pin D2) 
auslesen.

Der Pin ist auf Eingang geschaltet und der interne Pullup ist aktiv. Der 
Taster ist vom Pin gegen Masse geschaltet und soll bei Tastendruck z.B. 
eine LED zum Leuchten bringen.

Habe es so gemacht:
1
DDRD &= ~(1<<DDD2); // Pin D2 auf Eingang
2
3
PORTD |= (1<<PD2); // Pin D2 interner Pullup-R aktiv

Die Pin-Abfrage lautet wie folgt:
1
if ((PIND & (1 << PIND2)) == 0) {..."LED wird eingeschaltet"...}

Leider funktioniert die Pinabfrage so nicht.

Versteht jemand, woran es liegt?

von Hubert G. (hubertg)


Lesenswert?

Ich schreibe immer so
if ( !(PIND & (1<<PIND2)) ){

Vielleicht funktioniert das LED-Einschalten nicht?

von Karl H. (kbuchegg)


Lesenswert?

Jules schrieb:

> Versteht jemand, woran es liegt?

Am Code den du nicht gezeigt hast.

von Jules (Gast)


Lesenswert?

Hubert G. schrieb:
> Ich schreibe immer so
> if ( !(PIND & (1<<PIND2)) ){
>
> Vielleicht funktioniert das LED-Einschalten nicht?

Danke, muss ich mal testen!



Karl Heinz Buchegger schrieb:
>> Versteht jemand, woran es liegt?
>
> Am Code den du nicht gezeigt hast.


Funktioniert nicht:
1
while (1)
2
{
3
if ((PIND & (1 << PIND2)) == 0) {PORTD ^= (1 << PIND4);} // LED wird dauergetoggled, wenn Taste gedrückt
4
}




Funktioniert:
1
while (1)
2
{
3
PORTD ^= (1 << PIND4); // LED wird dauergetoggled 
4
}

von Jules (Gast)


Lesenswert?

muahhhhhhhhhhhhhhhhh, der Taster ist kaputt!!!

Mit neuem Taster geht es.

Danke euch fürs Antworten und Mitdenken!!!

von Hubert G. (hubertg)


Lesenswert?

Jules schrieb:
> PORTD ^= (1 << PIND4); // LED wird dauergetoggled

Um Irritationen zu vermeiden solltest du anstelle von PIND4 besser 
PORTD4  oder PD4 schreiben.

von Jules (Gast)


Lesenswert?

Hubert G. schrieb:
> Um Irritationen zu vermeiden solltest du anstelle von PIND4 besser
> PORTD4  oder PD4 schreiben.

In Bezug auf den Compiler oder in Bezug auf andere Leute, die den Code 
lesen?

von Hubert G. (hubertg)


Lesenswert?

Dem Compiler ist es egal, den Leser kann es verwirren.
Grundsätzlich liest man vom PIN und schreibt auf das PORT.

von Jules (Gast)


Lesenswert?

Danke für den Hinweis, werde es beim nächsten Mal so machen!

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.