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!