From 147f920eb6a19718a20a15d598f9d579ba01e2d2 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Wed, 14 May 2025 01:48:24 +0200 Subject: [PATCH] avr/sk6812: improved protocol implementation. still doesn't work with new 5m LED strips from BTF-Lighting (1m strips do work, as do older 5m stripes). --- avr/modules/sk6812/main.asm | 119 +++++++++++++++--------------------- 1 file changed, 50 insertions(+), 69 deletions(-) diff --git a/avr/modules/sk6812/main.asm b/avr/modules/sk6812/main.asm index 1671ed1..ba1ad37 100644 --- a/avr/modules/sk6812/main.asm +++ b/avr/modules/sk6812/main.asm @@ -154,92 +154,73 @@ sk6812SendPattern_loop2: sk6812SendQuadruple: mov r16, r19 ; G - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r18 ; R - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r20 ; B - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) mov r16, r21 ; W - rcall sk6812SendByte2 ; (r16, r17, r24, r25) + rcall sk6812SendByte4 ; (r16, r17, r24, r25) ret ; @end -#if 0 + ; --------------------------------------------------------------------------- -; @routine sk6812SendByte +; @macro M_SK6812_HANDLEBIT + +.macro M_SK6812_HANDLEBIT + lsl r16 ; +1 + brcs l_sendOne ; +1 if false, +2 if branch taken + ; send ZERO + nop ; +1 + out SK6812_PORT, r25 ; +1 HIGH + nop + nop + nop + out SK6812_PORT, r24 ; +1 + nop ; +1 + rjmp l_end ; +2 +l_sendOne: + out SK6812_PORT, r25 ; +1 HIGH + nop ; +1 + nop ; +1 + nop ; +1 + nop ; +1 + nop ; +1 + out SK6812_PORT, r24 ; +1 + nop ; +1 +l_end: +.endmacro +; @end + + + +; --------------------------------------------------------------------------- +; @routine sk6812SendByte4 ; ; reset: 80microsecs -; 0: 300ns high, 900ns low (+/- 150ns) -; 1: 600ns high, 600ns low (+/- 150ns) +; 0: 500ns high, 750ns low (+/- 150ns) +; 1: 750ns high, 500ns low (+/- 150ns) +; 8 ticks per cycle ; ; @param r16 value ; @clobbers r16, r17, r24, r25 -sk6812SendByte: - ldi r17, 8 ; +1 - ldi r24, (1<