-         

Ergebnis 1 bis 1 von 1

Thema: PWM servo shield (adafruit) I²C Ansteuerung

  1. #1

    PWM servo shield (adafruit) I²C Ansteuerung

    Anzeige

    Guten spätnachmitag,
    Ich habe vor wenigen Wochen das PWM servoshield (PCA9685) von Adafruit erworben und möchte dieses nun über meine Mega32 mit meinem Projektboard von Conrad über I2C direkt ansteuern.
    Laut dem zurückgelieferten Status meines C-controls sendet der PWM-chip ein ACK. also kann ich sicher gehen, dass der Chip funktioniert und ich die richtige I2C-addresse angegeben habe.
    Nun zu meinem Problem: Ich möchte die Frequenz meines Moduls (für die Ansteuerung von Servos) auf 50 Hz setzen und dann den Servo auf Pinn4 auf die Mittelposition stellen. Hierzu habe ich folgenden Programm-code (nach dem Beispiel des Datenblattes auf seite 33) geschrieben, jedoch reagiert der Servo nicht. Ist es so richtig, dass ich über I2C die Befehle einfach hintereinander angebe? Was habe ich falsch gemacht?
    Code:
    #define PWM_MODE1 0x0
    #define PWM_PRESCALE 0xFE
    #define PWM_adr 0x90
    #define PWM_freq 121          // ((25*10^6)/4096*hz)-1
    #define on_time 0x1001       
    #define off_time 0x012C       // (180-400)
    
    void main(void)
    {
    
        I2C_Init(I2C_100kHz);  // I2C Bit Rate: 100 kHz
    
        I2C_Start();
        I2C_Write(PWM_adr);
        I2C_Write(PWM_MODE1);  // MODE1     (register)
        I2C_Write(0b00110000); // =  sleep
        I2C_Stop();
    
    
        I2C_Start();
        I2C_Write(PWM_adr);
        I2C_Write(PWM_PRESCALE);// PRE_SCALE (frequenz)
        I2C_Write(PWM_freq);   // =
        I2C_Stop();
    
        I2C_Start();
        I2C_Write(PWM_adr);
        I2C_Write(PWM_MODE1);  // MODE1     (register)
        I2C_Write(0b00100000); // =  refresh PWM
        I2C_Stop();
    
        I2C_Start();           // I2C startsequenz
        I2C_Write(PWM_adr);    // SLAVE-adr. übermitteln
        I2C_Write(0x16);       // Register LED4 On low
        I2C_Write(on_time);    // on  send low   8 bits
        I2C_Write(on_time>>8); // on  send heigh 8 bits
        I2C_Write(0x18);       // Register LED4 Off low
        I2C_Write(off_time);   // off send low   8 bits
        I2C_Write(off_time>>8);// off send heigh 8 bits
        I2C_Stop();            // I2C Stopsequenz
    
        I2C_Start();
        I2C_Write(PWM_adr);
        I2C_Write(PWM_MODE1);  // MODE1     (register)
        I2C_Write(0b10100000); // =  normal_mode
        I2C_Stop();
    }
    Den Servo habe ich richtig angeschlossen und er sowie das C-control funktionieren einwandfrei.
    Geändert von probot32 (28.03.2014 um 19:25 Uhr) Grund: eigener Schreibfehler

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 05.02.2014, 21:57
  2. Adafruit 16 Channel PWM Servo Driver für 12V RGB Steuerung
    Von DaReK im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 21.03.2013, 12:10
  3. Servo ansteuerung durch pwm
    Von Sp666dy im Forum C - Programmierung (GCC u.a.)
    Antworten: 14
    Letzter Beitrag: 24.10.2011, 16:37
  4. Ansteuerung Servo mit Servo Fkt. oder mit PWM?
    Von cosanostra im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 14.11.2007, 11:26
  5. Antworten: 3
    Letzter Beitrag: 02.11.2007, 03:41

Stichworte

Berechtigungen

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