Leds RGB sur bus I2C : BlinkM
Transcription
Leds RGB sur bus I2C : BlinkM
Leds RGB sur bus I2C : BlinkM Extrait du PoBot http://www.pobot.org Leds RGB sur bus I2C : BlinkM - Composants - Les sorties - Les afficheurs - Date de mise en ligne : dimanche 24 janvier 2010 PoBot Copyright © PoBot Page 1/3 Leds RGB sur bus I2C : BlinkM Présentation d'un module I2C qui permet de piloter une led multicolore avec 24 bits de couleurs différentes, avec deux modes possibles, RGB (rouge / vert / bleu) ou HSV (teinte, saturation, brillance). Découvrez les relations entre couleurs RGB et HSV avec cette belle application en ligne : synthAxis [http://color.cranf.net/]. Etude du circuit Pour faire clignoter une led en utilisant le protocole I2C, on va utiliser une BlinkM, un petit circuit qui tient dans le creux de la main et qu'on a déjà utilisé pour quelques démos et autres infidélités à la robotique. Exemple de BlinkM une ICmega8, deux BlinkM, un bus I2C sur une breadboard et fiat lux ! La datasheet de cette "led intelligente" nous renseigne sur la gestion I2C du circuit : mode : esclave ('slave') adresse par défaut : 0x09 mais compatible avec le broadcast (0x00) compatible avec les adapteurs USB-I2C (tant mieux) Datasheet BlinkM Pour le tester, le plus simple est d'utiliser une carte de prototypage rapide comme l'Arduino (ça tombe bien, on en a une) et d'utiliser une librairie qui va se charger de la communication, avec le code fourni par ThingM : Wire.begin(); // set up I2C Wire.beginTransmission(0x09);// join I2C, talk to BlinkM 0x09 Wire.send('c'); // 'c' == fade to color Wire.send(0xff); // value for red channel Wire.send(0xc4); // value for blue channel Wire.send(0x30); // value for green channel Wire.endTransmission(); // leave I2C bus La BlinkM est pilotée par des commandes qui prennent la forme d'un octet (caractère ASCII pour se souvenir rapidement de leur signification) suivie de zéro à quelques octets comme arguments. Par exemple pour lire la couleur actuellement prise par la led, il faut utiliser la commande 'g' (comme "get", reçois) ou 0x67 en hexadecimal, sans aucun argument. On recevra alors 3 octets correspondant à chacune des composantes Copyright © PoBot Page 2/3 Leds RGB sur bus I2C : BlinkM primaires soustractives de la lumière, Rouge, Vert, Bleu. Le code C écrit sur l'Arduino ne permettant pas de savoir ce qui se passe réellement sur le bus I2C, on va espionner tout ça avec l'analyseur logique Saleae qui ne nous quitte plus. Vous pouvez faire le même test sans matériel, en téléchargeant [http://www.saleae.com/logic/try/] le logiciel Saleae Logic et en chargeant la sauvegarde de la session de notre test : Session Logic - BlinkM Dialogue I2C entre une Arduino et une BlinkM qui répond à la commande 'g' en envoyant trois octets. Voici ce qu'on peut voir : une écriture de la commande 'g' suivie d'une lecture (réception des 3 octets). En fait c'est très important pour la suite. Même pour "lire" la couleur de la led, il faut passer par une écriture. Première phase : écriture de la commande Seconde phase : lecture des 3 octets Copyright © PoBot Page 3/3