Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Cartes à micro-contrôleurs > Solution embarquée .NET > Bus I2C avec .NET Micro Framework

Bus I2C avec .NET Micro Framework

jeudi 21 janvier 2010, par Julien H.

Nous utilisons beaucoup de périphériques en I2C pour la robotique :
 carte de contrôle de consignes moteurs (servo, pas à pas)
 capteurs complexes (ultrasons, caméra)

Il était donc logique de continuer nos expérimentations du .NET Micro Framework et de notre carte Tahoe II de Device Solutions avec le pilotage de puces I2C.

Pour faciliter les expérimentations, j’ai choisi d’utiliser une led RGB (multicolore) programmable, la désormais célèbre BlinkM. Elle a déjà utilisée plusieurs fois avec des microcontrôleurs, et son protocole est très simple (’c’ pour couleur puis 3 octets pour chacune des 3 couleurs primaires).



La classe principale

En C#, on utilise la notion orientée objet de "classe" pour regrouper des fonctionnalités au sein d’une même entité. Il y a donc dans le framework MF une classe qui permet de gérer tous les aspects du protocole I2C : I2C Device qui propose :
 une configuration : adresse et vitesse
 une suite d’octets à envoyer : buffer
 des transmissions : écriture et lecture

I2CDevice.I2CTransmission, I2CReadTransmission, I2CWriteTransmission, Execute, Dispose, ... sont les mots-clés qu’on va retrouver tout au long de nos ateliers.

Premier essai

using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.Threading;

/**
 * Test de la connexion I2C avec le Micro Framework .NET
 */

namespace MFTestBlinkM
{
    public class Program
    {
        public static void Main()
        {
            I2CDevice blinkm = new I2CDevice(new I2CDevice.Configuration(0x09, 100));

            byte[] buffer = { (byte)'c', 0, 170, 60};
            
            I2CDevice.I2CTransaction[] transactions = new I2CDevice.I2CTransaction[] { blinkm.CreateWriteTransaction(buffer) };

            while (true)
            {
                buffer[1] = 30;
                buffer[2] = 30;
                buffer[3] = 30;

                blinkm.Execute(transactions, 100);
                Thread.Sleep(1500);

                buffer[1] = 30;
                buffer[2] = 230;
                buffer[3] = 30;

                blinkm.Execute(transactions, 100);
                Thread.Sleep(1500);

                buffer[1] = 230;
                buffer[2] = 230;
                buffer[3] = 230;

                blinkm.Execute(transactions, 100);
                Thread.Sleep(1500);          
            
            }

            // blinkm.Dispose();
        }
    }
}

Ce code va tourner en boucle et changer 3 fois la couleur de la led RGB.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.