¿Cuál es el número máximo de salidas que puede controlar desde un microcontrolador con n salidas?

6

He estado pensando en esto por un tiempo, y creo que es \ $ 2 ^ {(n-1)} \ $ output.

Si tengo 5 salidas, usaré 1 como señal y las otras 4 como líneas de control para descodificadores en cascada, lo que me da 16 salidas. Esto crece exponencialmente, por lo que está bien con microcontroladores con más de 4 salidas.

Pero ¿qué pasa con los microcontroladores con salidas limitadas (por ejemplo, 4). ¿Está limitado a solo 8 salidas aquí?

Editar:

El proyecto consiste en controlar una matriz de LED de brillo variable (controlada por PWM) de 32 x 4 desde un solo microcontrolador con un número limitado de salidas (4). Me pregunto si la complejidad involucrada en esto no merece la pena, y si se debe utilizar un microcontrolador con más salidas.

    
pregunta tgun926

6 respuestas

12

Depende de lo que quieras decir con "control". ¿Se está limitando a una lógica combinatoria simple, o están permitidos los protocolos serie?

En teoría, podría controlar un número arbitrario de salidas desde un solo pin utilizando algo como el protocolo Dallas / Maxim de 1 cable (serial) para controlar un conjunto de chips de expansión de E / S. Se pueden usar enfoques similares con I 2 C, SPI, o registros de desplazamiento simple, cada uno de los cuales requeriría un mínimo de 2 pines.

    
respondido por el Dave Tweed
4

Si puede usar fácilmente un microcontrolador con más salidas, y debería ser bastante fácil, a menos que ya tenga muchas otras salidas comprometidas para otro propósito, entonces hágalo.

Si no puede, entonces generalmente puede economizar utilizando registros de desplazamiento : enlace

Podría tener cinco registros de desplazamiento de 8 bits, cuatro en el ancho de 32 bits y uno para la altura de 4 bits. Use sus cuatro pines como datos, reloj, pestillo y selección de chip.

    
respondido por el pjc50
1

Eso depende de qué tan rápido necesites controlarlos. Si necesitas alta velocidad entonces tu ecuación se mantiene. Si puede soportar un poco de retraso, puede usar los expansores I 2 C (2 GPIOs) o '595s (3 salidas), concentrados o en cascada según sea necesario.

    
respondido por el Ignacio Vazquez-Abrams
1

Puede usar un bit más un bit de desplazamiento para controlar un número arbitrario mediante el uso de registros de desplazamiento en serie autorizados, y su salida podría ser CUALQUIER número, no solo un patrón de 1 de 16 o algo así.

    
respondido por el Scott Seidman
0

Si solo desea controlar los LED, también puede usar CharliePlexing. Usando este método, n salidas pueden manejar (n ^ 2 - n) segmentos o LED.

enlace

    
respondido por el Chris Feltman
0

Como se señaló, al usar los registros de desplazamiento, es posible controlar cualquier número de salidas usando una pequeña cantidad de pines de la CPU. Con respecto a sus requisitos específicos, no especifica el número de niveles de brillo que necesita, pero probablemente podría alcanzar un número razonable de niveles de brillo si tiene el pin de "registro latch" de los registros de desplazamiento vinculado a una habilitación de salida. Suponga que desea 128 niveles de brillo a una frecuencia de actualización de 60Hz o superior, y se necesitan 100us para marcar los bits para seleccionar y cargar una fila.

El bit de salida de reloj 0 del brillo para cada luz en la fila 0, luego pulsa la activación de latch / output para 20us. Luego registre en el bit 1 el brillo para cada luz en la fila 0 y pulse la función de enclavamiento / salida para 40us. Luego bit 2 y pulso para 80us. Para los bits 3 a 6, la duración del pulso seguirá duplicándose, pero podrá cronometrar en el siguiente bit de datos durante la parte "activa" del ciclo (ya que querrá que la habilitación esté activa durante más tiempo que él). Toma para desplazarse a través de los bits). Los primeros tres bits tomarán unos 100 + 20 + 100 + 40 + 100 + 80 microsegundos (440us en total). Los siguientes cuatro bits tomarán aproximadamente 160 + 320 + 640 + 1280 (2400us), para un total de aproximadamente 2840us. Hacer eso para las cuatro filas tomará menos de 12 ms, por lo que una frecuencia de actualización de 60Hz no debería ser un problema.

Una pequeña limitación con este enfoque es que debes asegurarte de no tratar de cambiar el brillo de las luces en una fila mientras se está procesando esa fila. De lo contrario, si por ejemplo el brillo de una luz cambia de 63 a 64 entre los tiempos en que se emiten los bits 5 y 6, la luz puede encenderse durante los primeros 6 bits (ya que los bits 0-5 están establecidos, aunque el bit 6 está despejado), y luego activado durante el último tiempo de bit (ya que el bit 6 se activará, aunque los bits 0-5 estén despejados), lo que hace que aparezca brevemente con el brillo máximo. Sin embargo, si ajusta el brillo de las luces en una fila antes de escanear esa fila, deben evitarse tales dificultades.

    
respondido por el supercat

Lea otras preguntas en las etiquetas