sk6812: send RESET to led strip at start.

This commit is contained in:
Martin Preuss
2025-05-04 22:42:42 +02:00
parent dc62f1fe05
commit f31567e785

View File

@@ -95,11 +95,15 @@ SK6812_SetAllColor:
push r15
in r15, SREG
cli
; reset
cbi SK6812_PORT, SK6812_PINNUM
Utils_WaitNanoSecs 80000, 0, r22 ; wait for 80us
lds r23, sk6812NumLeds
SK6812_SetAllColor_loop:
rcall sk6812SendQuadruple ; (r16, r17, r24, r25)
dec r23
brne SK6812_SetAllColor_loop
sbi SK6812_PORT, SK6812_PINNUM
out SREG, r15
pop r15
ret
@@ -150,13 +154,13 @@ sk6812SendPattern_loop2:
sk6812SendQuadruple:
mov r16, r19 ; G
rcall sk6812SendByte ; (r16, r17, r24, r25)
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
mov r16, r18 ; R
rcall sk6812SendByte ; (r16, r17, r24, r25)
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
mov r16, r20 ; B
rcall sk6812SendByte ; (r16, r17, r24, r25)
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
mov r16, r21 ; W
rcall sk6812SendByte ; (r16, r17, r24, r25)
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
ret
; @end
@@ -165,6 +169,10 @@ sk6812SendQuadruple:
; ---------------------------------------------------------------------------
; @routine sk6812SendByte
;
; reset: 80microsecs
; 0: 300ns high, 900ns low (+/- 150ns)
; 1: 600ns high, 600ns low (+/- 150ns)
;
; @param r16 value
; @clobbers r16, r17, r24, r25
@@ -198,3 +206,40 @@ sk6812SendByte_sendOne:
; ---------------------------------------------------------------------------
; @routine sk6812SendByte2
;
; reset: 80microsecs
; 0: 300ns high, 900ns low (+/- 150ns)
; 1: 600ns high, 600ns low (+/- 150ns)
;
; @param r16 value
; @clobbers r16, r17, r24, r25
sk6812SendByte2:
ldi r17, 8 ; +1
sk6812SendByte2_loop:
lsl r16 ; +1
brcs sk6812SendByte2_sendOne ; +1 if false, +2 if branch taken
nop ; +1
; send ZERO
sbi SK6812_PORT, SK6812_PINNUM ; +2 set HIGH
nop ; +1 (125ns)
cbi SK6812_PORT, SK6812_PINNUM ; +2 set LOW (250ns)
dec r17 ; +1 (125ns)
brne sk6812SendByte2_loop ; +1 if false, +2 if branch taken
ret ; +4
sk6812SendByte2_sendOne:
sbi SK6812_PORT, SK6812_PINNUM ; +2 set HIGH
nop ; +1 (125ns)
nop ; +1 (125ns)
nop ; +1 (125ns)
cbi SK6812_PORT, SK6812_PINNUM ; +2 set LOW
dec r17 ; +1
brne sk6812SendByte2_loop ; +1 if false, +2 if branch taken
ret ; +4
; @end