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.
PCA9632.cpp
00001 #include "mbed.h" 00002 #include "PCA9632.h" 00003 00004 PCA9632::PCA9632( PinName i2c_sda, PinName i2c_scl, char i2c_address ) 00005 : i2c_p( new I2C( i2c_sda, i2c_scl ) ), i2c( *i2c_p ), address( i2c_address ) 00006 { 00007 initialize(); 00008 } 00009 00010 PCA9632::PCA9632( I2C &i2c_, char i2c_address ) 00011 : i2c_p( NULL ), i2c( i2c_ ), address( i2c_address ) 00012 { 00013 initialize(); 00014 } 00015 00016 PCA9632::~PCA9632() 00017 { 00018 if ( NULL != i2c_p ) 00019 delete i2c_p; 00020 } 00021 00022 void PCA9632::initialize( void ) 00023 { 00024 char init_array0[] = { 00025 AUTO_INCREMENT | REGISTER_START, // Command 00026 0x01, 0x00, // MODE1, MODE2 00027 }; 00028 char init_array1[] = { 00029 AUTO_INCREMENT | LEDOUT, // Command 00030 0xAA, // LEDOUT 00031 }; 00032 00033 write( init_array0, sizeof( init_array0 ) ); 00034 write( init_array1, sizeof( init_array1 ) ); 00035 } 00036 00037 void PCA9632::reset( void ) 00038 { 00039 char va[] = { 0xA5, 0x5A }; 00040 i2c.write( 0x06, va, sizeof( va ) ); 00041 } 00042 00043 void PCA9632::pwm( int port, float v ) 00044 { 00045 char reg_addr; 00046 00047 if ( port < N_OF_PORTS ) { 00048 reg_addr = PWM_REGISTER_START + port; 00049 write( reg_addr, (char)(v * 255.0) ); 00050 } else { 00051 float va[ N_OF_PORTS ]; 00052 00053 for ( int i = 0; i < N_OF_PORTS; i++ ) 00054 va[ i ] = v; 00055 00056 pwm( va ); 00057 } 00058 } 00059 00060 void PCA9632::pwm( float *vp ) 00061 { 00062 char data[ N_OF_PORTS + 1 ]; 00063 00064 *data = PWM_REGISTER_START; 00065 00066 for ( int i = 1; i <= N_OF_PORTS; i++ ) 00067 data[ i ] = (char)(*vp++ * 255.0); 00068 00069 write( data, sizeof( data ) ); 00070 } 00071 00072 void PCA9632::write( char *data, int length ) 00073 { 00074 *data |= AUTO_INCREMENT; 00075 i2c.write( address, data, length ); 00076 } 00077 00078 void PCA9632::write( char reg_addr, char data ) 00079 { 00080 char c[2]; 00081 00082 c[0] = reg_addr; 00083 c[1] = data; 00084 00085 i2c.write( address, c, 2 ); 00086 } 00087 00088 void PCA9632::read( char reg_addr, char *data, int length ) 00089 { 00090 reg_addr |= 0x80; 00091 i2c.write( address, (char *)(®_addr), 1, true ); 00092 i2c.read( address, data, length ); 00093 } 00094 00095 char PCA9632::read( char reg_addr ) 00096 { 00097 i2c.write( address, (char *)(®_addr), 1, true ); 00098 i2c.read( address, (char *)(®_addr), 1 ); 00099 00100 return ( reg_addr ); 00101 }
Generated on Wed Jul 13 2022 08:58:56 by
1.7.2
PCA9632 : 4ch LED driver (voltage switch type)