PCA9624, PCA9622 and PCA9626 class library. The PCA9624 is a 8-channel, the PCA9622 is a 16-channel and the PCA9956A is a 24-channel Fm+ I2C-bus 100mA/40V LED driver.

Dependencies:   CompLedDvr

Dependents:   PCA9626_Hello PCA9624_Hello PCA9622_Hello

What is this?

Code for PCA9626, PCA9622 and PCA9624.
24-channel, 16-channel and 8-channel PWM output LED driver component class.

Please refer to the component page for details

8, 16 & 24-channel Fm+ I2C-bus 100mA/40 V LED driver

High-level API is available

A high-level API that can be used as the "PwmOut" of bed-SDK is available.
This API enables to make instances of each LED output pins and control PWM duty cycle by assignment.
For detail information, refer API document of LedPwmOut Class class which is included in PCA962xA class library.

#include "mbed.h"
#include "PCA9626.h"

PCA9626     led_cntlr( p28, p27, 0xC4 );  //  SDA, SCL, Slave_address(option)
LedPwmOut   led( led_cntlr, L0 );

int main()
{
    while( 1 ) {
        for( float p = 0.0f; p < 1.0f; p += 0.1f ) {
            led     = p;
            wait( 0.1 );
        }
    }
}

About the chips

PCA9626

The PCA9626 is an I2C-bus controlled 24-bit LED driver optimized for voltage switch dimming and blinking 100 mA LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 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.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9626.pdf

PCA9622

The PCA9622 is an I2C-bus controlled 16-bit LED driver optimized for voltage switch dimming and blinking 100 mA LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 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.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9622.pdf

PCA9624

The PCA9624 is an I2C-bus controlled 8-bit LED driver optimized for voltage switch dimming and blinking 100 mA Red/Green/Blue/Amber (RGBA) LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 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.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9624.pdf

How the API works?

When the instance is made, all set up for PWM operation are done automatically.
PCA9626, PCA9624 and PCA9622 have internal 97kHz oscillator to generate internal PWM waveform. This signal switchs the output current ON and OFF. The class' function pwm() controls duty-cycle of this output.

API_and_output

Tips for the chips

PCA962x family

This PCA962x components library can be used for all PCA9926(24-channel), PCA9922(16-channel) and PCA9624(8-channel).
If you are using both chips on the I2C bus, those can be operated like..

#include "mbed.h"
 
#include "PCA9622.h"
#include "PCA9626.h"

PCA9622    led0( p28, p27, 0xC0 );    //  SDA, SCL, Slave_address=0xC0 (16-channel chip)
PCA9626    led1( p28, p27, 0xC2 );    //  SDA, SCL, Slave_address=0xC2 (24-channel chip)
 
