J’utilise un Atmega168 J’essaie d’utiliser I2C avec mon pilote PCA9685 Servo.
J’utilise cette bibliothèque I2C: https://github.com/g4lvanix/I2C-master-lib
Je tente de démarrer la connexion I2C avec mon PCA9685 (Address: 0x41).
Pour une raison quelconque, la bibliothèque I2C renvoie une erreur car le bit d’accusé de réception n’est pas envoyé. Qu’est-ce qui ne va pas ici? Mes broches SDA et SCL sont connectées à des résistances de 10k et sont correctement connectées au PCA9685 Pourtant, cela ne fonctionne toujours pas. Est-ce que ce pourrait être ma puce PCA9685? Je sais aussi que l’adresse est 0x41 parce que j’ai ponté manuellement une connexion d’adresse pour atsortingbuer cette adresse.
Voici mon code:
#include #include #include #include #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; }
Merci d’avance!