Modifications

Sauter à la navigation Sauter à la recherche
4 129 octets ajoutés ,  17 avril 2014 à 21:14
Ligne 1 : Ligne 1 :  
{{I2C-Hacking-NAV}}
 
{{I2C-Hacking-NAV}}
   −
https://www.adafruit.com/blog/2012/07/02/great-scott-delorean-inspired-time-circuit-clock-with-adafruit-gear/
+
== Introduction ==
 +
{{bloc-etroit|text= ''Dédoubler le bus I2C!!!! C'est quoi cette histoire loufoque?''
   −
{{I2C-Hacking-Trailer}}
+
Oui, c'est possible. Comme Arduino n'utilise pas de système d'exploitation, nous avons un énorme avantage... C'est notre Arduino étant le maître du bus (voir nos autre tuto I2C), c'est notre appel de fonction I2C qui lancera l'émission des données sur le bus I2C.
 +
 
 +
Il n'y a donc rien qui circule sur le bus I2C si Arduino n'en fait pas de demande I2C spécifique.}}
 +
 
 +
=== Le principe du Hack ===
 +
Ha ha! Génial... s'il n'y a rien qui circule sur le bus... rien ne nous empêche d'enlever les deux fils de notre Bus I2C pour les brancher sur un autre bus en parallèle puis de relancer notre programme.
 +
 
 +
Le données circulent alors sur le 2ième bus... (le premier étant inactif)
 +
 
 +
=== La mise en oeuvre ===
 +
Dans la réalité, nous n'allons pas nous amuser à retirer et rebrancher des fils... nous allons utiliser un composant qui fera cela à demande pour nous.
 +
 
 +
Nous pourrons ainsi contrôler ("aiguiller") les signaux I2C entre les différents sous Bus I2C que nous allons monter.
 +
 
 +
== Le 74HC138 ==
 +
Le 74HC138 est un décodeur qui accepte une adresse 3 bits (A0, A1 et A3) et qui active l'une des 8 sorties (Y0 à Y7) correspondante.
 +
 
 +
La sortie Y0 à Y7 activée passe à LOW... et toutes les sorties sont mutuellement exclusives. Vous ne risquez pas d'avoir deux sorties actives en même temps.
 +
 
 +
La sortie Y''x'' et activée uniquement si le module est est activé (ligne ''Enable''). Le 74HC138 dispose de 3 entrées d'activation ''enable''; deux d'entre-elles (E1 et E2) sont active à LOW et la troisième (E3) est active à HIGH.
 +
 
 +
Toutes les sorties sont maintenues à HIGH sauf si E1 & E2 sont à LOW ET E3 est à HIGH. Ces multiples lignes d'activation facilite beaucoup l'utilisation des 74HC138 en parallèle; de 1-à-32 (décodeur de 5 lignes à 32 lignes) avec 4 74HC138.
 +
 
 +
Une particularité de ce composant est qu'il est super rapide... une aubaine pour le transport de notre signal I2C.
 +
 
 +
[[Fichier:74HC138-01.jpg|400px]] [[Fichier:74HC138-02.jpg|250px]]
 +
 
 +
[[Fichier:74HC138-03.jpg|650px]]
 +
* H: Niveau Haut
 +
* L: Niveau bas (0v)
 +
* X: Le niveau n'a aucune influence
 +
 
 +
[http://df.mchobby.be/datasheet/74HC_HCT138.pdf Fiche technique] (''NXP.com, pdf, anglais'')
 +
 
 +
== Montage ==
 +
Les amoureux de "retour vers le futur" (le films) se souviennent certainement du tableau de bord de la Dolorean.
 +
 
 +
Hé bien, figurez vous qu'AdaFruit en à fait un petit projet... histoire de se distraire (voir [https://www.adafruit.com/blog/2012/07/02/great-scott-delorean-inspired-time-circuit-clock-with-adafruit-gear/ cette source], ''AdaFruit, anglais'').
 +
 
 +
{{ADFImage|I2C-Hacking-Bus-Multiple-01.jpg|480px}}
 +
 
 +
Il est possible de reconstruire un tel tableau à l'aide d'{{sl|4x7|afficheur 4x7 segment I2C}}.
 +
 
 +
Le HIC, c'est qu'il n'y a pas assez d'adresses configurable sur l'afficheur (3bit = 8 adresses) disponible pour brancher TOUS les afficheurs nécessaires (9) sur le bus I2C!
 +
 
 +
{{ADFImage|I2C-Hacking-Bus-Multiple-01a.jpg|480px}}
 +
 
 +
Cependant, grâce au 74HC138, nous allons pouvoir réaliser un "aiguilleur" pour notre bus I2C.
 +
 
 +
{{ADFImage|I2C-Hacking-Bus-Multiple-02.jpg|640px}}
 +
 
 +
=== Principe de fonctionnement ===
 +
# La ligne de donnée SDA est distribuée sur toutes les lignes du bus I2C. Les différents composants I2C ne lirons les données qui passent que s'ils reçoivent un signal d'horloge I2C (SCL).
 +
# Le signal d'horloge est envoyé vers l'une ou l'autre des lignes des sous-bus I2C à l'aide du 74HC138.
 +
# Les broches "select" (A0 & A1) du 74HC138 sont commandées par Arduino... ce qui permet de sélectionner l'une des 3 sorties Y0, Y1 ou Y3.
 +
# En passant le signal d'Horloge sur les broches E1 & E2 (''Enable inversé''), on active la sortie Y''x'' (elle aussi inversée).<br />Pour résumé... le signal SCL (d'horloge I2C) sera reproduit sur la ligne Y0 ou Y1 ou Y2 en fonction de l'adresse sélectionnée sur les lignes d'adresses A0 et A1.
 +
 
 +
Voila comment il est possible de dupliquer un bus I2C :-)
 +
 
 +
=== Le projet Time Machine ===
 +
Vous pouvez consulter le [http://www.adafruit.com/blog/2012/07/02/great-scott-delorean-inspired-time-circuit-clock-with-adafruit-gear/ projet (code inclus) sur le blog d'AdaFruit].
 +
 
 +
{{I2C-Hacking-TRAILER}}
29 917

modifications

Menu de navigation