Commercial

Communication I2C

Introduction

I2C (ou IIC) contraction de Inter-IC Communication, est un des plus populaires protocoles de communication implémenté sur les microcontrôleurs. Il est couramment utilisé pour interagir avec des capteurs mais se retrouve également dans beaucoup d’autres applications.

I2C est un protocole de communication synchrone, ce qui signifie qu’il existe une ligne horloge dédiée (voir les protocoles de communication synchrones/asynchrones).

Communication I2C

Bien que l’I2C n’utilise que deux lignes de communication (horloge et données), il peut prendre en charge plusieurs périphériques sur le même bus I2C. Cela est réalisé en utilisant un schéma d’adressage où chaque périphérique sur le bus a une adresse unique. La communication commence par l’envoi de l’adresse du périphérique avec lequel la communication est prévue, et le périphérique adressé doit ensuite accuser réception en indiquant qu’il est présent et prêt à communiquer.

Comme il n’y a qu’une seule ligne de données (SDA – données sérielles), utilisée à la fois pour l’envoi et la réception de données (mode half-duplex), un mécanisme est nécessaire pour permettre au maître et au périphérique esclave de contrôler la ligne de données sans conflits. Il est essentiel d’éviter les contentions sur le bus, où un périphérique tente d’écrire un niveau haut sur le bus tandis qu’un autre périphérique tente d’écrire un niveau bas sur le bus, ce qui créerait un court-circuit.

Pour y parvenir, on utilise un mécanisme open-drain ; où chaque périphérique ne peut mettre le bus qu’à un niveau « bas » ou le « relâcher », et des résistances de tirage sont utilisées pour ramener la ligne à un niveau haut lorsqu’elle est relâchée (si vous n’êtes pas familier avec les termes open-drain ou résistance de tirage, veuillez consulter notre article sur le sujet). La ligne d’horloge (SCL – Horloge sérielle) utilise également ce mécanisme, et quelques techniques innovantes sont utilisées pour ajouter des fonctionnalités utiles au protocole I2C – nous en parlerons plus en détail sous peu.

Le diagramme ci-dessous illustre les caractéristiques typiques d’une séquence de communication I2C.

La communication débute avec le bus I2C en état de repos – les lignes d’horloge et de données ne sont pas activées et sont donc tirées vers le haut par les résistances de tirage. Ensuite, la communication est initiée par le maître (le périphérique initiant la communication) tirant d’abord la ligne SDA puis la ligne SCL vers le bas – cela est défini comme une condition de départ (Start).

Ensuite, le maître transmet l’adresse sur 7 bits du périphérique avec lequel il souhaite communiquer, suivie d’un bit « lire ou écrire » qui indique si le maître souhaite écrire (0) ou lire (1) à partir du périphérique. La ligne de données est considérée comme valide (lue par les esclaves) sur les fronts montants de la ligne d’horloge, et les données sont transmises en commençant par le bit le plus significatif (MSB).

Après que l’adresse a été transmise, et en supposant que l’esclave adressé est présent sur le bus I2C, le maître relâchera la ligne de données (open drain), et l’esclave maintiendra la ligne de données basse pendant un cycle d’horloge pour accuser réception (ack) qu’il est présent et prêt à communiquer. Si l’esclave n’est pas présent sur le bus, alors la résistance de tirage tirera la ligne de données vers le haut, et le maître saura que l’esclave n’est pas disponible.

À ce stade, les données peuvent être transmises entre le maître et l’esclave. Si des données sont lues, alors l’esclave transmettra les données (pendant que le maître continue de piloter la ligne d’horloge), ou si des données sont écrites, alors le maître transmettra les données. Après chaque octet de données, il y a un seul bit d’acquittement (Ack), pendant lequel le récepteur (qui peut être le maître ou l’esclave, selon le côté qui a transmis les données) doit maintenir la ligne de données basse pour indiquer qu’il a reçu la communication (et qu’il est prêt à passer à la communication suivante si nécessaire).

Etirement d'horloge

Les périphériques esclaves sur le bus I2C ont la capacité de retarder leurs réponses (s’ils sont toujours occupés et ne sont pas encore prêts à répondre) en maintenant la ligne d’horloge (SCL) à un niveau bas, une fonctionnalité connue sous le nom d’« étirement d’horloge » (clock stretching) ; une fois prêt à répondre, l’esclave relâche la ligne d’horloge et la transmission des données se poursuit. Ceci est similaire aux lignes de contrôle de flux dans l’UART (CTS/RTS), mais sans nécessiter de lignes de communication supplémentaires (notez que le protocole SPI n’a pas de fonction de contrôle de flux).

Un ou plusieurs octets de données peuvent être communiqués en séquence, avec un acquittement (ack) survenant après chaque octet.

Redémarrage

