Extrait de code : Arduino - activer la réception de diffusion I2C

I2C est le protocole de bus ou la technologie via laquelle un microcontrôleur peut communiquer avec de nombreux capteurs ou actionneurs. Grâce au bon logiciel, vous pouvez également vous connecter et communiquer avec différents microcontrôleurs. Il n'y a généralement qu'un seul maître par bus I2C qui peut demander des données ou envoyer des données à un esclave via l'adresse appropriée.

Dans l'un de mes projets, je voulais ou je voulais connecter plusieurs microcontrôleurs entre eux. Plusieurs technologies de bus conviennent pour cela. Mais I2C est presque le seul à être directement pris en charge par à peu près tous les microcontrôleurs modernes sans exigences matérielles supplémentaires. Le choix s'est donc rapidement porté sur I2C.

Plusieurs microcontrôleurs étaient ou sont maintenant connectés les uns aux autres au moyen d'I2C. Le maître peut facilement envoyer une commande à chaque esclave individuel. Pour ce faire, l'adresse de l'esclave et la commande souhaitée sont simplement envoyées via le bus. Tous les esclaves écoutent ce qui se passe sur le bus, mais seul l'esclave avec l'adresse correspondante réagit également à la commande envoyée. Jusqu'ici, tout va bien.

Mais que se passe-t-il si le maître veut envoyer une commande à tous les esclaves ? Par exemple pour lancer une commande de façon synchrone sur tous les esclaves ? Avec deux ou trois esclaves, chaque esclave peut être informé individuellement. La vitesse de traitement est généralement si rapide que vous ne remarquez aucun écart de temps majeur entre les exécutions sur les esclaves individuels. Cependant, si vous utilisez cette méthode avec 100 esclaves, vous constaterez rapidement que le dernier esclave notifié démarre bien plus tard que le premier esclave.

La solution à ce problème est l'adresse de diffusion I2C. Il s'agit d'une adresse à laquelle chaque esclave du bus écoute. Pour l'activer, il vous suffit de définir un bit de contrôle. C'est du moins ainsi que cela fonctionne avec les Arduinos basés sur les processeurs Atmel. 🙂

La façon dont vous pouvez définir ce bit est décrite dans l'article suivant.


Activer la diffusion I2C pour les esclaves I2C

Damit alle Teilnehmer auf dem I2C-Bus pauschal benachrichtigt werden können, gibt es die Broadcast-Adresse “0”. Die Null ist also fest definiert als die Adresse für Broadcast-Nachrichten und sollte auch von keinem anderen Slave genutzt werden.

Standardmäßig reagiert ein Mikrocontroller aber nicht auf diese Adresse. Dies muss erst aktiviert werden indem Ihr das entsprechende Kontroll-Bit setzt. Dazu müsst Ihr lediglich folgende Zeile in die “setup()” Funktion Eures Programmcodes einfügen.

TWAR = (adresse << 1) | 1; // active l'écoute des messages diffusés

Par exemple, dans une fonction d'initialisation I2C complète, cela pourrait ressembler à ceci

void init_i2c() { Wire.begin(adresse); TWAR = (adresse << 1) | 1; // active l'écoute des messages diffusés Wire.onReceive(i2c_receive_event); Serial.print(F("I2C : esclave I2C initialisé à l'adresse : ")); Serial.println(adresse); }

Informations générales sur I2C et les interruptions

Ein Ereignis auf dem I2C-Bus ruft immer einen Interrupt auf, welcher den regulären Ablauf Eures Mikrocontrollers unterbricht. Die Programmausführung hüpft also kurz aus dem Ablauf des regulären Programms in die Interrupt-Routine. Den Aufenthalt darin solltet Ihr aber so kurz wie möglich halten. Deswegen ist es “gängige Praxis” innerhalb der Interrupt-Routine eine “Flag” zu setzen. Diese “Flag” ist eigentlich nur eine Boolsche Variable, welche dort auf “true” gesetzt wird. Zurück in dem Haupt-Programmablauf Eures Mikrocontrollers könnt Ihr nun regelmäßig prüfen ob diese Variable gesetzt ist.

Si c'est le cas, vous pouvez maintenant lire les données ou les commandes reçues et réagir en conséquence.

Übrigens: Ihr solltet innerhalb der Interrupt-Routinen auch keine “Serial.print…” oder ähnliche Zeit-fressenden Befehle nutzen.


Informations Complémentaires

http://forum.arduino.cc/index.php?topic=183699.0

http://www.gammon.com.au/i2c

http://www.gammon.com.au/forum/?id=10896&reply=1#reply1


Amusez-vous avec le projet

J'espère que tout a fonctionné comme décrit. Si ce n'est pas le cas ou si vous avez des questions ou des suggestions, faites-le moi savoir dans les commentaires. Je les ajouterai à l'article si nécessaire.
Les idées de nouveaux projets sont toujours les bienvenues. 🙂

PS Beaucoup de ces projets - en particulier les projets matériels - coûtent beaucoup de temps et d'argent. Bien sûr, je le fais parce que j'aime ça, mais si vous pensez que c'est cool que je partage l'information avec vous, je serais heureux d'un petit don au fonds du café. 🙂

Achetez-moi un café sur ko-fi.com       

Kommentar hinterlassen

Votre adresse e-mail ne sera pas publiée. Erforderliche Felder sind mit * markiert


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.