APA102 5050 RGB LED with Integrated Driver

Greyling

New Member
Hi Technical,
thank you for the great examples, I have only just gotten around to playing with the strip today and have to say I am impressed.

I have taken your example code and modified it to do a single colour fill followed by a complete empty, I was just wondering if the way I have done it is the fastest method. I understand obviously that the empty routine takes longer as you have to fill each time to the next pixel you want to empty as you state in your readme file that you cannot address an individual pixel.

Thanks

Rich

Code:
[color=Navy]#picaxe [/color][color=Black]40x2[/color]
[color=Navy]#no_table
#no_data[/color]
[color=Blue]setfreq em64[/color]
[color=Green]; =======================================================
; Example 4
; Bounce one LED from end to end of the light strip
; =======================================================

;          40X2                 5V -.-   Light strip
;     .-----__-----.                |
;     | RST    B.7 |                `--> RED +V
;     =            =  .--> SCK --------> BLU CK
;     | C.2    C.5 |--|--> SDO --------> GRN DI
;  .--| C.3    C.4 |  |             .--> YEL 0V
;  |  | D.0    D.3 |  |             |
;  |  | D.1    D.2 |  |         0V _|_
;  |  `------------'  |
;  `------------------'

; Set how many LED modules in the strip[/color]
[color=Blue]Symbol HOW_MANY_LEDS [/color][color=DarkCyan]= [/color][color=Navy]60[/color]

[color=Blue]Symbol HOW_MANY_LEDS_MINUS_1 [/color][color=DarkCyan]= [/color][color=Blue]HOW_MANY_LEDS [/color][color=DarkCyan]- [/color][color=Navy]1[/color]

[color=Green]; Set the brightness of the LED while testing
; Use small values to keep current consumption low[/color]
[color=Blue]Symbol BRIGHTNESS    [/color][color=DarkCyan]= [/color][color=Navy]150 [/color][color=Green]; 0 to 255 (full)

; Initialise the HSPI interface[/color]
[color=Navy]#macro [/color][color=Black]init[/color][color=Blue]()
  hspisetup spimode00[/color][color=Black], [/color][color=Blue]spifast[/color]
[color=Navy]#endmacro[/color]

[color=Green]; Send a four byte packet out via HSPI[/color]
[color=Navy]#macro [/color][color=Black]sendPacket[/color][color=Blue]( [/color][color=Black]n1, n2, n3, n4 [/color][color=Blue])
  hspiout( [/color][color=Black]n1, n2, n3, n4 [/color][color=Blue])[/color]
[color=Navy]#endmacro[/color]

[color=Green]; Send the start of data header[/color]
[color=Navy]#macro [/color][color=Black]head[/color][color=Blue]()
  [/color][color=Black]sendPacket[/color][color=Blue]( [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00 [/color][color=Blue])[/color]
[color=Navy]#endmacro[/color]

[color=Green]; Send a LED controlling command[/color]
[color=Navy]#macro [/color][color=Black]send[/color][color=Blue]( [/color][color=Black]red, green, blue[/color][color=Blue])
  [/color][color=Black]sendPacket[/color][color=Blue]( [/color][color=Navy]$FF[/color][color=Black], blue, green, red [/color][color=Blue])[/color]
[color=Navy]#endmacro[/color]

[color=Green]; Send the end of data tail[/color]
[color=Navy]#macro [/color][color=Black]tail[/color][color=Blue]()
  [/color][color=Black]sendPacket[/color][color=Blue]( [/color][color=Navy]$FF[/color][color=Black], [/color][color=Navy]$FF[/color][color=Black], [/color][color=Navy]$FF[/color][color=Black], [/color][color=Navy]$FF [/color][color=Blue])[/color]
[color=Navy]#endmacro[/color]

[color=Black]PowerOnReset:

  [/color][color=Green]; Initialise the HSPI interface
  [/color][color=Black]init

  [/color][color=Green]; Turn all LED modules off
  [/color][color=Black]head
  [/color][color=Blue]for [/color][color=Purple]w0 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]To HOW_MANY_LEDS
    [/color][color=Black]send[/color][color=Blue]( [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00 [/color][color=Blue]) [/color][color=Green]; 1 to last = Off
  [/color][color=Blue]next
  [/color][color=Black]tail

BounceLed:
  [/color][color=Green]; Set one LED at a time
  ; 'w0' indicates which LED to set
  [/color][color=Blue]do
  [/color][color=Black]head
        
    [/color][color=Blue]for [/color][color=Purple]w0 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to HOW_MANY_LEDS
    [/color][color=Black]send[/color][color=Blue]( BRIGHTNESS[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00 [/color][color=Blue]) [/color][color=Green]; red
     [/color][color=Blue]pause [/color][color=Navy]20
    [/color][color=Blue]next[/color]
[color=Black]tail
    [/color][color=Blue]for [/color][color=Purple]w0 [/color][color=DarkCyan]= [/color][color=Blue]HOW_MANY_LEDS_MINUS_1 to [/color][color=Navy]1 [/color][color=Blue]step [/color][color=DarkCyan]-[/color][color=Navy]1
      [/color][color=Blue]Gosub [/color][color=Black]SetLed
    [/color][color=Blue]next
  loop[/color]

[color=Black]SetLed:
  [/color][color=Green]; Set a specific LED and keep the others off
  [/color][color=Black]head
  [/color][color=Blue]for [/color][color=Purple]w1 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]to HOW_MANY_LEDS
            if [/color][color=Purple]w1[/color][color=DarkCyan]<[/color][color=Purple]w0 [/color][color=Blue]then [/color][color=Black]send[/color][color=Blue]( BRIGHTNESS[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00 [/color][color=Blue]) [/color][color=Green]; red
 [/color][color=Blue]elseif [/color][color=Purple]w0[/color][color=DarkCyan]<[/color][color=Blue]HOW_MANY_LEDS then [/color][color=Black]send[/color][color=Blue]( [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00[/color][color=Black], [/color][color=Navy]$00 [/color][color=Blue]) [/color][color=Green]; red
 [/color][color=Blue]endif
  next
  [/color][color=Black]tail
  [/color][color=Blue]return[/color]
 
Top