sk6812: send RESET to led strip at start.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user