TCA9548A 8 channel I2C switch with reset
Dependents: 4012Code PWM SBra_Programme_Mbed
tca9548a.h
- Committer:
- akashvibhute
- Date:
- 2016-05-24
- Revision:
- 0:5bd73cede544
- Child:
- 1:768491b5e55d
File content as of revision 0:5bd73cede544:
/** TCA9548A library * * @author Akash Vibhute * @author < akash . roboticist [at] gmail . com > * @version 0.1 * @date May/24/2016 * * @section LICENSE * * Copyright (c) 2015 Akash Vibhute * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * */ #ifndef TCA9548A_H #define TCA9548A_H #include "mbed.h" /** TCA9548A class * * @section DESCRIPTION * TCA9548A: Low-Voltage 8-Channel I2C Switch With Reset * The TCA9548A device has eight bidirectional translating switches that can be * controlled through the I2C bus. The SCL/SDA upstream pair fans out to eight * downstream pairs, or channels. Any individual SCn/SDn channel or combination * of channels can be selected, determined by the contents of the programmable * control register. * * The TCA9548A has a user 8 selectable address in the range 0x70 thru 0x77 (7-bit), * based on the configuration of Addr pins (A0, A1, A2). Default address is 0x70 for * A0:A2 pull down. * * Datasheet for TCA9548A can be found at: * http://www.ti.com/lit/ds/symlink/tca9548a.pdf * * Example: * @code * #include "mbed.h" * #include "LM75B.h" * #include "TCA9548A.h" * * TCA9546A i2c_sw(I2C_SDA, I2C_SCL); //default address 0x70 applied * * int main() * { * // By default TCA9548A performs a power on reset and all downstream ports are deselected * * i2c_sw.select(0); // select the channel 0 * LM75B tmp0(I2C_SDA, I2C_SCL); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled * * i2c_sw.select(1); // select the channel 1 * LM75B tmp1(I2C_SDA, I2C_SCL); // making instance after a branch of I2C bus (which is connecting the LM75B) enabled * * while(1) { * * i2c_sw.select(0); // select the channel 0 * printf( "%.3f\r\n", tmp0.read() ); * * i2c_sw.select(1); // select the channel 1 * printf( "%.3f\r\n", tmp1.read() ); * * wait( 1.0 ); * } * } * @endcode */ class TCA9548A { public: /** Create a TCA9546A instance connected to specified I2C pins with specified address * * @param sda I2C-bus SDA pin * @param scl I2C-bus SCL pin * @param i2c_address I2C-bus address (default: 0x70) * @param reset TCA9546A reset pin (default: NC for simple pullup connected) * @param hz I2C bus frequency (default: 400kHz) */ TCA9548A( PinName sda, PinName scl, uint8_t i2c_address = 0x70, PinName resetPin = NC, uint32_t hz = 400000 ); /** Selecting a channel * * Switch to commended downstream I2C channel * * @param channel channel number */ void select(uint8_t channel); /** Reset TCA9546A * * Reset switch */ void reset(); private: I2C i2c_; DigitalOut reset_pin; uint8_t i2c_addr; }; #endif // TCA9548A_H