200 LED a través de arduino a través del registro de cambios SN74HC595N

0

Soy muy nuevo en cualquier forma de multiplexación y mucho menos en la electrónica. Por lo que he investigado, puedo agregar más entradas / salidas a un Arduino a través de un registro de desplazamiento. Compré 10 SN74HC595N registros de desplazamiento que tienen 10 salidas cada uno (creo). Necesito controlar dos tiras principales de LED, que se ramifican en ciertos segmentos.

Sé que la electrónica es muy básica, y creo que el uso de multiplexación me dará más entradas / salidas. Si tengo 10 registros de turnos que me dan 10 entradas cada una, me dan 100 entradas / salidas adicionales. idealmente, solo tendría que intentar obtener dos LED por entrada, por lo que técnicamente podría usar charlieplexing. Alguien puede explicar qué hacer para conectar 2 tiras individuales de LED (100 cada una) a un registro de desplazamiento mediante multiplexación.

    
pregunta Emily Birkler

2 respuestas

0

Según tengo entendido, usted quiere controlar dos tiras de LED donde cada tira tiene 100 LED y quiere controlar cada LED individual en cada tira. Entonces, lo que realmente quiere saber es cómo hacerlo con una tira: luego vuelva a copiar el circuito para otra tira. Explicaré cómo se hace construyendo tu propia tira de LED. Debe conectar los suficientes chips de 74hc595 juntos en la configuración "en cadena" para completar tantas salidas como necesite (100 en su caso). Lo que necesita para conectar la "cadena margarita" a una MCU. La MCU realmente hará los patrones que necesita, enviando el patrón al circuito de "cadena de margaritas" y el circuito de "cadena de margaritas" de 74hc595 simplemente expande la salida de la MCU. Necesitará conectar un LED a cada una de las 100 salidas para construir su tira de LED.  Necesitará una fuente de alimentación adecuada para encender tantos LED también. Personalmente creo que charlieplexing a mano será demasiado tedioso para tantos LEDs.

    
respondido por el Pete
0

TL; DR: la multiplexación no puede eliminar la complejidad. De hecho, nada puede eliminar la complejidad. Si algo es intrínsecamente complejo, todo lo que puedes hacer es mover esa complejidad a un área donde puedas manejarlo.

En el caso de multiplexación, mueve la complejidad de a ton of individual wires that are relatively slow a a few wires that have to work like mad to get all that information across . Con algunas excepciones como charlieplexing , la mayoría de las técnicas se reducen a usar algún tipo de comunicación predefinida para que un software de ejecución de MCU diga a otro , chip relativamente tonto como un registro de desplazamiento, qué hacer.

Hice esto con SPI (Interfaz Periférica Serial) hace unos años. De hecho, tuve tanto las entradas (botones) como las salidas (LED) multiplexadas en solo 4 pines MCU. Como preguntaste sobre las salidas, aquí está mi esquema de LED:

Esposiblequeesteregistrodeturnosespecíficonocoincidaconelsuyo,peroeslamismaidea.UsandolosnombresdelasseñalesSPI:

  • CS=ChipSelect
    • Cuandobaja(Chipseleccionadoparatransferenciadedatos),losregistrosdedesplazamientocambianunbitporreloj.
    • Cuandopasaanivelalto,losregistrosdedesplazamientoemitencualquierbytequehayanterminadoconsuspinesQx.
    • EstaeslaúnicaseñaldelascuatroquenoesadministradaporelperiféricoSPI(unapartedelalógicacableadaqueestáincorporadaenelchipMCUparacontrolarestetipodecomunicaciónmientraselsoftwareseapagayhaceotracosa).Porlotanto,podríasercualquierpindesalidaconvenientedelaMCU.
  • SCK=SerieClocK
    • CadatransicióndeinactivoaactivodesplazaunbitdeMOSIalprimerregistrodeturno.Todoslosbitssemuevenunoauno,yelquesaledelotroextremovaalsiguienteregistrodedesplazamiento,yasísucesivamentehastadondequierair.
    • NopuedodeciraltoobajoaquíporqueSPIlepermitealdiseñadordeterminarquéestadosignificaqué.Peroenestecaso,lahojadedatosdelregistrodecambiosprobablementelodeterminaráporusted.
  • MOSI=MasterOutSlaveIn
    • Estossonlosdatosrealesquedeseaquesemuestren,quesepresentenbitabityqueseconfirmenconelbordedelrelojapropiado.
  • MISO=MasterInSlaveOut
    • Setratadedatosqueserecibenalmismotiempoqueestáordenandotodasesassalidas.Noseusaenestaplacaenparticular,peroestáconectadodirectamentealotroconector.
    • Tengootravariantedeestaplacaquehacealgosimilarconlosbotonesysepuedeencadenarconesteencualquierordenyconcualquiernúmerodecopias,demodoqueelmismoperiféricoSPIyelmismocontroladordesoftwarepuedanleerunatoneladadebotonesymanejaunatoneladadeLEDalmismotiempo.

Asíqueeseeseldiseñodelhardware.

Ensoftware,yo:

  • ConfigureelperiféricoSPIydosmatricesdeigualtamaño,unaparaLEDyotraparabotones
    • Tienenqueserdelmismotamañoenelsoftware,inclusosinolosonfísicamente,porqueparacadabyte,unotienequeentrar.Porsupuesto,puedeevitaresterequisitohaciendoquelosISRseanunpocomáscomplicados.,peromiproyectolostuvolosuficientementecercacomoparaigualardetodosmodosquenovilanecesidad.
  • DefinalasRutinasdeServiciodeInterrupción(ISR)apropiadasparaqueestecontroladorpueda"simplemente funcionar" sin que el software principal tenga que hacer nada especial
    • Un ISR de temporizador inicia una actualización completa cargando el primer byte de LED en el registro de desplazamiento del periférico SPI (integrado en la MCU), iniciando esa transmisión y habilitando el ISR de cambio realizado
    • El ISR de cambio realizado continúa la actualización colocando todo lo que haya terminado en el registro de cambios del periférico SPI en la matriz de botones, escribiendo el siguiente valor de LED en su lugar y comenzando esa transmisión. Si acaba de pasar por toda la matriz, también se desactiva.
  • Escriba el software principal para usar esos arreglos como si fueran magia. Los ISR se encargan del resto.

Por supuesto, esa es una explicación simplificada. También tendrá que dividir la señal CS explícitamente en los ISR en algún lugar. Mire a través de las hojas de datos y piense cuidadosamente sobre el tiempo.

    
respondido por el AaronD

Lea otras preguntas en las etiquetas