* PCA9547 library * +++++ Based on; https://developer.mbed.org/users/okano/code/PCA9547/ +++++ * * 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

Committer:
AkinoriHashimoto
Date:
Fri Oct 02 05:37:18 2015 +0000
Revision:
0:2d777d5d7e6b
Child:
1:c388983364cc
1st publish.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AkinoriHashimoto 0:2d777d5d7e6b 1 /**
AkinoriHashimoto 0:2d777d5d7e6b 2 * PCA9547 library
AkinoriHashimoto 0:2d777d5d7e6b 3 * +++++ Based on; https://developer.mbed.org/users/okano/code/PCA9547/ +++++
AkinoriHashimoto 0:2d777d5d7e6b 4 *
AkinoriHashimoto 0:2d777d5d7e6b 5 * @author Tedd OKANO
AkinoriHashimoto 0:2d777d5d7e6b 6 * @version 0.2
AkinoriHashimoto 0:2d777d5d7e6b 7 * @date Feb-2015
AkinoriHashimoto 0:2d777d5d7e6b 8 *
AkinoriHashimoto 0:2d777d5d7e6b 9 * PCA9547: an I2C bus multiplexer control library
AkinoriHashimoto 0:2d777d5d7e6b 10 *
AkinoriHashimoto 0:2d777d5d7e6b 11 * PCA9547 is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus.
AkinoriHashimoto 0:2d777d5d7e6b 12 * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads.
AkinoriHashimoto 0:2d777d5d7e6b 13 *
AkinoriHashimoto 0:2d777d5d7e6b 14 * For more information about PCA9547:
AkinoriHashimoto 0:2d777d5d7e6b 15 * http://www.nxp.com/documents/data_sheet/PCA9547.pdf
AkinoriHashimoto 0:2d777d5d7e6b 16 *
AkinoriHashimoto 0:2d777d5d7e6b 17 */
AkinoriHashimoto 0:2d777d5d7e6b 18 #pragma once
AkinoriHashimoto 0:2d777d5d7e6b 19
AkinoriHashimoto 0:2d777d5d7e6b 20 // if You Need Reset,
AkinoriHashimoto 0:2d777d5d7e6b 21 //#define PCA9547_RESET p26
AkinoriHashimoto 0:2d777d5d7e6b 22
AkinoriHashimoto 0:2d777d5d7e6b 23 #include "mbed.h"
AkinoriHashimoto 0:2d777d5d7e6b 24
AkinoriHashimoto 0:2d777d5d7e6b 25 /** PCA9547 class
AkinoriHashimoto 0:2d777d5d7e6b 26 *
AkinoriHashimoto 0:2d777d5d7e6b 27 * PCA9547: an I2C bus multiplexer control library
AkinoriHashimoto 0:2d777d5d7e6b 28 *
AkinoriHashimoto 0:2d777d5d7e6b 29 * PCA9547 is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus.
AkinoriHashimoto 0:2d777d5d7e6b 30 * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads.
AkinoriHashimoto 0:2d777d5d7e6b 31 *
AkinoriHashimoto 0:2d777d5d7e6b 32 * For more informatioj about PCA9547:
AkinoriHashimoto 0:2d777d5d7e6b 33 * http://www.nxp.com/documents/data_sheet/PCA9547.pdf
AkinoriHashimoto 0:2d777d5d7e6b 34 *
AkinoriHashimoto 0:2d777d5d7e6b 35 * Example:
AkinoriHashimoto 0:2d777d5d7e6b 36 * @code
AkinoriHashimoto 0:2d777d5d7e6b 37 * #include "mbed.h"
AkinoriHashimoto 0:2d777d5d7e6b 38 * #include "LM75B.h"
AkinoriHashimoto 0:2d777d5d7e6b 39 * #include "PCA9547.h"
AkinoriHashimoto 0:2d777d5d7e6b 40 *
AkinoriHashimoto 0:2d777d5d7e6b 41 * PCA9547 mux( p28, p27, 0xE0 );
AkinoriHashimoto 0:2d777d5d7e6b 42 *
AkinoriHashimoto 0:2d777d5d7e6b 43 * int main()
AkinoriHashimoto 0:2d777d5d7e6b 44 * {
AkinoriHashimoto 0:2d777d5d7e6b 45 * mux.select( 0 );
AkinoriHashimoto 0:2d777d5d7e6b 46 *
AkinoriHashimoto 0:2d777d5d7e6b 47 * LM75B tmp0( p28, p27 ); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled
AkinoriHashimoto 0:2d777d5d7e6b 48 *
AkinoriHashimoto 0:2d777d5d7e6b 49 * while(1) {
AkinoriHashimoto 0:2d777d5d7e6b 50 * printf( "%.3f\r\n", tmp0.read() );
AkinoriHashimoto 0:2d777d5d7e6b 51 * wait( 1.0 );
AkinoriHashimoto 0:2d777d5d7e6b 52 * }
AkinoriHashimoto 0:2d777d5d7e6b 53 * }
AkinoriHashimoto 0:2d777d5d7e6b 54 * @endcode
AkinoriHashimoto 0:2d777d5d7e6b 55 */
AkinoriHashimoto 0:2d777d5d7e6b 56
AkinoriHashimoto 0:2d777d5d7e6b 57 class PCA9547
AkinoriHashimoto 0:2d777d5d7e6b 58 {
AkinoriHashimoto 0:2d777d5d7e6b 59 public:
AkinoriHashimoto 0:2d777d5d7e6b 60
AkinoriHashimoto 0:2d777d5d7e6b 61 /** Create a PCA9547 instance connected to specified I2C pins with specified address
AkinoriHashimoto 0:2d777d5d7e6b 62 *
AkinoriHashimoto 0:2d777d5d7e6b 63 * @param sda I2C-bus SDA pin
AkinoriHashimoto 0:2d777d5d7e6b 64 * @param scl I2C-bus SCL pin
AkinoriHashimoto 0:2d777d5d7e6b 65 * @param i2c_address I2C-bus address (default: 0xE0)
AkinoriHashimoto 0:2d777d5d7e6b 66 */
AkinoriHashimoto 0:2d777d5d7e6b 67 PCA9547( PinName sda, PinName scl, char i2c_address = 0xE0 );
AkinoriHashimoto 0:2d777d5d7e6b 68
AkinoriHashimoto 0:2d777d5d7e6b 69 /** Create a PCA9546A instance connected to specified I2C pins with specified address
AkinoriHashimoto 0:2d777d5d7e6b 70 *
AkinoriHashimoto 0:2d777d5d7e6b 71 * @param &i2c_ I2C object (instance)
AkinoriHashimoto 0:2d777d5d7e6b 72 * @param i2c_address I2C-bus address (default: 0xE0)
AkinoriHashimoto 0:2d777d5d7e6b 73 */
AkinoriHashimoto 0:2d777d5d7e6b 74 PCA9547( I2C &i2c_, char i2c_address = 0xE0 );
AkinoriHashimoto 0:2d777d5d7e6b 75
AkinoriHashimoto 0:2d777d5d7e6b 76 /** Destructor of PCA9547
AkinoriHashimoto 0:2d777d5d7e6b 77 */
AkinoriHashimoto 0:2d777d5d7e6b 78 ~PCA9547();
AkinoriHashimoto 0:2d777d5d7e6b 79
AkinoriHashimoto 0:2d777d5d7e6b 80 /** Channel select
AkinoriHashimoto 0:2d777d5d7e6b 81 *
AkinoriHashimoto 0:2d777d5d7e6b 82 * Enable and select a channel
AkinoriHashimoto 0:2d777d5d7e6b 83 *
AkinoriHashimoto 0:2d777d5d7e6b 84 * @param channel channel number (integer). Not ASCII.
AkinoriHashimoto 0:2d777d5d7e6b 85 */
AkinoriHashimoto 0:2d777d5d7e6b 86 bool select(int ch);
AkinoriHashimoto 0:2d777d5d7e6b 87 // void select( char channel );
AkinoriHashimoto 0:2d777d5d7e6b 88
AkinoriHashimoto 0:2d777d5d7e6b 89
AkinoriHashimoto 0:2d777d5d7e6b 90 /** Disabling all channels
AkinoriHashimoto 0:2d777d5d7e6b 91 *
AkinoriHashimoto 0:2d777d5d7e6b 92 * Disable all channels
AkinoriHashimoto 0:2d777d5d7e6b 93 */
AkinoriHashimoto 0:2d777d5d7e6b 94 void disable( void );
AkinoriHashimoto 0:2d777d5d7e6b 95
AkinoriHashimoto 0:2d777d5d7e6b 96 private:
AkinoriHashimoto 0:2d777d5d7e6b 97 I2C *i2c_p;
AkinoriHashimoto 0:2d777d5d7e6b 98 I2C &i2c;
AkinoriHashimoto 0:2d777d5d7e6b 99 char i2c_addr;
AkinoriHashimoto 0:2d777d5d7e6b 100 #ifdef PCA9547_RESET
AkinoriHashimoto 0:2d777d5d7e6b 101 DigitalOut resetPin(PCA9547_RESET);
AkinoriHashimoto 0:2d777d5d7e6b 102 #endif
AkinoriHashimoto 0:2d777d5d7e6b 103
AkinoriHashimoto 0:2d777d5d7e6b 104 void init();
AkinoriHashimoto 0:2d777d5d7e6b 105 };
AkinoriHashimoto 0:2d777d5d7e6b 106
AkinoriHashimoto 0:2d777d5d7e6b 107 // EOF