WS2811 RGB LED Strip Timing problema

0

Hace poco compré tiras de LED RGB direccionables basadas en el chip WS2811. Estas tiras tienen una sola línea de datos + reloj que utiliza una codificación de estilo NRZ para distinguir entre 1 y 0. La hoja de datos para la tira se puede encontrar en enlace

Dado que el tiempo es estricto para estas tiras, estoy tratando de usar el código de ensamblaje para impulsar la tira (mi primer intento con el ensamblaje).

Utilizando Atmega168 @ 16Mhz (1 reloj = 62.5ns), llamo al siguiente código de ensamblaje (que espero configurar el color del LED en BLANCO).

asm_pin_toggle:
sbi DDRC, 4

;reset the led strip data line ~50us
ldi R19, 255
loop:
    nop
    dec R19
    brne loop

ldi R19, 23 ;loop 24 times - all 1 bits
loop_all_1:
    sbi PORTC,4
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    cbi PORTC, 4

    dec R19
    brne loop_all_1


ret

Sin embargo, cuando ejecuto esto obtengo el color VERDE. ¿Alguna idea de qué estoy haciendo mal?

Hay muchas versiones del tiempo WS2811 flotando en internet. El que he usado es

  • T0H - 250ns
  • T0L - 1000ns
  • T1H - 1000ns
  • T1L - 250ns
  • RET - > = 50us

¡Cualquier ayuda será muy apreciada!

    
pregunta Ankit

1 respuesta

2

Se solucionó el problema

Estaba cargando 23 en el registro R19 (por lo tanto, el bucle solo se ejecutó 23 veces en lugar de 24).

Arreglar eso a 24 resolvió el problema.

    
respondido por el Ankit

Lea otras preguntas en las etiquetas