EFX-TEK

TEK Talk => Programming Techniques => Topic started by: ScaryTinker on May 22, 2008, 03:25:59 PM

Title: ShiftBrite Programming
Post by: ScaryTinker on May 22, 2008, 03:25:59 PM
Hi Jon,

I ran across the ShiftBrite product which is a RGB LED controller board that accepts serial commands.  http://macetech.com/blog/node/54.  Basically it looks like Shiftbrite is a carrier for an Allegro LED controller.  http://www.allegromicro.com/en/Products/Part_Numbers/6281/6281.pdf. 

This product seems like it could have a number of uses in the Halloween / Christmas prop arena.   I've read the the Allegro tech doc and it is way over my head.

Can you help me get started code wise?   I'd like to use a Prop-2 to control two ShiftBrite modules.  Ideally I'd like to be able to call a subroutine that changes the led color on both modules from the current color to the new color smoothly. 

ScaryTinker
Title: Re: ShiftBrite Programming
Post by: JonnyMac on May 22, 2008, 08:47:04 PM
Steve,

Here's a starter program to try.  It counts on having the modules daisy-chained, passing the clock and data pins through the first module to the second.  The values in red1\green1\blue1 will go to the module that is connected to the Prop-2; the values in red2\green2\blue2 will go to the module connected to that.  A subroutine call updates both modules at the same time.

Once you get this simple program working then color fading is simply of matter of program loops with calls to the subroutine.  Let's get the modules under basic control first.

' =========================================================================
'
'   File...... ShiftBrite.BS2
'   Purpose...
'   Author.... Jon Williams, EFX-TEK (www.efx-tek.com)
'   E-mail.... jwilliams@efx-tek.com
'              Copyright (c) 2008 EFX-TEK
'              Some Rights Reserved
'              see: http://creativecommons.org/licenses/by/3.0/us/
'   Started...
'   Updated...
'
'   {$STAMP BS2}
'   {$PBASIC 2.5}
'
' =========================================================================


' -----[ Program Description ]---------------------------------------------


' -----[ Revision History ]------------------------------------------------


' -----[ I/O Definitions ]-------------------------------------------------

Clock           PIN     0
SData           PIN     1
Latch           PIN     2
Enable          PIN     3


' -----[ Constants ]-------------------------------------------------------


' -----[ Variables ]-------------------------------------------------------

cmd1            VAR     Byte
red1            VAR     Word
green1          VAR     Word
blue1           VAR     Word

cmd2            VAR     Byte
red2            VAR     Word
green2          VAR     Word
blue2           VAR     Word


' -----[ Initialization ]--------------------------------------------------

Reset:
  LOW Latch
  LOW Enable

  cmd1 = %01
  red1 = 127
  green1 = 127
  blue1 = 127
  cmd2 = %01
  red2 = 127
  green2 = 127
  blue2 = 127
  GOSUB Shift_Brite

  ' setup for color changing
  cmd1 = %00
  cmd2 = %00


' -----[ Program Code ]----------------------------------------------------

Main:
  red1 = 1023
  green1 = 0
  blue1 = 0
  red2 = 0
  green2 = 1023
  blue2 = 0
  GOSUB Shift_Brite
  PAUSE 1000

  red1 = 0
  green1 = 1023
  blue1 = 0
  red2 = 0
  green2 = 0
  blue2 = 1023
  GOSUB Shift_Brite
  PAUSE 1000

  red1 = 0
  green1 = 0
  blue1 = 1023
  red2 = 1023
  green2 = 0
  blue2 = 0
  GOSUB Shift_Brite
  PAUSE 1000

  GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Shift_Brite:
  ' module furthest from Prop-2
  SHIFTOUT SData, Clock, MSBFIRST, [cmd2\2, blue2\10, red2\10, green2\10]
  ' module connected to Prop-2
  SHIFTOUT SData, Clock, MSBFIRST, [cmd1\2, blue1\10, red1\10, green1\10]
  PULSOUT Latch, 1
  RETURN

' -------------------------------------------------------------------------


' -----[ User Data ]-------------------------------------------------------
Title: Re: ShiftBrite Programming
Post by: macegr on May 22, 2008, 09:02:09 PM
Looks good...(I'm the guy who makes ShiftBrites, Steve gave me a heads-up).

I'd recommend running your Reset subroutine once per cycle, or every ten or so cycles. This makes sure the command registers are kept up-to-date, in case any noise gets on the digital lines and make the device enter the configuration mode.

As far as fading goes, you should have plenty of speed to get a smooth fade. I had some fading routines working fine on a Cubloc, which is a BASIC interpreter running on an AVR at about 36KHz instruction rate. Good results reported from Arduino users as well, and I have native AVR code running which of course is more than fast enough.

I'll keep an eye on this thread in case you run into any problems...let me know if you have ideas for future versions!
Title: Re: ShiftBrite Programming
Post by: ScaryTinker on May 26, 2008, 01:03:24 PM
Works like a charm on the first try!  I reordered the pin assignments so I could use a servo cable to hook things up.

Thanks!

ScaryTinker
Title: Re: ShiftBrite Programming
Post by: JonnyMac on May 26, 2008, 01:47:57 PM
I rule!  ;D
Title: Re: ShiftBrite Programming
Post by: gadget-evilusions on November 03, 2009, 09:21:59 PM
I am apparently doing something wrong. I hooked up the appropriate P0-P3 .w to the DI, LI, EI, and CI. I am only using one module. All I get is a blink of all the colors for a ms every second. Would using only one module instead of two with this program cause a problem?
Title: Re: ShiftBrite Programming
Post by: JonnyMac on November 03, 2009, 11:12:31 PM
Are you using a Prop-2 and the same code that Steve says works?
Title: Re: ShiftBrite Programming
Post by: gadget-evilusions on November 04, 2009, 06:40:01 AM
I am using a Prop-2 and the code posted above in this thread. Am I correct that I was to hook up the W pins from the prop-2 3pin headers to the DI, LI, EI, and CI on the ShiftBrite? I am powering from a seperate 6v 2amp power supply. Do I need a common ground?
Title: Re: ShiftBrite Programming
Post by: JonnyMac on November 04, 2009, 09:24:54 AM
Yes on both counts; use the Px.W pins (they connect to the BS2 processor) and you must have a common ground (likely problem).  Without a common reference point (ground) the signals going from the Prop-2 to the ShiftBright are meaningless.
Title: Re: ShiftBrite Programming
Post by: gadget-evilusions on November 04, 2009, 09:27:35 AM
That's my problem then. It didn't occur to me until I was typing the last post. It should work fine once I get home an connect the ground.

Thanks as always.
Title: Re: ShiftBrite Programming
Post by: gadget-evilusions on November 05, 2009, 10:33:35 AM
The program worked perfectly once I had my common ground in place. Duh on my part.

I have been playing with loops for fading and setting a bunch of different color combinations. I found this calculator, http://www.drpeterjones.com/colorcalc/ , which will give RGB values for different colors. If you take the number given, multiply by 4 and use in conjunction with the above program, it seem to work perfectly. I have only tested about 20 colors, but so far they all look very good.
Title: Re: ShiftBrite Programming
Post by: JonnyMac on November 05, 2009, 01:12:27 PM
The x4 thing works because that is the same as shifting the value two bits to the left, converting a standard 8-bit value into a 10-bit value (with 8-bit resolution).

Glad you got everything going.