mardi 20 octobre 2015

Extenseur de port I2c - Compatible Arduino, Pic

Introduction :

Un extenseur de port permet d'ajouter à un microcontrôleur un port supplémentaire grâce au bus i2c.
Si vous avez un projet qui requiert une multitude de connexion et que vous ne voulez pas utiliser un microcontrôleur haut de gamme (par exemple Arduino Mega ou PIC32). Grâce au bus I2c, vous allez pouvoir connecter jusqu’à 7 extenseurs de port. Chaque extenseurs à ça propre adresse I2c et dispose de 8 entrées / sorties.

Le PCF8574 :

L'adresse I2c varie de 0100 xxx. Les x représente les 3 bits configurable A0, A1, A2. Il dispose d'un port de 8 bits nommé P0 à P7, chaque bit peut être configuré en entrée ou en sortie. Il dispose aussi d'un sortie d'interruption celle-ci permet d'informer le microcontrôleur (Arduino ou Pic) qu'une des entrées du port à changé d'état.
Tension de fonctionnement 2.5V à 6V, Courant de sortie maximum 100mA pour le port entier (8 bits)

Diagramme représentant le PCF8574
Si on connecte A0, A1, A2 à la masse (GND) comme sur le digramme ci-dessus l'adresse I2c sera donc 0100 000.


Les différents boitier du PCF8574




Pour les microcontrôleur PIC :

void I2cInit(){
    SSPADD = 0x63;
    OpenI2C(MASTER, SLEW_OFF);
}


#define Ad_PCF8574 0x70            // Adresse pour le PCF8574A
ou
#define Ad_PCF8574 0x40           // Adresse pour le PCF8574

Pour lire le port :

unsigned char Lecture_PCF8574(){
    char r;
   
    StartI2C();
    WriteI2C(Ad_PCF8574 + 1);
    r = ReadI2C();
    StopI2C();

    return r;
}

Remarque : Si on veut utiliser l'interruption, il suffit d'appeler la fonction Lecture_PCF8574 a chaque interruption.

Pour écrire sur le port :

void Ecriture_PCF8574(unsigned char PORT){
    signed char S;
    char dummy;

    StartI2C();
    S = WriteI2C(Ad_PCF8574);
    if(S == -1){                // Collision sur le bus ?
        dummy = SSPBUF;         // clear the buffer,
        SSPCON1bits.WCOL = 0;   // clear collision status bit
    }
    WriteI2C(PORT);             // P7 à P0
    StopI2C();
}



Pour Arduino :


const int ad = 0x70;         // Adresse pour le PCF8574A
ou
const int ad = 0x40;         // Adresse pour le PCF8574

Wire.begin();

Pour lire le port :

char port;

Wire.beginTransmission(ad);
Wire.requestFrom(ad,1, true);
port = Wire.read();

Pour écrire sur le port :

Wire.beginTransmission(ad);
Wire.write(0x50);                                   // Ecrit 0x50 sur le port expander
Wire.endTransmission(true);


Remarque :

Ce composant peut être utilisé pour contrôler un écran 16*2 lignes grâce à l'I2c.

J'ai choisi de présenter ce composant, car il est disponible en boitier DIP qui permet d'utiliser des plaquettes d'essai

Il est disponible en échantillon gratuit sur le site https://store.ti.com/

Cliquez-ici pour voir la documentation.

Aucun commentaire:

Enregistrer un commentaire

Sponsors