I2C不能与PCA9685

时间:2017-09-13 02:34:43

标签: c embedded i2c atmega

我正在使用Atmega168尝试在我的PCA9685伺服驱动程序中使用I2C。

我正在使用此I2C库:https://github.com/g4lvanix/I2C-master-lib

我尝试使用PCA9685(地址:0x41)启动I2C连接。

由于某些原因,I2C库反弹错误,因为未发送确认位。这有什么不对?我的SDA和SCL引脚连接到10k上拉电阻,它们正确连接到PCA9685。但它仍然没有奏效。它可能是我的PCA9685芯片吗?我也知道地址是0x41,因为我手动桥接了一个地址连接以分配该地址。

这是我的代码:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/power.h>
#include "i2c.h"

#define SERVO_MIN 1000
#define SERVO_MAX 2000
#define SERVO_MID 1500

#define PCA9685_ADDR 0x40

#define PCA9685_MODE1 0x0

#define LED0_ON_L 0x6
#define LED0_ON_H 0x7
#define LED0_OFF_L 0x8
#define LED0_OFF_H 0x9

#define LED      PB0
#define LED_DDR  DDRB
#define LED_PORT PORTB

#define DELAYTIME 200

#define setBit(sfr, bit)     (_SFR_BYTE(sfr) |= (1 << bit))
#define clearBit(sfr, bit)   (_SFR_BYTE(sfr) &= ~(1 << bit))
#define toggleBit(sfr, bit)  (_SFR_BYTE(sfr) ^= (1 << bit))


void setupController();
void setServo(uint8_t id, uint8_t start, uint8_t stop);
int main(void)
{
  setBit(LED_DDR, LED);
  clock_prescale_set(clock_div_1);
  i2c_init();
  uint8_t err = i2c_start(0x41);

  while(err == 1) {
    setBit(LED_PORT, LED);
    uint8_t err = i2c_start(0x41);

  }
  clearBit(LED_PORT, LED);
  while(1) {

}
  return 0;
}

提前谢谢!

0 个答案:

没有答案