#include "Multiplexer.h"
//**************************************************************
Mux::Mux(uint8_t numberOfChannels,
byte sigPin,
byte adress1,
byte adress2,
byte adress3,
byte adress4)
: m_numberOfChannels(numberOfChannels),
m_sigPin(sigPin),
m_adress1(adress1),
m_adress2(adress2),
m_adress3(adress3),
m_adress4(adress4)
{
if(m_numberOfChannels > 8) {m_numberOfAdressPins = 4;}
else {m_numberOfAdressPins = 3;}
//Set adresses to OUTPUT
pinMode(m_adress1, OUTPUT);
pinMode(m_adress2, OUTPUT);
pinMode(m_adress3, OUTPUT);
if(m_numberOfChannels > 8){pinMode(m_adress4, OUTPUT);};
//Set adresses to LOW
digitalWrite(m_adress1, LOW);
digitalWrite(m_adress2, LOW);
digitalWrite(m_adress3, LOW);
if(m_numberOfChannels > 8){digitalWrite(m_adress4, LOW);};
pinMode(m_sigPin, INPUT_PULLUP);
}
//**************************************************************
uint8_t Mux::muxRead(byte pin)
{
selectMuxPin(pin);
bool value = digitalRead(m_sigPin);
return(value) ;
}
void Mux::selectMuxPin(byte pin)
{
const int selectPins[4] = {m_adress1, m_adress2, m_adress3, m_adress4};
if (pin > (m_numberOfChannels - 1)) return; // Exit if pin is out of scope
for (int i = 0; i < m_numberOfAdressPins; i++)
{
if (pin & (1<<i)) {digitalWrite(selectPins[i], HIGH);}
else {digitalWrite(selectPins[i], LOW);}
}
}
Pour réaliser mes tests sur le 74HC4067, je connecte mon multiplexeur, je mets la pin 8 de mon Arduino à l'état "LOW" et à l'aide d'un jumper je test chacune des pins via le code suivant :
Pour la plupart des canaux cela fonctionne plutôt bien. Lorsque je connecte le jumper (pin 8) à un canal du multiplexer, le nom de la pin correspondante s'affiche dans la console.
Cependant deux canaux posent problème. Le canal 0 et le canal 8. Peu importe que je connecte le jumper sur l'un ou sur l'autre, je vois s'afficher à chaque fois dans la console "Channel 0" et "Channel 8" comme si les deux étaient connectés et que le changement d'état de l'un engendrait le changement d'état de l'autre.
C'est tres difficile de repondre, parce que le comportement depend pas mal du coté electronique. C'est pas forcément un probleme dans le code mais le code qui peut ne pas correspondre a l'electronique.
effectivement après pas mal de tests et de recherches je pense que le problème vient du hardware et non du software... Je prototype avec des multiplexeurs CMS que j'achète déjà soudés sur des petits circuits imprimés. Il doit y avoir un souci dans la conception du circuit imprimé qui génère des interférences entre la piste du channel 0 et du channel 8...
@michelbillaud :
Il s'agit d'un code test que je n'ai pas l'intention de réutiliser. L'objectif est de pouvoir travailler indépendamment sur chaque channel, ce q'une boucle ne me permet pas.
J'ai réalisé des tests complémentaires avec le même composant mais proposé par un autre fournisseur et ça fonctionne parfaitement. Le problème venait donc bien du hardware.
Il s'agit d'un code test que je n'ai pas l'intention de réutiliser. L'objectif est de pouvoir travailler indépendamment sur chaque channel, ce q'une boucle ne me permet pas.
Il s'agissait juste de ne pas perdre de temps avec 15 copier-coller-modifier manuels, perte de temps et cause d'erreurs stupides :
bool channel[16];
for (int i=0; i < 15; i++) {
channel[i] = Mux0.muxRead(i);
if (!channel[i]) {
Serial.print("Channel ");
Serial.println(i);
}
}
Dans les tests, on a déjà suffisamment de problèmes pour ne pas s'en ajouter avec des histoires de faute de frappe.
Personne ne voudrait tester du hardware avec un appareil de mesure bricolé vite fait jamais essayé avant ?
- Edité par michelbillaud 10 décembre 2021 à 13:16:57
Multiplexeur 74HC4067, conflit entre les canaux
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.