Premier essai du FEZ-IO40

imageLa 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.

image

image

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:

IO40WithLED

IO40WithLED2

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é:

Drawing1

	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é!