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

Dependents:   pca9547_Hello m3Dpi

/media/uploads/okano/pca9547_connections.png

Information

For more information, please visit component page.

The PCA9547 is an octal bidirectional translating multiplexer controlled by the I2C-bus. The SCL/SDA upstream pair fans out to eight downstream pairs, or channels.

pca9547

Files at this revision

API Documentation at this revision

Comitter:
okano
Date:
Mon Feb 23 06:25:45 2015 +0000
Parent:
4:3c0af4c37587
Child:
6:33ef755248e0
Commit message:
added: a constructor by I2C instance; Code sample update

Changed in this revision

PCA9547.cpp Show annotated file Show diff for this revision Revisions of this file
PCA9547.h Show annotated file Show diff for this revision Revisions of this file
--- a/PCA9547.cpp	Tue Jul 01 00:37:01 2014 +0000
+++ b/PCA9547.cpp	Mon Feb 23 06:25:45 2015 +0000
@@ -17,7 +17,15 @@
 
 #include "PCA9547.h"
 
-PCA9547::PCA9547( PinName sda, PinName scl, char i2c_address ) : i2c( sda, scl ), _i2c_addr( i2c_address )
+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.
@@ -25,19 +33,20 @@
 
 PCA9547::~PCA9547()
 {
-
+    if ( NULL != i2c_p )
+        delete  i2c_p;
 }
 
 void PCA9547::select( char channel )
 {
     char    data    = 0x08 | channel;
 
-    i2c.write( _i2c_addr, &data, 1 );
+    i2c.write( i2c_addr, &data, 1 );
 }
 
 void PCA9547::disable( void )
 {
     char    data    = 0x00;
 
-    i2c.write( _i2c_addr, &data, 1 );
+    i2c.write( i2c_addr, &data, 1 );
 }
--- a/PCA9547.h	Tue Jul 01 00:37:01 2014 +0000
+++ b/PCA9547.h	Mon Feb 23 06:25:45 2015 +0000
@@ -36,10 +36,10 @@
  *  #include "LM75B.h"
  *  #include "PCA9547.h"
  *
+ *  PCA9547 mux( p28, p27, 0xE0 );
+ *
  *  int main()
  *  {
- *      PCA9547 mux( p28, p27, 0xE0 );
- *
  *      mux.select( 0 );
  *
  *      LM75B   tmp0( p28, p27 );   //  making instance after a branch of I2C bus (which is connecting the LM75B) enabled
@@ -64,6 +64,13 @@
      */
     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();
@@ -83,8 +90,9 @@
     void disable( void );
 
 private:
-    I2C     i2c;
-    char    _i2c_addr;
+    I2C     *i2c_p;
+    I2C     &i2c;
+    char    i2c_addr;
 };
 
 #endif  //  MBED_PCA9547_H
\ No newline at end of file