Premier essai du FEZ-IO40
La FEZ-IO40 est une carte de GHI qui permet de rajouter 40 prises numériques d’entrée/sortie à votre micro-contrôleur organisées en 5 ports de 8 prises chacun.
La page du produit chez GHI.
Le PDF de la carte.
La classe qui permet de la manipuler.
Le fonctionnement du IO40 est relativement simple: la carte repose sur une puce contrôleur I2C qui s’occupera de “dispatcher” les signaux que vous aurez configuré à l’aide de la classe fournit.
Câblage
Je ne vais pas m’étaler sur le fonctionnement du port I2C, mais sachez que c’est un bus de communication en série très répandu (et pas qu’en robotique) et qu’il nécessite 4 fils:
- GND : la masse
- +5V
- SCL (Serial Clock) : l’horloge, pour rythmer l’envoie des données
- SDA (Serial Data) : pour le transport des données
On utilisera les deux port JST en bas à gauche pour connecter la carte au bus I2C du micro-contrôleur (I2C IN : SDA & SCL). Les deux autres ports JST servent à connecter en cascade une autre carte étant basé sur le bus.
| SDA se branche sur I2C_DAT SCL se branche sur I2C_CLK |
Ceux qui on l’œil remarqueront qu’on a branché 5 fils en tout, l’explication est toute simple: chaque prise JST comprend son propre fil relié à la masse (en noir) et à la tension haute (en rouge).
L’API de la carte
Dans la classe IO40 on retrouve les méthodes suivantes:
- MakePinOutput(byte port, byte pin): Configure une prise en sortie.
- MakePinInput(byte port, byte pin): Configure une prise en entrée.
- SetPin(byte port, byte pin): Met une prise (configurée en sortie donc) à 1.
- ClearPin(byte port, byte pin): Met une prise (configurée en sortie) à 0.
- ReadPin(byte port, byte pin): Lit l’état d’une prise (configurée en entrée).
- SetPortInputs(byte port, byte mask): configure toutes les prises d’un port en entrée (bit correspondant à 1) ou sortie (bit correspondant à 0).
- GetPortInputState : Lit la configuration entrée/sortie d’un port (la réciproque de SetPortInputs)
- ReadPort : Lit les valeurs de chaque prise configurée en entrée d’un port
- WritePort : Ecrit les valeurs pour chaque prise configurée en sortie d’un port
Un petit test
J’ai effectué un montage simple:
Une LED est branché sur la prise qui sera pilotée par le programme, une résistance permet d’abaisser la tension pour que la LED puisse fonctionner.
Le schéma du circuit et le code associé:
private static void TestIO40() { var io = new IO40(0); // Make the pin 0 of port 0 an output io.MakePinOutput(0, 0); // Blink the LED 10 times for (int i = 0; i < 10; i++) { io.SetPin(0, 0); Thread.Sleep(250); io.ClearPin(0, 0); Thread.Sleep(250); } }
La prise 0 du port 0 fait office de tension haute et l’autre prise n’est autre que la masse et le tour est joué!
Francais
