- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Frage zum Ansteuern von Ports/Programmierfrage

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48

    Frage zum Ansteuern von Ports/Programmierfrage

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe folgendes Problem das sich auf einen Atmega 8 bezieht:

    mit PORTD|=(1<<PD1) kann ich ja einen Port anschalten bzw auf 5V Ausgangsspannung setzen. Wenn ich nun mehrere "anschalten" möchte hieße das ja ich müsste schreiben PORTD|=(1<<PD1);PORTD|=(1<<PD2);PORTD|=(1<<PD3)... .
    meine Frage ist:
    Kann man das nicht in eine for-Schleife einbinden also nach dem Schema

    for(i=1;i==7;i++){PORTD|=(1<<PD"und hier der Wert von i");}
    ??
    vielen Dank,
    MfG
    Geimel

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    warum so kompliziert?
    Code:
    //switch on
    PORTB |= (1<<PB0) | (1<<PB2) | (1<<PB4); //erste möglichkeit
    PORTB |= (0x15 << PB0); //zweite möglichkeit
    
    //switch off
    PORTB &= ~((1<<PB0) | (1<<PB2) | (1<<PB4)); //erste möglichkeit
    PORTB &= ~(0x15 << PB0); //zweite möglichkeit

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Hi,
    du kannst das auch alles in eine Zeile schreiben:
    PORTD |= (1<<PD1) | (1<<PD2) | (1<<PD3);
    Oder du weist dem I/O Register alle Zustände des gesamten Ports zu: (hexadezimal)
    PORTD = 0x03;
    Das würde PD0 und PD1 auf High, den Rest auf low setzen.

    Nur so ne Bemerkung am Rande:
    Deine For Schleife kann mit dem "i==7" nicht funktionieren. Die For Schleife wird solange ausgeführt, solang diese Bedingung wahr ist. Wenn du aber am Anfang i auf 1 setzt und die Bedingung "i muss 7 sein" ist, wird die Schleife einfach übersprungen, da die Bedingung nicht wahr ist. Statt dem "i==7" kannst du einfach "i<=7" schreiben.

    MfG

    EDIT: war wohl zu langsam

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48
    wenn ich jetzt aber eine variable habe, deren wert dem port entsprechen soll, wie kann ich das da machen?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Die ganzen PD0, PD1, PD2... sind nichts anderes als Konstanten mit den Werten 0,1,2,... . Man kann also auch (1<<i) schreiben.

    >>wenn ich jetzt aber eine variable habe, deren wert dem port entsprechen soll, wie kann ich das da machen?<<
    PORTD=var; //wobei var nen 8bit-Wetr sein sollte

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48
    also ich habe jetzt noch ein wenig rumprobiert, habe aber noch keine optimale Lösung gefunden die auch funzt.

    Also ich möchte jetzt mit
    for(i=0;i<=7;i++){PORTD..????;Msleep(1000);}

    im Abstand von 1 sekunde alle Port D anschalten. Msleep ist dabei schon definiert.
    Was muss ich jetzt noch einfügen damit nacheinander alle 7 Ports angeschaltet werden?

    Ich hoffe ich nerve euch nicht mit so blöden Fragen.
    MfG
    Geimel

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    for(i=0;i<=7;i++){PORTD|=(1<<i);Msleep(1000);}

Berechtigungen

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

Solar Speicher und Akkus Tests