gfdgd
Fork of PCA995xA by
PCA9956A/PCA9956A.h@0:a624e2eeccac, 2015-02-25 (annotated)
- 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?
User | Revision | Line number | New 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 |