Salut tout le monde !
Aujourd’hui je vais vous parler du 4067, et plus précisément de la version breakout de sparkfun de ce composant.
Le 4067 est un petit circuit intégré qui a pour but de "multipléxé" ou de "démultipléxé" des signaux analogique ou numérique.
Pour faire simple avec une broche analogique et 4 broches numérique il est possible d’avoir jusqu’à 16 I/O analogiques/numériques.
Une belle perspective d’utilisation avec une carte arduino !
Imaginé pouvoir connecter 16 capteurs sur une seule broche analogique !
Ou alors 16 bouton/ led sur une broche digital !
Comme toujours quand c’est rouge et blanc, sparkfun n’est pas loin !
Pour cette démonstration je vais utiliser mon arduino pro mini et une breadboard.
Le cablage sera le suivant :
4067 -> arduino S0 -> D8 S1 -> D9 S2 -> D10 S3 -> D11 SIG -> A0 VCC -> VCC E -> GND GND -> GND
Ensuite pour exploiter un peu la chose je vais câbler 16 potentiomètres, ça fait du monde sur la breadboard 8)
Une petite vu plongeante pour le fun !
Maintenant que tout est cablé, le code !
Il est trés simple, il scan chaque canal et renvoie ça valeur analogique.
// Broche d'adresse
#define S0 8
#define S1 9
#define S2 10
#define S3 11
// Broche signal
#define SIG A0
void setup(){
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
digitalWrite(S0, LOW);
digitalWrite(S1, LOW);
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
Serial.begin(9600);
Serial.println("CD4067 Arduino Test");
}
void loop(){
// Pour chaque canaux on renvoie la valeur sur le port série
for(byte i = 0; i < 16; i ++){
Serial.print("Channel ");
Serial.print(i, DEC);
Serial.print(" : ");
Serial.println(readMux(i), DEC);
delay(1000);
}
}
int readMux(byte channel){
// On selectionne le canaux
digitalWrite(S0, bitRead(channel, 0) ? HIGH : LOW);
digitalWrite(S1, bitRead(channel, 1) ? HIGH : LOW);
digitalWrite(S2, bitRead(channel, 2) ? HIGH : LOW);
digitalWrite(S3, bitRead(channel, 3) ? HIGH : LOW);
// On lit la valeur courante
return analogRead(SIG);
}
On upload le tout et on test !
Et comme prévue la magie fait effet !
CD4067 Arduino Test Channel 0 : 476 Channel 1 : 501 Channel 2 : 669 Channel 3 : 489 Channel 4 : 445 Channel 5 : 598 Channel 6 : 469 Channel 7 : 479 Channel 8 : 391 Channel 9 : 490 Channel 10 : 515 Channel 11 : 21 Channel 12 : 145 Channel 13 : 535 Channel 14 : 627 Channel 15 : 436 Channel 0 : 476 Channel 1 : 501 Channel 2 : 670 Channel 3 : 488 Channel 4 : 445 Channel 5 : 597 Channel 6 : 470 Channel 7 : 479 Channel 8 : 391 Channel 9 : 490 Channel 10 : 514 Channel 11 : 21 Channel 12 : 144 Channel 13 : 535 Channel 14 : 627 Channel 15 : 436 Channel 0 : 475
Conclusion :
C’est une petite breakout, petite mais puissante !
Si on à beaucoup de capteur c’est l’idéal, ici 16 potentiométre c’est deja beaucoup de monde !
Comme le 4067 se comporte comme un interrupteur on peu imaginer faire un système pour rediriger un port série, une connexion i2C ou mieux faire une sélection d’esclave en SPI.
Cette breakout peut faire énormément de chose à vous de découvrir sont potentielle dans vos projets !







BONJOUR, est ce que se projet peut m’aider a envoyer un code binaire et recevoir un 1 en sortie ?
Publié par mouto | 28 mars 2012, 16 h 40 minbonjour, skywood !
juste pour savoir si vous pouvez m’aider!
je recherche comment écrire des valeurs binaires
dans un démultiplexeur avec ma carte arduino , mon démultiplexeur est un 4051
Merci! de m’aider!
Publié par mouto | 2 avril 2012, 14 h 54 minLe CD4051 est plutôt orienté signal analogique.
Pour envoyer un signal il faut sélectionner l’adresse de sortie avec s0 s1 s2 s3 puis envoyer le signal sur SIG.
Publié par skywodd | 2 avril 2012, 15 h 12 min