- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: invalid lvalue

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Anzeige

    E-Bike
    Ich glaub ihr sucht in die falsche Richtung,
    normalerseise setzt/löscht man ein Bit doch u.a. so:

    Code:
    // löschen
    PORTB &= ~(1 << PB3);
    // setzen
    PORTB |= (1 << PB3);

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    42
    Beiträge
    1.780
    stimmt...

    in der io***.h steht nämlich das:
    Code:
    /* PORTB */
    #define PB7	7
    #define PB6	6
    #define PB5	5
    #define PB4	4
    #define PB3	3
    #define PB2	2
    #define PB1	1
    #define PB0	0
    das heisst, daß der Präprozessor aus deinem "PB0 = 0x1F" das macht:
    Code:
    0 = 0x1F;
    Du versuchst also einer Zahl einen anderen Wert zuzuweisen, was natürlich nicht funktionieren kann.
    (und genau das besagt auch die Fehlermeldung... frei übersetzt: "dem Ding links vom = kann man nix zuweisen")


    nimm die Variante von linux_80, so macht mans richtig.
    So viele Treppen und so wenig Zeit!

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Klaro, aber daß bei
    PORTB = / &= / |=
    ein 'illegal lvalue in assignment' kommt, ist recht ungewöhnlich.

    Bei PB3 = ... ist das klar, weil PB3 eine Konstante ist und auflöst zu
    3 = ..., was ja auch Käse ist.

    Richtig ist zB

    PORTB |= _BV(PB3);

    Übrigens empfiehlt es sich, die Port-Definitionen an einer _einzigen_ Stelle in der Quelle zu halten, damit man beim Ändern eines Ports (zB von PortB.0 auf PortD.2) wirklich nur 1(!) Stelle im Code ändern muss, was erforderlich ist, wenn man das Design ändet und man ein anderes Layout der I/O-Pins verwendet.

    Tückisch wird es sonst, weil mindestens 3 Register zu einem Port(pin) gehören, typischer weise

    - PORTx (Ausgang, Pullups)
    - PINx (Eingang)
    - DDRx (Richtung)

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    42
    Beiträge
    1.780
    PORTB = .... funktioniert natürlich...

    er meinte aber nur daß er "PORTB auch mal ausgeschrieben" hat, was natürlich bedeuten könnte daß dann sowas wie

    PORTB0 = 0xFF;
    PORTB1 = 0xFF;
    etc.

    dabei rausgekommen ist.
    So viele Treppen und so wenig Zeit!

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    05.04.2005
    Beiträge
    66
    Immer diese Crosspostings. :/

    Auf solche simplen Fragen wirst du bestimmt in *einem* Forum mehr als genügend Antworten bekommen, es besteht also keine Notwendigkeit, in das Fettnäpfchen "Crossposting" zu treten.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2005
    Beiträge
    13
    ich will bits weder löschen noch setzen. ich will den port b als eingang haben, also seine datenrichtung festlegen. wie um himmels willen mach ich das denn nun ?

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Code:
    #include <avr/io.h>
    
    ...
    DDRB = 0x00;
    ...
    Das muss funktionieren, ansonsten ist irgendwas sehr grundlegendes falsch!

    Vielleicht mal die neuste Version installieren/neuinstallieren ??

    MfG Kjion

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2005
    Beiträge
    13
    ich hab jetzt komplett alles neu installiert und auf den neuesten stand gebracht. und siehe da: es funktioniert danke euch allen.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress