Taster an Ports

Gast #2122241
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
@  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
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
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.