Adaptation for PCA9548 Nxp I2C switch
Fork of PCA9547 by
Revision 9:2fcf9622c207, committed 2017-03-22
- Comitter:
- franzle
- Date:
- Wed Mar 22 09:34:59 2017 +0000
- Parent:
- 8:c716fb3ccb8d
- Commit message:
- New Library for I2C switch
Changed in this revision
diff -r c716fb3ccb8d -r 2fcf9622c207 PCA9547.cpp --- a/PCA9547.cpp Fri Apr 17 03:34:23 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/** - * PCA9547 library - * - * @author Tedd OKANO - * @version 0.2 - * @date Feb-2015 - * - * PCA9547: an I2C bus multiplexer control library - * - * PCA9547 is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. - * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. - * - * For more information about PCA9547: - * http://www.nxp.com/documents/data_sheet/PCA9547.pdf - * - */ - -#include "PCA9547.h" - -PCA9547::PCA9547( PinName sda, PinName scl, char i2c_address ) - : i2c_p( new I2C( sda, scl ) ), i2c( *i2c_p ), i2c_addr( i2c_address ) -{ - // do nothing. - // leave it in default state. -} - -PCA9547::PCA9547( I2C &i2c_, char i2c_address ) - : i2c_p( NULL ), i2c( i2c_ ), i2c_addr( i2c_address ) -{ - // do nothing. - // leave it in default state. -} - -PCA9547::~PCA9547() -{ - if ( NULL != i2c_p ) - delete i2c_p; -} - -void PCA9547::select( char channel ) -{ - char data = 0x08 | channel; - - i2c.write( i2c_addr, &data, 1 ); -} - -void PCA9547::disable( void ) -{ - char data = 0x00; - - i2c.write( i2c_addr, &data, 1 ); -}
diff -r c716fb3ccb8d -r 2fcf9622c207 PCA9547.h --- a/PCA9547.h Fri Apr 17 03:34:23 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/** - * PCA9547 library - * - * @author Tedd OKANO - * @version 0.2 - * @date Feb-2015 - * - * PCA9547: an I2C bus multiplexer control library - * - * PCA9547 is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. - * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. - * - * For more information about PCA9547: - * http://www.nxp.com/documents/data_sheet/PCA9547.pdf - * - */ - -#ifndef MBED_PCA9547_H -#define MBED_PCA9547_H - -#include "mbed.h" - -/** PCA9547 class - * - * PCA9547: an I2C bus multiplexer control library - * - * PCA9547 is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. - * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. - * - * For more informatioj about PCA9547: - * http://www.nxp.com/documents/data_sheet/PCA9547.pdf - * - * Example: - * @code - * #include "mbed.h" - * #include "LM75B.h" - * #include "PCA9547.h" - * - * PCA9547 mux( p28, p27, 0xE0 ); - * - * int main() - * { - * mux.select( 0 ); - * - * LM75B tmp0( p28, p27 ); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled - * - * while(1) { - * printf( "%.3f\r\n", tmp0.read() ); - * wait( 1.0 ); - * } - * } - * @endcode - */ - -class PCA9547 -{ -public: - - /** Create a PCA9547 instance connected to specified I2C pins with specified address - * - * @param sda I2C-bus SDA pin - * @param scl I2C-bus SCL pin - * @param i2c_address I2C-bus address (default: 0xE0) - */ - PCA9547( PinName sda, PinName scl, char i2c_address = 0xE0 ); - - /** Create a PCA9546A instance connected to specified I2C pins with specified address - * - * @param &i2c_ I2C object (instance) - * @param i2c_address I2C-bus address (default: 0xE0) - */ - PCA9547( I2C &i2c_, char i2c_address = 0xE0 ); - - /** Destructor of PCA9547 - */ - ~PCA9547(); - - /** Channel select - * - * Enable and select a channel - * - * @param channel channel number - */ - void select( char channel ); - - /** Disabling all channels - * - * Disable all channels - */ - void disable( void ); - -private: - I2C *i2c_p; - I2C &i2c; - char i2c_addr; -}; - -#endif // MBED_PCA9547_H \ No newline at end of file
diff -r c716fb3ccb8d -r 2fcf9622c207 PCA9548A.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9548A.cpp Wed Mar 22 09:34:59 2017 +0000 @@ -0,0 +1,52 @@ +/** + * PCA9548A library + * + * @author Tedd OKANO + * @version 0.2 + * @date Feb-2015 + * + * PCA9548A: an I2C bus multiplexer control library + * + * PCA9548A is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. + * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. + * + * For more information about PCA9548A: + * http://www.nxp.com/documents/data_sheet/PCA9548A.pdf + * + */ + +#include "PCA9548A.h" + +PCA9548A::PCA9548A( PinName sda, PinName scl, char i2c_address ) + : i2c_p( new I2C( sda, scl ) ), i2c( *i2c_p ), i2c_addr( i2c_address ) +{ + // do nothing. + // leave it in default state. +} + +PCA9548A::PCA9548A( I2C &i2c_, char i2c_address ) + : i2c_p( NULL ), i2c( i2c_ ), i2c_addr( i2c_address ) +{ + // do nothing. + // leave it in default state. +} + +PCA9548A::~PCA9548A() +{ + if ( NULL != i2c_p ) + delete i2c_p; +} + +void PCA9548A::select( char channel ) +{ + char data = 0x08 | channel; + + i2c.write( i2c_addr, &data, 1 ); +} + +void PCA9548A::disable( void ) +{ + char data = 0x00; + + i2c.write( i2c_addr, &data, 1 ); +}
diff -r c716fb3ccb8d -r 2fcf9622c207 PCA9548A.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9548A.h Wed Mar 22 09:34:59 2017 +0000 @@ -0,0 +1,98 @@ +/** + * PCA9548A library + * + * @author Tedd OKANO + * @version 0.2 + * @date Feb-2015 + * + * PCA9548A: an I2C bus multiplexer control library + * + * PCA9548A is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. + * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. + * + * For more information about PCA9548A: + * http://www.nxp.com/documents/data_sheet/PCA9548A.pdf + * + */ + +#ifndef MBED_PCA9547_H +#define MBED_PCA9547_H + +#include "mbed.h" + +/** PCA9548A class + * + * PCA9548A: an I2C bus multiplexer control library + * + * PCA9548A is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus. + * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads. + * + * For more informatioj about PCA9548A: + * http://www.nxp.com/documents/data_sheet/PCA9548A.pdf + * + * Example: + * @code + * #include "mbed.h" + * #include "LM75B.h" + * #include "PCA9548A.h" + * + * PCA9548A mux( p28, p27, 0xE0 ); + * + * int main() + * { + * mux.select( 0 ); + * + * LM75B tmp0( p28, p27 ); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled + * + * while(1) { + * printf( "%.3f\r\n", tmp0.read() ); + * wait( 1.0 ); + * } + * } + * @endcode + */ + +class PCA9548A +{ +public: + + /** Create a PCA9548A instance connected to specified I2C pins with specified address + * + * @param sda I2C-bus SDA pin + * @param scl I2C-bus SCL pin + * @param i2c_address I2C-bus address (default: 0xE0) + */ + PCA9548A( PinName sda, PinName scl, char i2c_address = 0xE0 ); + + /** Create a PCA9546A instance connected to specified I2C pins with specified address + * + * @param &i2c_ I2C object (instance) + * @param i2c_address I2C-bus address (default: 0xE0) + */ + PCA9548A( I2C &i2c_, char i2c_address = 0xE0 ); + + /** Destructor of PCA9548A + */ + ~PCA9548A(); + + /** Channel select + * + * Enable and select a channel + * + * @param channel channel number + */ + void select( char channel ); + + /** Disabling all channels + * + * Disable all channels + */ + void disable( void ); + +private: + I2C *i2c_p; + I2C &i2c; + char i2c_addr; +}; + +#endif // MBED_PCA9547_H \ No newline at end of file