Académique Documents
Professionnel Documents
Culture Documents
PCF8574A (Extension) :
Un circuit intégré (composant électronique qui comprend de multiples transistors, diodes et autres composants électroniques
interconnectés sur une petite puce et qui peuvent avoir de nombreuses fonctions différentes : mémoire, les amplificateurs,
les convertisseurs de données, extensions, etc.)
Le PCF8574A est un circuit intégré qui permet d’ajouter à la carte Arduino des extensions c’est-à-dire des entrées/Sorties
numériques en plus. Ce circuit peut se communiquer avec une carte Arduino par bus I2C (bus série).
Transmission série (exemple I2C) : les bits sont envoyés un par un, du bit de poids faible
ou LSB (D0) au bit de poids fort MSB (D7), le premier bit envoyé est le premier arrivé. Ils
sont bien sûr cadencés par l’horloge (signal SCL).
Transmission parallèle (exemple UART) : les bits sont envoyés à la fois et arrivent tous
en même temps. Donc on envoie plusieurs bits à la fois, dans ce cas 8 bits (octet).
Dans ce cas le microcontrôleurs Arduino joue le rôle du maitre (décide à quel moment et à quel périphérique envoyer les
données) et le PCF8574A joue le rôle de l’esclave (ils demandent des données et le maitre répond s’il veut) c’est ce qu’on appelle
en électronique (Maitre/Esclave ou Master/Slave en anglais, ils existent d’autres tels que publisher/subscriber ou bien
client/serveur, etc.)
Pour chaque PCF8574A on doit lui donner une adresse, ces adresses sont choisie grâce aux trois broches (A0 à A2). On trouve deux
modes selon ce tableau :
- Mode avec lecture et écriture (R/W) : On ajoute le R/W pour définir les adresses en hexadécimal
Lorsque (R/W = 1) : Mode lecture seule, dans ce cas les adresses sont comprises entre 0x71 (71h) et 0x7F (7Fh).
Lorsque (R/W = 0) : Mode écriture seule, dans ce cas les adresses sont comprises entre 0x70 (70h) et 0x7E (7Eh).
- Mode sans (R/W) : c’est-à-dire on peut configurer le PCF8574A on écriture et en lecture à la fois. Dans ce cas on ignore le R/W
et on travaille uniquement avec A0 à A6 pour définir les adresses en hexa.
Les adresses dans ce cas sont comprises entre 0x38 (38h) et 0x3F (3Fh)
- On trouve aussi les broches VSS qui représente le GND (branché à la masse).
- On trouve aussi les broches VDD qui représente le 5V (branché à 5volt de l’arduino).
- On trouve aussi le INT qui permet d’interrompre matériellement le PCF8574A (interruption)
0 1 1 1 1 1 0 0
P7 P6 P5 P4 P3 P2 P1 P0
5V
Si on veut calculer le courant qui passe par la LED pour voir si elle s’allume ou pas :
Résistance
Si on envoie un 0 (0v) : Vd tension aux bornes de la diode, R*I tension aux bornes de
la résistance
Selon la loi des mailles : 5v – R*I – Vd - 0 = 0 alors I = (5 - Vd) / R (le courant I est positif, donc il
y a un courant circule alors la LED s’allumer)
Si on envoie un 1 (5v) :
Selon la loi des mailles : 5v – R*I – Vd – 5v = 0 alors - R*I – Vd = 0, alors I = -Vd/R (courant
négatif, il n’existe pas de courant négatif dans le continue, donc aucun courant ne circulera,
électriquement il est considéré comme courant nul, c’est pour ça LED s’éteint.
Parfois on a besoin d’écrire sur une broche à la fois (P0 ou P1 ou P2, etc.) ou bien une partie de broche à la fois, pour cela on utilise ce
qu’on appelle les masques :
Ils existent deux masques :
Un masque en ET (&) : utilisé pour écrire un 0 (activer la broche)
Exemple pour écrire un 0 sur le P0 : On utilise ce masque (0b11111110), peu importe la valeur qu’on met sur P0 elle sera toujours égale
à 0 (1 & 0 = 0 et aussi 0 & 0 = 0).
c = 0b11111111 ;
c = c & 0b11111110;
Wire.beginTransmission(PCF8574A_ADDR);
Wire.write(c);
Wire.endTransmission();
c = 0b11111111 ;
c = c & 0b00000001;
Wire.beginTransmission(PCF8574A_ADDR);
Wire.write(c);
Wire.endTransmission();
Quand on écrit : Serial.println(variable,BIN); veut dire qu’on va afficher la valeur de variable en binaire ou en octet (des 0 et des 1)
Si on veut lire l’état d’une broche on utilise un masque, exemple si on veut lire d’état d’un bouton branché à P2 :
Faut savoir qu’en informatique toute valeur différente de zéro est considérée comme un « 1 logique » et la valeur nulle est considérée bien sûr comme un « 0
logique »
Donc 0b11111011 & 0b00000100 = 0b00000000 ; ce qui donne une valeur égale à zéro ce qui donne une « 0 logique » donc on a récupéré l’état du bouton qui est
0 (enfoncé)
Donc 0b11111111 & 0b00000100 = 0b00000100 ; ce qui donne une valeur différente de zéro ce qui donne un « 1 logique » donc on a récupéré l’état du bouton qui
est 1 (relâché)