sk6812: fixed timing issues (works again with BTF-Lighting LED strips).
This commit is contained in:
@@ -58,11 +58,12 @@ SK6812_Init:
|
|||||||
|
|
||||||
sbi SK6812_DDR, SK6812_PINNUM ; set to output
|
sbi SK6812_DDR, SK6812_PINNUM ; set to output
|
||||||
cbi SK6812_PORT, SK6812_PINNUM ; set LOW
|
cbi SK6812_PORT, SK6812_PINNUM ; set LOW
|
||||||
ldi r16, 150
|
ldi r16, 144
|
||||||
sts sk6812NumLeds, r16
|
sts sk6812NumLeds, r16
|
||||||
|
|
||||||
rcall sk6812ReadConfFromEeprom
|
rcall sk6812ReadConfFromEeprom
|
||||||
ldi r18, 1 ; ON
|
|
||||||
|
ldi r18, 1 ; ON (DEBUG)
|
||||||
rcall SK6812_SetState ; (r16, r17, r18, r19, r20, r21, r23, r24, r25)
|
rcall SK6812_SetState ; (r16, r17, r18, r19, r20, r21, r23, r24, r25)
|
||||||
|
|
||||||
sec
|
sec
|
||||||
@@ -87,37 +88,6 @@ SK6812_Fini:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine sk6812SetAllColor
|
|
||||||
;
|
|
||||||
; Set all LEDs to same colour.
|
|
||||||
;
|
|
||||||
; @param r18 red value
|
|
||||||
; @param r19 green value
|
|
||||||
; @param r20 blue value
|
|
||||||
; @param r21 white value
|
|
||||||
; @clobbers r23 (r16, r17, r24, r25)
|
|
||||||
|
|
||||||
sk6812SetAllColor:
|
|
||||||
push r15
|
|
||||||
in r15, SREG
|
|
||||||
cli
|
|
||||||
; reset
|
|
||||||
cbi SK6812_PORT, SK6812_PINNUM
|
|
||||||
Utils_WaitNanoSecs 80000, 0, r22 ; wait for 80us
|
|
||||||
lds r23, sk6812NumLeds
|
|
||||||
sk6812SetAllColor_loop:
|
|
||||||
rcall sk6812SendQuadruple ; (r16, r17, r24, r25)
|
|
||||||
dec r23
|
|
||||||
brne sk6812SetAllColor_loop
|
|
||||||
; sbi SK6812_PORT, SK6812_PINNUM
|
|
||||||
out SREG, r15
|
|
||||||
pop r15
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine SK6812_SetState @global
|
; @routine SK6812_SetState @global
|
||||||
@@ -249,6 +219,45 @@ sk6812SendPattern_loop2:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine sk6812SetAllColor
|
||||||
|
;
|
||||||
|
; Set all LEDs to same colour.
|
||||||
|
;
|
||||||
|
; @param r18 red value
|
||||||
|
; @param r19 green value
|
||||||
|
; @param r20 blue value
|
||||||
|
; @param r21 white value
|
||||||
|
; @clobbers r23 (r16, r17, r24, r25)
|
||||||
|
|
||||||
|
sk6812SetAllColor:
|
||||||
|
sbi SK6812_DDR, SK6812_PINNUM ; set to output
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
; Utils_WaitNanoSecs 80000, 0, r22 ; wait for 80us
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
lds r23, sk6812NumLeds
|
||||||
|
sk6812SetAllColor_loop:
|
||||||
|
rcall sk6812SendQuadruple ; (r16, r17, r24, r25)
|
||||||
|
dec r23
|
||||||
|
brne sk6812SetAllColor_loop
|
||||||
|
|
||||||
|
; reset
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM
|
||||||
|
Utils_WaitNanoSecs 80000, 0, r22 ; wait for 80us
|
||||||
|
|
||||||
|
; sbi SK6812_PORT, SK6812_PINNUM
|
||||||
|
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine sk6812SendQuadruple
|
; @routine sk6812SendQuadruple
|
||||||
;
|
;
|
||||||
@@ -283,8 +292,8 @@ sk6812SendQuadruple:
|
|||||||
; send ZERO
|
; send ZERO
|
||||||
nop ; +1
|
nop ; +1
|
||||||
out SK6812_PORT, r25 ; +1 HIGH
|
out SK6812_PORT, r25 ; +1 HIGH
|
||||||
nop
|
nop ; +1
|
||||||
nop
|
nop ; +1
|
||||||
nop
|
nop
|
||||||
out SK6812_PORT, r24 ; +1
|
out SK6812_PORT, r24 ; +1
|
||||||
nop ; +1
|
nop ; +1
|
||||||
@@ -303,35 +312,104 @@ l_end:
|
|||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
.macro SK6812_SENDBIT1
|
||||||
|
sk6812SendBit: ; 1 0 1 0
|
||||||
|
rol r16 ; +1 +1 125 125
|
||||||
|
sbi SK6812_PORT, SK6812_PINNUM ; +2 +2 375 375
|
||||||
|
brcs sk6812SendBit_l1 ; +2 +1 625 500
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2 875
|
||||||
|
sk6812SendBit_l1:
|
||||||
|
nop ; +1 +1 1000 625
|
||||||
|
nop ; +1 +1 1125 750
|
||||||
|
brcc sk6812SendBit_l2 ; +1 +2 1250 1000
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2 1250
|
||||||
|
sk6812SendBit_l2: ; 10 10 1250 1250
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.macro SK6812_SENDBIT
|
||||||
|
sk6812SendBit: ; 0 1
|
||||||
|
rol r16 ; +1 +1
|
||||||
|
brcs sk6812SendBit_send1 ; +1 +2
|
||||||
|
; send 0
|
||||||
|
nop ; +1
|
||||||
|
sbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
; nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
rjmp sk6812SendBit_end ; +2
|
||||||
|
sk6812SendBit_send1:
|
||||||
|
; send 1
|
||||||
|
sbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
nop ; +1
|
||||||
|
sk6812SendBit_end: ; 13 13
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
sk6812SendByte4:
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
SK6812_SENDBIT
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine sk6812SendByte4
|
; @routine sk6812SendByte4
|
||||||
;
|
;
|
||||||
; reset: 80microsecs
|
; reset: 80microsecs
|
||||||
; 0: 500ns high, 750ns low (+/- 150ns)
|
; 0: 500ns high, 750ns low (+/- 150ns)
|
||||||
; 1: 750ns high, 500ns low (+/- 150ns)
|
; 1: 750ns high, 500ns low (+/- 150ns)
|
||||||
; 8 ticks per cycle
|
|
||||||
;
|
;
|
||||||
; @param r16 value
|
; @param r16 value
|
||||||
; @clobbers r16, r17, r24, r25
|
; @clobbers r16, r17, r24, r25
|
||||||
|
|
||||||
sk6812SendByte4:
|
sk6812SendByte4:
|
||||||
ldi r24, 0
|
rcall sk6812SendBit
|
||||||
ldi r25, (1<<SK6812_PINNUM)
|
rcall sk6812SendBit
|
||||||
|
rcall sk6812SendBit
|
||||||
|
rcall sk6812SendBit
|
||||||
|
|
||||||
M_SK6812_HANDLEBIT
|
rcall sk6812SendBit
|
||||||
M_SK6812_HANDLEBIT
|
rcall sk6812SendBit
|
||||||
M_SK6812_HANDLEBIT
|
rcall sk6812SendBit
|
||||||
M_SK6812_HANDLEBIT
|
rcall sk6812SendBit
|
||||||
|
ret
|
||||||
M_SK6812_HANDLEBIT
|
|
||||||
M_SK6812_HANDLEBIT
|
|
||||||
M_SK6812_HANDLEBIT
|
|
||||||
M_SK6812_HANDLEBIT
|
|
||||||
ret ; +4
|
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
; @param: r16=current value
|
||||||
|
sk6812SendBit: ; 1 0
|
||||||
|
rol r16 ; +1 +1
|
||||||
|
sbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
brcs sk6812SendBit_l1 ; +2 +1
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
sk6812SendBit_l1:
|
||||||
|
nop ; +1 +1
|
||||||
|
nop ; +1 +1
|
||||||
|
brcc sk6812SendBit_l2 ; +1 +2
|
||||||
|
cbi SK6812_PORT, SK6812_PINNUM ; +2
|
||||||
|
sk6812SendBit_l2:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user