Taster an Ports

Gast #2122241
Lesenswert?

Hallo, ich habe die 8Pins des PORTA des uC mit einem DIP-Schalter 
verbunden. Leider auf direktem Wege, also 5V->Schalter->Pin
(siehe Bild im Anhang) und den Pull-Up Widerstand vergessen.

Ich habe PORTA als Ausgang declariert
DDRA=0x00;  //Eingang DIP-Schalter
und dachte, ich könne den Status des Pins einfach über

if(PORTA |= (1>>PA1))  //Schalter geschlossen, 5V liegen an
....

abfragen. Aber geht anscheinend nicht? Es liegen immer 5V am Pin, auch 
wenn der Schalter geöffnet ist!
Benötigt man wirklich den Pull-Up Widerstand?
Angehängte Dateien:
#2122255
Lesenswert?

@  Markus (Gast)

>Hallo, ich habe die 8Pins des PORTA des uC mit einem DIP-Schalter
>verbunden. Leider auf direktem Wege,

Das ist OK.

>also 5V->Schalter->Pin
>(siehe Bild im Anhang) und den Pull-Up Widerstand vergessen.

Das ist kein Problem, der AVR hat intern zuschaltbare.

>Ich habe PORTA als Ausgang declariert

Was mal Unsinn ist, Eingang wäre deutlich sinnvoller.

>DDRA=0x00;  //Eingang DIP-Schalter

Das sind Eingänge.

>und dachte, ich könne den Status des Pins einfach über

>if(PORTA |= (1>>PA1))  //Schalter geschlossen, 5V liegen an
>....

>abfragen.

Nicht "denken", WISSEN!

Den Zustand der PINs fragt man mit PINA ab. Wer hätte das gedacht. Und 
die internen Pull-Ups schaltet man mit

PORTA = 0xFF;

ein.

Allerdings müssen dein DIP-Schalter dann gegen GND schalten und nicht 
wie bei dir gegen +5V. Tja, Pech gehabt, beim nächsten mal vorher 
informieren.

MfG
Falk
Gast #2122268
Lesenswert?

Du solltest nicht an Widerständen sparen, gerade in der Bastelphase in 
der du bist.
Wenn du den Port zufällig als Ausgang definierst und auf low setzt geht 
dein AVR in Rauch und wohlgefallen auf.

Zum anderen nutzt man die Widerstände auch zum Entprellung der Eingänge.

Du kannst 1-8 von deinem Dip-Switch auf GND legen und die internen 
PullUps ziehen. (PORTA = 0xFF;)
Probiere dann if ( PINA | (1<<PA1) ) // Schalter offen
Moderator (Firma: Titel) Persönliche Seite #2122275
Lesenswert?

LinuxMint_User schrieb:
> Wenn du den Port zufällig als Ausgang definierst und auf low setzt geht
> dein AVR in Rauch und wohlgefallen auf.
Das tut er nicht. Schon oft probiert und nichts hat geraucht...

> Zum anderen nutzt man die Widerstände auch zum Entprellung der Eingänge.
Das ist dann eine längere Schreibweise für "Murks".

Unglücklich an dieser Konstellation ist lediglich, dass dei Schalter 
nach Vcc schalten. So liegen die internen PullUps des Ports nutzlos 
herum. Das ist einer der beliebtesten Anfängerfehler...  ;-)
Gast #2122279
Lesenswert?

LinuxMint_User schrieb:
> Du kannst 1-8 von deinem Dip-Switch auf GND legen und die internen
>
> PullUps ziehen. (PORTA = 0xFF;)
>
> Probiere dann if ( PINA | (1<<PA1) ) // Schalter offen

Okay, so werde ich es probieren. Die Leiterbahn werde ich schon 
irgendwie durchtrennen können. und ein dünnes Drähtchen an GNG legen.
Tja, wirklich dumm gelaufen...
Danke an alle.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren