dass ich mit DDRB = (1<<DDB1)|(1<<DDB3); led und taster als ausgang deklariere, der taster aber dann funktioniert. setze ich ihn mit DDRB=~(1<<DDB3); als eingang und schalte den pullup ein, klappt es nicht.
im DDRx stellst du die 'richtung' des pins ein
setzt (shiftest) du im DDRx an die stelle vom pin ne 1 hast du ihn als output deklariert, bei 0 (default) hast du ihn als input.
@cat was kappierst du nicht?
weil der taster am int0 hängt du du wahrscheinlich den int0-interrupt eingeschalten hast. sprich der interrupt wird wohl den pin, egal was im DDR steht, als input deklarieren sonst macht der int0 doch keinen sinn?
keine interrupts. hier der komplette code:
man kann zwar den status eines pins auch auslesen, wenn er als ausgang geschaltet ist, aber DDxn verhält sich irgendwie genau umgekehrt, als im datenblatt beschrieben.Code:#include <avr/io.h> #include <avr/iom8.h> int main( void ) { DDRB = (1<<DDB1)|(1<<DDB3); // pin 1 & 3 als ausgang (!?) PORTB |= (1 << PB1); //pullup PORTB |= (1 << PINB3); //pullup while(1) { if( bit_is_clear(PINB, PB3)) PORTB |= (1 << PB1); // led an else PORTB &= ~(1 << PB1); // led aus } } //EOF
gruesse
Code:DDRB |= (1<<PB4) //output LED PORTB &= ~(1<<PB4) //set PB4 low, LED off DDRB &= (1<<PB1) //input switch PORTB != (1<<PB1) //pullup for switch while(1) { if (bit_is_clear(PINB, PB1) PORTB |= (1<<PB4); //turn LED on else PORTB &= ~(1<<PB4); //turn LED off }
boah, wenn schon jemand copy&paste macht... für sowas hat man nen compiler :P
1. hab nix da zum testen
2. durch logisches denken
versuch mal statt dem bit_is_clear () mein makro von oben
irgendwo muss ja der fehler sein :PCode:VALUEPB1 ((PINB & (1<<PB1)) > 0 ? (1):(0))
soweit ich es jetzt (endlich) begreife, kann man die internen pull-ups nur verwenden, wenn der port als ausgang geschalten ist (a8 datasheet tabelle 20 seite 53). ansonsten ist ein externer pullup nötig.
was soll eigentlich das hier bewirken?
damit vergleichst du die werte und verwirfst das ergebnis. erzähl den leuten halt bitte nicht so nen quark!Zitat von blink
substituiere ! mit | tippfehler
Hallo,
also ich könnte schwören, dass ich das auch schon ausprobiert habe den Eingang als Ausgang zu initialisieren. Aber es funktioniert jetzt zumindestens mit der Abrage des PB1.
Taster nicht gedrückt -> Led an
Taster gedrückt -> Led aus
Komisch - verstehen tue ich das nicht, da ich einen exteren Pull Up Widerstand angeschlossen hatte, aber das Ergebnis zählt ja nur. Ich denke ich verzichte vorerst auf den Interrupt.
Vielen Dank.
Lesezeichen