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