- 12V Akku mit 280 Ah bauen         
Seite 31 von 34 ErsteErste ... 212930313233 ... LetzteLetzte
Ergebnis 301 bis 310 von 332

Thema: RP6 Remotrol 1.3: Die Opensource RP6-Fernsteuerung

  1. #301
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Anzeige

    E-Bike
    Puh, ganz ehrlich, da kann ich dir so ganz spontan gar nichts zu sagen...Was für versionen benutzt du denn?
    Normalerweise hat das Programm auf dem RP6 immer eine ganze Liste an Features erwartet. Eben für jedes Features was es gibt ein ja oder ein nein

  2. #302
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hmm, das mit der Version ist so ne Sache, da kam ich irgendwann total durcheinander. Hab hier drei verschiedene (1.3 und zwei andere), hab aber dummerweise (ich Depp) die neueste, die ich von dir hatte, verändert - ohne Sicherungskopie!!!
    Würdest du mir vielleicht nochmal die neue Version schicken?

    Wobei das mit dem Fehler vmtl dann doch daran liegt, dass ich lieber gleich eine ganze Liste schicken sollte.
    Hat nur in LabView nicht so ganz geklappt, weil man dafür solche "endlichen Automaten" benutzen muss... Bei drei endlichen Automaten ineinande wirds unübersichtlich und Fehleranfällig, daher hab ich den innersten wieder raus genommen.
    Aber wann der RP6 diese Liste erhält, ist doch egal, oder?

  3. #303
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hallo!
    Ich verwende ja auch die Remote auf dem RP6, allerdings programmiere ich auf dem PC was eigenes mit LabView...
    Nun "verliere" ich irgendwie ständig bei dem Wert für den linken Lichtsensor die letzte Ziffer, der Wert springt also z.B. immer zwischen 908 und 90 hin und her (ca. im Sekundentakt) oder zwische 883 und 88 etc.
    Woran kann den so was liegen?
    Passiert sowohl bei BT-Verbindung wie auch bei USB-Verbindung.

    Danke Euch!
    Lg

  4. #304
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Wenns mit USB auch passiert wirds wohl an deinem eigenen Programm liegen

  5. #305
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Ich check das mal... ich kanns mir halt so wenig vorstellen, da ich den Stream, der vom RP6 kommt nehme, und ihn sofort Plotte.
    Integrierst du in deinem Programm über mehrere Werte, ehe du plottest, um den Mittelwert der sagen wir letzten drei Werte zu erhalten, oder plottest du alles sofort?
    Wenn sofort, dann würde das zumindest einen Fehler in der Übertragung und in deinen RP6-Programmen ausschließen...

  6. #306
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Nein, bei mir wird nichts kummuliert oder irgendwelche Schnitte gebildet.
    Das, was ankommt, wird auch dargestellt.

  7. #307
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Ja, das hab ich auch grad gemerkt: Der Stream ist fehlerfrei, aber wenn ich sage: plotte das, was hinter "Lightl:" kommt, dann geht irgendwie gern mal ne Ziffer verloren. Keine Ahnung, wie das von Statten geht wie gesagt, im Stream steht sie noch.
    Kennt sich da vielleicht jemand mit LabView aus?

    Lg

  8. #308
    Benutzer Stammmitglied
    Registriert seit
    29.08.2008
    Beiträge
    73
    Hallo,

    ich hab nich alles mit gelesen, bin also nicht auf dem neusten Stand, aber wenn du mit LabView hilfe brauchst, dann schreib mal ne PN bin eingeltich recht fit vlt kann ich dir ja helfen.

    vg

  9. #309
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hier mal ein Foto, wie das so aussieht...

  10. #310
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Ich habe gerade die M128 und die Base mit der Remotrol am laufen, aber die M128 bekommt nix von den Bumpern und dem ACS mit. Wenn ich das richtig sehe, dann weil es nicht im Register steht.
    Register Base:
    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();
        }
    }
    Register M128:
    Code:
    // I2C Read Register des I2CSlave Programms:
    
    #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
    Stimmt das? Was muss ich denn ändern, wenn ich sowohl die beiden ACS (left, right) haben will, als auch Bumper left, Bumper Right, Bumper back left und bimper back right?
    Letztere werden in meiner Lib so eingeführt (wie vom nil.at) :
    Code:
    uint8_t getBackBumperLeft(void) 
    { 
       PORTC &= ~SL2; 
       DDRC &= ~SL2; 
       nop(); 
       uint8_t tmp = PINC & SL2; 
       if(statusLEDs.LED2) { 
          DDRC |= SL2; 
          PORTC |= SL2; 
       } 
       return tmp; 
    } 
    
    uint8_t getBackBumperRight(void) 
    { 
       PORTB &= ~SL5; 
       DDRB &= ~SL5; 
       nop(); 
       uint8_t tmp = PINB & SL5; 
       if(statusLEDs.LED5) { 
          DDRB |= SL5; 
          PORTB |= SL5; 
       } 
       return tmp; 
    }
    Danke euch schon mal!

Seite 31 von 34 ErsteErste ... 212930313233 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen