sk6812: send RESET to led strip at start.
This commit is contained in:
@@ -95,11 +95,15 @@ SK6812_SetAllColor:
|
|||||||
push r15
|
push r15
|
||||||
in r15, SREG
|
in r15, SREG
|
||||||
cli
|
cli
|
||||||
|
; reset
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM
|
||||||
|
Utils_WaitNanoSecs 80000, 0, r22 ; wait for 80us
|
||||||
lds r23, sk6812NumLeds
|
lds r23, sk6812NumLeds
|
||||||
SK6812_SetAllColor_loop:
|
SK6812_SetAllColor_loop:
|
||||||
rcall sk6812SendQuadruple ; (r16, r17, r24, r25)
|
rcall sk6812SendQuadruple ; (r16, r17, r24, r25)
|
||||||
dec r23
|
dec r23
|
||||||
brne SK6812_SetAllColor_loop
|
brne SK6812_SetAllColor_loop
|
||||||
|
sbi SK6812_PORT, SK6812_PINNUM
|
||||||
out SREG, r15
|
out SREG, r15
|
||||||
pop r15
|
pop r15
|
||||||
ret
|
ret
|
||||||
@@ -150,13 +154,13 @@ sk6812SendPattern_loop2:
|
|||||||
|
|
||||||
sk6812SendQuadruple:
|
sk6812SendQuadruple:
|
||||||
mov r16, r19 ; G
|
mov r16, r19 ; G
|
||||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
|
||||||
mov r16, r18 ; R
|
mov r16, r18 ; R
|
||||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
|
||||||
mov r16, r20 ; B
|
mov r16, r20 ; B
|
||||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
|
||||||
mov r16, r21 ; W
|
mov r16, r21 ; W
|
||||||
rcall sk6812SendByte ; (r16, r17, r24, r25)
|
rcall sk6812SendByte2 ; (r16, r17, r24, r25)
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -165,6 +169,10 @@ sk6812SendQuadruple:
|
|||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine sk6812SendByte
|
; @routine sk6812SendByte
|
||||||
;
|
;
|
||||||
|
; reset: 80microsecs
|
||||||
|
; 0: 300ns high, 900ns low (+/- 150ns)
|
||||||
|
; 1: 600ns high, 600ns low (+/- 150ns)
|
||||||
|
;
|
||||||
; @param r16 value
|
; @param r16 value
|
||||||
; @clobbers r16, r17, r24, r25
|
; @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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user