Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: PCA9626_Hello PCA9624_Hello PCA9622_Hello
PCA9626/PCA9626.h
- Committer:
- nxp_ip
- Date:
- 2015-03-04
- Revision:
- 3:40f83904f0a8
- Parent:
- 1:6fcc4f604988
- Child:
- 7:7ebf563f6e6c
File content as of revision 3:40f83904f0a8:
/** PCA9626 PWM control LED driver
*
* An operation sample of PCA9626 24-channel Fm+ I2C-bus 100mA/40 V LED driver.
* mbed accesses the PCA9626 registers through I2C.
*
* @class PCA9626
* @author Akifumi (Tedd) OKANO, NXP Semiconductors
* @version 0.6
* @date 04-Mar-2015
*
* Released under the Apache 2 license License
*
* About PCA9626:
* http://www.nxp.com/products/lighting_driver_and_controller_ics/i2c_led_display_control/series/PCA9626.html
*/
#ifndef MBED_PCA9626
#define MBED_PCA9626
#include "mbed.h"
#include "PCA962x.h"
#include "CompLedDvrAPI.h"
/** PCA9626 class
*
* This is a driver code for the PCA9626 24-channel Fm+ I2C-bus 100mA/40V PWM control LED driver.
* This class provides interface for PCA9626 operation and accessing its registers.
* Detail information is available on next URL.
* http://www.nxp.com/products/lighting_driver_and_controller_ics/i2c_led_display_control/series/PCA9626.html
*
* Example:
* @code
* #include "mbed.h"
*
* #include "PCA9626.h"
* PCA9626 led_cntlr( p28, p27, 0x3E ); // SDA, SCL, Slave_address(option)
*
* int main()
* {
* while(1) {
* for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
* for ( int i = 1; i <= 100; i++ ) {
* led_cntlr.pwm( port, (float)i / 100.0 );
* wait( 0.01 );
* }
* }
* led_cntlr.pwm( ALLPORTS, 0.0 );
* }
* }
* @endcode
*/
class PCA9626 : public PCA962x
{
public:
/** Name of the PCA9626 registers */
enum command_reg {
MODE1, MODE2,
PWM0, PWM1, PWM2, PWM3,
PWM4, PWM5, PWM6, PWM7,
PWM8, PWM9, PWM10, PWM11,
PWM12, PWM13, PWM14, PWM15,
PWM16, PWM17, PWM18, PWM19,
PWM20, PWM21, PWM22, PWM23,
GRPPWM, GRPFREQ, CHASE,
LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
REGISTER_START = MODE1,
LEDOUT_REGISTER_START = LEDOUT0,
PWM_REGISTER_START = PWM0,
};
/** Create a PCA9629A instance connected to specified I2C pins with specified address
*
* @param i2c_sda I2C-bus SDA pin
* @param i2c_sda I2C-bus SCL pin
* @param i2c_address I2C-bus address (default: 0xC0)
*/
PCA9626( PinName i2c_sda, PinName i2c_scl, char i2c_address = PCA962x::DEFAULT_I2C_ADDR );
/** Create a PCA9629A instance connected to specified I2C pins with specified address
*
* @param i2c_obj I2C object (instance)
* @param i2c_address I2C-bus address (default: 0xC0)
*/
PCA9626( I2C &i2c_obj, char i2c_address = PCA962x::DEFAULT_I2C_ADDR );
/** Destractor
*
*/
virtual ~PCA9626();
/** Returns the number of output ports
*
* @returns
* The number of output ports
*/
virtual int number_of_ports( void );
#if DOXYGEN_ONLY
/** Set the output duty-cycle, specified as a percentage (float)
*
* @param port Selecting output port
* 'ALLPORTS' can be used to set all port duty-cycle same value.
* @param v A floating-point value representing the output duty-cycle,
* specified as a percentage. The value should lie between
* 0.0f (representing on 0%) and 1.0f (representing on 100%).
* Values outside this range will have undefined behavior.
*/
void pwm( int port, float v );
/** Set all output port duty-cycle, specified as a percentage (array of float)
*
* @param vp Aray to floating-point values representing the output duty-cycle,
* specified as a percentage. The value should lie between
* 0.0f (representing on 0%) and 1.0f (representing on 100%).
*
* @note
* The aray should have length of 24
*/
void pwm( float *vp );
/** Register write (single byte) : Low level access to device register
*
* @param reg_addr Register address
* @param data Value for setting into the register
*/
void write( char reg_addr, char data );
/** Register write (multiple bytes) : Low level access to device register
*
* @param data Pointer to an array. First 1 byte should be the writing start register address
* @param length Length of data
*/
void write( char *data, int length );
/** Register read (single byte) : Low level access to device register
*
* @param reg_addr Register address
* @return Read value from register
*/
char read( char reg_addr );
/** Register write (multiple bytes) : Low level access to device register
*
* @param reg_addr Register address
* @param data Pointer to an array. The values are stored in this array.
* @param length Length of data
*/
void read( char reg_addr, char *data, int length );
#endif
private:
virtual void initialize( void );
virtual char pwm_register_access( int port );
const int n_of_ports;
}
;
#endif // MBED_PCA9626
PCA9622, PCA9624, PCA9626 : 8, 16 & 24ch LED driver (Voltage switch type)