6 + Les interfaces sriessynchrones et asynchrones, 12C, SP bus «uF fi»
Dans le premier cas, vateur est la variable de type byte qui est transmise. Dans le
second cas, chaine de caractéres est un pointeur de type byte vers une chaine
de caractéres & transmettre. Dans le toisiéme cas enfin, donnée est un pointeur de
type byte vers un tableau tandis que également de type byte, indique le
nombre d’éléments de ce tableau 3 transmettre
requestFrom)
Cexte fonction est en quelque sorte le complément de la précédente. Elle permet au
iaitre de demander des données i un escave et suis sous la forme :
adresse est évidemment ve auquel sont demandées les données
tandis que norbre indique le nombre octets demandés. Les octets qui seront
cnvoyés par lesclave suite & cette demande pourront écre lus au moyen des fonc-
tions avai labie et read présentées ci-dessous.
lisation n'est pas obligat
ja lecture au moyen d'une fonction read,
nombre = Wire.available() 7
nonbre est une variable, au moins de type byte, contenant le nombre d’octets
disponibles.
read(, anciennement receive)
Sur un esclave, cette fonction permet de lire un octet transmis par le mare tandis
4que, sur un maftre, elle permet de lire un octet transmis pas un esclave suite &
exécution d’une fonction request Fron, Sa syntaxe est la suivante
donnée = Wire.read()
cit donnée est une variable au moins de type byte qui contient le caractére hu sur
ique cette fonction met fin & une séquence de transmission
avec la fonction begintransnission. Elle renvoie en retour,
donnée de type byte dont le contenu peut évoluer de 0-4 4 afin d'indiquer
de la transmission de la fagon suivante :
~ O signifie que léchange sest bien déroulé ;
lique que les données a transmettre étaient trop nombreuses pour tenir dans
Tholddeahs
6.3 Le bus 2c
re & Tenvoi de
~ 2 indique qu’un NACK (absence d'acquittement) a été reeu
adres
= 3 indique qu'un NACK (absence dacquittement) a été regu suite aenvoi d'une
donnée ;
~ 4 indique une erreur dun autre type.
La syntaxe habieuelle de cette fonction est la suivante :
code = Wize.endoransnission() ;
dessus.
yus la forme:
cit code est une variable de type byte qui contient l'un des résul
Cette fonction peut également s utiliser avec un paramétre optionn
code = Wire-endtransmission(stop) +
Le paramétre stop, qui est nécessairement de type boolean, peut alors étre égal
1 générer une condition darét surla liaison 12C ou 8 zéro pour générer une
ion de dépare répété
ire du bus 12C dans les deux cas, ce qui est généralement son
role dans la majorité des applications mais, dans le premier exemple nous ne ferons
quenvoyer des données & un esclave alors que, dans le deuxitme exemy
des données de Vesclave.
outefois
TC avee
is longue et la plus dé
afin de prendre connaissance
ne reste plus qu’a enchainer les fonctions
le données conrespondantes. En voici un premier exemple avee un
métre numérique
Le schéma de notre montage est présenté figure 6.10 et met en euvre un pot
re numérique commandé par un bus I2C + en occurrence un ADS
log Devices dont vous trouver? la fiche technique dans les compléments en
ligne.
Le dialogue avec un tel potentiométre est
simple puisque,
fiche technique, il est & Padresse fixe 0x2C (soit 44 en décim:
son entrée ADO a la masse, et quil ne comporte que deux registres.Dans e premier on doit écrire la commande dési
aici 400 puisque
Je mode OTP de ce poten-
Figure 6.10 Commande d'un potentiométre numérique 8 interface I2C
LUsting 6.2 - Exemple de gestion d'un potentlamétre numérique & interface 2C.
#include
void setup}
4
Wire.begin(); // tnitialisation 12c, Arduino en maitre
>
byte position = 0;
void loop()
‘
Wire.begintransmission(0x2c); // L’ADS171 est a l’adresse 0x2
Wire wei 71 Rayos de 1! instruction
Wire writ 1/ Bnvoi de 1a position
71 Pin de L'échange
63 Le bu:
positiont+;
Le(poaition == 64) // Si le maximum est atteint
‘
position = 0; // Retour au minimum
>
delay (50
‘qui consiste donc & écrre dans le cir
position du pot
uit Ia commande (00 dans ce cas) sue
jométre, contenue dans la variable position, se déroule ens
Vautre geice & wixe.write, Le tout est termin€ par une condition dart gén
par Wire endtransnission.
Cet exemple nfayant fait
tenant une deuxitme apy
dans un tel
ic 2C, nous vous proposons m
dans laquelle nous allons écrite mais aussi
-ompléments en ligne
1 présente un schéma de mise en ceuvre type, que vous pourrez
ler sur un shield prototype, encore que de nombreux mé
uipés du DS 1307 et de sa batterie de sauvegarde soient disponibles
ate ICT vee}
s7eawe 2), n{Z Arduine
3 vat oa} bs
Batt Heo soa Me
3
Dsr807
Figure 6.11 - Utilisation d'une horloge temps rée DS 1307 a interface 2c.