我正在使用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;
}
提前谢谢!