¿Puedo conectar varios registros de desplazamiento SN74HC595 por separado (sin encadenarlos) al mismo Arduino?

2

Soy una especie de novato en toda esta idea de los registros de turnos y la biblioteca de manejo de registros de cambios de Arduino. He encontrado muchas demostraciones en línea, donde los registros de turnos están encadenados. Pero necesito conectar varios registros de turnos a mi Arduino sin encadenarlos. Mi sentido común dice, ¡Sí! puede, pero no estoy muy seguro y no tengo ese IC a mano para poder construir físicamente el circuito y probar.

Soy muy tímido e incómodo para hacerles esta pregunta a ustedes, si resulta que es una pregunta estúpida. Así que ... por favor, misericordia en mi alma :)

    
pregunta Khaliddhali

5 respuestas

1

Sí. Por lo general, cada registro de turno requiere tres pines (datos, pestillo, reloj), pero si su aplicación hace posible compartir relojes o tanto el reloj como el pestillo, entonces el recuento de pines requerido será menor.

Tenga en cuenta que si dos registros de desplazamiento se conectan por separado (no hay pines compartidos), no se pueden actualizar simultáneamente (nota al pie de página: puede usar el periférico SPI para controlar los registros de desplazamiento, y esto puede ejecutarse mientras golpea los otros pines) , para que pueda actualizar los registros de turnos simultáneamente. Tipo de).

Para expandir el latch / clock de uso compartido (suponiendo que se trata de pines de bit banging y no está utilizando el periférico SPI):

Compartimiento compartido : los SR se actualizarán (los registros internos se bloquearán a las salidas) simultáneamente. Sin embargo, todavía tendrá que sincronizar los datos a ambos SR por separado. La secuencia sería "desbloqueo, datos de reloj 1, datos de reloj 2, cierre".

Pestillo / reloj compartido : puede actualizar los SR simultáneamente y registrar los datos en una sola secuencia. En su ciclo de reloj, simplemente actualice ambos pines de datos. Por lo tanto, la secuencia es "desbloquear, sincronizar ambos flujos de datos, bloquear". Esto es más rápido, pero para muchas aplicaciones, esta distinción no importará.

    
respondido por el uint128_t
0

¿Por qué necesita conectarse sin conexión en cadena?

La forma más rápida y sencilla de actualizar todos sus registros de turnos, utilizando las herramientas de Arduino simples existentes, es mediante la conexión en cadena.

En el software, lo que haces es asignar una matriz de bytes, tantos bytes como tienes 595s. Un solo comando cambiará toda la matriz a todos los 595s.

Si una de las razones para no conectar en cadena es que algunos 595 no deben actualizarse, simplemente cargue el byte correspondiente con los datos antiguos y ese 595 se actualizará a los mismos datos, sin ningún problema. Si tiene diferentes procesos para 595 diferentes, simplemente alias sus propios punteros en el búfer de salida, cada proceso puede actualizar solo sus propios bytes.

Si no realiza la conexión en cadena, tendrá que repetir la función de byte out de SPI para diferentes pines, lo que consume tiempo adicional, así como pines en exceso.

Una vez que se ha iniciado la transferencia del búfer, utiliza hardware, por lo que no hay una carga adicional en el programa. Tendría que ser una tubería muy grande de 595s para que la latencia a través de ellos fuera significativa. Recuerde que si maneja todos los pasadores de bloqueo en paralelo, todas las salidas se actualizarán exactamente al mismo tiempo, independientemente de su posición en la tubería.

    
respondido por el Neil_UK
0

Si bien puede hacer esto, si necesita muchos de ellos y todos son individuales en lugar de encadenados, podría ser más fácil usar un expansor GPIO I2C, por ejemplo. El PCA8574. Cada uno de estos chips proporciona 8 pines que se pueden controlar de forma independiente. Se conectan a través del bus I2C y se pueden configurar en una de las 8 direcciones, por lo que puede usar 8 de ellas con solo 2 pines de su controlador. Esto se puede expandir también usando PCA8574As (que tienen una parte fija diferente de su dirección) a 16 chips por bus. Arduinos tiene un solo puerto I2C de hardware, pero también puede controlar un bus I2C desde pines IO normales, por lo que puede aumentar esto fácilmente para controlar más si es necesario.

Por supuesto, hay un inconveniente de que los pines se pueden controlar individualmente, y es que si desea cambiar los pines de salida de forma síncrona, no podrá hacerlo. Pero si eso no es un requisito, creo que usar expansores GPIO es una ruta más simple y más ampliable para controlar un gran número de salidas.

    
respondido por el Jules
0

La respuesta es sí. La pregunta es perfectamente válida y es aplicable en ciertos escenarios donde necesita precisión de microsegundos y fuera de gpios. Daisy encadenando dos chips 595 y enviando dos bytes tomaría el doble de tiempo de enviar solo uno en su lugar.

Supongamos que tiene una información completa de 8 bits que debe actualizarse con frecuencia en uno de ellos, y solo controla los bits que necesitan actualizaciones menos frecuentes en otro.

Podría permitirse perder un gpio en tal escenario.

En este caso, solo debe asignar pines STCP a cada 595. DS y SHCP podrían ser compartidos.

    
respondido por el Nejat76
0
  

Pero no estoy muy seguro y no tengo ese IC a mano para poder construir el circuito y probar físicamente.

puedes hacerlo, más fácil con HC164 que con HC595 pero definitivamente se puede hacer: usando el pasador de seguridad como un mecanismo de selección de chip.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas