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()); |