¿Cómo puede un microprocesador con solo unos pocos pines de salida digital controlar la salida alta / baja en muchos cientos de pines?

Con un número finito de pines, en teoría es posible controlar un número casi infinito de salidas. Lo que necesita es un ‘decodificador de direcciones’ o un demultiplexor o un convertidor binario a termométrico.

El más simple de ellos traduce los 8 bits a 256 pines, de los cuales uno de ellos se puede afirmar en un momento dado. Esto es ‘sin estado’, lo que hace que sea muy fácil de construir y usar. (Decodificador de direcciones)

Podría construir circuitos más complejos que tengan elementos de memoria que den una sensación de “estado” al decodificador de direcciones que se pueda extender a cualquier número de salidas. La idea básica es utilizar la información de varias transacciones en el bus de 8 bits y concatenarlas. Un ejemplo de esto es un tipo de lógica de cambio de carga donde cambia en 32 transacciones de 8 bits y las carga a la vez. La ventaja sobre el circuito anterior es que ahora puede configurar cualquier salida en cualquier estado. El circuito anterior solo le permitía seleccionar una salida.

Esta parece ser una vieja pregunta, así que no pasaré mucho tiempo en ello.
Tienes muchas IO, así que la primera pregunta es, ¿hay otra forma de hacerlo?

Si no es así, necesitará 256 bits de almacenamiento fuera del procesador, y algo de codificación y decodificación.
Hay varias formas de hacerlo, algunas de las cuales requieren más hardware y otras requieren menos a expensas del tiempo.

El enfoque de hardware mínimo sería dividir su salida de 8 bits en 6 flujos en serie y dos bits de reloj.
Luego coloque 6 registros de desplazamiento en serie y en paralelo con registros de salida.
Tendrá que conectar en cascada seis chips de registros de 8 bits para hacer un registro de 48 bits, seis veces.
Use el primer bit de reloj para controlar los relojes de registro de desplazamiento para los seis chips en los seis registros de desplazamiento, aquí supongamos que o-> 1 carga el registro de desplazamiento desde la entrada. Luego regrese el reloj a 0.
Use el segundo bit de reloj para controlar las 48 entradas de carga de los registros de desplazamiento que transfieren el contenido del registro de desplazamiento a las salidas.
Necesitará buffers para manejar 48 entradas con cada reloj. Por lo general, las salidas en la unidad lógica de aproximadamente 10 entradas.

Utilice cada una de las seis transmisiones en serie para controlar la entrada de un registro de desplazamiento de 48 bits. Tendrá que usar el software para establecer el primer bit para cada una de las 6 salidas en esas salidas. Use un bit de reloj y luego conduzca alto, luego bajo para cambiar los datos al registro de desplazamiento.
Luego, ensamble los siguientes seis bits y repita cambiando el bit del reloj, repita 48 veces en total.
Cuando toda la carga de datos se carga en los registros de desplazamiento (48 veces 6 bits o 288 bits, algunos más de lo requerido), entonces debe alternar el segundo bit de reloj de 0-> 1 y volver a 0 para transferir todos el contenido del registro de desplazamiento a los registros de salida.

El chip expansor I2C está bien, pero es demasiado complicado si no tiene un periférico I2C o una biblioteca para el microcontrolador que está utilizando. Una manera fácil es usar un registro de desplazamiento de entrada en serie y salida en paralelo. Una forma es una cadena de chips 74HC595. O un dispositivo lógico programable, pero uno con tantos pines también sería un dolor.

Pruebe con CD4067 1:16 MUX en modo en cascada. Eso debería cumplir su requisito. Sin embargo, aún se quedará corto con un pin para controlar el valor de datos de ALTO o BAJO. Vea si se puede liberar cualquier pin adicional de micro para hacerlo.

Creo que la forma más fácil es codificar las salidas.

puede codificar la respuesta mediante programación y usar 8 X 256 Decoder … La velocidad de bits disminuirá.