- LiFePO4 Speicher Test         
Ergebnis 1 bis 9 von 9

Thema: Frage zur RP6M256_I2CMasterLib.c

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108

    Frage zur RP6M256_I2CMasterLib.c

    In der Datei RP6M256_I2CMasterLib.c die Zeilen 241 - 245
    Code:
    // Bitmasks for comparision: 
    #define MASK_ACS             0b01100000 // the ACS Status bits... 
    #define MASK_BUMPER          0b00000110 // Bumper bits
    #define MASK_RC5              0b00001000 // RC5 Reception bit
    #define MASK_BATLOW           0b00000001 // Low Voltage bit
    Was bedeuten diese Zeilen, wodurch sind diese Bitwerte festgelegt?

    Thorben W

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Thorben:

    Das sind sog. "Bitmasken". Sie dienen dazu, bestimmte Bits aus einem Byte auszuwerten.
    Wenn man z.B. einen Wert ermittelt wie: Wert = Var & MASK_ACS;
    ... und Var den Interrupt-Status enthält, dann ist Wert = 0, wenn beide ACS Status bits 0 sind.

    Die Bitmasken dienen also dazu, die Bits des Interrupt-Status auszuwerten.
    In der RP6M256_I2CMasterLib.h ist das Byte interrupt_status so definiert:
    Code:
    union {
     	uint8_t byte;
    	struct {
    		uint8_t batLow:1;
    		uint8_t bumperLeft:1;
    		uint8_t bumperRight:1;
    		uint8_t RC5reception:1;
    		uint8_t RC5transmitReady:1;
    		uint8_t obstacleLeft:1;
    		uint8_t obstacleRight:1;
    		uint8_t driveSystemChange:1;
    	};
    } interrupt_status;
    Da kannst du die Bitpositionen wiederfinden:
    Z.B. ist batLow das Bit 0 im interrupt_status und genauso auch in der MASK_BATLOW Bitmaske (=0b00000001).
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Wenn ich unten dann noch zwei Sachen anfüge welche Bitwerte sind das dann
    Code:
    union {
     	uint16_t byte;
    	struct {
    		uint8_t batLow:1;
    		uint8_t bumperLeft:1;
    		uint8_t bumperRight:1;
    		uint8_t RC5reception:1;
    		uint8_t RC5transmitReady:1;
    		uint8_t obstacleLeft:1;
    		uint8_t obstacleRight:1;
    		uint8_t driveSystemChange:1;
    		uint8_t hightbumperLeft:1;
    		uint8_t hightbumperRight:1;
    	};
    } interrupt_status;
    Vielleicht: 0b1100000000

    Thorben

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Thorben W Beitrag anzeigen
    Wenn ich unten dann noch zwei Sachen anfüge welche Bitwerte sind das dann
    Code:
    union {
     	uint16_t byte;
    	struct {
    		uint8_t batLow:1;
    		uint8_t bumperLeft:1;
    		uint8_t bumperRight:1;
    		uint8_t RC5reception:1;
    		uint8_t RC5transmitReady:1;
    		uint8_t obstacleLeft:1;
    		uint8_t obstacleRight:1;
    		uint8_t driveSystemChange:1;
    		uint8_t hightbumperLeft:1;
    		uint8_t hightbumperRight:1;
    	};
    } interrupt_status;
    Ich dachte man macht ein solches Konstrukt, um die Bitmaske nicht zu benötigen:

    Code:
    interrupt_status.bumperRight = 0;
    .
    .
    if(interrupt_status.bumperLeft == 0) {
    .
    .
    Obwohl ich das so schreiben würde:
    Code:
    union {
     	uint16_t register;
    	struct {
    		int batLow:1;
    		int bumperLeft:1;
    		int bumperRight:1;
    		int RC5reception:1;
    		int RC5transmitReady:1;
    		int obstacleLeft:1;
    		int obstacleRight:1;
    		int driveSystemChange:1;
    		int hightbumperLeft:1;
    		int hightbumperRight:1;
    	};
    } interrupt_status;
    
    if  (interrupt_status.register) {      // wenn irgend ein Bit ungleich 0
    .
    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Thorben W:
    Vielleicht: 0b1100000000
    Genau.
    Ob das Programm mit einer uint16_t interrupt_status Variable noch funktioniert, würde ich aber zuerst ohne deine Erweiterung einmal testen.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Ja es funktioniert noch mit den front bumpern.
    Aber die neuen noch nicht
    Thorben

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Dirk Beitrag anzeigen
    @Thorben W:

    Genau.
    Ob das Programm mit einer uint16_t interrupt_status Variable noch funktioniert, würde ich aber zuerst ohne deine Erweiterung einmal testen.
    Wenn mit Bitmasken gearbeitetet wird, meist nicht. Denn dann muß an jeder Stelle, wo eine Maske verwendet wird der Typ der Maske angepasst werden.

    Wenn man die Bits der Union über ihren Namen und nur über ihren Namen anspricht, wie ich das oben gezeigt habe, dann funktioniert das auch mit 32 oder 64 Bit, ohne am vorhandenen Source zu ändern.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. Frage zur Hadware
    Von Scuido im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 20.09.2008, 08:53
  2. Frage zur Erdung
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 04.11.2006, 17:44
  3. Frage zur H Brücke293
    Von vitja09 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 16.10.2006, 17:38
  4. Frage zur RN-DIGI
    Von The Puma im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 5
    Letzter Beitrag: 30.05.2005, 14:35
  5. Frage zur Bügelmethode
    Von Adam im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 13.04.2005, 13:56

Berechtigungen

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

LiFePO4 Speicher Test