c'est bizarre! Malheureusement, je n'ai pas de quoi tester en ce moment. Ce que je peux te proposer, c'est un bout de code exhumé de mes archives et modifié (sans possibilité de tests, mais un code dérivé fonctionnait chez moi) pour tester des servos sur les sorties 0 et 1 du PCA9685
Code: Select all
# -*- coding: latin-1 -*-
#sudo nano /etc/modules
#i2c-dev (verifier quela ligne est présente)
#sudo apt-get update
#sudo apt-get install i2c-tools
#sudo adduser pi i2c
#sudo reboot
#sudo i2cdetect -y 1 --> You should see something at i1c@ 0x40
#sudo apt-get install python-smbus
#i2c exemples ! http://embeddedmicro.weebly.com/raspberry-pi.html
import time
import smbus
bus = smbus.SMBus(1)
print "PCA9685 test"
#IC i2c address and register map
PCA1addr = 0x40
PWM_reg_start_addr = 0x06
freq = 50.0 #Hz
pwm_min = 205
pwm_max = 409
def init_PCA9685 (i2c_addr, pwm_freq, debug):
if debug: print "init PCA9685 at 0x%x address and %dHz frequency"% (i2c_addr, pwm_freq)
bus.write_byte(0x00, 0x06)#SWRST reset the circuit
prescale = int(25000000/freq/4096)
bus.write_byte_data(i2c_addr, 0xfe, prescale) #PRESCALE 121 -> 50 Hz / 60 -> 100 Hz / 32 -> 185 Hz
bus.write_byte_data(i2c_addr, 0x00, 0b00100001) #MODE1 put SLEEP bit to 0 and AI autoincrement to 1
if debug:
print " - MODE1 =", bin(bus.read_byte_data(i2c_addr, 0x00)),
a=bus.read_byte_data(i2c_addr, 0xfe)
print " - PRESCALE =", a
f = 25000000/(4096*(float(a+1)))
print " - freq =", f, " Hz - periode =", 1000/f, "msec"
return()
def write_PCA9685 (i2c_addr, reg_addr, data_list, debug):
list=[]
for a in range(len(data_list)):
list.append(data_list[a] - 256*int(data_list[a]/256))
list.append(int(data_list[a]/256))
bus.write_i2c_block_data(i2c_addr, reg_addr, list)
return
init_PCA9685 (PCA1addr, freq, debug_flag)
for a in range (pwm_min, pwm_max):
pwm_values = [0, a, 0, a]
write_PCA9685(PCA1addr, PWM_reg_start_addr, pwm_values, debug_flag)
time.sleep(0.02)
for a in range (pwm_min, pwm_max):
pwm_values = [0, a, 0, a]
write_PCA9685(PCA1addr, PWM_reg_start_addr, pwm_values, debug_flag)
time.sleep(0.02)
pwm_values = [0, 4096, 0, 4096]
write_PCA9685(PCA1addr, PWM_reg_start_addr, pwm_values, debug_flag)
print "end of test"
peut être cela pourra-t-il t'aider? Seule est utilisée la lib smbus pour écrire dans les registres.