- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Anfänger braucht Hilfe bei Schalter

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Beiträge
    43

    Anfänger braucht Hilfe bei Schalter

    Anzeige

    Powerstation Test
    Hallo,
    1. Ich hab folgendes Programm:
    Code:
    #include <avr/io.h>
    #define F_CPU 1000000
    
    
    int main()
    {
    DDRB=0xff;
    DDRD=0x00;
     
    while(1)
    {
    
    PORTB=PIND;
    
    }
    return 0;
    }
    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?

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.01.2007
    Beiträge
    134
    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;

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Alter
    51
    Beiträge
    23
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Beiträge
    43
    Danke, habt mir viel geholfen.
    Hab das nun mit einer if-Bedingung gemacht:
    Code:
    if(PIND==0b11111110)
    {
    PORTB=0b01111111;
    }
    Aber geht das nicht auch ohne if?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Alter
    51
    Beiträge
    23
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress