ShiftBrite control class using SPI

Dependents:   ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more

Committer:
jwaters9
Date:
Mon Nov 03 05:21:08 2014 +0000
Revision:
0:466ea48e852a
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jwaters9 0:466ea48e852a 1 #include "mbed.h"
jwaters9 0:466ea48e852a 2 #include "ShiftBrite.h"
jwaters9 0:466ea48e852a 3
jwaters9 0:466ea48e852a 4
jwaters9 0:466ea48e852a 5 ShiftBrite::ShiftBrite(PinName latch, PinName enable,SPI& spi) : _spi(spi), _latch(latch), _enable(enable) {
jwaters9 0:466ea48e852a 6 //Recomended Calabration levels for Brightness
jwaters9 0:466ea48e852a 7 blue_level = green_level = 100;
jwaters9 0:466ea48e852a 8 red_level = 120; //red has a larger range of brightness than the others
jwaters9 0:466ea48e852a 9 init();
jwaters9 0:466ea48e852a 10 }
jwaters9 0:466ea48e852a 11
jwaters9 0:466ea48e852a 12 void ShiftBrite::init(void) {
jwaters9 0:466ea48e852a 13
jwaters9 0:466ea48e852a 14 Brightness(red_level,green_level,blue_level);
jwaters9 0:466ea48e852a 15
jwaters9 0:466ea48e852a 16 _spi.format(16,0);
jwaters9 0:466ea48e852a 17 _spi.frequency(500000);
jwaters9 0:466ea48e852a 18 _red = 255; //White
jwaters9 0:466ea48e852a 19 _green = 255;
jwaters9 0:466ea48e852a 20 _blue = 255;
jwaters9 0:466ea48e852a 21 }
jwaters9 0:466ea48e852a 22
jwaters9 0:466ea48e852a 23 void ShiftBrite::Write(int red,int green,int blue) { //can hold up to 10 bits for each color
jwaters9 0:466ea48e852a 24 _red = red;
jwaters9 0:466ea48e852a 25 _green = green;
jwaters9 0:466ea48e852a 26 _blue = blue;
jwaters9 0:466ea48e852a 27
jwaters9 0:466ea48e852a 28 unsigned int low_color=0;
jwaters9 0:466ea48e852a 29 unsigned int high_color=0;
jwaters9 0:466ea48e852a 30
jwaters9 0:466ea48e852a 31 high_color=((_blue&0x3FF)<<4)|((_red&0x3C0)>>6); //00bb bbbb bbbb rrrr
jwaters9 0:466ea48e852a 32 low_color=(((_red&0x3F)<<10)|_green); //rrrr rrgg gggg gggg
jwaters9 0:466ea48e852a 33
jwaters9 0:466ea48e852a 34
jwaters9 0:466ea48e852a 35 _spi.write(high_color);
jwaters9 0:466ea48e852a 36 _spi.write(low_color);
jwaters9 0:466ea48e852a 37
jwaters9 0:466ea48e852a 38 _enable=1; //resync PWM counters - might flash without this with fast color updates
jwaters9 0:466ea48e852a 39 _latch=1;
jwaters9 0:466ea48e852a 40 wait(.000015);
jwaters9 0:466ea48e852a 41 _latch=0;
jwaters9 0:466ea48e852a 42 _enable=0;
jwaters9 0:466ea48e852a 43 wait(.005);
jwaters9 0:466ea48e852a 44
jwaters9 0:466ea48e852a 45 }
jwaters9 0:466ea48e852a 46
jwaters9 0:466ea48e852a 47 //Change Brightness scaling levels
jwaters9 0:466ea48e852a 48 void ShiftBrite::Brightness(int redLevel,int greenLevel,int blueLevel) { // Levels can be 50..1023
jwaters9 0:466ea48e852a 49 //Command for Brightness
jwaters9 0:466ea48e852a 50 unsigned int Init_Command = 0x40000000;
jwaters9 0:466ea48e852a 51
jwaters9 0:466ea48e852a 52 Init_Command = Init_Command|(blueLevel<<20)|(redLevel<<10)|greenLevel;
jwaters9 0:466ea48e852a 53 _spi.write(Init_Command >> 16&0xFFFF);
jwaters9 0:466ea48e852a 54 _spi.write(Init_Command &0xFFFF);
jwaters9 0:466ea48e852a 55
jwaters9 0:466ea48e852a 56 wait(.000015);
jwaters9 0:466ea48e852a 57 _latch=1;
jwaters9 0:466ea48e852a 58 _enable =1;
jwaters9 0:466ea48e852a 59 wait(.000015);
jwaters9 0:466ea48e852a 60 _latch=0;
jwaters9 0:466ea48e852a 61 _enable=0;
jwaters9 0:466ea48e852a 62
jwaters9 0:466ea48e852a 63
jwaters9 0:466ea48e852a 64 }