Parce que les périphériques esclaves peuvent avoir une multitude de valeurs disponibles à lire (telles que plusieurs valeurs de capteurs ainsi que des valeurs de réglages), l’esclave peut exiger que le maître émette d’abord une instruction indiquant ce qu’il souhaite lire avant de procéder à la lecture effective. Dans ce cas, le maître émettra d’abord une écriture avec les données indiquant ce qui doit être lu, puis le maître émettra immédiatement après une lecture. Cependant, il n’y a pas d’arrêt émis entre les deux. À la place, le maître utilise une condition de redémarrage (repeated start), suivie de l’adresse de 7 bits et du bit de lecture/écriture d’1 bit, maintenant réglé sur lecture, pour passer de l’écriture à la lecture. Pour émettre un redémarrage, le maître place d’abord la ligne de données à un niveau haut, puis la ligne d’horloge, et ensuite le maître abaisse la ligne de données suivie de la ligne d’horloge.

Débit et distances

La communication sur le bus I2C se déroule généralement à des vitesses de 100 kHz ou 400 kHz. Ces vitesses relativement basses conviennent bien pour de petites quantités de transmission de données, mais le SPI (utilisant des horloges dans la plage des mégahertz, et éventuellement en mode Dual ou Quad) est généralement préféré pour des applications à haut débit où de grandes quantités de données doivent être transmises. L’I2C est plutôt utilisé pour des communications sur des distances relativement courtes, cependant, des mécanismes existent permettant la transmission d’I2C sur des paires différentielles pour communiquer sur des distances plus longues (veuillez consulter notre article sur la conception à haut débit pour plus d’informations sur les paires différentielles).

Proteus inclut un instrument analyseur de protocole I2C en mode DUAL (maître ou esclave) à placer sur les liens du schéma. Cela vous permet ensuite de saisir et d’injecter des séquences I2C dans la simulation en cours et de visualiser les paquets reçus en provenance d’autres périphériques sur le bus I2C. C’est un excellent outil pédagogique qui permet un test rapide et facile des firmwares en mode maître et en mode esclave. Vous trouverez beaucoup d’exemples de projets qui incluent des communications I2C avec des capteurs ou des projets multi-processeurs. Tous ceux-ci peuvent être simulés dans la version de démonstration.


Copyright Labcenter Electronics Ltd. 2024

Traduction française

Copyright Multipower France 2024

Exploitez la Visualisation 3D dans Proteus : Du Concept à la Réalité

Teardrops dans Proteus : Une Solution Essentielle pour la Durabilité des PCB

Sur cette page, nous avons développé un certain nombre de programmes gratuits App Developer qui sont des dispositifs/systèmes utiles en eux-mêmes. Il existe de nombreuses utilisations de App Developer mais pour commencer, nous nous sommes concentrés sur le test : nous voulons vous fournir une gamme d’applications vraiment excellentes pour vous permettre de créer un superbe environnement de test basé sur PC pour le développement de produits électroniques et pour le test en usine et à la maison.Vous n’avez pas besoin d’une copie d’App Developer pour profiter de ces applications. Les interfaces de programmation d’applications et la version exécutable des programmes vous permettent de les exécuter à partir de n’importe quel PC ou tablette Windows en utilisant le matériel peu coûteux fourni. Bien entendu, nous serions ravis que vous achetiez une copie d’App Developer et que vous personnalisiez les applications pour votre propre usage.

Chacun de ces projets a une section dans notre Forum où vous pouvez poster des questions et des améliorations que vous avez apportées.

 

Utilisation générale : carte E/S – Arduino, USB

Matériel : Arduino

Connexion : USB

Description : un projet d’E/S à usage général avec 5 entrées analogiques, 5 entrées numériques, 5 sorties numériques, et une commande PWM à un seul canal.

Enregistreur de température à trois canaux – Arduino, USB

Matériel : Arduino Uno

Connexion : USB

Description : un enregistreur de température à trois canaux utilisant de simples thermistances sur un Arduino Uno avec graphique intégré et enregistrement dans un fichier CSV externe.

Moniteur de puissance – Arduino, USB

Matériel : Arduino

Connexion : USB

Description : Il s’agit d’un moniteur d’alimentation d’usage général pour un Arduino Uno qui utilise un capteur de courant SparkFun breakout ACS723 (SEN-13679).

Utilisation générale : Carte E/S  – PIC, USB

Matériel : PIC basé sur le 18F4455 – compatible avec Matrix ECIO

Connexion : USB

Description : un projet d’E/S à usage général avec 5 entrées analogiques, 5 entrées numériques, 5 sorties numériques, et un contrôle PWM à un seul canal.

Utilisation générale : Carte E/S – ESP32, USB

Matériel : Carte ESP 32 – xxxxxx

Connexion : USB

Description : un projet d’E/S à usage général avec 5 entrées analogiques, 5 entrées numériques, 5 sorties numériques, et un contrôle PWM à un seul canal.

Testeur de composants – Arduino, USB

Matériel : Arduino Uno – Nécessite une planche à pain et plusieurs résistances

Connexion : USB

Description : ce projet fantastique utilise un Arduino Uno avec 5 résistances externes pour vous fournir une installation de test pour les résistances, les condensateurs, les inductances, les transistors et les diodes. Le programme vous indiquera la valeur, si le composant fonctionne ou non, et vous indiquera même les connexions du transistor ou de la diode.

 

