Dans cet article, nous verrons ce qu'est une interface I2C (ay-tu-si, i-two-tse), quelles sont ses fonctionnalités et comment l'utiliser.
Il est nécessaire
- -Arduino;
- - potentiomètre numérique AD5171;
- - Diode électro-luminescente;
- - résistance 220 ohms;
- - 2 résistances pour 4,7 kOhm;
- - les fils de connexion.
Instructions
Étape 1
Le protocole de communication série IIC (également appelé I2C - Inter-Integrated Circuits) utilise deux lignes de communication bidirectionnelles pour transférer des données, appelées bus SDA (Serial Data) et SCL (Serial Clock). Il y a aussi deux lignes électriques. Les bus SDA et SCL sont tirés vers le bus d'alimentation via des résistances.
Il y a au moins un maître dans le réseau qui initie la transmission de données et génère des signaux de synchronisation. Le réseau dispose également d'esclaves qui transmettent des données à la demande du maître. Chaque appareil esclave a une adresse unique à laquelle le maître l'adresse. L'adresse de l'appareil est indiquée dans le passeport (fiche technique). Jusqu'à 127 appareils peuvent être connectés à un bus I2C, dont plusieurs maîtres. Les appareils peuvent être connectés au bus pendant le fonctionnement, c'est-à-dire il prend en charge le branchement à chaud.
Étape 2
Arduino utilise deux ports pour travailler sur l'interface I2C. Par exemple, dans Arduino UNO et Arduino Nano, le port analogique A4 correspond à SDA, le port analogique A5 correspond à SCL.
Pour les autres modèles de carte:
Arduino Pro et Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Étape 3
Pour faciliter l'échange de données avec les appareils via le bus I2C, une bibliothèque standard "Wire" a été écrite pour l'Arduino. Il a les fonctions suivantes:
begin (adresse) - initialisation de la bibliothèque et connexion au bus I2C; si aucune adresse n'est spécifiée, alors l'appareil connecté est considéré comme le maître; L'adressage 7 bits est utilisé;
requestFrom () - utilisé par le maître pour demander un certain nombre d'octets à l'esclave;
beginTransmission (adresse) - le début du transfert de données vers l'appareil esclave à une adresse spécifique;
endTransmission () - fin de la transmission de données à l'esclave;
write() - écriture de données depuis l'esclave en réponse à une requête;
available () - renvoie le nombre d'octets d'informations disponibles pour la réception de l'esclave;
read () - lit un octet transféré de l'esclave au maître ou du maître à l'esclave;
onReceive () - indique la fonction à appeler lorsque l'esclave reçoit une transmission du maître;
onRequest () - Indique une fonction à appeler lorsque le maître reçoit une transmission de l'esclave.
Étape 4
Voyons comment travailler avec le bus I2C en utilisant Arduino.
Tout d'abord, nous allons assembler le circuit, comme indiqué sur la figure. Nous contrôlerons la luminosité de la LED à l'aide du potentiomètre numérique à 64 positions AD5171, qui se connecte au bus I2C. L'adresse à laquelle on fera référence au potentiomètre est 0x2c (44 en décimal).
Étape 5
Ouvrons maintenant une esquisse à partir des exemples de la bibliothèque "Wire":
Fichier -> Échantillons -> Fil -> digital_potentiometer. Chargeons-le dans la mémoire Arduino. Allumons-le.
Vous voyez, la luminosité de la LED augmente cycliquement, puis s'éteint soudainement. Dans ce cas, nous contrôlons le potentiomètre à l'aide de l'Arduino via le bus I2C.