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)
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.
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.
Commentaires
Enregistrer un commentaire