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
PCA962x.cpp
00001 #include "mbed.h" 00002 #include "PCA962x.h" 00003 00004 PCA962x::PCA962x( 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 } 00008 00009 PCA962x::PCA962x( I2C &i2c_, char i2c_address ) 00010 : i2c_p( NULL ), i2c( i2c_ ), address( i2c_address ) 00011 { 00012 } 00013 00014 PCA962x::~PCA962x() 00015 { 00016 if ( NULL != i2c_p ) 00017 delete i2c_p; 00018 } 00019 00020 void PCA962x::reset( void ) 00021 { 00022 char va[] = { 0xA5, 0x5A }; 00023 i2c.write( 0x06, va, sizeof( va ) ); 00024 } 00025 00026 void PCA962x::pwm( int port, float v ) 00027 { 00028 char reg_addr; 00029 00030 reg_addr = pwm_register_access( port ); 00031 00032 if ( PWMALL == reg_addr ) { 00033 int np = number_of_ports(); 00034 float va[ np ]; 00035 00036 for ( int i = 0; i < np; i++ ) 00037 va[ i ] = v; 00038 00039 pwm( va ); 00040 00041 } else { 00042 write( reg_addr, (char)(v * 255.0) ); 00043 } 00044 } 00045 00046 void PCA962x::pwm( float *vp ) 00047 { 00048 int n_of_ports = number_of_ports(); 00049 char data[ n_of_ports + 1 ]; 00050 00051 *data = pwm_register_access( 0 ); 00052 00053 for ( int i = 1; i <= n_of_ports; i++ ) 00054 data[ i ] = (char)(*vp++ * 255.0); 00055 00056 write( data, sizeof( data ) ); 00057 } 00058 00059 void PCA962x::write( char *data, int length ) 00060 { 00061 *data |= AUTO_INCREMENT; 00062 i2c.write( address, data, length ); 00063 } 00064 00065 void PCA962x::write( char reg_addr, char data ) 00066 { 00067 char c[2]; 00068 00069 c[0] = reg_addr; 00070 c[1] = data; 00071 00072 i2c.write( address, c, 2 ); 00073 } 00074 00075 void PCA962x::read( char reg_addr, char *data, int length ) 00076 { 00077 reg_addr |= 0x80; 00078 i2c.write( address, (char *)(®_addr), 1, true ); 00079 i2c.read( address, data, length ); 00080 } 00081 00082 char PCA962x::read( char reg_addr ) 00083 { 00084 i2c.write( address, (char *)(®_addr), 1, true ); 00085 i2c.read( address, (char *)(®_addr), 1 ); 00086 00087 return ( reg_addr ); 00088 }
Generated on Wed Jul 13 2022 09:11:28 by
1.7.2
PCA9622, PCA9624, PCA9626 : 8, 16 & 24ch LED driver (Voltage switch type)