Modifications

Sauter à la navigation Sauter à la recherche
Ligne 16 : Ligne 16 :  
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 "une sélection" sur ce que l'on désire recevoir.
+
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 46 : 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 54 : 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 372

modifications

Menu de navigation