Flowcode App Developer permet aux utilisateurs de créer rapidement et facilement des programmes pour contrôler et surveiller des appareils externes au PC.

 

App developer fonctionne sur un PC Windows, à la maison, au bureau ou à l’usine et permet de contrôler des applications, où que vous soyez : sur votre bureau, dans votre immeuble, dans votre ville ou dans un autre pays.

Les composants de communication intégrés à l’app Developer vous permettent de créer des systèmes distribués de contrôle, de collecte de données et d’analyse. L’environnement utilise la même interface de programmation que Flowcode Embedded, ce qui signifie que les utilisateurs de Flowcode peuvent désormais concevoir facilement des applications Windows pour votre propre usage ou pour les distribuer gratuitement à d’autres.

Conception

Concevez votre système électronique à l’écran :

 

  • Choisissez, parmi quatre types d’appareils, le ou les dispositifs d’entrée-sortie qui présentent les caractéristiques dont votre application a besoin.
  • Ajoutez d’autres instruments et systèmes dotés d’interfaces de programmation d’applications avec lesquels vous pouvez travailler, comme des générateurs de signaux, des chambres environnementales, etc.
    Faites glisser les composants matériels locaux (USB/Bluetooth) et distants (Wi-fi/LAN/Internet) sur le panneau 2D.
  • Ajoutez des composants de la bibliothèque pour créer un système électronique distribué.
  • Concevez un programme à l’aide de diagrammes de flux, de blocs, de pseudo-codes ou de machines d’état.
  • Choisissez l’une de nos propres interfaces matérielles à bas prix ou utilisez un matériel tiers.
La dernière version de Flowcode, intègre de nouvelles commandes à l’écran pour les applications PC, de nouveaux composants – y compris des composants de communication Internet très faciles à utiliser – et de nouvelles cibles d’interface de programmation d’applications pour les cartes matérielles à faible coût, notamment Arduino, ESP 32 et autres – et vous pouvez créer votre propre API en utilisant Flowcode Embedded.

Test

Testez votre conception pour vous assurer qu’elle fonctionne comme vous le souhaitez :

 

  • Reliez votre conception à des interfaces matérielles locales ou distantes peu coûteuses.
  • Jouez le programme ou suivez-le pas à pas, une commande à la fois, pour vous assurer qu’il fonctionne.
  • Utilisez les instruments à l’écran pour voir les variables de votre système.
  • Utilisez l’enregistreur de données et la console pour surveiller votre programme et voir comment il fonctionne.
  • Utilisez le traceur de graphiques pour documenter les performances de votre système en temps réel.

Dans cette nouvelle version d’App Developer, vous pouvez tester votre système local, distant ou distribué à l’aide de grands outils d’interface homme-machine, notamment des cadrans, des interrupteurs et des graphiques, pour prouver que votre système fonctionne comme il le devrait

Déploiement

Reproduisez votre système pour que d’autres puissent l’utiliser :

 

  • Fabriquez un ou cent mille exemplaires de vos modèles, libres de droits.
  • Utilisez le documenteur automatique pour aider les autres à comprendre votre projet.
  • Créez des interfaces homme-machine basées sur PC ou sur le Web, à utiliser avec des téléphones portables pour vérifier et modifier votre système.
  • Téléchargez à distance de nouveaux programmes sur votre appareil lorsque les besoins évoluent.

Dans la dernière version, nous avons également ajouté gratuitement le support de la puce ESP32, ce qui signifie que cette unité MCU à faible consommation incroyablement puissante avec Wi-Fi intégré et Bluetooth bi-mode peut être utilisée avec Flowcode.

Possiblités

Avec Flowcode App Developer, vous pouvez créer des systèmes de contrôle et de collecte de données distribués et riches en fonctionnalités sur votre bureau, dans votre bâtiment ou dans le monde entier. Vous pouvez combiner des produits matériels contrôlables par API disponibles sur le marché avec des interfaces à bas prix comme Raspberry Pi et ESP32.

Matériel
Le développeur d’applications s’interface avec plusieurs systèmes matériels à l’aide d’API. Il prend en charge les plates-formes matérielles USB, Bluetooth et Web les plus répandues, telles que les API MIAC, Modbus, Arduino, Raspberry Pi, ESP et les capteurs EtherCAT.

 

Exemples d’applications
App Developer est un langage de programmation qui peut être utilisé pour de nombreuses applications. Il est particulièrement utile pour créer des systèmes de contrôle, de collecte et d’analyse de données : locaux et distants.

Périphériques API
Matrix propose une gamme de dispositifs API à fonctions définies, notamment la gamme MIAC, Formula AllCode et la cellule de production de bras robotisés AllCode.En outre, vous trouverez ci-dessous des exemples de dispositifs API à fonctions flexibles, que vous pouvez utiliser pour fabriquer votre propre dispositif à fonctions flexibles local et distant à utiliser avec Flowcode App Developer.

Retour en haut