gfdgd

Dependencies:   CompLedDvrCC

Fork of PCA995xA by InetrfaceProducts NXP

Committer:
nxp_ip
Date:
Wed Feb 25 06:42:41 2015 +0000
Revision:
0:a624e2eeccac
Child:
1:3522be54a4f5
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:a624e2eeccac 1 /** PCA9956A constant current LED driver
nxp_ip 0:a624e2eeccac 2 *
nxp_ip 0:a624e2eeccac 3 * An operation sample of PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver.
nxp_ip 0:a624e2eeccac 4 * mbed accesses the PCA9956A registers through I2C.
nxp_ip 0:a624e2eeccac 5 *
nxp_ip 0:a624e2eeccac 6 * @class PCA9956A
nxp_ip 0:a624e2eeccac 7 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 0:a624e2eeccac 8 * @version 0.5
nxp_ip 0:a624e2eeccac 9 * @date 25-Feb-2015
nxp_ip 0:a624e2eeccac 10 *
nxp_ip 0:a624e2eeccac 11 * Released under the Apache 2 license License
nxp_ip 0:a624e2eeccac 12 *
nxp_ip 0:a624e2eeccac 13 * About PCA9956A:
nxp_ip 0:a624e2eeccac 14 * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html
nxp_ip 0:a624e2eeccac 15 */
nxp_ip 0:a624e2eeccac 16
nxp_ip 0:a624e2eeccac 17 #ifndef MBED_PCA9956A
nxp_ip 0:a624e2eeccac 18 #define MBED_PCA9956A
nxp_ip 0:a624e2eeccac 19
nxp_ip 0:a624e2eeccac 20 #include "mbed.h"
nxp_ip 0:a624e2eeccac 21 #include "PCA995xA.h"
nxp_ip 0:a624e2eeccac 22
nxp_ip 0:a624e2eeccac 23 /** PCA9956A class
nxp_ip 0:a624e2eeccac 24 *
nxp_ip 0:a624e2eeccac 25 * This is a driver code for the PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver.
nxp_ip 0:a624e2eeccac 26 * This class provides interface for PCA9956A operation and accessing its registers.
nxp_ip 0:a624e2eeccac 27 * Detail information is available on next URL.
nxp_ip 0:a624e2eeccac 28 * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html
nxp_ip 0:a624e2eeccac 29 *
nxp_ip 0:a624e2eeccac 30 * Example:
nxp_ip 0:a624e2eeccac 31 * @code
nxp_ip 0:a624e2eeccac 32 * #include "mbed.h"
nxp_ip 0:a624e2eeccac 33 *
nxp_ip 0:a624e2eeccac 34 * #include "PCA9956A.h"
nxp_ip 0:a624e2eeccac 35 * PCA9956A led_cntlr( p28, p27, 0x02 ); // SDA, SCL, Slave_address(option)
nxp_ip 0:a624e2eeccac 36 *
nxp_ip 0:a624e2eeccac 37 * int main()
nxp_ip 0:a624e2eeccac 38 * {
nxp_ip 0:a624e2eeccac 39 * led_cntlr.current( ALLPORTS, 1.0 ); // Set all ports output current 100%
nxp_ip 0:a624e2eeccac 40 *
nxp_ip 0:a624e2eeccac 41 * while(1) {
nxp_ip 0:a624e2eeccac 42 * for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
nxp_ip 0:a624e2eeccac 43 * for ( int i = 1; i <= 100; i++ ) {
nxp_ip 0:a624e2eeccac 44 * led_cntlr.pwm( port, (float)i / 100.0 );
nxp_ip 0:a624e2eeccac 45 * wait( 0.01 );
nxp_ip 0:a624e2eeccac 46 * }
nxp_ip 0:a624e2eeccac 47 * }
nxp_ip 0:a624e2eeccac 48 * led_cntlr.pwm( ALLPORTS, 0.0 );
nxp_ip 0:a624e2eeccac 49 * }
nxp_ip 0:a624e2eeccac 50 * }
nxp_ip 0:a624e2eeccac 51 * @endcode
nxp_ip 0:a624e2eeccac 52 */
nxp_ip 0:a624e2eeccac 53
nxp_ip 0:a624e2eeccac 54 class PCA9956A : public PCA995xA
nxp_ip 0:a624e2eeccac 55 {
nxp_ip 0:a624e2eeccac 56 public:
nxp_ip 0:a624e2eeccac 57 /** Name of the PCA9956A registers */
nxp_ip 0:a624e2eeccac 58 enum command_reg {
nxp_ip 0:a624e2eeccac 59 MODE1, MODE2,
nxp_ip 0:a624e2eeccac 60 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
nxp_ip 0:a624e2eeccac 61 GRPPWM, GRPFREQ,
nxp_ip 0:a624e2eeccac 62 PWM0, PWM1, PWM2, PWM3,
nxp_ip 0:a624e2eeccac 63 PWM4, PWM5, PWM6, PWM7,
nxp_ip 0:a624e2eeccac 64 PWM8, PWM9, PWM10, PWM11,
nxp_ip 0:a624e2eeccac 65 PWM12, PWM13, PWM14, PWM15,
nxp_ip 0:a624e2eeccac 66 PWM16, PWM17, PWM18, PWM19,
nxp_ip 0:a624e2eeccac 67 PWM20, PWM21, PWM22, PWM23,
nxp_ip 0:a624e2eeccac 68 IREF0, IREF1, IREF2, IREF3,
nxp_ip 0:a624e2eeccac 69 IREF4, IREF5, IREF6, IREF7,
nxp_ip 0:a624e2eeccac 70 IREF8, IREF9, IREF10, IREF11,
nxp_ip 0:a624e2eeccac 71 IREF12, IREF13, IREF14, IREF15,
nxp_ip 0:a624e2eeccac 72 IREF16, IREF17, IREF18, IREF19,
nxp_ip 0:a624e2eeccac 73 IREF20, IREF21, IREF22, IREF23,
nxp_ip 0:a624e2eeccac 74 OFFSET = 0x3A,
nxp_ip 0:a624e2eeccac 75 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
nxp_ip 0:a624e2eeccac 76 PWMALL, IREFALL,
nxp_ip 0:a624e2eeccac 77 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
nxp_ip 0:a624e2eeccac 78
nxp_ip 0:a624e2eeccac 79 REGISTER_START = MODE1,
nxp_ip 0:a624e2eeccac 80 LEDOUT_REGISTER_START = LEDOUT0,
nxp_ip 0:a624e2eeccac 81 PWM_REGISTER_START = PWM0,
nxp_ip 0:a624e2eeccac 82 IREF_REGISTER_START = IREF0,
nxp_ip 0:a624e2eeccac 83 };
nxp_ip 0:a624e2eeccac 84
nxp_ip 0:a624e2eeccac 85 /** Create a PCA9629A instance connected to specified I2C pins with specified address
nxp_ip 0:a624e2eeccac 86 *
nxp_ip 0:a624e2eeccac 87 * @param i2c_sda I2C-bus SDA pin
nxp_ip 0:a624e2eeccac 88 * @param i2c_sda I2C-bus SCL pin
nxp_ip 0:a624e2eeccac 89 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:a624e2eeccac 90 */
nxp_ip 0:a624e2eeccac 91 PCA9956A( PinName i2c_sda, PinName i2c_scl, char i2c_address = PCA995xA::DEFAULT_I2C_ADDR );
nxp_ip 0:a624e2eeccac 92
nxp_ip 0:a624e2eeccac 93 /** Create a PCA9629A instance connected to specified I2C pins with specified address
nxp_ip 0:a624e2eeccac 94 *
nxp_ip 0:a624e2eeccac 95 * @param i2c_obj I2C object (instance)
nxp_ip 0:a624e2eeccac 96 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:a624e2eeccac 97 */
nxp_ip 0:a624e2eeccac 98 PCA9956A( I2C &i2c_obj, char i2c_address = PCA995xA::DEFAULT_I2C_ADDR );
nxp_ip 0:a624e2eeccac 99
nxp_ip 0:a624e2eeccac 100 /** Destractor
nxp_ip 0:a624e2eeccac 101 *
nxp_ip 0:a624e2eeccac 102 */
nxp_ip 0:a624e2eeccac 103 virtual ~PCA9956A();
nxp_ip 0:a624e2eeccac 104
nxp_ip 0:a624e2eeccac 105 /** Returns the number of output ports
nxp_ip 0:a624e2eeccac 106 *
nxp_ip 0:a624e2eeccac 107 * @returns
nxp_ip 0:a624e2eeccac 108 * The number of output ports
nxp_ip 0:a624e2eeccac 109 */
nxp_ip 0:a624e2eeccac 110 virtual int number_of_ports( void );
nxp_ip 0:a624e2eeccac 111
nxp_ip 0:a624e2eeccac 112 #if DOXYGEN_ONLY
nxp_ip 0:a624e2eeccac 113 /** Set the output duty-cycle, specified as a percentage (float)
nxp_ip 0:a624e2eeccac 114 *
nxp_ip 0:a624e2eeccac 115 * @param port Selecting output port
nxp_ip 0:a624e2eeccac 116 * 'ALLPORTS' can be used to set all port duty-cycle same value.
nxp_ip 0:a624e2eeccac 117 * @param v A floating-point value representing the output duty-cycle,
nxp_ip 0:a624e2eeccac 118 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 119 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 120 * Values outside this range will have undefined behavior.
nxp_ip 0:a624e2eeccac 121 */
nxp_ip 0:a624e2eeccac 122 void pwm( int port, float v );
nxp_ip 0:a624e2eeccac 123
nxp_ip 0:a624e2eeccac 124 /** Set all output port duty-cycle, specified as a percentage (array of float)
nxp_ip 0:a624e2eeccac 125 *
nxp_ip 0:a624e2eeccac 126 * @param vp Aray to floating-point values representing the output duty-cycle,
nxp_ip 0:a624e2eeccac 127 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 128 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 129 *
nxp_ip 0:a624e2eeccac 130 * @note
nxp_ip 0:a624e2eeccac 131 * The aray should have length of 24
nxp_ip 0:a624e2eeccac 132 */
nxp_ip 0:a624e2eeccac 133 void pwm( float *vp );
nxp_ip 0:a624e2eeccac 134
nxp_ip 0:a624e2eeccac 135 /** Set the output current, specified as a percentage (float)
nxp_ip 0:a624e2eeccac 136 *
nxp_ip 0:a624e2eeccac 137 * @param port Selecting output port
nxp_ip 0:a624e2eeccac 138 * 'ALLPORTS' can be used to set all port duty-cycle same value.
nxp_ip 0:a624e2eeccac 139 * @param v A floating-point value representing the output current,
nxp_ip 0:a624e2eeccac 140 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 141 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 142 * Values outside this range will have undefined behavior.
nxp_ip 0:a624e2eeccac 143 */
nxp_ip 0:a624e2eeccac 144 void current( int port, float vp );
nxp_ip 0:a624e2eeccac 145
nxp_ip 0:a624e2eeccac 146 /** Set all output port curent, specified as a percentage (array of float)
nxp_ip 0:a624e2eeccac 147 *
nxp_ip 0:a624e2eeccac 148 * @param vp Aray to floating-point values representing the output current,
nxp_ip 0:a624e2eeccac 149 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 150 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 151 *
nxp_ip 0:a624e2eeccac 152 * @note
nxp_ip 0:a624e2eeccac 153 * The aray should have length of 24
nxp_ip 0:a624e2eeccac 154 */
nxp_ip 0:a624e2eeccac 155 void current( float *vP );
nxp_ip 0:a624e2eeccac 156
nxp_ip 0:a624e2eeccac 157 /** Register write (single byte) : Low level access to device register
nxp_ip 0:a624e2eeccac 158 *
nxp_ip 0:a624e2eeccac 159 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 160 * @param data Value for setting into the register
nxp_ip 0:a624e2eeccac 161 */
nxp_ip 0:a624e2eeccac 162 void write( char reg_addr, char data );
nxp_ip 0:a624e2eeccac 163
nxp_ip 0:a624e2eeccac 164 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:a624e2eeccac 165 *
nxp_ip 0:a624e2eeccac 166 * @param data Pointer to an array. First 1 byte should be the writing start register address
nxp_ip 0:a624e2eeccac 167 * @param length Length of data
nxp_ip 0:a624e2eeccac 168 */
nxp_ip 0:a624e2eeccac 169 void write( char *data, int length );
nxp_ip 0:a624e2eeccac 170
nxp_ip 0:a624e2eeccac 171 /** Register read (single byte) : Low level access to device register
nxp_ip 0:a624e2eeccac 172 *
nxp_ip 0:a624e2eeccac 173 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 174 * @return Read value from register
nxp_ip 0:a624e2eeccac 175 */
nxp_ip 0:a624e2eeccac 176 char read( char reg_addr );
nxp_ip 0:a624e2eeccac 177
nxp_ip 0:a624e2eeccac 178 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:a624e2eeccac 179 *
nxp_ip 0:a624e2eeccac 180 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 181 * @param data Pointer to an array. The values are stored in this array.
nxp_ip 0:a624e2eeccac 182 * @param length Length of data
nxp_ip 0:a624e2eeccac 183 */
nxp_ip 0:a624e2eeccac 184 void read( char reg_addr, char *data, int length );
nxp_ip 0:a624e2eeccac 185 #endif
nxp_ip 0:a624e2eeccac 186
nxp_ip 0:a624e2eeccac 187 private:
nxp_ip 0:a624e2eeccac 188 void initialize( void );
nxp_ip 0:a624e2eeccac 189 virtual char pwm_register_access( int port );
nxp_ip 0:a624e2eeccac 190 virtual char current_register_access( int port );
nxp_ip 0:a624e2eeccac 191
nxp_ip 0:a624e2eeccac 192 const int n_of_ports;
nxp_ip 0:a624e2eeccac 193 }
nxp_ip 0:a624e2eeccac 194 ;
nxp_ip 0:a624e2eeccac 195
nxp_ip 0:a624e2eeccac 196 #endif // MBED_PCA9956A