int main()
{
    led0.pwm( ....    //  PWM control for PCA9955A(16-channel chip)
    led1.pwm( ....    //  PWM control for PCA9956A(24-channel chip)
    ...

Sample code for each types

For PCA9624 (8 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9624_Hello/
For PCA9622 (16 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9622_Hello/
For PCA9626 (24 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9626_Hello/

Committer:
nxp_ip
Date:
Wed Mar 04 05:59:40 2015 +0000
Revision:
3:40f83904f0a8
API of "LedPwmOut class" implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 3:40f83904f0a8 1 /** LedPwmOut class for LED driver component
nxp_ip 3:40f83904f0a8 2 *
nxp_ip 3:40f83904f0a8 3 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 3:40f83904f0a8 4 * @version 0.5
nxp_ip 3:40f83904f0a8 5 * @date 04-Mar-2015
nxp_ip 3:40f83904f0a8 6 *
nxp_ip 3:40f83904f0a8 7 * Released under the Apache 2 license License
nxp_ip 3:40f83904f0a8 8 */
nxp_ip 3:40f83904f0a8 9
nxp_ip 3:40f83904f0a8 10 #ifndef MBED_LedPwmOut
nxp_ip 3:40f83904f0a8 11 #define MBED_LedPwmOut
nxp_ip 3:40f83904f0a8 12
nxp_ip 3:40f83904f0a8 13 #include "mbed.h"
nxp_ip 3:40f83904f0a8 14 #include "CompLedDvr.h"
nxp_ip 3:40f83904f0a8 15 #include "LedPwmOut.h"
nxp_ip 3:40f83904f0a8 16
nxp_ip 3:40f83904f0a8 17 /** LedPwmOut class
nxp_ip 3:40f83904f0a8 18 *
nxp_ip 3:40f83904f0a8 19 * @class LedPwmOut
nxp_ip 3:40f83904f0a8 20 *
nxp_ip 3:40f83904f0a8 21 * "LedPwmOut" class works like "PwmOut" class of mbed-SDK.
nxp_ip 3:40f83904f0a8 22 * This class provides API on device's pin level with abstracting the LED controller.
nxp_ip 3:40f83904f0a8 23 *
nxp_ip 3:40f83904f0a8 24 * Example:
nxp_ip 3:40f83904f0a8 25 * @code
nxp_ip 3:40f83904f0a8 26 * #include "mbed.h"
nxp_ip 3:40f83904f0a8 27 * #include "PCA9626.h"
nxp_ip 3:40f83904f0a8 28 *
nxp_ip 3:40f83904f0a8 29 * PCA9632 led_cntlr( p28, p27, 0x3E ); // SDA, SCL, Slave_address(option)
nxp_ip 3:40f83904f0a8 30 * LedPwmOut led( led_cntlr, L0 );
nxp_ip 3:40f83904f0a8 31 *
nxp_ip 3:40f83904f0a8 32 * int main()
nxp_ip 3:40f83904f0a8 33 * {
nxp_ip 3:40f83904f0a8 34 * while( 1 ) {
nxp_ip 3:40f83904f0a8 35 * for( float p = 0.0f; p < 1.0f; p += 0.1f ) {
nxp_ip 3:40f83904f0a8 36 * led = p;
nxp_ip 3:40f83904f0a8 37 * wait( 0.1 );
nxp_ip 3:40f83904f0a8 38 * }
nxp_ip 3:40f83904f0a8 39 * }
nxp_ip 3:40f83904f0a8 40 * }
nxp_ip 3:40f83904f0a8 41 * @endcode
nxp_ip 3:40f83904f0a8 42 */
nxp_ip 3:40f83904f0a8 43 class LedPwmOut
nxp_ip 3:40f83904f0a8 44 {
nxp_ip 3:40f83904f0a8 45 public:
nxp_ip 3:40f83904f0a8 46 LedPwmOut( CompLedDvr &ledp, LedPinName pin_name );
nxp_ip 3:40f83904f0a8 47 virtual ~LedPwmOut();
nxp_ip 3:40f83904f0a8 48
nxp_ip 3:40f83904f0a8 49 virtual void pwm( float v );
nxp_ip 3:40f83904f0a8 50
nxp_ip 3:40f83904f0a8 51 /** A shorthand for write()
nxp_ip 3:40f83904f0a8 52 */
nxp_ip 3:40f83904f0a8 53 LedPwmOut& operator= ( float rhs );
nxp_ip 3:40f83904f0a8 54
nxp_ip 3:40f83904f0a8 55 private:
nxp_ip 3:40f83904f0a8 56 CompLedDvr *leddvrp;
nxp_ip 3:40f83904f0a8 57 LedPinName pin;
nxp_ip 3:40f83904f0a8 58
nxp_ip 3:40f83904f0a8 59 void pwm( int pin, float value );
nxp_ip 3:40f83904f0a8 60 }
nxp_ip 3:40f83904f0a8 61 ;
nxp_ip 3:40f83904f0a8 62
nxp_ip 3:40f83904f0a8 63 #endif // MBED_LedPwmOut