Ganz einfach, du musst den Port auf LOW (0) setzen damit die Led leuchtet weil du sie mit Vorwiderstand an +5V angeschlossen hast.
>Wie kann ich aber machen das bei einem Schalter eine andere LED aufleuchtet?
vielleicht so:
PORTB=PIND <<1;
Hallo,
1. Ich hab folgendes Programm:
Wenn ich nun einen Schalter drücke leuchtet die entsprechende LED auf. Wie kann ich aber machen das bei einem Schalter eine andere LED aufleuchtet?Code:#include <avr/io.h> #define F_CPU 1000000 int main() { DDRB=0xff; DDRD=0x00; while(1) { PORTB=PIND; } return 0; }
2. Wenn ich bei mir schreibe:
DDRB=0xff;
PORTB|=(1<<PB0);
dann leuchten alle bis auf die nullte LED auf, obwohl diese doch 1 ist, kapier ich nicht.
Mfg Jokill
Ganz einfach, du musst den Port auf LOW (0) setzen damit die Led leuchtet weil du sie mit Vorwiderstand an +5V angeschlossen hast.
>Wie kann ich aber machen das bei einem Schalter eine andere LED aufleuchtet?
vielleicht so:
PORTB=PIND <<1;
Hallo Jokill,
um das zu verstehen, musst Du ein bisschen in binäre Logik einsteigen.
Das Programm macht nichts anderes als den Zustand der Schalter von PORTD(PIND ist der Zustand der Eingänge an PortD) auf die Ausgänge von PortB zu legen. Binär gesehen sieht das wenn Du z.B die Schalter 2 und 4 drückst (Schalter von 0 bis 7) so aus
0b00010100 (PortD S2 und S4 gedrückt)
und genau das wird auf PORTB übergeben.
Hierzu gibt es ein Wiki unter RN-Wissen auf roboternetz! Solltest Du dann noch Probleme haben, dann melde Dich einfach hier wieder
gruß
Martin
Danke, habt mir viel geholfen.
Hab das nun mit einer if-Bedingung gemacht:
Aber geht das nicht auch ohne if?Code:if(PIND==0b11111110) { PORTB=0b01111111; }
Da gibt es Unmengen an Möglichkeiten, deshalb bin ich da nicht darauf eingegangen.
z.B. kannst du maskieren
PIND & (1 << PD1) ist das selbe wie PIND & 0b00000010. Möglich dass bei deiner Anordnung das ganze Invertiert ist, du müsstest also PIND & 0b11111101 abfragen.
das kannst Du dann weil es eine Bedingung ist, z.B. mit IF abfragen(Oder Switch).
So wie ich das sehe, möchtest Du zunächst mal experimentieren. Es gibt viele Möglichkeiten Zustände abzufragen und wieder auszugeben. Ich kann und will Dir hier keinen C-Kurs und I/O-Kurs vom AVR geben. Dazu ist das Wiki da! (Unter RN-Wissen)
Wenn Du hier Experimente machen willst, empfehle ich Dir entweder den AVR-Dragon( Hardware, kostet ca. 70€), da kannst Du an einem Echtem AVR (ab ATMega16 aufwärts(muss ein JTAG-Interface habe)) schauen welche Zustände Eingänge Ausgänge Timer usw. habe. Wenn Du kein Geld ausgeben willst kannst Du das kostenlos (aber nur virtuell) mit der Software VMLab machen. Das ganze hat allerdings Einschränkungen weil hier die Hardware vom AVR nur simuliert wird. Ist super zum Einsteigen, weil Du da Fehler schneller findest.
Wenn Du dann ein Problem hast, hilft Dir bestimmt jemand!
gruß
Martin
Lesezeichen