-
        

Ergebnis 1 bis 9 von 9

Thema: Wie kann ich einem Port über eine Variable ansprechen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2008
    Beiträge
    7

    Wie kann ich einem Port über eine Variable ansprechen

    Anzeige

    Hallo,

    Ich möchte für eine LED-Matrix (5x7) eine Schleife Programieren, die
    bei jedem Durchlauf einen Port auf High schaltet, und ihn dann wieder
    auf Low schaltet.
    Bisher benutze ich die Befehle

    PORTC |=IO_PC3; und
    PORTC &= ~IO_PC3;

    um z.B den Port 3 zu schalten. Das ist jedoch sehr aufwändig und erzeugt
    eine Menge Quellcode, da ich ja alle Ports so ansprechen muß. Es muß doch möglich sein eine for schleife zu programieren, die mir die Ports nacheinander an und aus schaltet.

    Das ganze stelle ich mir ungefähr so vor:

    for (i=2;i<7;ixx)
    {
    Setzte Port i;
    sleep(5);
    Rüchsetzte Port i;
    }

    Leider bekomme ich es nicht hin, die Suche hat auch keine verwendbaren Ergebnisse gebracht.

    Vielleicht kann mir ja jemand auf die Sprünge helfen

    Gruß Peter

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    for (i=2;i<7;i++)
    {
    //Setzte Port i;
    PORTC |= (1<<i);
    sleep(5);
    //Rüchsetzte Port i;
    PORTC &= ~(1<<i);
    }

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Besser

    for(i = (1<<2); i != (1<<7); i <<= 1)
    {
    PORTC |= i;
    PORTC &= ~i;
    }

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2008
    Beiträge
    7
    Hallo Ihr Zwei,

    vielen Dank für eure Antworten, toll währe es noch wenn mir das
    jemand erklären könnte.

    for(i = (1<<2); i != (1<<7); i <<= 1)

    Wieso i=(1<<2) und i != (1<<7)

    Währe nett wenn ihr mir das in den Klammern erklären könntet.



    Danke und Gruß

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Ich weis den genauen Ausdruck nimmer aber "<<" ist ein Binäroperator. Er "shiftet", also Schiebt, eine Binäre 1 von Rechts nach Links, >> Entsprechend von Links nach Rechts. Will heisen:
    A=00001
    A<<1 => A= 00010
    A>>1 => A= 00001
    A<<3 => A= 00100
    und so weiter

    Dein Port sieht als Register (was anderes ist es nicht) so aus:
    PORTX=00000000 = 0x00 (Hex)
    Setzt du ein Bit gleich 1 kannst du dir überlegen was mit dem Shiftoperator passiert.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2008
    Beiträge
    7
    Hallo,

    vielen Dank. Das ich dem Port einen Hex-Wert übergeben kann macht die Sache noch einfacher.

    Danke an euch drei ihr habt mir sehr geholfen.

    Viele Grüße

    Peter

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Sollte man aber vermeiden wenn man mit der Bitschubserei nich so Fit ist weil man dann relativ schnell durcheinander kommt.

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Oha, das ist ja sehr clever mit der Bitschieberei in for(). Ich hatte bisher ein Array mit den Wertigkeiten definiert und den Schleifenzähler als Index verwendet:
    bits[]={1,2,4,8,16...128}
    for(bitnr=0; bitnr<8; bitnr++) x=bit[bitnr];

    Man lernt eben immer dazu wenn man hier mitliest...

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Es geht, wie ich finde, noch Pfiffiger <pre> PORTB <<= 1;
    if (!PORTB){
    PORTB = 1;
    } </pre>

    Das kam von sernst in meinem Lauflicht Thread. Dort wird bei jedem Zyklus der Main Schleife das Bit im PortB nach Rechts/Links geshiftet

Berechtigungen

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