Circuit PCF8574

De MicElectroLinGenMet.

Sommaire

Circuit PCF8574, 8 entrées/sorties I2C

(rédigé le vendredi 30 mai 2003)

Datasheet: Pcf8574.pdf


PRlNCIPE DE FONCTIONNEMENT DU PCF 8574

(Tiré du livre 'Le bus I2C' de Dominique Paret - Dunod)

Le synoptique du PCF8574 de RTC PHILIPS COMPOSANTS est donné #figure2 et ses protocoles d'écriture et de lecture sont indiqués #figure3.


Comme vous venez de le remarquer, bien que ce composant ne soit toujours qu'un ESCLAVE, il peut soit être écrit pour afficher sur ses sorties un octet, mais il est aussi possible d'aller lire le contenu du port de sortie si on suppose que celui-ci a changé (au cas ou l'on ne saurait pas supposer, le circuit est équipé d'un dispositif capable de vous signaler si quelque chose a changé surIe port !) ce qui est bien pratique surtout si vous désirez un beau jour mettre (optionnellement) un petit clavier de commande, comme nous l'avons fait.

PARTICULARITES DU PCF 8574 ET DES MODULES

Adresses i2c des pcf8574:

PCF 8574  : 0100 A2 Al A0 (R/W)
PCF 8574A : 0111 A2 Al A0 (R/W)

dans lesquelles A2, A1, A0 représentent les bits reconfigurables d'adresses bien connus. Remarques Que les curieux soient satisfaits, il est tout à fait possible d'en mettre bien d'avantage (100, 200,...) en multiplexant dynamiquement et temporellement les adresses A2, A1, A0 par logiciel, via d'autres PCF 8574. Courant max de sortie: Le port de sortie quasi-bidirectionnel est verrouillé (latché en bon français) et maintient donc les informations qui lui sont présentées et de plus, est capable de fournir, lorsqu'il est à l'état bas, un courant apte à commander directement des LEDs (Imax a ne pas dépasser sur un port : 24 mA, nominalement 10 mA)
Remise à zéro: A la mise sous tension, un dispositif de remise à zéro positionne le port de sortie à l'état HAUT (1111 1111 = FF) permettant de pouvoir écrire directement le port si bon le semble.

ECRITURE/LECTURE DU PORT DE SORTIE


  • Ecriture

Chacun des bits du port peut étre considéré comme un bit indépendant et servir soit en entrée soit en sortie. En ce qui concerne l'écriture, le maître (notre micro-contrôleur 8052 AH BASIC) adresse tout d'abord le circuit en positionnant le dernier bit de l'adresse à 0 (mode d'écriture), attend l'acquittement du PCF8574 puis présente alors les données qu'il vient de recevoir sur le port. Comme le montre la #figure3, ce n'est que juste après l'acquittement de réception (qui indique que ces données sont bien arrivées) qu'elles sont alors écrites sur le port de sortie. A ce sujet, c'est en inscrivant un à "1" sur un des bits de données que l'on obtient (après l'acquittement du circuit) un "1" sur le bit correspondant du port de sortie (data bit 5 - port de sortie 5 par exemple), et donc pour repositionner le port en attente d'informations (ou mode d'entrée) il faut transmettre une donnée de valeur FFH. La quantité de données que l'on peut envoyer successivement lors d'un même échange n'est pas, sur son principe, limitée mais il est de bon ton de s'occuper de temps en temps des autres circuits qui sinon pourraient faire plus tard des crises de suceptibilité aigue« si on les délaissait! ! !

  • Lecture

Examinons maintenant la lecture du port (#figure3). La philosophie est similaire à quelques particularités prés qui ont comme d'habitude leurs importances ! Bien sûr nous sommes en mode de lecture et le dernier bit de l'adresse est à 1. Bien que cela puisse paraître trivial, on peut lire sur le port des informations qui vont plus vite que la musique ! Expliquons nous: les données sur le port (devenu d'entrée maintenant) peuvent varier rapidement, voire plus rapidement que le bus n'est capable de les lire. Comme le montre la figure, le PCF8574 décide de "lire" vraiment ce qu'il y a sur son port au (dernier) moment. il reçoit l'acquittement du maître qui est à ce moment là "récepteur ". Ceci nous permet de conclure qu'en valeur moyenne, le port d'entrée ne doit pas varier plus rapidement qu'au rythme de 10 kHz environ lorsque le bus fonctionne à sa fréquence maximale de 100 kHz, sous peine de risquer de manquer des informations entrantes. En ce qui concerne notre champ d'applications, les choses varient bien souvent lentement et nous aurons ainsi tout notre temps, pour aller, par logiciel, examiner les différents états des ports d'entrées. En fin de lecture du port, le maître aprés le dernier bit de la dernière données lue et pour signaler au circuit PCF8574 qu'il veut prendre congé de lui, doit, pendant le neuvième coup d'horloge SCL, envoyer un "NON acquittement" (NACK) pour que celui-ci comprenne qu'on veut lui dire "au revoir" puis effectue ensuite la procédure classique de STOP.

Image:pcf8574_2.jpg
Image:pcf8574_2a.jpg


  • Interruption

Voilà enfin un peu de vraie nouveauté ! Comme nous vous l'avions laissé présentir, ce circuit est bien élevé et sait vous indiquer, si vous le désirez, si l'on a modifié ses entrées. Maintenant, traitons-nous ou ne traitons- nous pas ? ceci est une autre histoire mais en tous cas nous avons eu le choix d'être informé. Ceci offre deux possibilités de traitement par le logiciel d'application. Solution 1 : On ne s'occupe pas du tout de ce signal et périodiquement, on va vérifier que rien n'a changé (méthode dite de "polling" ) et tant pis pour nous si cela a changé deux fois au même endroit pendant l'intervalle de temps considéré et si on a manqué quelque chose. Solution 2 : On bénéficie de l'aubaine offerte par la présence de ce signal. En effet, lorsque le port est en mode de lecture, dés que sur l'une des entrées on détecte un flanc montant ou descendant, un signal d'interruption INT est créé (à la condition d'avoir disposé au moins une résistance de rappel au + 5 Volts pour tous les circuits car ces sorties sont en drain ouvert et permettent donc de réaliser un "OU" câblé pour l'ensemble des circuits/modules) voir #figure4. Ce signal d'INTerruption permet de dérouter le programme principal qui est en train de se dérouler pour aller voir ce qui vient de se passer sur ces port récalcitrants. Etant donné qu'il peut y avoir plusieurs circuits qui ont simultanément fourni une INT, on scrute et on lit rapidement tout le monde a tour de rôle et ce n'est qu'au moment ou on a lu la valeur qui a changée sur le bon port et uniquement sur celui là , que "sa propre contribution a" l'INT disparait. Comme toute les broches d'INT sont montées en OU CABLE on les achêve une a une jusqu'à ce que toutes disparaissent, puis lorsque l'on a terminé, on revient reprendre le cours du programme principal initial.

Image:pcf8574_3.jpg

Utilisation Du PCF8574 sous Linux

  • Autre exemple avec une interface USB-I2C



Administration wiki