Utilisation À L'aide Des Fonctions De L'api - Yoctopuce Yocto-I2C Mode D'emploi

Table des Matières

Publicité

5. Le port I2C
5.3. Utilisation à l'aide des fonctions de l'API
L'API Yoctopuce offre plusieurs niveaux d'abstraction pour piloter un port I2C. Le plus simple est
celui implémenté par les fonctions et i2cSendBin et i2cSendAndReceiveBin.
i2cSendBin
La fonction i2cSendBin sert à envoyer des requêtes qui n'exigent pas de réponse particulière. Elle
prend en paramètres l'adresse I2C de la cible, sur 7 bits alignés à droite, et un tableau de bytes.
Voici un exemple la séquence qui affiche un rond et une croix sur un écran "8x16 LED Matrix
FeatherWing Display Kit"
l'adresse i2C par défaut est 0x70. Ce contrôleur a la particularité d'avoir les adresses de registres
codées sur 4 bits. Les valeurs des registres sont elles aussi codées sur quatre bits, ainsi la plupart
des opérations tiennent sur 1 byte.
1. Le contrôleur doit être initialisé à l'aide d'une séquence de 4 bytes, qui affecte respectivement
aux registres 0x2,0xA,0xE,0x8 les valeurs 0x1, 0x0, 0xF, 0x0.
2. Les données d'affichage sont envoyées, juste après avoir affecté le pointeur de données
raster (registre 0) à la valeur 0. Attention, sur le module d'Adafruit les lignes sont entrelacées.
3. Enfin l'affichage est allumé en affectant le registre 0x8 à la valeur 1.
Voici le code équivalent en C#:
// display init
i2cPort.i2cSendBin(0x70,
i2cPort.i2cSendBin(0x70,
i2cPort.i2cSendBin(0x70,
i2cPort.i2cSendBin(0x70,
// send display data
byte[]
i2Cdata2
= {
i2cPort.i2cSendBin(0x70,
// display ON
i2cPort.i2cSendBin(0x70,
La fonction i2cSendBin gère automatiquement le bit de lecture/ecriture, c'est pourquoi le premier
paramètre n'a pas besoin d'être décalé d'un bit vers la gauche. La fonction i2cSendBin gère
automatiquement les conditions START, STOP, ACK etc.. Si une erreur de transmission est
détectée, une exception sera lancée.
i2cSendAndReceiveBin
La fonction i2cSendAndReceiveBin sert à envoyer une requête et à lire la réponse. Voici un exemple
basé un capteur SENSIRION SHT25 dont l'adresse I2c est 0x40. Pour lire la température de ce
capteur il faut:
1. Indiquer que l'on souhaite lire le registre 0x82
2. Lire un entier sur 2 bytes
3. Convertir cet entier en °C grace à une formule que l'on trouve dans la documentation
technique du SHT25
Voici à quoi ressemble le code C# qui utilise i2cSendAndReceiveBin pour lire la température:
byte[]
i2Cdata
= {0xE3};
byte[]
received
=
int
tempReg
= ((int)received[0] << 8) + received[1];
double
temperature
Tout comme la fonction i2cSendBin, la fonction i2cSendAndReceiveBin gère automatiquement le bit
de lecture/écriture, l'adresse I2C n'a donc pas besoin d'être décalée d'un bit vers la gauche. La
1
www.adafruit.com/product/3151
24
1
d'Adafruit. Cet écran est basé sur un driver de LED HT16K33 dont
new byte[]{0x21});
new byte[]{0xA0});
new byte[]{0xEF});
new byte[]{0x80});
0x00,
// display data Address pointer
0x3c,0x81,0x42,0x42,0x81,0x24,0x81,0x18,
0x81,0x18,0x81,0x24,0x42,0x42,0x3c,0x81
i2Cdata2);
new byte[]{0x81});
i2cPort.i2cSendAndReceiveBin(0x40, i2Cdata,
=
-46.85
+
175.72
*
// clock enable
// ROW/INT is driving a led ouput
// dimming 16/16
// blinking off , display off
// blinking off , display on
(double)tempReg
/ 65536.0;
};
2);
www.yoctopuce.com

Publicité

Table des Matières
loading

Table des Matières