39 #include <linux/i2c-dev.h> 41 #include <sys/ioctl.h> 43 #define PCA9685_SUBADR1 0x2 44 #define PCA9685_SUBADR2 0x3 45 #define PCA9685_SUBADR3 0x4 47 #define PCA9685_MODE1 0x0 48 #define PCA9685_PRESCALE 0xFE 52 #define LED0_OFF_L 0x8 53 #define LED0_OFF_H 0x9 55 #define ALLLED_ON_L 0xFA 56 #define ALLLED_ON_H 0xFB 57 #define ALLLED_OFF_L 0xFC 58 #define ALLLED_OFF_H 0xFD 60 #define PWM_FREQUENCY 60 //60Hz 16.7ms 61 #define PWM_PULSE_WIDTH_MAX 12000 //12ms 67 void PCA9685_setPWM(uint8_t ch, uint16_t onTime, uint16_t offTime);
73 printf(
"Init_0000000200000001\n");
75 char i2cFileName[] =
"/dev/i2c-1";
76 int driverAddress = 0x40;
80 if((i2c = open(i2cFileName, O_RDWR)) < 0){
81 printf(
"I2C open err\n");
85 if(ioctl(i2c, I2C_SLAVE, driverAddress) < 0){
86 printf(
"ioctl err\n");
99 printf(
"ReInit_0000000200000001\n");
104 printf(
"Finalize_0000000200000001\n");
129 printf(
"SetPosition_0000000200000001, position=%f\n", position);
130 (*halComponent)->positionControlActuator.actualPosition = position;
131 int16_t _minAngle = 0;
132 int16_t _maxAngle = 180;
133 int16_t _minServoPL = 143;
134 int16_t _maxServoPL = 471;
135 uint16_t pulseLen = (position-_minAngle)*(_maxServoPL-_minServoPL)/(_maxAngle-_minAngle) + _minServoPL;
141 printf(
"GetPosition_0000000200000001\n");
142 *position = &(*halComponent)->positionControlActuator.actualPosition;
194 float prescaleval = 25000000;
198 uint8_t prescale = 101;
200 uint8_t newmode = (oldmode&0x7F) | 0x10;
215 pulseWidth = pulseWidth_usec / pulselength;
225 sendData[1] = (uint8_t)(0x00ff & onTime);
226 sendData[2] = (uint8_t)((0xff00 & onTime) >> 8);
227 sendData[3] = (uint8_t)(0x00ff & offTime);
228 sendData[4] = (uint8_t)((0xff00 & offTime) >> 8);
230 if(write(i2c, sendData, 5) != 5){
231 printf(
"PCA9685_setPWM() err\n");
241 if(write(i2c, &sendData, 1) != 1){
242 printf(
"PCA9685_read() err1\n");
245 if(read(i2c, &readData, 1) != 1){
246 printf(
"PCA9685_read() err2\n");
259 if(write(i2c, buf, 2) != 2){
260 printf(
"PCA9685_write() err\n");
enum ReturnCode ReInit_0000000200000001()
enum ReturnCode AddObserver_0000000200000001()
uint8_t PCA9685_read(uint8_t adr)
OpenEL Common Header File 3.0.0.
enum ReturnCode GetProperty_0000000200000001()
enum ReturnCode GetTime_0000000200000001()
enum ReturnCode SetPosition_0000000200000001(HALCOMPONENT_T **halComponent, halfloat position)
void PCA9685_pwmWrite(uint8_t ch, double pulseWidth_usec)
void PCA9685_init(float freq)
void PCA9685_setPWM(uint8_t ch, uint16_t onTime, uint16_t offTime)
enum ReturnCode Init_0000000200000001()
enum ReturnCode GetPosition_0000000200000001(HALCOMPONENT_T **halComponent, halfloat **position)
void PCA9685_write(uint8_t adr, uint8_t dat)
const EL_CMN_FNC_TBL_T component_0000000200000001
OpenEL UTRX-17-1(PCA9685)(0000000020000001) header file 3.0.0.
enum ReturnCode RemoveObserver_0000000200000001()
enum ReturnCode Finalize_0000000200000001()