Cuando la IO está limitada en una unidad de control, ¿cómo se aleja la lógica de la unidad?

8

Por ejemplo, si tuviera un Arduino con 4 pines IO digitales, ¿cómo podría encender independientemente > 4 LED, o lea el estado de > 4 botones?

    
pregunta cheesysam

5 respuestas

4

Un registro de desplazamiento como 74595 le permitirá tener muchas salidas con solo 2 conexiones: un pin de datos y un pin de reloj. Establece el pin de datos al siguiente valor que desea mover al registro, y luego pulsa el pin del reloj.

    
respondido por el Ignacio Vazquez-Abrams
7

Bruno dio una buena respuesta, pero me gustaría hacer algunas notas.

Los infames 70 mA
El 74HC595 se usa a menudo como I / O extendido, y tan a menudo se usa para controlar una serie de LED. Lo que a menudo se pasa por alto es que puede operarlo fuera de especificaciones de esta manera. La hoja de datos dice que la corriente de suministro total no debe ser superior a 70 mA, Clasificación Máxima Absoluta (AMR), por lo que es mejor que se mantenga alejado de eso por algún margen. Por lo tanto, 8 LED a 10 mA es demasiado, y a 20 mA excederá la AMR en no menos del 130%. El límite se debe probablemente a la capacidad de corriente de los cables de unión, y luego la corriente demasiado alta no solo puede deteriorar el rendimiento de la pieza, sino que se pone fuera de servicio permanentemente si ese cable se rompe.

Pero anoche me desperté porque tenía Una idea . El límite de 70 mA se aplica tanto a Icc como a la corriente de tierra, entonces, ¿por qué no dividir nuestro total o 80 mA y dejar que Icc tenga la mitad y la corriente de tierra de la otra mitad? Todo lo que tiene que hacer es hacer referencia a 4 de los LED a tierra (activo alto), y los otros 4 a Vcc (activo bajo). Luego, la corriente de la primera proviene de Icc, la corriente de las otras se va a la tierra. Podrás utilizar 15 mA LED de esta manera. (Es tan simple que me siento como un idiota por no haberlo pensado antes).

Los relojes combinados
Pensé que Bruno guardó un pin de E / S extra al combinar el reloj del registro de cambios con el pestillo. Parece que malinterpreté su respuesta. Todavía quiero expandir esta opción.

¿Qué pasa entonces? La tabla en la página 5 de la hoja de datos dice:

  

los contenidos del registro de desplazamiento se desplazaron a través; anterior contenido de la   El registro de desplazamiento se transfiere al registro de almacenamiento y al paralelo   etapas de salida

(resaltado por mí)
Por lo tanto, no se trata de los datos nuevos , sino de los anteriores que se están bloqueando. No es un problema real, solo asegúrate de cambiar en un bit de relleno extra para bloquear los últimos datos, o todo será un pin incorrecto.

La combinación de los relojes también significa que las salidas cambiarán todo el tiempo mientras esté cambiando los nuevos datos. La función del pestillo era en realidad evitar eso. En muchos casos, esto no será un problema, si puede hacerlo rápido, pero en el peor de los casos puede obtener efectos no deseados. El peor de los casos podría ser usar el 74HC595 para multiplexar una pantalla a una frecuencia de escaneo muy alta + tener una cadena muy larga de registros de desplazamiento + tener todos los 1 excepto un 0, un LED que está apagado + una habitación oscura. Como ese LED ve pasar todos los 1 de vez en cuando en una habitación oscura, puede que se encienda muy débilmente.

O si combina esa multiplexación de alta frecuencia con una salida de control de relé. Todos los ceros y luego un 1 para el relé pueden significar que la salida del relé no es lo suficientemente alta como para jalar.

Por supuesto, esos son casos extremos, pero mantendré separados el reloj de serie y el de enganche siempre que sea posible si quiere multiplexar, o de lo contrario tengo altas tasas de actualización.

    
respondido por el stevenvh
6

Estoy de acuerdo con Ignacio en cuanto al uso de un registro de desplazamiento de salida paralelo en serie 74XX595 para la expansión de salida, pero en realidad necesitará 3 conexiones, una para datos , una para reloj y un latch enable que transferirá los datos del registro de desplazamiento interno a los latches de salida.

Paralaexpansióndelasentradas,puedeusarunregistrodedesplazamientodesalidaenserie74XX165,paralelo,estopermitirátenerhasta8botonespor74XX165.

