[RESOLU] 4051 comme démultiplieur

Bonsoir à tous,

J'ai reçu mon CD4051, hors malgré les tutos que j'ai trouvé sur le net, celui d'Arduino :

http://www.arduino.cc/playground/Learning/4051

Ou encore celui de Skywodd :

http://skyduino.wordpress.com/2011/08/03/arduino-controle-dun-cd4051/

Je n'arrive pas à ce que je veux...

Ce que je voudrais :

Piloter l'allumage de 4 LEDs, quelles puissent s'allumer en même temps, ou une après l'autre, etc. Pouvoir faire des séquences quoi...

J'ai essayé ça :

void setup(){

  pinMode(2, OUTPUT);    // s0
  pinMode(3, OUTPUT);    // s1
  pinMode(4, OUTPUT);    // s2
}

void loop () {

    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);

 }

Au niveau des branchements, j'ai branché la pin 4 sur la première patte en haut à droite, la 3 sur celle d'en dessous et la 2 encore en dessous... S0, S1 et S2 en fait.

Ensuite sur les broches à l'opposé, je branche sur les GND des LEDS, qui elles mêmes ont leur + reliés à l'Arduino...

Mais bon ça pas l'air de marcher, soit j'arrive à tout allumer, soit rien...

Merci de votre aide :)

Salut,

heu … Woo! Pas trés explicite ton câblage …
Tu peut nous la refaire en bon électronicien (broche sur , …) :grin:

Sinon vu ton code je crois que tu n’as pas compris le principe du CD4051, il s’agit en faite d’une série d’interrupteurs avec chacun un numéro, tu choisi l’interrupteur à fermer en envoyant sont code en binaire sur S0~S2 (tout les autres seront ouvert), à ce moment là le signal sur l’entrée analogique du CD4051 ce retrouvera sur sa sortie analogique.
Je vois mal comment tu va faire des séquences lumineuse avec un CD4051, à pars en utilisant la persistance rétinienne, tu aura toujours qu’une led allumé simultanément.

skywodd:
Salut,

heu … Woo! Pas trés explicite ton câblage …
Tu peut nous la refaire en bon électronicien (broche sur , …) :grin:

Sinon vu ton code je crois que tu n’as pas compris le principe du CD4051, il s’agit en faite d’une série d’interrupteurs avec chacun un numéro, tu choisi l’interrupteur à fermer en envoyant sont code en binaire sur S0~S2 (tout les autres seront ouvert), à ce moment là le signal sur l’entrée analogique du CD4051 ce retrouvera sur sa sortie analogique.
Je vois mal comment tu va faire des séquences lumineuse avec un CD4051, à pars en utilisant la persistance rétinienne, tu aura toujours qu’une led allumé simultanément.

Mmh effectivement c’est pas très clair, du mal à expliquer.

Alors en fait j’ai essayé de reproduire ça : http://sweb.cityu.edu.hk/sm2240/2011A/styled-4/index.html (Vers en bas 3/4 de page)

Ouais je me suis dis que si je fais des ouvertures/fermetures très rapide on pourrait voir toutes les LED allumées… J’ai faux ?

Concernant le branchement, j’ai mis !

D7 → S2
D6 → S1
D5 → S0
+5 → Vcc
GND → gnd
D8 → z
GND → Vee
GND → E

J’ai donc ce code :

int s1 = 5;
int s2 = 6;
int s3 = 7;
int dataPin = 8;

void setup()
{
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  pinMode(dataPin, OUTPUT);
  digitalWrite(dataPin, HIGH);
}

void loop()
{
  for (int i=0; i<8; i++)
  {
    int b1 = bitRead(i, 0);
    int b2 = bitRead(i, 1);
    int b3 = bitRead(i, 2);
   
    digitalWrite(s1, b1);
    digitalWrite(s2, b2);
    digitalWrite(s3, b3);

    delay(500);
  }
}

Si j’ai 4 LEDs par exemple j’aimerai qu’elle s’allument chacune leur tour, et arriver à le faire plus ou moins vite.

Wihou c'est bon ça marche, à classer 8)

Merci Skywodd, grâce à ton histoire d'interupteur j'ai bien compris le truc en fait :)

Cependant, je me rends compte que le 4051 occupe tout de même 4 pins sur l'Arduino, donc pour qu'il soit rentable en terme d'utilisation de pins, il faut au minimum 5 éléments rentrants/sortants.

arduimat: Cependant, je me rends compte que le 4051 occupe tout de même 4 pins sur l'Arduino, donc pour qu'il soit rentable en terme d'utilisation de pins, il faut au minimum 5 éléments rentrants/sortants.

Oui et non parce que en même temps si on regarde ton code tu n'utilises réellement que 3 broches S0, S1 et S2 les autres sont fixes donc elles pourraient ne pas être connectées à l'arduino

Si c'est pour allumer des leds, le mieux serait, a mon avis, un registre a décalage (74hc595). 3 pins et chainables "à l'infini"

perso, j'utilise les 4051 plutôt en entré, pour scanner des boutons ou des contacteurs par exemple.

D.

bbs: Si c'est pour allumer des leds, le mieux serait, a mon avis, un registre a décalage (74hc595). 3 pins et chainables "à l'infini"

Pas vraiment "à l'infini" je sait plus combien mais il y a un nombre max de 595 en cascade possible (faudrait regarder le datasheet).

bbs: perso, j'utilise les 4051 plutôt en entré, pour scanner des boutons ou des contacteurs par exemple.

Perso je suis plus PCF8574/PCF8575 aprés c'est une question de gout ^_^ (et de budget :sweat_smile:)

Pour le 74hc595, j'ai pas vu de limite dans le datasheet NXP. si la sortie q7' est "régénérée", à part le temps de propager les bits je vois pas trop de "limites".

J'ai vite fait regardé les pcf8574/5. Je me trompe ou c'est numérique, y compris dans la lecture de l'état ? Le 4051 est plus vu comme une resistance de l'ordre de la centaine de ohms :) Mais comme tu dis, les goûts et les couleurs ... :-D

D.

bbs: Pour le 74hc595, j'ai pas vu de limite dans le datasheet NXP. si la sortie q7' est "régénérée", à part le temps de propager les bits je vois pas trop de "limites".

Si la sortie Q7 est passé dans une porte oui ya pas de probléme, à pars peut être la charge capacitive qu'induit chaque 595 et le temps de propagation, mais il faudrait déja vouloir en chainer un bon nombre :grin:

bbs: J'ai vite fait regardé les pcf8574/5. Je me trompe ou c'est numérique, y compris dans la lecture de l'état ? Le 4051 est plus vu comme une resistance de l'ordre de la centaine de ohms :)

Yes 100% numérique 8) 8 (ou 16) entrée/sorties TTL avec lecture/écriture via I2C (+ interruption en cas de modif d'un niveau).