-
        

Ergebnis 1 bis 7 von 7

Thema: RNBFRA I2C im TWI Betrieb, problem mit Servotreiber Rnkc10

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123

    RNBFRA I2C im TWI Betrieb, problem mit Servotreiber Rnkc10

    Anzeige

    Hallo,

    benutze die Bibliothek von Fleury (also die zwei Dateien twimaster.c, i2cmaster.h) und den I2c-Servotreiber Rnkc10.

    Betreibe den I2C-Bus am RNBFRA im Hardware (also TWI) Modus. Nun habe ich ein Problem, da die Servos nur kurz zucken und sich nicht steuern lassen.

    Angeschlossen ist alles richtig da das Beispiel funktioniert, nur leider ist es als Software I2C verfasst.

    Ich denke es liegt an den Timings des Buses. Wie kann ich diese in den Header bzw. die twimaster.c Datei einbinden?

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Versuch mal das Hex File für den CoProzessor.
    Hört auf die adresse &H68
    Und kriegt die daten:
    BYTE &H01 Command
    BYTE &H01 - &H0A Servo# 1 - 10
    WORD &Hnnnn servo position 600 - 2000
    (µS ServoImpuls, ~1500 = Mitte)


    Wenn was nicht funzt, sagen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    noch'n Versuch, war irgendwas schräg ??
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    Hi Robert,

    erst mal danke für die schnelle und erfolgreiche Hilfe. Also habe den IC mit deinem Treiber mal geflasht und die nötigen Werte übergeben...

    Code:
    void MoveServo(void) {	
    	i2c_start(0x68 + I2C_WRITE);
    	i2c_write(0x01);  // Command
    	i2c_write(0x01);  // Servo Nr1
    	i2c_write(0x02); 
    	i2c_write(0x56);
    	i2c_stop();
    }
    Funktioniert wunderbar, nur muss ich meinen Funktionsnamen also MoveServo(); in einer do {}while(1); schleife starten sonst bewegt der Servo sich nicht. Woran liegt das?

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Richtig, es gibt Lücken, wo der Servokontroller grad mit den Servos beschäftigt ist.
    Du brauchst aber keine while(1) schleife, sondern du mußt nur den Error-code prüfen. Nur wenn ein Fehler beim I2C_Start war (kein ACK), dann die Sendung wiederholen.
    Ich weiß jetzt nicht, wie und wo der Fleury seinen Status hergibt.
    Hat I2C_START () irgendeinen return-code ?

    EDIT : hab' ihn schon:
    Code:
    unsigned char i2c_start  (  unsigned char  addr   )   
       Issues a start condition and sends address and transfer direction. 
    Parameters:
     addr  address and transfer direction of I2C device  
    Return values:
     0  device accessible  
     1  failed to access device
    d.h mach folgendes
    Code:
    void MoveServo(void) {    
       if   (i2c_start(0x68 + I2C_WRITE))
          do   {    }   while (i2c_rep_start(0x68 + I2C_WRITE)); 
       i2c_write(0x01);  // Command 
       i2c_write(0x01);  // Servo Nr1 
       i2c_write(0x02); 
       i2c_write(0x56); 
       i2c_stop(); 
    }
    Eben nur, bis ein ACK kommt. das ist in den meisten Fällen höchstens 1-2 mal
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.11.2004
    Beiträge
    123
    Traumhaft funktioniert perfekt, ich danke dir sehr herzlich für deine Hilfe.

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bittärrscheen. Und empfehlen Sie uns weiter
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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