hello,
malheureusement l'I2C est p-e le bus le moins recommandé pour des cablages long car il est bidirectionnel, on passe notre temps à charger/décharger des buffer "tri-state" qui basculent entrée/sortie (c'est d'ailleurs à cause de eux qu'on peut à peine espérer atteindre + de 400 kHz de fréquence d'horloge), et la longueur de cable rajoute de l'inductance au système.
1/ reste en fréquence faible (100kHz),
2/ travail d'abord à faible distance
3/ renforcer la verification des handshake peut aider, avec <erno.h> tu peux savoir si le byte n'est pas acknowledgé et donc le renvoyer tant que cela n'est pas vrai: les transactions sont plus longues mais à l'issu tu as au moins une transaction valide,
4/ il te faut certainement jouer avec la résitance de pull-up, si tu estimes l'inductance introduite à 30pF/m (je connais pas la bonne estimation), tu introduis 0.6nF d'inductance. Si tu utilises 4.7kOhm de résistance, tu crée un filtre passe bas qui coupe à wc=1/rc=355kHz.Si tu as un scope tu peux vérifier l'effet de ce filtre sur les créneaux au niveau des sondes, le tout étant de respecter la doc constructeur
edit: j'utilise ta valeur de résistance
Dernière modification par guillaumebs (27-12-2016 18:26:05)