- Qu'est-ce que le protocole de communication I2C?
- Comment fonctionne I2C Communication?
- Où utiliser la communication I2C?
- I2C dans MSP430: Contrôle du potentiomètre numérique AD5171
MSP430 est une plate-forme puissante fournie par Texas Instruments pour les projets embarqués, sa nature polyvalente lui a permis de trouver des voies dans de nombreuses applications et la phase est toujours en cours. Si vous avez suivi nos tutoriels MSP430, vous auriez remarqué que nous avons déjà couvert une large gamme de tutoriels sur ce microcontrôleur à partir des bases. Depuis, nous avons couvert les bases, nous pouvons entrer dans des choses plus intéressantes comme le portail de communication.
Dans le vaste système d'applications embarquées, aucun microcontrôleur ne peut effectuer toutes les activités par lui-même. À un moment donné, il doit communiquer avec d'autres appareils pour partager des informations, il existe de nombreux types de protocoles de communication pour partager ces informations, mais les plus utilisés sont USART, IIC, SPI et CAN. Chaque protocole de communication a ses propres avantages et inconvénients. Concentrons-nous sur la partie I2C pour le moment puisque c'est ce que nous allons apprendre dans ce tutoriel.
Qu'est-ce que le protocole de communication I2C?
Le terme IIC signifie « Inter Integrated Circuits ». Il est normalement désigné comme I2C ou I au carré C ou même comme protocole d'interface à 2 fils (TWI) à certains endroits, mais cela signifie tous la même chose. I2C est un protocole de communication synchrone, ce qui signifie que les deux appareils qui partagent les informations doivent partager un signal d'horloge commun. Il n'a que deux fils pour partager les informations dont l'un est utilisé pour le signal du robinet et l'autre est utilisé pour l'envoi et la réception de données.
Comment fonctionne I2C Communication?
La communication I2C a été introduite pour la première fois par Phillips. Comme dit précédemment, il a deux fils, ces deux fils seront connectés entre deux appareils. Ici, un appareil est appelé maître et l'autre appareil est appelé esclave. La communication doit et se produira toujours entre deux un maître et un esclave. L'avantage de la communication I2C est que plus d'un esclave peut être connecté à un maître.
La communication complète s'effectue via ces deux fils à savoir, Serial Clock (SCL) et Serial Data (SDA).
Serial Clock (SCL): partage le signal d'horloge généré par le maître avec l'esclave
Serial Data (SDA): envoie les données depuis et vers le maître et l'esclave.
A tout moment, seul le maître pourra initier la communication. Puisqu'il y a plus d'un esclave dans le bus, le maître doit se référer à chaque esclave en utilisant une adresse différente. Lorsqu'il est adressé, seul l'esclave avec cette adresse particulière répondra avec les informations tandis que les autres continueront de quitter. De cette façon, nous pouvons utiliser le même bus pour communiquer avec plusieurs appareils.
Les niveaux de tension de I2C ne sont pas prédéfinis. La communication I2C est flexible, ce qui signifie que l'appareil qui est alimenté par 5v volts peut utiliser 5v pour I2C et que les appareils 3.3v peuvent utiliser 3v pour la communication I2C. Mais que se passe-t-il si deux appareils fonctionnant sur des tensions différentes doivent communiquer via I2C? A 5 V bus I2C ne peut pas être connecté avec le dispositif 3.3V. Dans ce cas, des décaleurs de tension sont utilisés pour faire correspondre les niveaux de tension entre deux bus I2C.
Il existe un ensemble de conditions qui encadrent une transaction. L'initialisation de la transmission commence par un front descendant de SDA, qui est défini comme une condition «START» dans le diagramme ci-dessous où le maître laisse SCL haut tout en réglant SDA bas.
Comme indiqué dans le diagramme ci-dessous, Le front descendant de SDA est le déclencheur matériel de la condition START. Après cela, tous les appareils du même bus passent en mode d'écoute.
De la même manière, le front montant de SDA arrête la transmission qui est montrée comme condition «STOP» dans le diagramme ci-dessus, où le maître laisse SCL haut et libère également SDA pour passer à HIGH. Le front montant du SDA arrête la transmission.
Le bit R / W indique le sens de transmission des octets suivants, s'il est HIGH signifie que l'esclave émettra et s'il est bas, le maître émettra.
Chaque bit est transmis à chaque cycle d'horloge, il faut donc 8 cycles d'horloge pour transmettre un octet. Après chaque octet envoyé ou reçu, le neuvième cycle d'horloge est maintenu pour l'ACK / NACK (acquitté / non acquitté). Ce bit ACK est généré par l'esclave ou le maître en fonction de la situation. Pour bit ACK, SDA est réglé à faible à 9 par le maître ou l' esclave ème cycle d'horloge. Donc c'est bas qu'il est considéré comme ACK sinon NACK.
Où utiliser la communication I2C?
La communication I2C est utilisée uniquement pour les communications à courte distance. Il est certainement fiable dans une certaine mesure car il a une impulsion d'horloge synchronisée pour le rendre intelligent. Ce protocole est principalement utilisé pour communiquer avec des capteurs ou d'autres appareils qui doivent envoyer des informations à un maître. C'est très pratique lorsqu'un microcontrôleur doit communiquer avec de nombreux autres modules esclaves en utilisant un minimum de fils uniquement. Si vous recherchez une communication longue portée, vous devriez essayer RS232 et si vous recherchez une communication plus fiable, vous devriez essayer le protocole SPI.
I2C dans MSP430: Contrôle du potentiomètre numérique AD5171
Energia IDE est l'un des logiciels les plus simples pour programmer notre MSP430. C'est la même chose que Arduino IDE. Pour en savoir plus sur la mise en route de MSP430 avec Energia IDE, cliquez ici.
Donc, pour utiliser I2C dans Energia IDE, nous devons simplement inclure le fichier d'en-tête wire.h. La déclaration des broches (SDA et SCL) se trouve à l'intérieur de la bibliothèque de fils, nous n'avons donc pas besoin de déclarer dans la fonction de configuration .
Des exemples d'exemples peuvent être trouvés dans le menu Exemple de l'EDI. L'un des exemples est expliqué ci-dessous:
Cet exemple montre comment contrôler un potentiomètre numérique Analog Devices AD5171 qui communique via le protocole série synchrone I2C. En utilisant la bibliothèque de fils I2C de MSP, le potentiomètre numérique passera par 64 niveaux de résistance, atténuant une LED.
Tout d'abord, nous inclurons la bibliothèque responsable de la communication i2c, c.-à-d.
#comprendre
Dans la fonction de configuration , nous allons lancer la bibliothèque de fils par la fonction .begin () .
void setup () { Wire.begin (); }
Puis initialisez une variable val pour stocker les valeurs du potentiomètre
octet val = 0;
En fonction de boucle , nous commencerons la transmission vers le dispositif esclave i2c (dans ce cas, le potentiomètre numérique IC) en spécifiant l'adresse de l'appareil qui est donnée dans la fiche technique du circuit intégré.
boucle vide () { Wire.beginTransmission (44); // transmettre au périphérique # 44 (0x2c)
Ensuite, mettez en file d'attente les octets, c'est-à-dire les données que vous souhaitez envoyer à l'IC pour transmission avec la fonction write () .
Wire.write (octet (0x00)); // envoie l'octet d'instruction Wire.write (val); // envoie l'octet de valeur du potentiomètre
Puis transmettez-les en appelant endTransmission () .
Wire.endTransmission (); // arrête de transmettre val ++; // valeur d'incrémentation if (val == 64) {// si atteint 64ème position (max) val = 0; // recommencer à partir de la valeur la plus basse } delay (500); }