Gå till innehållet

EKM017 TCA6408A 8-kan I2C IO-expander

Art.nr: 41024442

img-hero

TCA6408A är en 8-ports IO-expander för I2C-kapabla mikrokontrollers med inbyggd nivåomvandlare. IO-expandern är dubbelriktad, vilket innebär att varje port kan konfigureras som antingen en ingång eller en utgång.

Kretsen kan utföra nivåomvandling och har separata spänningsmatningar för I2C (VCCi) och IO (VCCp). De separata spänningsmatningarna gör det enkelt att styra system med högre eller lägre spänning utan externa nivåomvandlare.

Utgångarna kan hantera relativt höga strömmar för att direkt driva lysdioder och kan leverera upp till 10mA eller sänka upp till 25mA. En interrupt-anslutning finns för att övervaka ändringar i tillstånd när pinnar är konfigurerade som ingångar. Interrupt går momentant låg varje gång en ingång ändrar tillstånd.

Upp till två TCA6408A kan användas på samma I2C-buss. En lödbrygga på kortets baksida ställer adressen.

Två QWIIC-kontakter finns för snabb och enkel anslutning.


Funktioner

  • Lägg till 8 GPIO via I2C
  • Dubbelriktad funktion (in eller ut)
  • Nivåomvandling mellan I2C och IO
  • Hög drivförmåga
  • QWIIC-kontakter för enkel anslutning

Specifikationer

  • Matningsspänning (VCCi): 1.65 - 5.5 VDC
  • Matningsspänning (VCCp): 1.65 - 5.5 VDC
  • Maxström (per pin): 25 mA (sinking) / 10 mA (sourcing)
  • I2C-bushastighet: 100 kHz / 400 kHz
  • I2C-adress: 0x20 (standard) / 0x21 (konfigurerbar)
  • Dimensioner: 26 x 18 mm
  • Monteringshål: c-c 21 mm / ø2.5 mm

Anslutningar

Matningsspänning (VCCi)

pinout-vcci

Vi och GND är spänningsingångar för I2C-sidan av kretsen och ska matas med 1.65 - 5.5V. Vid användning av QWIIC-kontakterna för att ansluta modulen kan dessa pinnar lämnas oanvända.

Observera att VCCi bestämmer signalnivåerna för I2C-kommunikationen.


I2C-anslutningar

pinout-i2c

Fyra anslutningar finns tillgängliga för kommunikation med portexpandern. SDA (serial data) och SCL (serial clock) är obligatoriska och ska anslutas till motsvarande pinnar på mikrokontrollern.

RST är en ingång och används för att återställa kretsen. Dra pinnen till GND för att återställa kretsen.

INT är en utgång som momentant går låg när en pinne konfigurerad som ingång ändrar tillstånd relativt det lagrade tillståndet i registerpinnen. Denna utgång är normalt hög. Interrupt-pinnen kan övervakas av mikrokontrollern för att agera så snart en knapp trycks in eller en sensor skickar data utan behov av dubbelriktad kommunikation via I2C.

qwiic-pinout

För enklare anslutning finns två QWIIC-kontakter i vardera änden som innehåller VCCi, GND, SCL och SDA och kan användas för I2C-kommunikationen med mikrokontrollern. QWIIC-pinout och specifikationer finns på Sparkfun.

SDA och SCL är dragna till VCCi via 10k motstånd. Lödbryggor på baksidan kan brytas av för att inaktivera pullups.


I2C-adress och Pullup-motstånd

pinout-adr

Lödbryggor på baksidan av kortet kan öppnas eller stängas för att ändra I2C-adressen eller inaktivera de inbyggda pullup-motstånden för I2C-bussen.

För att bryta eller öppna en brygga, skär helt enkelt bort den lilla kopparledaren som förbinder de exponerade kopparytorna. Se till att inga små kopparrester blir kvar på kortet. För att kortsluta eller stänga en brygga, värm båda kopparytorna och kortslut med lödtenn.

Matningsspänning (VCCp)

pinout-vccp

VCCp och GND är matningsspänning för portsidan av kretsen. De har samma spänningsområde som VCCi (1.65 - 5.5V) och bestämmer spänningsnivån för portarna.

VCCp kan vara lägre, högre eller lika med VCCi. Pinnarna måste matas för att portarna ska fungera. Om ingen nivåomvandling behövs kan VCCi bryggas till VCCp.

GND-pinnen är ansluten till samma nät som GND-pinnen på motsatt sida.


Portar

pinout-ports

IO0 - IO7 är de åtta tillgängliga kanalerna. Alla pinnar är satta som ingångar vid uppstart för att undvika störningar.

Maximal drivförmåga beror på om pinnen används för sourcing eller sinking av ström, men är normalt tillräcklig för att driva lysdioder och andra små laster.

Observera att IO-pinnarna saknar interna pullup- eller pulldown-motstånd och måste läggas till externt om det behövs.


Exempelkod och Anslutning

hookuphookup

Exempelkoden och demonstrationskopplingen konfigurerar kretsen så att IO0 - IO3 används som ingångar med knappar och pullup-motstånd till VCCp medan IO4 - IO7 används som utgångar med lysdioder och strömbegränsande motstånd anslutna till GND.

TCA6408A Example Code
/*

Example code for Electrokit EKM017 TCA6408A I2C IO Expander.

Wire four buttons to IO0 - IO3 and ~10k pullup resistors to Vp 
(TCA6408A does not have internal pullups).
Wire four LEDs to IO4 - IO7 and suitable resistors to GND.

The code will:
  - Read IO0 - IO3
  - Output the pin states to serial monitor
  - Set IO4 - IO7 high when input goes low

*/


#include <Wire.h>

#define TCA6408A_ADDR 0x20

// Register addresses
#define REG_INPUT     0x00
#define REG_OUTPUT    0x01
#define REG_POLARITY  0x02
#define REG_CONFIG    0x03

void writeRegister(uint8_t reg, uint8_t value) {
  Wire.beginTransmission(TCA6408A_ADDR);
  Wire.write(reg);
  Wire.write(value);
  Wire.endTransmission();
}

uint8_t readRegister(uint8_t reg) {
  Wire.beginTransmission(TCA6408A_ADDR);
  Wire.write(reg);
  Wire.endTransmission(false);
  Wire.requestFrom((uint8_t)TCA6408A_ADDR, (uint8_t)1);
  return Wire.available() ? Wire.read() : 0xFF;
}

void setup() {
  Wire.begin();
  Serial.begin(9600);

  // Set P0–P3 as inputs, P4–P7 as outputs
  writeRegister(REG_CONFIG, 0x0F);    // 00001111

  // Invert input polarity (so pressing button = 1)
  writeRegister(REG_POLARITY, 0x0F);  // 00001111

  // Initialize outputs to off (all LEDs off)
  writeRegister(REG_OUTPUT, 0x00);
}

void loop() {
  // Read inputs
  uint8_t input = readRegister(REG_INPUT) & 0x0F;

  // Shift input bits to upper nibble to drive P4–P7
  uint8_t output = input << 4;

  // Write to output register
  writeRegister(REG_OUTPUT, output);

  // Print input/output states
  Serial.print("Inputs (P0–P3): ");
  Serial.print(input, BIN);
  Serial.print(" | Outputs (P4–P7): ");
  Serial.println(output >> 4, BIN);

  delay(20);
}

Måttritning

dimensional-drawing

Datablad