mbed library for the TCA9548 mux

Fork of libTCS34725 by Michael Wilkens

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?

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