Ce composant fait le lien entre des entrées ou des sorties de type logique, au niveau TTL et le transport des informations portées par ces entrées ou ces sorties, par un bus I²C
Le composant est dit quasi bidirectionnel car une broche TTL peut jouer soit le rôle d'une entrée soit le rôle d'une sortie alternativement mais pas les deux à la fois (c'est évident !)
Le composant réalise donc, suivant les cas :
La communication se fait de maître à esclave par le bus I²C. Le composant ne peut jouer le rôle de maitre.
La communication s'opère à l'aide de l'envoi de deux octets sur la liaison I²C:
Adresse | L | H | V | V | A2 | A1 | A0 | RW |
Donnée | P7 | P6 | P5 | P4 | P3 | P2 | P1 | P0 |
Lorsque RW est à 0, la donnée sera écrite, lorsque RW est à 1, elle sera lue. Il faudra donc placer les instructions correctes dans le programme.
Les bits P0 à P7 portent l'état du port correspondant
Terminologie
Start : condition de start
SelW : envoi de l'octet de sélection du composant, le bit de sens est en écriture
Ack : acquittement de la part du composant
OctetW : envoi de l'octet de donnée
Stop : condition de stop
Start SelW Ack OctetW Ack Stop
Deux cas peuvent se présenter
Start SelW Ack OctetR Nack Stop
Start SelW Ack Start SelR Ack OctetR-1 Ack … OctetR-m Nack Stop
Remarquez la reprise de la condition de Start.
L'octet d'adresse, le premier qui est envoyé, lors d'une communication, est constitué de deux parties :
0 | 0 | 1 | 1 | 1 | A2 | A1 | A0 pour le PCF8574 A |
0 | 0 | 1 | 0 | 0 | A2 | A1 | A0 pour le PCF8574 |
Introduction du bit de sens
Il faut décaler cet octet vers la gauche pour faire de la place pour le bit de sens.
Il suffit de multiplier par deux l'octet ci-dessus puis de lui ajouter le bit de sens souhaité.
Conserver l'adresse proprement dite comme constante et d'effectuer les manipulations pour insérer le bit de sens dans le sous-programme d'écriture de l'adresse. Cette astuce permet d'utiliser le même sous-programme d'écriture de l'adresse pour tous les composants I²C présents sur la ligne.
L’adressage du PCF8574 est fait comme suit:
Le PCF8574 a une plage d’adresse qui peut aller de 40 à 4E selon les niveaux des divers lignes d’adresses et le PCF8574A a une plage allant de 70 à 7E ce qui nous permet d’utiliser 8 adresses différentes sans que les interfaces se gênent entre eux.
Il ne faut pas oublier que l’adressage du Bus I2C se fait sur 7 bits et non 8, car le bit le plus à droite est le bit du choix de lecture ou d’écriture sur le bus.
les PCF8574 et PCF8574A disposent d'une adresse fixe (qu'on appelle adresse de base) et cette adresse fixe peut être décallée d'une certaine valeur grâce aux broches d'adresse A0 à A2. Les adresses de base sont celles qui doivent être utilisées quand les trois broches A0 à A2 sont portées à l'état logique bas. Si au moins une de ces broches d'adresse est portée à l'état logique haut, essayer de communiquer avec le composant avec l'adresse de base se soldera par un échec. Vous trouverez dans le tableau suivant les différentes adresses à utiliser selon l'état logique donné aux broches A0 à A2, pour les PCF8574 et PCF8574A.
A2 | A1 | A0 | PCF8574 Ecriture | PCF8574 Lecture | PCF8574A Ecriture | PCF8574A Lecture |
0 | 0 | 0 | $40 (064d) | $41 (065d) | $70 (112d) | $71 (113d) |
0 | 0 | 1 | $42 (066d) | $43 (067d) | $72 (114d) | $73 (115d) |
0 | 1 | 0 | $44 (068d) | $45 (069d) | $74 (116d) | $75 (117d) |
0 | 1 | 1 | $46 (070d) | $47 (071d) | $76 (118d) | $77 (119d) |
1 | 0 | 0 | $48 (072d) | $49 (073d) | $78 (120d) | $79 (121d) |
1 | 0 | 1 | $4A (074d) | $4B (075d) | $7A (122d) | $7B (123d) |
1 | 1 | 0 | $4C (076d) | $4D (077d) | $7C (124d) | $7D (125d) |
1 | 1 | 1 | $4E (078d) | $4F (079d) | $7E (126d) | $7F (127d) |