- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 23

Thema: RP6 Slave und M32 Slave

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773

    RP6 Slave und M32 Slave

    Hi!
    Hab da noch mal eine Frage zum Thema Slaves.
    Ich möchte, dass der RP6 auch die Werte der beiden ADCs und der I/Os (als Inputs verwendet) ins Register schreibt.
    Habe folgendes im Slave-Beispiel:
    Code:
    /*****************************************************************************/
    // I2C Registers that can be read by the Master. Their names should 
    // be self-explanatory and directly relate to the equivalent variables/functions 
    // in the RP6Library
    
    #define I2C_REG_STATUS1          0
    #define I2C_REG_STATUS2          1
    #define I2C_REG_MOTION_STATUS      2
    #define I2C_REG_POWER_LEFT          3
    #define I2C_REG_POWER_RIGHT      4
    #define I2C_REG_SPEED_LEFT          5
    #define I2C_REG_SPEED_RIGHT      6
    #define I2C_REG_DES_SPEED_LEFT      7
    #define I2C_REG_DES_SPEED_RIGHT  8
    #define I2C_REG_DIST_LEFT_L      9
    #define I2C_REG_DIST_LEFT_H      10
    #define I2C_REG_DIST_RIGHT_L     11
    #define I2C_REG_DIST_RIGHT_H      12
    #define I2C_REG_ADC_LSL_L          13
    #define I2C_REG_ADC_LSL_H          14
    #define I2C_REG_ADC_LSR_L          15
    #define I2C_REG_ADC_LSR_H          16
    #define I2C_REG_ADC_MOTOR_CURL_L 17
    #define I2C_REG_ADC_MOTOR_CURL_H 18
    #define I2C_REG_ADC_MOTOR_CURR_L 19
    #define I2C_REG_ADC_MOTOR_CURR_H 20
    #define I2C_REG_ADC_UBAT_L          21
    #define I2C_REG_ADC_UBAT_H          22
    #define I2C_REG_ADC_ADC0_L          23
    #define I2C_REG_ADC_ADC0_H          24
    #define I2C_REG_ADC_ADC1_L          25
    #define I2C_REG_ADC_ADC1_H          26
    #define I2C_REG_RC5_ADR              27
    #define I2C_REG_RC5_DATA          28
    #define I2C_REG_LEDS              29
    
    
    /**
     * This very important function updates ALL registers that the Master can read.
     * It is called frequently out of the Main loop. 
     */
    void task_updateRegisters(void)
    {
        if(!I2CTWI_readBusy) 
        {
            I2CTWI_readRegisters[I2C_REG_STATUS1] =          (uint8_t)(interrupt_status.byte);
            I2CTWI_readRegisters[I2C_REG_STATUS2] =          (uint8_t)(status.byte);
            I2CTWI_readRegisters[I2C_REG_MOTION_STATUS] =      (uint8_t)(drive_status.byte);
            I2CTWI_readRegisters[I2C_REG_POWER_LEFT] =          (uint8_t)(mleft_power);
            I2CTWI_readRegisters[I2C_REG_POWER_RIGHT] =      (uint8_t)(mright_power);
            I2CTWI_readRegisters[I2C_REG_SPEED_LEFT] =          (uint8_t)(getLeftSpeed());
            I2CTWI_readRegisters[I2C_REG_SPEED_RIGHT] =      (uint8_t)(getRightSpeed());
            I2CTWI_readRegisters[I2C_REG_DES_SPEED_LEFT] =      (uint8_t)(getDesSpeedLeft());
            I2CTWI_readRegisters[I2C_REG_DES_SPEED_RIGHT] =  (uint8_t)(getDesSpeedRight());
            I2CTWI_readRegisters[I2C_REG_DIST_LEFT_L] =      (uint8_t)(getLeftDistance());
            I2CTWI_readRegisters[I2C_REG_DIST_LEFT_H] =      (uint8_t)(getLeftDistance()>>8);
            I2CTWI_readRegisters[I2C_REG_DIST_RIGHT_L] =      (uint8_t)(getRightDistance());
            I2CTWI_readRegisters[I2C_REG_DIST_RIGHT_H] =      (uint8_t)(getRightDistance()>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_LSL_L] =          (uint8_t)(adcLSL);
            I2CTWI_readRegisters[I2C_REG_ADC_LSL_H] =          (uint8_t)(adcLSL>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_LSR_L] =          (uint8_t)(adcLSR);
            I2CTWI_readRegisters[I2C_REG_ADC_LSR_H] =          (uint8_t)(adcLSR>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_MOTOR_CURL_L] = (uint8_t)(adcMotorCurrentLeft);
            I2CTWI_readRegisters[I2C_REG_ADC_MOTOR_CURL_H] = (uint8_t)(adcMotorCurrentLeft>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_MOTOR_CURR_L] = (uint8_t)(adcMotorCurrentRight);
            I2CTWI_readRegisters[I2C_REG_ADC_MOTOR_CURR_H] = (uint8_t)(adcMotorCurrentRight>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_UBAT_L] =          (uint8_t)(adcBat);
            I2CTWI_readRegisters[I2C_REG_ADC_UBAT_H] =          (uint8_t)(adcBat>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC0_L] =          (uint8_t)(adc0);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC0_H] =          (uint8_t)(adc0>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC1_L] =          (uint8_t)(adc1);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC1_H] =          (uint8_t)(adc1>>8);
            I2CTWI_readRegisters[I2C_REG_LEDS] =              (uint8_t)(statusLEDs.byte);
            I2CTWI_readRegisters[I2C_REG_RC5_ADR] =          (uint8_t)((lastRC5Reception.device)|(lastRC5Reception.toggle_bit<<5));
            I2CTWI_readRegisters[I2C_REG_RC5_DATA] =          (uint8_t)(lastRC5Reception.key_code);
            if(I2CTWI_dataWasRead && I2CTWI_dataReadFromReg == 0)
                clearInterrupt();
        }
    }
    Kann ich hier einfach noch #define`s anfügen? Oder muss man dafür mehr machen? Was genau macht eigentlich folgende Zeilen:

    Code:
            I2CTWI_readRegisters[I2C_REG_ADC_ADC0_L] =          (uint8_t)(adc0);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC0_H] =          (uint8_t)(adc0>>8);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC1_L] =          (uint8_t)(adc1);
            I2CTWI_readRegisters[I2C_REG_ADC_ADC1_H] =          (uint8_t)(adc1>>8);
    Ebenso soll die M32 als Slave verwendet werden. Hier möchte ich alle ADCs auslesen...
    Habe folgenden Code von Fabian E.:

    Code:
    /*****************************************************************************/
    // I2C Registers that can be read by the Master. Their names should
    // be self-explanatory and directly relate to the equivalent variables/functions
    // in the RP6Library
    
    #define I2C_MICROPHONEPEAKLOW     0
    #define I2C_MICROPHONEPEAKHIGH     1
    #define I2C_BUTTON                  2
    #define I2C_ADC_2                  3
    #define I2C_ADC_3                  4
    #define I2C_ADC_4                  5
    #define I2C_ADC_5                  6
    #define I2C_ADC_6                  7
    #define I2C_ADC_7                  8
    
    
    /**
     * This very important function updates ALL registers that the Master can read.
     * It is called frequently out of the Main loop.
     */
    void task_updateRegisters(void)
    {
        if(!I2CTWI_readBusy)
        {
            uint16_t mic = getMicrophonePeak();
            I2CTWI_readRegisters[I2C_BUTTON] =                  (getPressedKeyNumber());
            I2CTWI_readRegisters[I2C_MICROPHONEPEAKLOW] =    (mic & 0x00ff);
            I2CTWI_readRegisters[I2C_MICROPHONEPEAKHIGH] =     (mic & 0xff00) >> 8;
            I2CTWI_readRegisters[I2C_ADC_2] =                  (uint16_t)readADC(ADC_2);
            I2CTWI_readRegisters[I2C_ADC_3] =                  (uint16_t)readADC(ADC_3);
            I2CTWI_readRegisters[I2C_ADC_4] =                  (uint16_t)readADC(ADC_4);
            I2CTWI_readRegisters[I2C_ADC_5] =                  (uint16_t)readADC(ADC_5);
            I2CTWI_readRegisters[I2C_ADC_6] =                  (uint16_t)readADC(ADC_6);
            I2CTWI_readRegisters[I2C_ADC_7] =                  (uint16_t)readADC(ADC_7);
            if(I2CTWI_dataWasRead && I2CTWI_dataReadFromReg == 0)
                clearInterrupt();
        }
    }
    Hier werden auch wieder einige ADC (Nummern 2 bis 7 ) abgerufen, sind das schon die ADCs, die man selbst verwenden kann?
    Wie kann ich hier den Rest der ADCs ( 8 sollten es ja sein) reinsetzen?

    Tja, und dann kommt noch der Teil mit der M128, aber eins nach dem Anderen...

    Sorry, ich glaube ich frage wieder mal totales Anfänger-Zeugs Aber danke schon mal für eure Hilfe!
    Ich arbeite gerade an einer kompletten Fernsteuerung mit LabView und Fabian E.s Programmen. Ich hoffe, ich schaffe es auch, dass man den Robot dann via LabView in gewisse Routinen (Lichtverfolgung, Wärmequellen suchen mit SnakeVision, ...) bringen kann. Darüber hinaus soll man eben auch alle ADCs, I/Os etc verwenden können. Wenns soweit ist, kann ichs ja mal posten.

    Grüße!
    Fabian
    Geändert von fabqu (24.09.2011 um 12:14 Uhr)

Ähnliche Themen

  1. Slave Transmitter und Slave Receiver Mode
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.02.2011, 19:55
  2. I2C Slave
    Von Jada im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 19.06.2010, 11:47
  3. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  4. I2C-Slave
    Von liggi im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 02.01.2008, 16:02
  5. Pic als Slave am I2C
    Von kalletronic im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 04.08.2006, 19:46

Berechtigungen

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

Labornetzteil AliExpress