* 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
PCA9547.h@0:2d777d5d7e6b, 2015-10-02 (annotated)
- 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?
User | Revision | Line number | New 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 |