¿Cuál es el método correcto y actualizado para multiplexar entradas digitales?

4

Entonces, estoy siguiendo el diagrama aquí para conectar un MC14067BCP : enlace

La única diferencia es que estoy haciendo un conjunto de 16 sensores y no cuatro. Además, mis sensores son LDR de 5k a 250k (resistencias sensibles a la luz) que he conectado a tierra en el extremo opuesto a los conectados a las conexiones que se muestran en el diagrama anterior.

Cuando ejecuto mi croquis, la línea serie muestra una salida similar a la que se mostraría si no se conectaran cables a mi analógico. (vea la pregunta aquí para ver lo que quiero decir con eso: enlace ) Esto realmente me está estresando y sería increíble si alguien pudiera ilustrarme sobre lo que está sucediendo.

Aquí está mi código:

int CONTROLpin1 = 2;
int CONTROLpin2 = 3;
int CONTROLpin3 = 4;
int CONTROLpin4 = 5;
int analogPin = 0;


// Variables:
int actualSensorValue = 0;             // value from the analog input


void sendCommand(int value) {
  Serial.println(value);
}


void setup() {
  //  set the states of the I/O pins:
  pinMode(CONTROLpin1, OUTPUT);
  pinMode(CONTROLpin2, OUTPUT);
  pinMode(CONTROLpin3, OUTPUT);
  pinMode(CONTROLpin4, OUTPUT);
  pinMode(analogPin, INPUT); 

  Serial.begin(9600);
}


void loop() {
  int i;
  for (i=0; i <16; i++) {

    // set control pins on the multiplexers
    digitalWrite(CONTROLpin1, bitRead(i,0));//bit4
    digitalWrite(CONTROLpin2, bitRead(i,1));//bit3
    digitalWrite(CONTROLpin3, bitRead(i,2));//bit2
    digitalWrite(CONTROLpin4, bitRead(i,3));//bit1


    Serial.println(i); // print which pin we are on
    actualSensorValue = analogRead(analogPin);
    sendCommand(actualSensorValue);


    delay(1000); 
  }
}

Además, he intentado reducirlo al mínimo y solo cablear un solo sensor. Al mirar la salida, no parece haber ningún cambio. Aquí hay una foto del cableado de los huesos pelados:

(pero, para aclarar, mi objetivo final sigue siendo el diagrama al principio de esta publicación).

    
pregunta bradleygriffith

2 respuestas

1

Para hacer la "multiplexación" necesitaría alguna forma de controlar la línea de selección del mux (lo que significa una base de registro adicional de 2 entradas según la cantidad de sensores que tenga, por lo que para 16 sensores necesitará cuatro más. salidas para controlar la línea de selección). Y necesitaría un montón de puertas AND para seleccionar qué canal mux desea conectar a las entradas.

Si tuvieran pines CS (Chip Select) ellos mismos, podría evitar las puertas. Pero todavía tiene que preocuparse por convertir 4 salidas en 16 selecciones de chip; Probablemente podría obtener un decodificador de 4 bits para hacer eso.

Sin embargo, no me gusta ninguna de esas soluciones. Son muy desordenado Personalmente, usaría un par de buffers de entrada I2C y luego conectaría todas las entradas a esos y luego leería los buffers con el Arduino. Es más fácil de manejar y solo usa dos entradas en el Arduino. También es fácilmente extensible, siempre y cuando no tenga ningún conflicto de direcciones.

    
respondido por el ajs410
1

La forma más fácil de conectar muchas entradas a un micro usando partes comunes es usar un registro de desplazamiento como un 74HC165 para cada grupo de 8 bits. Ate el cable "/ PL" de cada registro de turno y haga lo mismo con "CP". Esos cables deben ir a un pin de CPU cada uno. Empate / CE de cada dispositivo bajo. Conecte la salida Q7 de todos menos el último dispositivo al cable DS del siguiente; el cable Q7 del último dispositivo debe unirse a un tercer pin de CPU. Para leer todas las entradas, maneje el CP bajo, presione el PL bajo y luego déjelo en la posición alta. El cable Q7 del último dispositivo será el estado que tuvo la entrada D7 del dispositivo cuando / PL se puso alto. Pulso CP alto y luego bajo, y el cable Q7 del último dispositivo mostrará el valor que tuvo su entrada D6 cuando / PL subió. Púlselo de nuevo, D5, etc. Después de que se haya emitido el D0 del último dispositivo, el siguiente pulso emitirá el D7 del dispositivo anterior, luego D6, D5, etc. Si tiene 12 chips con 8 entradas cada uno, 96 pulsos le permitirán leer Las 96 entradas. Este enfoque es ampliable a cualquier número de chips, con la única advertencia de que no se puede leer el estado de, por ejemplo. el pin de entrada 1000 sin leer el estado de los otros 999 primero.

    
respondido por el supercat

Lea otras preguntas en las etiquetas