mbed library for the TCA9548 mux
Fork of libTCS34725 by
TCA9548.h@6:79996efbdcb2, 2017-03-31 (annotated)
- Committer:
- mwilkens241
- Date:
- Fri Mar 31 15:49:30 2017 +0000
- Revision:
- 6:79996efbdcb2
- Parent:
- 4:cc00e3842f1b
nothin changed here, just committing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mwilkens241 | 4:cc00e3842f1b | 1 | // TCA9548 I2C Mux |
mwilkens241 | 4:cc00e3842f1b | 2 | #ifndef MBED_TCA9548_H |
mwilkens241 | 4:cc00e3842f1b | 3 | #define MBED_TCA9548_H |
mwilkens241 | 3:afb107db7994 | 4 | |
mwilkens241 | 1:06c9bbbdb8b0 | 5 | #include "mbed.h" |
mwilkens241 | 0:4796574af790 | 6 | |
mwilkens241 | 0:4796574af790 | 7 | //I2C Address |
mwilkens241 | 0:4796574af790 | 8 | |
mwilkens241 | 4:cc00e3842f1b | 9 | #define DEV_ADDR (0x70<<1) |
mwilkens241 | 0:4796574af790 | 10 | |
mwilkens241 | 4:cc00e3842f1b | 11 | // CHANNEL VALUES |
mwilkens241 | 4:cc00e3842f1b | 12 | #define CH0 0x01 |
mwilkens241 | 4:cc00e3842f1b | 13 | #define CH1 0x02 |
mwilkens241 | 4:cc00e3842f1b | 14 | #define CH2 0x04 |
mwilkens241 | 4:cc00e3842f1b | 15 | #define CH3 0x08 |
mwilkens241 | 4:cc00e3842f1b | 16 | #define CH4 0x10 |
mwilkens241 | 4:cc00e3842f1b | 17 | #define CH5 0x20 |
mwilkens241 | 4:cc00e3842f1b | 18 | #define CH6 0x40 |
mwilkens241 | 4:cc00e3842f1b | 19 | #define CH7 0x80 |
mwilkens241 | 0:4796574af790 | 20 | |
mwilkens241 | 0:4796574af790 | 21 | |
mwilkens241 | 4:cc00e3842f1b | 22 | /** TCA9548 control class. |
mwilkens241 | 3:afb107db7994 | 23 | * |
mwilkens241 | 3:afb107db7994 | 24 | * Example: |
mwilkens241 | 3:afb107db7994 | 25 | * @code |
mwilkens241 | 4:cc00e3842f1b | 26 | * //Perform readings on two i2c devices with the same address |
mwilkens241 | 4:cc00e3842f1b | 27 | * #include "TCA9548.h" |
mwilkens241 | 3:afb107db7994 | 28 | * #include "mbed.h" |
mwilkens241 | 4:cc00e3842f1b | 29 | * #include "VL6180.h" |
mwilkens241 | 3:afb107db7994 | 30 | * |
mwilkens241 | 4:cc00e3842f1b | 31 | * TCA9548 i2cMux(SDA, SCL); |
mwilkens241 | 4:cc00e3842f1b | 32 | * VL6180 laser1(SDA, SCL); // on SD0 and SC0 |
mwilkens241 | 4:cc00e3842f1b | 33 | * VL6180 laser2(SDA, SCL); // on SD1 and SC1 |
mwilkens241 | 3:afb107db7994 | 34 | * Serial pc(USBTX, USBRX); //USB serial |
mwilkens241 | 3:afb107db7994 | 35 | * |
mwilkens241 | 3:afb107db7994 | 36 | * int main() { |
mwilkens241 | 4:cc00e3842f1b | 37 | * float reading; |
mwilkens241 | 4:cc00e3842f1b | 38 | * i2cMux.ch(CH0); |
mwilkens241 | 4:cc00e3842f1b | 39 | * reading = laser1.read(); |
mwilkens241 | 4:cc00e3842f1b | 40 | * pc.printf("Laser 1: %f\n", reading); |
mwilkens241 | 4:cc00e3842f1b | 41 | * i2cMux.ch(CH1); //for two channels: i2cMux.ch(CH1 | CH5); |
mwilkens241 | 4:cc00e3842f1b | 42 | * pc.printf("Laser 2: %f\n", reading); |
mwilkens241 | 4:cc00e3842f1b | 43 | * reading = laser2.read(); |
mwilkens241 | 3:afb107db7994 | 44 | * |
mwilkens241 | 4:cc00e3842f1b | 45 | * while(1) { |
mwilkens241 | 3:afb107db7994 | 46 | * } |
mwilkens241 | 3:afb107db7994 | 47 | * } |
mwilkens241 | 3:afb107db7994 | 48 | * @endcode |
mwilkens241 | 3:afb107db7994 | 49 | */ |
mwilkens241 | 0:4796574af790 | 50 | |
mwilkens241 | 4:cc00e3842f1b | 51 | class TCA9548 { |
mwilkens241 | 3:afb107db7994 | 52 | private: |
mwilkens241 | 3:afb107db7994 | 53 | I2C i2c; |
mwilkens241 | 4:cc00e3842f1b | 54 | uint8_t channel; |
mwilkens241 | 4:cc00e3842f1b | 55 | void i2cWrite8(uint8_t addr, char data); |
mwilkens241 | 3:afb107db7994 | 56 | public: |
mwilkens241 | 3:afb107db7994 | 57 | /** Initialize object with default i2c pins */ |
mwilkens241 | 4:cc00e3842f1b | 58 | TCA9548(); |
mwilkens241 | 3:afb107db7994 | 59 | |
mwilkens241 | 3:afb107db7994 | 60 | /** Initialize object with specific i2c pins |
mwilkens241 | 3:afb107db7994 | 61 | * |
mwilkens241 | 3:afb107db7994 | 62 | * @param i2c_sda SDA pin |
mwilkens241 | 3:afb107db7994 | 63 | * @param i2c_scl SCL pin |
mwilkens241 | 3:afb107db7994 | 64 | */ |
mwilkens241 | 4:cc00e3842f1b | 65 | TCA9548(PinName i2c_sda, PinName i2c_scl); |
mwilkens241 | 3:afb107db7994 | 66 | |
mwilkens241 | 4:cc00e3842f1b | 67 | /** Boot up the mux and change to initial channel (defaults to 0) |
mwilkens241 | 3:afb107db7994 | 68 | * |
mwilkens241 | 4:cc00e3842f1b | 69 | * @param iCh Initial Channel |
mwilkens241 | 3:afb107db7994 | 70 | * @return |
mwilkens241 | 3:afb107db7994 | 71 | * 1 if failed |
mwilkens241 | 3:afb107db7994 | 72 | *` 0 if successful |
mwilkens241 | 3:afb107db7994 | 73 | */ |
mwilkens241 | 4:cc00e3842f1b | 74 | bool init(uint8_t iCh); |
mwilkens241 | 4:cc00e3842f1b | 75 | bool init(); |
mwilkens241 | 3:afb107db7994 | 76 | |
mwilkens241 | 4:cc00e3842f1b | 77 | /** Changes the i2c channel |
mwilkens241 | 3:afb107db7994 | 78 | * |
mwilkens241 | 4:cc00e3842f1b | 79 | * @param newCh New channel for mux |
mwilkens241 | 3:afb107db7994 | 80 | */ |
mwilkens241 | 4:cc00e3842f1b | 81 | void ch(uint8_t newCh); |
mwilkens241 | 3:afb107db7994 | 82 | }; |
mwilkens241 | 2:cc2c0831a763 | 83 | |
mwilkens241 | 3:afb107db7994 | 84 | #endif |