Autor Tema: Propuesta/proyecto basada en arduino para comunicarse con placas de neopixels  (Leído 301 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado genisuvi

  • PIC16
  • ***
  • Mensajes: 113
Buenas tardes a todos, espero que estéis todos bien.

Recientemente he descubierto el "neopixel" y me estoy fijando en los de adafruit, la gama WS
Intro:
Aquí una muestra y fuente bastante ilustrativa: https://www.tweaking4all.com/hardware/arduino/arduino-ws2812-led/
Según veo sólo se necesita alimentación (V+ i V-) y una línea (DIN) de de datos para enviar datos en serie a estos LEDs. En el enlace se explica también cómo sería la trama de bits para indicar los que se enciende y los que no. Y hay como 2 formas de comunicarse por la línea DIN:
1.- Trama de bits en serie
2.- PWM (aún estoy indagando sobre esta parte)

Propuesta de proyectito:
Había pensado usar un arduino para comunicarme con su pwm y unas librerías opensource que ya gestionan la comunicación con las plaquitas estas de leds. Hasta aquí bien porque hay muchos ejemplos y es viable.
Por variar un poco la cosa, había pensado en usar un mismo PWM de arduino para comunicarme con varias de estas placas (matrices) en lugar de con una sola. Así pues estoy pensando una forma de multiplexar una sola señal PWM hacia varias de estas placas.
La cuestión es que una señal pwm no es una señal constante, es un tren de pulsos al fin y al cabo a una determinada frecuencia.

Mis dudas:
1.- Creeis que es viable multiplexar con un mux de varios (8, 16, etc..) canales sin muchos problemas? Controlar la selección de canal desde arduino y ofrecer la señal pwm al mux desde arduino tb. O existe algún tipo de switch o mux ideal dedicada a este tipo de multiplexado (señales pulsantes) que me podáis recomendar?
2.- Se os ocurre alguna idea alternativa para controlar con una sola señal pwm que no sea usar un mux (incluso aunque no se base en arduino).


Gracias a todos por vuestra atención y tiempo.

« Última modificación: 02 de Noviembre de 2020, 08:08:47 por genisuvi »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7950
Re:Propuesta/proyecto basada en arduino para comunicarse con placas de neopixels
« Respuesta #1 en: 30 de Octubre de 2020, 16:01:42 »
Busca WS2812 ya se trato el tema por aca, no necesitas un PWM, necesitas enviar un dato serial, como si fuera un SPI de forma continua.

Y si es como un SPI lo podes poner todos como una cadena

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1213
Re:Propuesta/proyecto basada en arduino para comunicarse con placas de neopixels
« Respuesta #2 en: 30 de Octubre de 2020, 17:37:54 »
Que tal genisuvi,

Dependiendo del modelo que elijas será la forma de enviar los datos. Uno sería por SPI y el otro es por medio de datos seriales en los cuales hay tres posibles datos: 0, 1 Reset.
El "0" está dividido en un nivel alto y un nivle bajo, donde el nivel alto dura menos tiempo que el nivle alto.
El "1" está dividido en un nivel alto y un vel bajo, pero aquí el nivel alto dura más tiempo que el nivel bajo de ahí su diferencia con el "0".
En ambos casos los dos estados hacen el dato "0" o "1".

Así que no hay PWM implicado en nigún momento en cuanto a la transferencia de datos se refiere. Creo que interpretaste mal la información.

Saludos,

elreypic.

Desconectado genisuvi

  • PIC16
  • ***
  • Mensajes: 113
Re:Propuesta/proyecto basada en arduino para comunicarse con placas de neopixels
« Respuesta #3 en: 02 de Noviembre de 2020, 08:08:22 »
Busca WS2812 ya se trato el tema por aca, no necesitas un PWM, necesitas enviar un dato serial, como si fuera un SPI de forma continua.

Y si es como un SPI lo podes poner todos como una cadena

A ver, ejemplos hay, al fin y al cabo se programan con trenes de pulso. Y supongo que se han basado en eso para tener la ocurrencia de que tal vez controlando en dutty cycle y el tiempo de cada ciclo (freq de la señal) pudieron controlar estos leds.

Este es un ejemplo: https://components101.com/displays/neopixel-led-strip

Así mismo tengo un compi que estaba usando librerías de arduino activando pines pwm como puerto de salida de datos hacia las matrices de leds. Así que hemos probado una y nos ha funcionado. He probado a pasar la señal PWM por un mux de 8 canales CD74HC4051 y también hemos podido. Así que sí, se puede multiplexar un pwm.

Sólo hay un detalle a comentar sobre el uso de pwm tanto con mux como sin mux y en el punto en el que estoy me quedaría ver si este fenómeno sucedería con pines de salida que no sean pwm, pero al final una señal PWM no dista de lo que circula por DIN:

A la hora de conectar un hilo desde arduino a DIN y ejecutar el fw de control efectivamente funciona correctamente. Encendemos los leds que queremos. Pero cuando aproximamos el hilo con la salida PWM a otro hilo conectado DIN de otras placas neopixels entra algún tipo de ruido porque se encienden algunos leds de forma aleatoria y random. Me ha parecido que manteniendo el hilo de DIN con un pull down en dicho hilo esta interferencia no se produce pero no estoy segura. Tengo que seguir probando.


Saludos y gracias @killerjc por responder! y a @elreypic.
« Última modificación: 02 de Noviembre de 2020, 09:43:53 por genisuvi »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7950
Re:Propuesta/proyecto basada en arduino para comunicarse con placas de neopixels
« Respuesta #4 en: 02 de Noviembre de 2020, 15:32:41 »
Citar
Así mismo tengo un compi que estaba usando librerías de arduino activando pines pwm como puerto de salida de datos hacia las matrices de leds

Te vuelvo a decir... lo que vos llamas PWM esta bien, ya que estas en realidad modificando el ancho del pulso en cada pulso de ese tren de pulsos.
Pero la información que transmitís no es el duty en si, sino símbolos que son un 1 o un 0, por lo tanto no lo consideraría como un PWM, distinto un servo en el cual el duty tiene la mayor importancia.

Por eso NO ES UN PWM, TAMPOCO USAS EL PWM del micro, por lo tanto lo único que haces es usar una salida común y cualquiera, y por ende, funcionaria en cualquier salida. solo es un delay y un cambio de pin. Si lees el codigo de la libreria, simplemente cambia la salida a 1 o 0 luego de algun delay o salto, fin..

Funciona con MUX o sin MUX porque es un tren de pulsos, donde cada pulso alto+bajo es un bit, fuera un PWM al momento que le quitaste el PWM, ya tendrías problemas, como es una comunicación serial lo que estas haciendo, no tenes problemas que este ausente un tiempo.

El modulo PWM esta para otra cosa totalmente distinta, en el cual tenes una frecuencia fija y vas variando el duty cada tanto, y no en cada uno del comienzo del timer (ciclos) que controla el duty.