Component library for PCA9546A. The PCA9546A is a quad bidirectional translating switch controlled via the I2C-bus. The SCL/SDA upstream pair fans out to four downstream pairs, or channels. Any individual SCx/SDx channel or combination of channels can be selected, determined by the contents of the programmable control register.
PCA9546A.h@0:2d50d8bba33e, 2015-02-23 (annotated)
- Committer:
- okano
- Date:
- Mon Feb 23 06:07:04 2015 +0000
- Revision:
- 0:2d50d8bba33e
initial version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 0:2d50d8bba33e | 1 | /** |
okano | 0:2d50d8bba33e | 2 | * PCA9546A library |
okano | 0:2d50d8bba33e | 3 | * |
okano | 0:2d50d8bba33e | 4 | * @author Tedd OKANO |
okano | 0:2d50d8bba33e | 5 | * @version 0.1 |
okano | 0:2d50d8bba33e | 6 | * @date Feb-2015 |
okano | 0:2d50d8bba33e | 7 | * |
okano | 0:2d50d8bba33e | 8 | * PCA9546A: an I2C bus switch control library |
okano | 0:2d50d8bba33e | 9 | * |
okano | 0:2d50d8bba33e | 10 | * The PCA9546A is a quad bidirectional translating switch controlled |
okano | 0:2d50d8bba33e | 11 | * via the I2C-bus. The SCL/SDA upstream pair fans out to four downstream |
okano | 0:2d50d8bba33e | 12 | * pairs, or channels. Any individual SCx/SDx channel or combination of |
okano | 0:2d50d8bba33e | 13 | * channels can be selected, determined by the contents of the programmable |
okano | 0:2d50d8bba33e | 14 | * control register. |
okano | 0:2d50d8bba33e | 15 | * |
okano | 0:2d50d8bba33e | 16 | * For more information about PCA9546A: |
okano | 0:2d50d8bba33e | 17 | * http://www.nxp.com/documents/data_sheet/PCA9546A.pdf |
okano | 0:2d50d8bba33e | 18 | * |
okano | 0:2d50d8bba33e | 19 | */ |
okano | 0:2d50d8bba33e | 20 | |
okano | 0:2d50d8bba33e | 21 | #ifndef MBED_PCA9546A_H |
okano | 0:2d50d8bba33e | 22 | #define MBED_PCA9546A_H |
okano | 0:2d50d8bba33e | 23 | |
okano | 0:2d50d8bba33e | 24 | #include "mbed.h" |
okano | 0:2d50d8bba33e | 25 | |
okano | 0:2d50d8bba33e | 26 | /** PCA9546A class |
okano | 0:2d50d8bba33e | 27 | * |
okano | 0:2d50d8bba33e | 28 | * PCA9546A: an I2C bus switch control library |
okano | 0:2d50d8bba33e | 29 | * |
okano | 0:2d50d8bba33e | 30 | * The PCA9546A is a quad bidirectional translating switch controlled |
okano | 0:2d50d8bba33e | 31 | * via the I2C-bus. The SCL/SDA upstream pair fans out to four downstream |
okano | 0:2d50d8bba33e | 32 | * pairs, or channels. Any individual SCx/SDx channel or combination of |
okano | 0:2d50d8bba33e | 33 | * channels can be selected, determined by the contents of the programmable |
okano | 0:2d50d8bba33e | 34 | * control register. |
okano | 0:2d50d8bba33e | 35 | * |
okano | 0:2d50d8bba33e | 36 | * For more information about PCA9546A: |
okano | 0:2d50d8bba33e | 37 | * http://www.nxp.com/documents/data_sheet/PCA9546A.pdf |
okano | 0:2d50d8bba33e | 38 | * |
okano | 0:2d50d8bba33e | 39 | * Example: |
okano | 0:2d50d8bba33e | 40 | * @code |
okano | 0:2d50d8bba33e | 41 | * #include "mbed.h" |
okano | 0:2d50d8bba33e | 42 | * #include "LM75B.h" |
okano | 0:2d50d8bba33e | 43 | * #include "PCA9546A.h" |
okano | 0:2d50d8bba33e | 44 | * |
okano | 0:2d50d8bba33e | 45 | * PCA9546A i2c_sw( p28, p27, 0xE0 ); |
okano | 0:2d50d8bba33e | 46 | * |
okano | 0:2d50d8bba33e | 47 | * int main() |
okano | 0:2d50d8bba33e | 48 | * { |
okano | 0:2d50d8bba33e | 49 | * // all PCA9546A's downstream ports are OFF after power-up and hardware-reset |
okano | 0:2d50d8bba33e | 50 | * |
okano | 0:2d50d8bba33e | 51 | * i2c_sw.on( 0 ); // turn-ON the channel 0 |
okano | 0:2d50d8bba33e | 52 | * |
okano | 0:2d50d8bba33e | 53 | * LM75B tmp0( p28, p27 ); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled |
okano | 0:2d50d8bba33e | 54 | * |
okano | 0:2d50d8bba33e | 55 | * i2c_sw.off( 0 ); // turn-OFF the channel 0 |
okano | 0:2d50d8bba33e | 56 | * i2c_sw.on( 1 ); // turn-ON the channel 1 |
okano | 0:2d50d8bba33e | 57 | * |
okano | 0:2d50d8bba33e | 58 | * LM75B tmp1( p28, p27 ); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled |
okano | 0:2d50d8bba33e | 59 | * |
okano | 0:2d50d8bba33e | 60 | * while(1) { |
okano | 0:2d50d8bba33e | 61 | * |
okano | 0:2d50d8bba33e | 62 | * i2c_sw.off( 1 ); // turn-OFF the channel 1 |
okano | 0:2d50d8bba33e | 63 | * i2c_sw.on( 0 ); // turn-ON the channel 0 |
okano | 0:2d50d8bba33e | 64 | * printf( "%.3f\r\n", tmp0.read() ); |
okano | 0:2d50d8bba33e | 65 | * |
okano | 0:2d50d8bba33e | 66 | * i2c_sw.off( 0 ); // turn-OFF the channel 0 |
okano | 0:2d50d8bba33e | 67 | * i2c_sw.on( 1 ); // turn-ON the channel 1 |
okano | 0:2d50d8bba33e | 68 | * printf( "%.3f\r\n", tmp1.read() ); |
okano | 0:2d50d8bba33e | 69 | * |
okano | 0:2d50d8bba33e | 70 | * wait( 1.0 ); |
okano | 0:2d50d8bba33e | 71 | * } |
okano | 0:2d50d8bba33e | 72 | * } |
okano | 0:2d50d8bba33e | 73 | * @endcode |
okano | 0:2d50d8bba33e | 74 | */ |
okano | 0:2d50d8bba33e | 75 | |
okano | 0:2d50d8bba33e | 76 | class PCA9546A |
okano | 0:2d50d8bba33e | 77 | { |
okano | 0:2d50d8bba33e | 78 | public: |
okano | 0:2d50d8bba33e | 79 | |
okano | 0:2d50d8bba33e | 80 | /** Create a PCA9546A instance connected to specified I2C pins with specified address |
okano | 0:2d50d8bba33e | 81 | * |
okano | 0:2d50d8bba33e | 82 | * @param sda I2C-bus SDA pin |
okano | 0:2d50d8bba33e | 83 | * @param scl I2C-bus SCL pin |
okano | 0:2d50d8bba33e | 84 | * @param i2c_address I2C-bus address (default: 0xE0) |
okano | 0:2d50d8bba33e | 85 | */ |
okano | 0:2d50d8bba33e | 86 | PCA9546A( PinName sda, PinName scl, char i2c_address = 0xE0 ); |
okano | 0:2d50d8bba33e | 87 | |
okano | 0:2d50d8bba33e | 88 | /** Create a PCA9546A instance connected to specified I2C pins with specified address |
okano | 0:2d50d8bba33e | 89 | * |
okano | 0:2d50d8bba33e | 90 | * @param &i2c_ I2C object (instance) |
okano | 0:2d50d8bba33e | 91 | * @param i2c_address I2C-bus address (default: 0xE0) |
okano | 0:2d50d8bba33e | 92 | */ |
okano | 0:2d50d8bba33e | 93 | PCA9546A( I2C &i2c_, char i2c_address = 0xE0 ); |
okano | 0:2d50d8bba33e | 94 | |
okano | 0:2d50d8bba33e | 95 | /** Destructor of PCA9546A |
okano | 0:2d50d8bba33e | 96 | */ |
okano | 0:2d50d8bba33e | 97 | ~PCA9546A(); |
okano | 0:2d50d8bba33e | 98 | |
okano | 0:2d50d8bba33e | 99 | /** Turning-ON a channel |
okano | 0:2d50d8bba33e | 100 | * |
okano | 0:2d50d8bba33e | 101 | * Switching a channel ON |
okano | 0:2d50d8bba33e | 102 | * |
okano | 0:2d50d8bba33e | 103 | * @param channel channel number |
okano | 0:2d50d8bba33e | 104 | */ |
okano | 0:2d50d8bba33e | 105 | void on( char channel ); |
okano | 0:2d50d8bba33e | 106 | |
okano | 0:2d50d8bba33e | 107 | /** Turning-OFF a channel |
okano | 0:2d50d8bba33e | 108 | * |
okano | 0:2d50d8bba33e | 109 | * Switching a channel OFF |
okano | 0:2d50d8bba33e | 110 | * |
okano | 0:2d50d8bba33e | 111 | * @param channel channel number |
okano | 0:2d50d8bba33e | 112 | */ |
okano | 0:2d50d8bba33e | 113 | void off( char channel ); |
okano | 0:2d50d8bba33e | 114 | |
okano | 0:2d50d8bba33e | 115 | /** Switching by bit pattern |
okano | 0:2d50d8bba33e | 116 | * |
okano | 0:2d50d8bba33e | 117 | * Switch setting by bit pattern. |
okano | 0:2d50d8bba33e | 118 | * Set '1' for ON, set '0' for OFF |
okano | 0:2d50d8bba33e | 119 | * LSB is channel 0. Channels 1, 2 and 3 are mapped in shifted position from LSB |
okano | 0:2d50d8bba33e | 120 | * |
okano | 0:2d50d8bba33e | 121 | * @param pattern ON/OFF bit pattern for channels |
okano | 0:2d50d8bba33e | 122 | */ |
okano | 0:2d50d8bba33e | 123 | void bitpattern( char pattern ); |
okano | 0:2d50d8bba33e | 124 | |
okano | 0:2d50d8bba33e | 125 | private: |
okano | 0:2d50d8bba33e | 126 | I2C *i2c_p; |
okano | 0:2d50d8bba33e | 127 | I2C &i2c; |
okano | 0:2d50d8bba33e | 128 | char i2c_addr; |
okano | 0:2d50d8bba33e | 129 | char enable_pattern; |
okano | 0:2d50d8bba33e | 130 | }; |
okano | 0:2d50d8bba33e | 131 | |
okano | 0:2d50d8bba33e | 132 | #endif // MBED_PCA9546A_H |