Hi All!
while waiting for a String of WS2801 LED Strip to Arrive from China, decided to tackle the code.
Thanks to MR. Westaus55's guide http://www.picaxeforum.co.uk/showthread.php?22713
I was able to understand the way to communicate the data to the WS2801 IC's. also started to modify the code a bit to drive all 32 WS2801 with a Picaxe 28X1 with an external resonator of 20MHz.
for example this is a piece of the original code:
My Mods Trying to move FWD red led at a time:
Questions:
Is there a better way to write this part of the code?
I wrote the entire code for all 32 WS2801 with just one motion and 1 color at time (red moving FWD till the 32nd spot,)
Memory used = 2442 bytes out of 4096.
also the shiftout looks like this:
SendData:
Ptr = 0
SHIFTOUT SClock,SData,MSBFirst_L,(@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc)'@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@Ptr)
SHIFTOUT SClock,SData,MSBFirst_L,(@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@Ptr)
returnn
Any help is Appreciated!
Thanks!
while waiting for a String of WS2801 LED Strip to Arrive from China, decided to tackle the code.
Thanks to MR. Westaus55's guide http://www.picaxeforum.co.uk/showthread.php?22713
I was able to understand the way to communicate the data to the WS2801 IC's. also started to modify the code a bit to drive all 32 WS2801 with a Picaxe 28X1 with an external resonator of 20MHz.
for example this is a piece of the original code:
Code:
Main:
Intensity = 100
ptr = 0
MemAddr = Black : GOSUB FetchColour ; first WS2801/RGB LED data
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour ; sixth WS2801/RGB LED data
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = White : GOSUB FetchColour
MemAddr = White : GOSUB FetchColour
MemAddr = White : GOSUB FetchColour
MemAddr = White : GOSUB FetchColour
MemAddr = White : GOSUB FetchColour
MemAddr = White : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Red : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Yellow : GOSUB FetchColour
MemAddr = Red : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Green : GOSUB FetchColour
MemAddr = Yellow : GOSUB FetchColour
MemAddr = Red : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Cyan : GOSUB FetchColour
MemAddr = Green : GOSUB FetchColour
MemAddr = Yellow : GOSUB FetchColour
MemAddr = Red : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Blue : GOSUB FetchColour
MemAddr = Cyan : GOSUB FetchColour
MemAddr = Green : GOSUB FetchColour
MemAddr = Yellow : GOSUB FetchColour
MemAddr = Red : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Magenta : GOSUB FetchColour
MemAddr = Blue : GOSUB FetchColour
MemAddr = Cyan : GOSUB FetchColour
MemAddr = Green : GOSUB FetchColour
MemAddr = Yellow : GOSUB FetchColour
MemAddr = Red : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
ptr = 0
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
MemAddr = Black : GOSUB FetchColour
GOSUB SendData
PAUSE LongDelay
loop
Code:
Main:
Intensity = 100
gosub clear_strip 'clear all LED's, used this gosub so data is in place instead of having to fetch.
ptr = 0
For colour= 0 to 1
LOOKUP Colour, (RED,Black), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
ptr = 0
For colour= 0 to 1
LOOKUP Colour, (Black,RED), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
ptr = 0
For colour= 0 to 2
LOOKUP Colour, (Black,Black,RED), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
ptr = 0
For colour= 0 to 3
LOOKUP Colour, (Black,Black,Black,RED), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
ptr = 0
For colour= 0 to 4
LOOKUP Colour, (Black,Black,Black,Black,RED), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
ptr = 0
For colour= 0 to 5
LOOKUP Colour, (Black,Black,Black,Black,Black,RED), Memaddr : GOSUB FetchColour
next colour
GOSUB SendData
pause 100
gosub New_color
'''And so forth to reach 0 to 32, LOTS OF DATA TO WRITE.
clear_strip: 'Clear all WS2801's
Ptr = 0
SHIFTOUT SClock,SData,MSBFirst_L, ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00)
return
Is there a better way to write this part of the code?
I wrote the entire code for all 32 WS2801 with just one motion and 1 color at time (red moving FWD till the 32nd spot,)
Memory used = 2442 bytes out of 4096.
also the shiftout looks like this:
SendData:
Ptr = 0
SHIFTOUT SClock,SData,MSBFirst_L,(@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc)'@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@Ptr)
SHIFTOUT SClock,SData,MSBFirst_L,(@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@PtrInc,@Ptr)
returnn
Any help is Appreciated!
Thanks!