SlightBox V2 – La version “mini”

9 février 2014

Après un premier prototype d’une solution « Ambilight » maison développée avec des modules .NET Gadgeteer, la “SlightBox V2” est une version miniaturisée et beaucoup moins chère.

Rappel des épisodes précédents :

Pour rappel (voir l’article sur le fonctionnement de la V1), la SlightBox V1 est une box développée avec les modules .NET Gadgeteer uniquement dans le but servir d’interface USB/SPI pour le pilotage des bandes de leds LDP8806. Pour rendre la solution plus compacte et moins onéreuse,  nous allons utiliser une puce MCP2210 de Microchip qui n’est ni plus ni moins qu’une interface USB/SPI en une seule puce  !!

Plusieurs sociétés proposent des modules prêt-à-l’emploi équipés de cette puce. Pour ma part, j’ai sélectionné le produit de Embedded Adventures, le “MCP2210 USB2SPI Module” vendu 15.30$ (hors frais de port) et livré avec une API .NET.

MOD-1013_1_600

Il ne vous faudra plus qu’une petite boite, un connecteur DC pour l’alimentation et un connecteur JST pour y connecter la bande de LED LDP8806.

Pour rappel, nous utiliserons la sortie MOSI pour les “Datas” (équivalent de la PIN 7 sur une socket “S” Gadgeteer), le “SCK” pour l’horloge (équivalent de la PIN 9) et le “GND” pour le ground.

WP_003714WP_003732

WP_003746

A la différence de la SlightBox V1 j’ai supprimé l’interrupteur et la LED témoin de l’alimentation.

WP_003740WP_003741

La SlightBox V1 (à gauche) vs la SlightBox V2 (à droite)

Côté software, la logique reste exactement la même ! La seule différence est dans la façon dont le logiciel va envoyer les données à la bande de LED :

  • Avec la SlightBox V1, c’est la box “Gagdeteer” qui fait office d’interface. Nous utilisons le module “Serial USB” qui est reconnu comme un port COM virtuel au niveau du Windows. Le programme Windows “Slight” envoie donc les données sur le port COM virtuel de la SlightBox qui seront ensuite retranscrits par le programme Gadgeteer sur la sortie “SPI” via le module “Extender”.
  • Avec la SlightBox V2, c’est la puce MCP2210 qui fait office d’interface. Il faut alors utiliser l’API mis à disposition par le fabricant pour pouvoir envoyer nos données !

Pour simplifier le développement côté Windows, nous utiliserons une simple interface pour décrire une « SlightBox » :

1
2
3
4
5
6
7
8
namespace SLight.Devices
{
    public interface ISlightBox : IDisposable
    {
        void Initialize();
        void WriteDatas(byte[] datas);
    }
}

L’implémentation de la SlightBox V2 utilisera alors l’API de la puce MCP2210 pour envoyer les données sur le port SPI à notre bande de leds via la  fonction « TxferSpiData »  :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
namespace SLight.Devices
{
    public class SlightBoxMCP2210 : ISlightBox
    {
        private const int LATCH_BITS = 4;
        private const int SPI_BIT_RATE = 16000;
 
        private const uint MCP2210_VID = 0x04D8;   // VID for Microchip Technology Inc.
        private const uint MCP2210_PID = 0x00DE;   // PID for MCP2210
 
        private bool isConnected = false;
        private DevIO usbDevice = null;
 
        public void Initialize()
        {
            this.usbDevice = new DevIO(MCP2210_VID, MCP2210_PID);
            this.isConnected = this.usbDevice.Settings.GetConnectionStatus();
            if (this.isConnected)
            {
                this.usbDevice.Settings.SetSpiBitRate(DllConstants.CURRENT_SETTINGS_ONLY, SPI_BIT_RATE);
                Console.WriteLine("Connected and ready to use !");
            }
            else
            {
                MessageBox.Show("SlightBox MCP2210 not connected !");
                this.Initialize();
            }
        }
 
        public void WriteDatas(byte[] datas)
        {
            byte[] dataRead = new byte[datas.Length + LATCH_BITS];
            byte[] datasToSend = new byte[datas.Length + LATCH_BITS];
            Array.Copy(datas, 0, datasToSend, LATCH_BITS, datas.Length);
            this.usbDevice.Settings.SetSpiTxferSize(DllConstants.CURRENT_SETTINGS_ONLY, (ushort)datasToSend.Length);
            this.usbDevice.Functions.TxferSpiData(datasToSend, dataRead);
        }
 
        public void Dispose()
        {
        }
    }
}

Et voilà en quelques lignes et quelques soudures comment minuaturiser le concept “Slight”.  Côté performance, c’est exactement la même chose qu’avec la V1.

Et si vous ne l’avez toujours pas vu, voici le résultat :

Développé initialement pour “Slight” (ma solution “Ambilight” maison), la SlightBox et plus particulièrement la SlightBox V2 en raison de sa taille réduite, peut servir dans un tas d’application où nous avons besoin de piloter des bandes de LED.

Retrouvez plus d’informations et photos sur la page Facebook SlightBox.

4 commentaires pour “SlightBox V2 – La version “mini””

  1. #1 SlightBox V1 : un système « Ambilight » avec C# et Gadgeteer | Sebastien.warin.fr
    9 février 2014 à 16:44

    […] rendre le système moins cher, la « SlightBox v2 » est basée sur une puce MCP2210 USB/SPI dédiée et remplace ainsi les 4 modules Gadgeteer. […]

  2. #2 Regis Hanol
    9 février 2014 à 17:00

    J’en veux une ! :)

  3. #3 Herbaux Mathias
    9 février 2014 à 17:55

    Un travail d’orfèvre. Bravo Seb ;)

  4. #4 Alexis CONIA
    9 février 2014 à 18:49

    J’en veux une aussi :) !

Ajouter un commentaire