Je voudrais savoir s'il est possible de contrôler simultanément 2 sorties (write) d'un multiplexeur ?
Le montage que je voudrai réaliser consiste à contrôler plusieurs relais simultanément via un multiplexeur.
En utilisant directement ce module (sans multiplexeur) il est bien possible de contrôler autant de relais que l'on veut simultanément. Mais bien sûr cela utilise 16 pins !
Avec un multiplexeur il est possible de contrôler un relais à la fois.
Avec un multiplexeur il n'est pas possible (du moins de la manière dont je le fais ?!) de contrôler plusieurs relais à la fois. Les leds de fonctionnement des relais s'allument "simultanément" mais les relais ne se déclenchent pas.
Voici le code dans mon programme (avec cette librairie):
// mux librairy from https://github.com/pAIgn10/MUX74HC4067
#include "MUX74HC4067.h"
// Creates a MUX74HC4067 instance
// 1st argument is the Arduino PIN to which the EN pin connects
// 2nd-5th arguments are the Arduino PINs to which the S0-S3 pins connect
MUX74HC4067 mux(7, 8, 9, 10, 11);
// Variables for millis
unsigned long starttime = 0;
unsigned long endtime = 0;
void setup()
{
// Configures how the SIG pin will be interfaced
// e.g. The SIG pin connects to PIN 3 on the Arduino,
// and PIN 3 is a Digital Output
mux.signalPin(3, OUTPUT, DIGITAL);
}
// Writes to the 16 channels a HIGH value, one after the other
void loop()
{
int x = 0; // position of the first relay
int y = 1; // position of the second relay
// Start to count time
starttime = millis();
endtime = starttime;
while((endtime - starttime) <= 10000) // do this loop for 10s
{
mux.write(x, LOW);
mux.write(y, LOW);
endtime = millis();
}
mux.disable(); // Disconnects the SIG pin from any channel
delay(2000);
}
En faisant ainsi l'ordre du multiplexeur passe d'une sortie à l'autre très rapidement, et ce n'est pas suffisant pour que les relais se déclenchent...
Du coup je me demande si une solution existerait...
En écrivant mon code différemment ?
Ou bien avec un multiplexeur qui fonctionnerait différemment ?
Je découvre grâce à vos réponses l'existence des shifts register, et c'est merveilleux !!
En plus déjà montés sur une petite board (CJMCU-595) il n'y a plus qu'à les mettre en série.
Merci pepe pour l'explication des multiplexeurs, cela explique correctement pourquoi mon montage ne fonctionnait pas.
Hop je commande de ce pas un lot de ces petites merveilles !!
Le simultané c'est flou.
Ce n'est pas parce que les commandes des deux relais seront synchrones à la µs près que les contacts colleront à la même µs prés. Compte plutôt en ms ou en dizaine de ms.
Si jamais les relais ne sortent pas du même lot de fabrication et n'ont pas le même degré d'usure ce n'est même pas la peine d'y penser.
La mécanique ce n'est pas de l'électronique, la mécanique c'est lent, ça s'use et quand ça s'use cela devient plus lent.
Même un transistor a un temps de réponce, une porte aussi et pour un registre à décalage dans ses caractéristiques on trouve un temps de propagation.
En électronique l'unité de base est la ns, en mécanique c'est la ms (1 million de fois plus).
Est ce que deux commandes qui répondent 1 million de fois plus vite que les objets qu'elles commandent ne peuvent pas être considérée comme simultanées ?
A ta place je regarderai de plus près le problème que je reprendrai depuis le début.
Car je pense que tu te fixes des contraintes qui n'ont absolument pas lieu d'être.
J'appelle simultanément... Ensemble (en effet le terme n'était pas adéquat
Le problème n'était pas que mes relais soient activés exactement en même temps, mais qu'ils le soient ensemble pendant plusieurs secondes...
C'est effectivement possible avec cette board, mais pas en passant par un multiplexeur, qui lui comme l'a souligné pepe active qu'une sortie à la fois. Ce que fait le multiplexeur avec ma boucle c'est qu'il active alternativement (bien que très vite) les deux sorties. Suffisamment pour que visuellement les LEDs témoin des relais paraissent allumées en même temps, mais ce signal haché est insuffisant pour que les relais se déclenchent.
Comme l'ont suggérés J-M-L et dfgh un shift register est effectivement le composant qui remplira parfaitement cette tâche !