Modifications

Sauter à la navigation Sauter à la recherche
Ligne 10 : Ligne 10 :  
Cependant, faire circuler autant d'information (toutes les informations) sur le bus I2C est conséquent et prendra du temps. Un comble si l'on n'a besoin que de la valeur d'une seule entrée. Imaginez si vous utilisez plusieurs de ces Arduino Mega en esclave... le tout pourrait devenir ingérable.
 
Cependant, faire circuler autant d'information (toutes les informations) sur le bus I2C est conséquent et prendra du temps. Un comble si l'on n'a besoin que de la valeur d'une seule entrée. Imaginez si vous utilisez plusieurs de ces Arduino Mega en esclave... le tout pourrait devenir ingérable.
   −
Complexifions encore un peu notre jouet I2C en permettant de configurer des sorties PWM et de lire des entrées analogies.}}
+
Complexifions encore un peu notre jouet I2C en permettant de configurer des sorties PWM et de lire des entrées analogiques.}}
 +
 
 +
Il n'est pas difficile de se rendre compte qu'il nous faut quelque-chose pour simplifier nos traitements.
    
C'est là qu'intervient le "'''concept du registre'''".
 
C'est là qu'intervient le "'''concept du registre'''".
   −
Ce concept est également utilisé pour les [http://mchobby.be/PrestaShop/product.php?id_product=204 horloge temps réel] I2C... car il y a tellement d'information a renvoyer sur le bus qu'il faut faire de la sélection.
+
Ce concept est également utilisé pour les {{pl|204|horloge temps réel}} I2C... car il y a tellement d'information a renvoyer sur le bus qu'il faut faire "une sélection" sur ce que l'on désire recevoir.
    
== Qu'est ce donc qu'un registre? ==
 
== Qu'est ce donc qu'un registre? ==
 
Un registre est une petite zone mémoire du périphérique I2C dans laquelle il est possible d'écrire une information (1 octet).  
 
Un registre est une petite zone mémoire du périphérique I2C dans laquelle il est possible d'écrire une information (1 octet).  
   −
Cette information modifie alors le fonctionnement du périphérique I2C.
+
Cette information modifie alors soit:
 +
* le fonctionnement ou l'état du périphérique I2C.
 +
* la réponse retournée par la lecture d'un autre registre.
    
== Comment cela fonctionne ? ==
 
== Comment cela fonctionne ? ==
    
Dans le cas du projet présenté ci-dessus (lecture d'une entrée sur le Mega), cela fonctionnerait comme suit:
 
Dans le cas du projet présenté ci-dessus (lecture d'une entrée sur le Mega), cela fonctionnerait comme suit:
# D'envoyer un octet dans le registre (via le bus I2C) avec le numéro d'entrée à lire.
+
# Envoyer un octet dans le registre #1 (via le bus I2C) avec le numéro d'entrée à lire (ex: entrée n° 8).
# D'effectuer une lecture sur le bus I2C. Le périphérique renverra alors l'état de l'entrée.
+
# D'effectuer une lecture sur le bus I2C (du registre #0) et le périphérique renverra alors l'état de l'entrée correspondant à la valeur stockée dans le registre 1.
    
Pour envoyer l'octet (le numéro d'entrée) dans le registre, ont utilise le concept "Master Writer" (le Maître Ecrit)... comme ça le périphérique peut modifier son comportement.
 
Pour envoyer l'octet (le numéro d'entrée) dans le registre, ont utilise le concept "Master Writer" (le Maître Ecrit)... comme ça le périphérique peut modifier son comportement.
    
Juste après ont passe on en mode "Master Reader" (le Maître lit) pour réclamer la valeur de l'entrée... qui sera renvoyé par le périphérique.
 
Juste après ont passe on en mode "Master Reader" (le Maître lit) pour réclamer la valeur de l'entrée... qui sera renvoyé par le périphérique.
 +
 +
Voici quelques graphiques qui présentent les différentes étapes d'un tel échange:
 +
 +
[[Fichier:Arduino I2C Intro-ConceptRegistre-01.jpg|640px]]
 +
 +
[[Fichier:Arduino I2C Intro-ConceptRegistre-02.jpg|640px]]
 +
 +
[[Fichier:Arduino I2C Intro-ConceptRegistre-03.jpg|640px]]
    
== Un, deux, trois registres ==
 
== Un, deux, trois registres ==
Ligne 44 : Ligne 56 :  
Dans cet exemple, issu de TronixStuff.  
 
Dans cet exemple, issu de TronixStuff.  
   −
Dans cet exemple, on s'adresse au périphérique 0x68 (adresse hecadécimale) pour y placer la valeur 0 dans le registre.
+
Dans cet exemple, on s'adresse au périphérique 0x68 (adresse hexadécimale) pour y placer la valeur 0 dans le registre.
    
Ensuite, on fait une lecture de 7 octets pour recevoir l'information désirée (en l'occurrence: date et heure)  
 
Ensuite, on fait une lecture de 7 octets pour recevoir l'information désirée (en l'occurrence: date et heure)  
Ligne 52 : Ligne 64 :  
Wire.endTransmission();
 
Wire.endTransmission();
 
Wire.requestFrom(0x68, 7);
 
Wire.requestFrom(0x68, 7);
*second    = bcdToDec(Wire.read();
+
*second    = bcdToDec(Wire.read());
*minute    = bcdToDec(Wire.read();
+
*minute    = bcdToDec(Wire.read());
*hour      = bcdToDec(Wire.read();
+
*hour      = bcdToDec(Wire.read());
 
*dayOfWeek  = bcdToDec(Wire.read());
 
*dayOfWeek  = bcdToDec(Wire.read());
 
*dayOfMonth = bcdToDec(Wire.read());
 
*dayOfMonth = bcdToDec(Wire.read());
29 836

modifications

Menu de navigation