ShiftBrite control class using SPI
Dependents: ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more
ShiftBrite.cpp@0:466ea48e852a, 2014-11-03 (annotated)
- Committer:
- jwaters9
- Date:
- Mon Nov 03 05:21:08 2014 +0000
- Revision:
- 0:466ea48e852a
first commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |