PCA9632 very simple operation sample. PCA9632 is 4 channel LED controller from NXP semiconductors.
Simple sample code for PCA9632 : 4-bit Fm+ I2C-bus low power LED driver
This is a simple operation sample code for PCA9632.
The PCA9632 is an I2C-bus controlled 4-bit LED driver optimized for Red/Green/Blue/Amber (RGBA) color mixing applications. The PCA9632 is a drop-in upgrade for the PCA9633 with 40 power reduction. In Individual brightness control mode, each LED output has its own 8-bit resolution (256 steps) fixed frequency Individual PWM controller that operates at 1.5625 kHz with a duty cycle that is adjustable from 0 % to 99.6 % to allow the LED to be set to a specific brightness value. In group dimming mode, each LED output has its own 6-bit resolution (64 steps) fixed frequency Individual PWM controller that operates at 6.25 kHz with a duty cycle that is adjustable from 0 % to 98.4 % to allow the LED to be set to a specific brightness value. A fifth 4-bit resolution (16 steps) Group PWM controller has a fixed frequency of 190 Hz that is used to dim all the LEDs with the same value.
For more details, please refer.. http:www.nxp.com/documents/data_sheet/PCA9632.pdf.
If you have an evaluation board for PCA9632, please find next picture for wiring.
The evaluation board OM13269's information is available in http:www.nxp.com/documents/user_manual/UM10528.pdf.
main.cpp@0:8726e00b9c04, 2014-01-22 (annotated)
- Committer:
- nxp_ip
- Date:
- Wed Jan 22 02:14:12 2014 +0000
- Revision:
- 0:8726e00b9c04
version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nxp_ip | 0:8726e00b9c04 | 1 | /** PCA9632 very simple operation sample |
nxp_ip | 0:8726e00b9c04 | 2 | * |
nxp_ip | 0:8726e00b9c04 | 3 | * @author Akifumi (Tedd) OKANO, NXP Semiconductors |
nxp_ip | 0:8726e00b9c04 | 4 | * @version 1.0 |
nxp_ip | 0:8726e00b9c04 | 5 | * @date 22-Jan-2014 |
nxp_ip | 0:8726e00b9c04 | 6 | * |
nxp_ip | 0:8726e00b9c04 | 7 | * Released under the Apache 2.0 open source licence -- http://opensource.org/licenses/Apache-2.0 |
nxp_ip | 0:8726e00b9c04 | 8 | * |
nxp_ip | 0:8726e00b9c04 | 9 | * This sample operates 4 LEDs on the evaluation board (OM13269 -- http://www.nxp.com/documents/user_manual/UM10528.pdf). |
nxp_ip | 0:8726e00b9c04 | 10 | * LED1(Red), LED2(Green) and LED3(Blue) are PWM controlled from mbed. |
nxp_ip | 0:8726e00b9c04 | 11 | * LED4 is controlled by group PWM function of PCA9632 |
nxp_ip | 0:8726e00b9c04 | 12 | */ |
nxp_ip | 0:8726e00b9c04 | 13 | |
nxp_ip | 0:8726e00b9c04 | 14 | #include "mbed.h" |
nxp_ip | 0:8726e00b9c04 | 15 | |
nxp_ip | 0:8726e00b9c04 | 16 | I2C i2c( p28, p27 ); |
nxp_ip | 0:8726e00b9c04 | 17 | |
nxp_ip | 0:8726e00b9c04 | 18 | |
nxp_ip | 0:8726e00b9c04 | 19 | char data[] = { |
nxp_ip | 0:8726e00b9c04 | 20 | 0x80, |
nxp_ip | 0:8726e00b9c04 | 21 | 0x80, 0x21, |
nxp_ip | 0:8726e00b9c04 | 22 | 0x00, 0x00, 0x00, 0x40, |
nxp_ip | 0:8726e00b9c04 | 23 | 0x80, 0x02, |
nxp_ip | 0:8726e00b9c04 | 24 | 0xEA |
nxp_ip | 0:8726e00b9c04 | 25 | }; |
nxp_ip | 0:8726e00b9c04 | 26 | |
nxp_ip | 0:8726e00b9c04 | 27 | char blink_rate[] = { 0x07, 0x00 }; |
nxp_ip | 0:8726e00b9c04 | 28 | |
nxp_ip | 0:8726e00b9c04 | 29 | #define I2C_ADDRESS 0xC4 |
nxp_ip | 0:8726e00b9c04 | 30 | |
nxp_ip | 0:8726e00b9c04 | 31 | int main() |
nxp_ip | 0:8726e00b9c04 | 32 | { |
nxp_ip | 0:8726e00b9c04 | 33 | int count; |
nxp_ip | 0:8726e00b9c04 | 34 | |
nxp_ip | 0:8726e00b9c04 | 35 | i2c.write( I2C_ADDRESS, data, sizeof( data ) ); |
nxp_ip | 0:8726e00b9c04 | 36 | |
nxp_ip | 0:8726e00b9c04 | 37 | while ( 1 ) { |
nxp_ip | 0:8726e00b9c04 | 38 | |
nxp_ip | 0:8726e00b9c04 | 39 | for ( count = 0; count < 12; count++ ) { |
nxp_ip | 0:8726e00b9c04 | 40 | data[ 3 + ((count + 2) % 3) ] = 0xFF; |
nxp_ip | 0:8726e00b9c04 | 41 | data[ 3 + ((count + 1) % 3) ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 42 | data[ 3 + ((count + 0) % 3) ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 43 | data[ 7 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 44 | data[ 8 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 45 | i2c.write( I2C_ADDRESS, data, 9 ); |
nxp_ip | 0:8726e00b9c04 | 46 | wait( 0.25 ); |
nxp_ip | 0:8726e00b9c04 | 47 | |
nxp_ip | 0:8726e00b9c04 | 48 | data[ 3 ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 49 | data[ 4 ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 50 | data[ 5 ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 51 | data[ 7 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 52 | data[ 8 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 53 | i2c.write( I2C_ADDRESS, data, 9 ); |
nxp_ip | 0:8726e00b9c04 | 54 | |
nxp_ip | 0:8726e00b9c04 | 55 | count++; |
nxp_ip | 0:8726e00b9c04 | 56 | wait( 0.25 ); |
nxp_ip | 0:8726e00b9c04 | 57 | } |
nxp_ip | 0:8726e00b9c04 | 58 | |
nxp_ip | 0:8726e00b9c04 | 59 | for ( count = 0; count < 4096; count++ ) { |
nxp_ip | 0:8726e00b9c04 | 60 | data[ 3 + (((count >> 8) + 2) % 3) ] = 0xFF - (count & 0xFF); |
nxp_ip | 0:8726e00b9c04 | 61 | data[ 3 + (((count >> 8) + 1) % 3) ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 62 | data[ 3 + (((count >> 8) + 0) % 3) ] = count & 0xFF; |
nxp_ip | 0:8726e00b9c04 | 63 | data[ 7 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 64 | data[ 8 ] = 0; |
nxp_ip | 0:8726e00b9c04 | 65 | i2c.write( I2C_ADDRESS, data, 9 ); |
nxp_ip | 0:8726e00b9c04 | 66 | |
nxp_ip | 0:8726e00b9c04 | 67 | count++; |
nxp_ip | 0:8726e00b9c04 | 68 | wait( 0.002 ); |
nxp_ip | 0:8726e00b9c04 | 69 | } |
nxp_ip | 0:8726e00b9c04 | 70 | |
nxp_ip | 0:8726e00b9c04 | 71 | for ( count = 0; count < 2048; count++ ) { |
nxp_ip | 0:8726e00b9c04 | 72 | data[ 3 + (((count >> 8) + 2) % 3) ] = 0xFF - (count & 0xFF); |
nxp_ip | 0:8726e00b9c04 | 73 | data[ 3 + (((count >> 8) + 1) % 3) ] = 0x00; |
nxp_ip | 0:8726e00b9c04 | 74 | data[ 3 + (((count >> 8) + 0) % 3) ] = count & 0xFF; |
nxp_ip | 0:8726e00b9c04 | 75 | data[ 7 ] = (count >> 9) & 0x1 ? 0x80 : 0x10; |
nxp_ip | 0:8726e00b9c04 | 76 | data[ 8 ] = (count >> 10) & 0x1 ? 23 : 2; |
nxp_ip | 0:8726e00b9c04 | 77 | i2c.write( I2C_ADDRESS, data, 9 ); |
nxp_ip | 0:8726e00b9c04 | 78 | |
nxp_ip | 0:8726e00b9c04 | 79 | count++; |
nxp_ip | 0:8726e00b9c04 | 80 | wait( 0.01 ); |
nxp_ip | 0:8726e00b9c04 | 81 | } |
nxp_ip | 0:8726e00b9c04 | 82 | } |
nxp_ip | 0:8726e00b9c04 | 83 | } |