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.

Dependents:   PCA9546A_Hello

Committer:
okano
Date:
Mon Feb 23 06:07:04 2015 +0000
Revision:
0:2d50d8bba33e
initial version

Who changed what in which revision?

UserRevisionLine numberNew 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