Lo bueno de este enfoque es que puede encadenar varios registros de desplazamiento permitiendo un mayor número de entradas o salidas, y mejor aún, puede mezclar 74XX595 y 74XX165 permitiendo que tenga cualquier número de entradas o salidas.

Además, puede compartir el reloj y las señales de bloqueo reduciendo el número de conexiones necesarias y simplificando enormemente el software. De esta manera, solo necesitará 4 conexiones para cualquier número de cualquiera de los registros de este turno:

  • Reloj (compartido con todos los registros de turnos)
  • Habilitar Latch (compartido con todos los registros de turnos)
  • Entrada de datos (conectada a la salida en serie del último registro de turno en la cadena)
  • Salida de datos (conectado a la entrada en serie del primer registro de desplazamiento en la cadena)

Editar

Mientras buscaba un diagrama, encontré en este sitio web una forma muy inteligente de reducir a 3 el número de conexiones requeridas. Consiste en usar el mismo pin para la entrada y salida de datos.

El software hará algo como esto para cada pulso de reloj:

  1. Configurar pin como una salida
  2. Establezca el valor de los datos
  3. Enviar un pulso de reloj
  4. Configurar pin como entrada
  5. Lee los datos

    
respondido por el Bruno Ferreira
5

Nick menciona los expansores de E / S, y definitivamente vale la pena analizarlos. Digikey enumera más de un millar de ellos, elegiré uno con una interfaz I2C como ejemplo, porque eso requiere la menor cantidad de pines de E / S; mínimo dos.

El NXP PCA9505 tiene 40 pines de E / S configurables, el equivalente a cinco 74HC595s. Es una solución un poco más cara pero obtienes mucha más funcionalidad para eso:

  • Cualquier pin de E / S puede configurarse como entrada o salida
  • pullups de 100 kΩ en todos los pines de E / S (el PCA9506 no tiene los pullups, que pueden ser relevantes para aplicaciones de baja potencia)
  • Todas las salidas pueden hundir 15 mA simultáneamente, para un paquete total de 600 mA
  • Una salida de interrupción en cambio hace que el escaneo continuo de las entradas sea superfluo
  • Sólo dos cables para conectar al microcontrolador.

Lecturas adicionales
expansores GPIO , Folleto de NXP
hoja de datos de PCA9505

    
respondido por el stevenvh
4

Para una solución sin circuitos integrados adicionales, puede utilizar técnicas como Multiplexing y Charliplexing :

Multiplexación (no se muestran resistencias limitadoras de corriente):

Laformaenquefuncionalamultiplexaciónesbastantesimple:enelejemploanterior,siqueremosencenderelLED1,configuramoselpinC1ensalidaaltayelPINR1ensalidabaja,todoslosotrospinespuedenseraltosoHi-Z(establecidoenentrada,altaimpedanciaqueloshaceparecer"desconectados")
Si deseamos encender el LED5, configuramos el pin C2 en salida alta y R2 en salida baja.

El número de pines necesarios para controlar los LED x puede calcularse mediante 2n pines para n² LED, por ejemplo, para 16 LEDs necesitamos (√16) * 2 = 8 pines.

Charlieplexing:

Diseñoesquemáticoalternativo(másordenado)(sugeridoporSupercat):

Esto es un poco más complejo, pero usa menos pines para impulsar un mayor número de LED. Por ejemplo, podemos usar solo 5 pines para controlar 20 LED como en el ejemplo anterior (en comparación con al menos 10 pines con multiplexado de matriz "normal" (no debe confundirse con usar un IC, en cuyo caso el número de pines necesarios es log2 (nLED).

Para una solución externa, puede usar elementos como Shift Registers o Multiplexers como 74HC595 y 74HC151.
Un registro de desplazamiento toma un flujo de entrada serial de datos de reloj y sale en paralelo (Serial In Parallel Out SIPO) o al revés (PISO)
Generalmente tienen 8 salidas (o entradas) pero puedes encadenar tantas como quieras para extender las cosas. El lado negativo es que la velocidad que puede actualizar se divide por el número de salidas por entrada (por ejemplo, para un registro de 8 salidas, si tiene un reloj de entrada de 8 MHz, puede actualizar a 1 MHz, para 16 salidas 500 kHz, etc.)

Estas técnicas también pueden funcionar a la inversa para las entradas.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas