Bonjour à tous, comme vous pouvez en douter, je n'arrive pas à résoudre un petit problème qui concerne le multiplexage d'afficheurs 7 segments. Je travaille actuellement sur un projet qui nécessite le contrôle de 8 afficheurs 7 segments et pour les piloter, j'ai choisis d'utiliser un PCF8575 en me basant sur le schéma de skywodd :
D'ailleur @skywodd si tu m'entends...

Mon câblage est correcte mais j'ai l'impression que je n'arrive pas à piloter mes transistors à l'aide du PCF8575. Voici mon code (j'essaye avec 2 afficheurs pour le moment en comptant les secondes) :
// Inclusion de la librairie I2C
#include <Wire.h>
// Adresse I2C du PCF8575
int PCF8575_ADDRESS = 0x20;
// Tableau de correspondance chiffre -> 7-segments
byte digits[10] = {
B11000000 ,
B11110011 ,
B10100100 ,
B10100001 ,
B10010011 ,
B10001001 ,
B10001000 ,
B11100011 ,
B10000000 ,
B10000001
};
// Tableau de correspondance transistor -> chiffres
byte transistor[2] = {
B01111111 ,
B10111111
};
long unsigned tmpspresent = 0;
long unsigned temps = 0;
int intervalle = 1000;
byte seconde = 0;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
Wire.begin(); // Configuration du bus I2C
}
void loop() {
tmpspresent = millis();
if (tmpspresent - temps >= intervalle) {
temps = tmpspresent;
seconde ++;
if (seconde >= 60) {
seconde = 0;
}
}
decoupageNombre(seconde);
Serial.println (seconde);
delay(1);
}
void decoupageNombre(int seconde)
{
byte dizaine = seconde %10;
byte unite = seconde /10;
byte transistor = 1;
afficherChiffre(dizaine, transistor);
delay(10);
transistor = 2;
afficherChiffre(unite, transistor);
delay(10);
}
void afficherChiffre(byte chiffre, byte numero)
{
byte x = chiffre;
byte y = numero;
Wire.beginTransmission(PCF8575_ADDRESS); // Engage la communication
Wire.write(digits[x]); // Envoie le 1er octet (bits 0 ~ 8 )
Wire.write(transistor[y]); // Envoie le 2eme octet (bits 9 ~ 16)
Wire.endTransmission(); // Termine la communication
}
Alors que quand je gère mes transistors directement avec l'arduino comme ceci... :
void decoupageNombre(int seconde)
{
byte dizaine = seconde %10;
byte unite = seconde /10;
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
afficherChiffre(dizaine, transistor);
delay(10);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
afficherChiffre(unite, transistor);
delay(10);
}
...mes afficheurs fonctionnent correctement.
Quelqu'un peut-il m'éclairer svp ?