Je fais appel à votre aide, car j'essaye de faire une communication i2c entre une arduino due et une arduino uno. Avant de mettre tout un tas de capteur, je fais une communication simple en utilisant les programmes de ce site:Arduino I2C Intro-MasterReader — MCHobby - Wiki
J'ai mis l'arduino due en maitre et l'arduino uno en esclave, mais rien ne s'affiche dans le moniteur. J'ai aussi testé 2 arduino uno en i2c et cela fonctionne. J'ai vu qu'il y avait un problème sur le "wire" de l'arduino due et qu'il fallait changer le fichier: Fix for Due Wire library by bluesign2k · Pull Request #1994 · arduino/Arduino · GitHub. Mais cela ne résout pas le problème. Le but final de cette communication i2c est t'interfacer un ADL7997 avec une arduino due.
En espérant qu'une personne à une solution à ce problème
A priori, c'est un problème de niveau de tension. La Uno fonctionne en 5V alors que la Due fonctionne en 3.3V
Il faut utiliser un convertisseur de niveau logique (cherche "Convertisseur de niveau logique" ou "Logic level converter" ou "Logic level shifter" sur Google).
Je te remercie pour ta réponse, j'ai trouvé un composant sur sparkfun
Le but était d'interfacé un AD 7997 AD7997 Datasheet and Product Info | Analog Devices qui lui discute bien en 3.3V. Le problème c'est que qu'il n'y a pas de retour d'informations entre l'AD 7997 et la DUE. Je ne sais pas si ça vient de mon code ou alors de mon électronique. Peut-être pourrez vous m'éclairer
Voici le code:
#include <Wire.h>
uint8_t i = 16;
int j;
char data[8] = {0};
char error;
bool state_error;
#define CYCLE 1
#define SLAVE_ADDR 0x21
void setup() {
// put your setup code here, to run once:
Wire1.begin();
SerialUSB.begin(115200);
while(!SerialUSB);
SerialUSB.println("Bien le bonjour");
}
void loop() {
Wire1.beginTransmission(SLAVE_ADDR_W);
if( CYCLE)
{
Wire1.write(0x70);
Wire1.write(0x0f);
Wire1.write(0xf8);
}
else
{
Wire1.write(0x00);
Wire1.write(0x00);
Wire1.write(i);
i = i<<1 % 256;
if( i == 0)
i = 16;
}
error = Wire1.endTransmission(true);
// put your main code here, to run repeatedly:
Wire1.beginTransmission(SLAVE_ADDR_W);
Wire1.write(0x05);
error = Wire1.endTransmission(true);
// Wire.beginTransmission(0xA7);
if( CYCLE )
{
Wire1.requestFrom(SLAVE_ADDR_R,16);
while( Wire1.available())
{
char c = Wire1.read();
if (j == 1%2)
{
data[j] = c;
j ++;
}
else
{
data[j] = (data[j] << 8) + c;
j = 1;
}
SerialUSB.println(data);
}
}
delay(50);
}