gfdgd
Fork of PCA995xA by
PCA9956A/PCA9956A.h
- Committer:
- nxp_ip
- Date:
- 2015-02-25
- Revision:
- 0:a624e2eeccac
- Child:
- 1:3522be54a4f5
File content as of revision 0:a624e2eeccac:
/** PCA9956A constant current LED driver * * An operation sample of PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver. * mbed accesses the PCA9956A registers through I2C. * * @class PCA9956A * @author Akifumi (Tedd) OKANO, NXP Semiconductors * @version 0.5 * @date 25-Feb-2015 * * Released under the Apache 2 license License * * About PCA9956A: * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html */ #ifndef MBED_PCA9956A #define MBED_PCA9956A #include "mbed.h" #include "PCA995xA.h" /** PCA9956A class * * This is a driver code for the PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver. * This class provides interface for PCA9956A operation and accessing its registers. * Detail information is available on next URL. * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html * * Example: * @code * #include "mbed.h" * * #include "PCA9956A.h" * PCA9956A led_cntlr( p28, p27, 0x02 ); // SDA, SCL, Slave_address(option) * * int main() * { * led_cntlr.current( ALLPORTS, 1.0 ); // Set all ports output current 100% * * 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 PCA9956A : public PCA995xA { public: /** Name of the PCA9956A registers */ enum command_reg { MODE1, MODE2, LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5, GRPPWM, GRPFREQ, PWM0, PWM1, PWM2, PWM3, PWM4, PWM5, PWM6, PWM7, PWM8, PWM9, PWM10, PWM11, PWM12, PWM13, PWM14, PWM15, PWM16, PWM17, PWM18, PWM19, PWM20, PWM21, PWM22, PWM23, IREF0, IREF1, IREF2, IREF3, IREF4, IREF5, IREF6, IREF7, IREF8, IREF9, IREF10, IREF11, IREF12, IREF13, IREF14, IREF15, IREF16, IREF17, IREF18, IREF19, IREF20, IREF21, IREF22, IREF23, OFFSET = 0x3A, SUBADR1, SUBADR2, SUBADR3, ALLCALLADR, PWMALL, IREFALL, EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5, REGISTER_START = MODE1, LEDOUT_REGISTER_START = LEDOUT0, PWM_REGISTER_START = PWM0, IREF_REGISTER_START = IREF0, }; /** 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) */ PCA9956A( PinName i2c_sda, PinName i2c_scl, char i2c_address = PCA995xA::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) */ PCA9956A( I2C &i2c_obj, char i2c_address = PCA995xA::DEFAULT_I2C_ADDR ); /** Destractor * */ virtual ~PCA9956A(); /** 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 ); /** Set the output current, 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 current, * 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 current( int port, float vp ); /** Set all output port curent, specified as a percentage (array of float) * * @param vp Aray to floating-point values representing the output current, * 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 current( 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: void initialize( void ); virtual char pwm_register_access( int port ); virtual char current_register_access( int port ); const int n_of_ports; } ; #endif // MBED_PCA9956A