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?
Markus schrieb: > Aber geht anscheinend nicht? abgesehen von allem anderen: Eingänge werden mit PINX abgefragt...
Hi
>Benötigt man wirklich den Pull-Up Widerstand?
In deinem Fall Pull-Down-Widerstände.
MfG Spess
@ 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
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
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... ;-)
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.
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.