-
Erstmal: Hier is nix Copy&Paste [-(. Alles aus meiner Feder, deswegen hab ich auch geschrieben: Quick&Dirty. Ich hab die Feinheiten ganz bestimmt ned raus. :wink:
Aber hier mal der Code
Code:
#include <avr/io.h>
int main(void)
{
DDRD = (0 << PD5) | (1 <<PD7); //PD5 auf Eingang schalten, PD7 auf Ausgang
PORTD = (1 << PD5) | (0 << PD7); //Pullup Widerstand an PD5 setzen
while(1){
if ( PIND & (0 << PIND5) ) //Wenn PD5 auf Masse gezogen wird....
{
PORTD = (1 << PD7); // dann setze PD7 auf high
}
}
}
-
Dein Fehler liegt in der Zeile mit dem if. Du machst ein bitweises UND zwischen PIND und (0 << 5). letzteres ist eine 0, die um 5 Stellen nach links verschoben wurde. Also immer noch 0. Ein bitweises UND mit 0 ergibt auf jeden Fall auch wieder 0, daher ergibt der Ausdruck im if immer false und PD7 wird nie gesetzt.
"0 << irgendwas" ergibt grundsätzlich immer 0, kann also genausogut durch 0 ersetzt werden (und sollte es auch, der Übersichtlichkeit wegen). Dein if muss also eher so aussehen:
if(!(PIND & (1 << 5)))
btw, einzelne Pins setzen geht so:
PORTD |= (1 << 7);
Wenn du nicht |= sondern = nimmst, setzt du alle anderen Pins auf 0.
-
Wunderbar! :) Es funktioniert! Dankeschön an alle die geholfen haben!