Conversor de Nível Lógico TXS0108E: Manual Técnico Completo

Introdução
Neste manual, será apresentado como instalar, configurar e utilizar o Conversor de Nível Lógico TXS0108E. Se desejar adquirir este produto, clique aqui.
O Conversor de Nível Lógico TXS0108E é um módulo de interface baseado no circuito integrado TXS0108E da Texas Instruments, um tradutor de nível de tensão de 8 canais bidirecionais que permite conectar dispositivos de lógica 3,3 V a dispositivos de lógica 5 V (ou 1,8 V, 2,5 V e 1,5 V) sem risco de danificar as entradas do microcontrolador. A placa utiliza o formato HW-221, com duas fileiras de 10 pinos em passo de 2,54 mm, identificadas na serigrafia como VA (lado de baixa tensão) e VB (lado de alta tensão).
O diferencial desse componente em relação a conversores passivos (divisores resistivos ou pares de MOSFET) é a tradução automática de direção: não existe pino de seleção de sentido, e o mesmo canal transporta sinais nos dois sentidos, com aceleradores de borda (one-shot) que mantêm a integridade de sinais digitais rápidos, como SPI, UART, I2C e PWM. Este manual apresenta as especificações extraídas do datasheet oficial, o pinout completo do módulo, os requisitos de alimentação, a tabela de conexões para os cenários mais comuns e três firmwares completos, testáveis na IDE do Arduino e no ecossistema ESP32.
Especificações técnicas
Principais especificações
| Parâmetro | Especificação |
|---|---|
| Circuito integrado | TXS0108E (Texas Instruments), encapsulamento TSSOP-20 |
| Código SKU RoboBuilders | RB0547 |
| Número de canais | 8 canais bidirecionais, não inversores |
Tensão de alimentação do lado A (VA / VCCA) | 1,4 V a 3,6 V DC |
Tensão de alimentação do lado B (VB / VCCB) | 1,65 V a 5,5 V DC |
| Restrição de operação | VCCA deve ser menor ou igual a VCCB |
| Níveis traduzidos suportados | 1,5 V, 1,8 V, 2,5 V, 3,3 V e 5,0 V |
| Arquitetura | Pass gate (porta de passagem) com aceleradores de borda one-shot |
| Sentido de transmissão | Automático (bidirecional), sem pino de direção |
| Pull-ups internos | 4 kΩ (saída em nível alto) e 40 kΩ (saída em nível baixo) |
| Taxa de dados (push-pull) | Até 110 Mbps com VCCA = 3,3 V e VCCB = 5 V |
| Taxa de dados (open-drain) | Até 1,2 Mbps com VCCA = 3,3 V e VCCB = 5 V |
| Corrente quiescente combinada | 3 µA (típico em 1,4 V) a 8 µA (típico em 3,3 V), sem carga |
| Corrente em estado de alta impedância | 0,05 µA (lado A) e 4 µA (lado B) com OE em nível baixo |
Atraso de propagação (tpd) | Até 12 ns (máximo, com acionamento push-pull) |
| Tempo de habilitação / desabilitação | 200 ns (ten) e 400 ns (tdis) |
| Capacitância de entrada/saída | 6 pF (lado A) e 5,5 pF (lado B), por canal |
Tensão de habilitação (OE) | Ativo em nível alto, referenciado a VCCA (VIH ≥ 0,65 × VCCA) |
| Faixa de temperatura de operação | −40 °C a +85 °C |
| Placa do módulo | HW-221, PCB azul, ~25 mm × 16 mm, furos de fixação |
| Conector | 2 fileiras de 10 pinos macho, passo 2,54 mm |
Características elétricas e operacionais
O TXS0108E não é um buffer convencional: cada canal é formado por um transistor de passagem de canal N (resistência de condução entre 300 Ω e 500 Ω) associado a dois circuitos de aceleração de borda. Quando o dispositivo externo puxa a linha, o one-shot detecta a transição e liga, por aproximadamente 30 ns, um transistor auxiliar que força rapidamente o novo nível no lado oposto. Esse mecanismo é o que permite ao componente operar tanto com saídas open-drain (I2C, 1-Wire, teclados matriciais) quanto com saídas push-pull (SPI, UART, PWM, GPIO).
Os pull-ups internos são dinâmicos e estão sempre referenciados à alimentação do respectivo lado. Quando a linha está em nível alto, o resistor efetivo é de 4 kΩ; quando a linha é levada a nível baixo, o valor sobe para 40 kΩ, reduzindo o consumo estático e a corrente que o dispositivo externo precisa drenar.
A corrente drenada pelo pull-up interno em nível baixo é dada por:
Já a potência dinâmica associada ao chaveamento de cada canal, com carga capacitiva , é:
Para um barramento de , e , tem-se por canal; com os 8 canais simultâneos, cerca de , o que corresponde a apenas adicionais na fonte de 5 V.
Para dimensionar a proteção do circuito, os limites máximos absolutos do CI são:
| Parâmetro | Mínimo | Máximo | Unidade |
|---|---|---|---|
Tensão em VCCA | −0,5 | 4,6 | V |
Tensão em VCCB | −0,5 | 6,5 | V |
| Tensão em qualquer entrada/saída (lado A) | −0,5 | VCCA + 0,5 | V |
| Tensão em qualquer entrada/saída (lado B) | −0,5 | VCCB + 0,5 | V |
Corrente contínua por VCCA, VCCB ou GND | −100 | +100 | mA |
| Temperatura de armazenamento | −65 | +150 | °C |
| Descarga eletrostática (HBM / CDM) | — | ±2 kV / ±1 kV | V |
| Latch-up (JESD 78, Classe II) | — | > 100 | mA |
⚠️ Atenção: os valores da tabela de limites absolutos indicam apenas a fronteira de dano permanente; eles não são condições de operação. O funcionamento normal exige
VCCAentre 1,4 V e 3,6 V. Aplicar 5 V no pinoVAultrapassa o máximo absoluto de 4,6 V e destrói o circuito integrado de forma permanente.
Descrição do produto
O que é o Conversor de Nível Lógico TXS0108E?
O TXS0108E é um tradutor de nível de tensão direcional-automático (directionless), projetado para interligar dois domínios de alimentação distintos. O lado A acompanha a tensão aplicada em VCCA, e o lado B acompanha VCCB; os oito canais são independentes, mas todos compartilham o mesmo par de alimentações e a mesma referência de terra.
O módulo da RoboBuilders monta esse CI em uma pequena placa de circuito impresso com dois barramentos de pinos, dois capacitores cerâmicos de desacoplamento (C1 e C2) e dois furos de fixação. O pino OE (output enable) é exposto na extremidade da fileira A, o que permite desabilitar todos os canais quando o tradutor não está em uso.
Para que serve?
- Interfacear módulos de 5 V em placas de 3,3 V (e o contrário): displays LCD 1602, módulos relé, sensores com saída TTL de 5 V, teclados matriciais e drivers de potência.
- Traduzir barramentos completos com 4, 6 ou 8 linhas simultâneas: SPI (MOSI, MISO, SCK, CS), barramentos paralelos de displays e teclados, além de I2C e UART.
- Adequar sinais de PWM e de temporização entre um microcontrolador de 3,3 V (ESP32, ESP8266, STM32) e periféricos que exigem níveis TTL de 5 V.
Por que devo usar?
- Não exige pino de direção: o mesmo canal funciona como entrada ou saída, o que simplifica a fiação e permite linhas verdadeiramente bidirecionais, como SDA em I2C.
- Suporta open-drain e push-pull: os pull-ups internos de 4 kΩ dispensam resistores externos em I2C, enquanto os aceleradores de borda preservam sinais de até 110 Mbps em SPI.
- Proteção de domínio: o recurso de isolamento de alimentação coloca as duas portas em alta impedância quando uma das tensões cai a 0 V, evitando correntes de retorno e phantom power em placas desligadas.
Quando devo usar?
Use o TXS0108E quando:
- For necessário traduzir sinais digitais entre 1,4–3,6 V (lado A) e 1,65–5,5 V (lado B), com até 8 linhas;
- O barramento for bidirecional ou o sentido do sinal não puder ser definido em projeto (I2C, linhas de dados compartilhadas);
- As taxas envolvidas forem de até 110 Mbps em push-pull ou 1,2 Mbps em open-drain, com fiação curta.
Não é a escolha adequada quando:
- O sinal é analógico (sensores resistivos, áudio de linha, 4–20 mA): use amplificador operacional ou divisor calibrado;
- A necessidade é elevar potência ou alimentar cargas: o módulo fornece apenas algumas centenas de microampères de corrente DC e não substitui fonte, driver ou regulador;
- A tensão envolvida passa de 5,5 V (12 V, 24 V industriais): use optoacopladores ou transceptores isolados;
- O barramento é diferencial (RS-485, CAN): use transceptores dedicados, como MAX485 ou MCP2551;
- O cabo é longo (acima de ~30 cm) ou a carga capacitiva é alta: a atuação do one-shot pode gerar oscilação; prefira buffers de linha ou sinalização diferencial;
- É necessário isolar galvanicamente os circuitos: nesse caso, a solução é um acoplador óptico ou um isolador digital.
Pinout e diagrama de entradas/saídas
O módulo possui 20 pinos distribuídos em duas fileiras. A fileira A concentra a alimentação de baixa tensão, os oito canais do lado A e o pino de habilitação; a fileira B concentra a alimentação de alta tensão, os oito canais do lado B e o terra comum.
Fileira A (lado de baixa tensão — VCCA)
| Posição | Serigrafia | Pino do CI | Função |
|---|---|---|---|
| 1 | VA | 2 (VCCA) | Alimentação do lado A: 1,4 V a 3,6 V DC |
| 2 | A1 | 1 | Canal 1, referenciado a VA (par do B1) |
| 3 | A2 | 3 | Canal 2, referenciado a VA (par do B2) |
| 4 | A3 | 4 | Canal 3, referenciado a VA (par do B3) |
| 5 | A4 | 5 | Canal 4, referenciado a VA (par do B4) |
| 6 | A5 | 6 | Canal 5, referenciado a VA (par do B5) |
| 7 | A6 | 7 | Canal 6, referenciado a VA (par do B6) |
| 8 | A7 | 8 | Canal 7, referenciado a VA (par do B7) |
| 9 | A8 | 9 | Canal 8, referenciado a VA (par do B8) |
| 10 | OE | 10 | Habilitação ativa em nível alto (OE = 0 coloca todos os canais em alta impedância) |
Fileira B (lado de alta tensão — VCCB)
| Posição | Serigrafia | Pino do CI | Função |
|---|---|---|---|
| 1 | VB | 19 (VCCB) | Alimentação do lado B: 1,65 V a 5,5 V DC |
| 2 | B1 | 20 | Canal 1, referenciado a VB (par do A1) |
| 3 | B2 | 18 | Canal 2, referenciado a VB (par do A2) |
| 4 | B3 | 17 | Canal 3, referenciado a VB (par do A3) |
| 5 | B4 | 16 | Canal 4, referenciado a VB (par do A4) |
| 6 | B5 | 15 | Canal 5, referenciado a VB (par do A5) |
| 7 | B6 | 14 | Canal 6, referenciado a VB (par do A6) |
| 8 | B7 | 13 | Canal 7, referenciado a VB (par do A7) |
| 9 | B8 | 12 | Canal 8, referenciado a VB (par do A8) |
| 10 | GND | 11 | Referência de terra comum às duas alimentações |
O pareamento é fixo e direto: A1 ↔ B1, A2 ↔ B2 e assim por diante. Não existe cruzamento entre canais, e o canal não utilizado pode permanecer desconectado, pois o pull-up interno mantém a linha em nível alto quando OE está habilitado.
💡 Dica: na serigrafia do módulo,
VAeVBsão os mesmosVCCAeVCCBdo datasheet. Ao consultar tabelas de terceiros, lembre-se dessa equivalência para não inverter as alimentações.
⚠️ Atenção: o módulo HW-221 da RoboBuilders traz apenas os dois capacitores de desacoplamento (
C1eC2) na placa; o pinoOEchega ao header sem resistor de pull-up ou pull-down dedicado. ComOEflutuante, o estado dos canais é indefinido. LigueOEaoVA(por jumper ou fio curto) para habilitar o tradutor e, se precisar desabilitá-lo por software, comande esse pino com um GPIO de 3,3 V. Em caso de dúvida sobre o lote, meça a continuidade entreOEeVA/GNDantes de energizar.
Como fazer a ligação
Requisitos de instalação e alimentação
O módulo não gera tensão: ele precisa das duas alimentações presentes ao mesmo tempo para traduzir os sinais. A fonte do lado A deve fornecer a tensão do dispositivo de baixa tensão (normalmente 3,3 V) e a do lado B, a tensão do dispositivo de alta (normalmente 5 V). O consumo do próprio CI é desprezível (poucos microampères em repouso), mas a fonte de 5 V precisa suportar a carga do periférico conectado — um LCD 1602, por exemplo, consome cerca de 25 mA com backlight.
| Item | Recomendação |
|---|---|
| Seção dos fios | 24 AWG a 26 AWG para sinais; 22 AWG para alimentação |
| Comprimento máximo dos sinais | 20 cm a 30 cm (acima disso, usar cabo com terra intercalado) |
| Terra | Um único ponto de referência, com o GND do módulo ligado aos dois circuitos |
| Desacoplamento | 100 nF cerâmico em cada alimentação, o mais próximo possível do módulo |
| Alimentação do lado A | 3,3 V do ESP32 ou do Arduino (não exceder 3,6 V) |
| Alimentação do lado B | 5 V da fonte ou do barramento do sistema |
| Corrente máxima nos canais | Centenas de microampères em DC; jamais alimentar cargas |
A regra de ouro é VCCA ≤ VCCB. Se as duas pontas operarem no mesmo nível (por exemplo, 3,3 V nos dois lados), o módulo também funciona, com VA = VB = 3,3 V, mas não há vantagem em utilizá-lo nesse caso.
Diagrama de ligação elétrica

O diagrama representa o cenário mais comum de bancada: um ESP32 DevKit (lógica de 3,3 V) no lado A e um módulo de 5 V no lado B. As alimentações VA e VB são derivadas das fontes correspondentes, o GND é comum aos três blocos e o pino OE aparece ligado a VA, condição necessária para habilitar os oito canais. As linhas de sinal são ortogonais e identificadas par a par (A1/B1, A2/B2), de modo que o mesmo número à esquerda e à direita corresponde ao mesmo canal interno.
⚠️ Atenção: o diagrama é esquemático. Antes de energizar, confirme com o multímetro que
VArecebe no máximo 3,6 V e queVBrecebe no máximo 5,5 V. Inverter as duas fileiras é o erro mais comum e o mais destrutivo.
Tabela de conexões dos terminais
Cenário 1 — Arduino Uno (5 V) com display OLED SSD1306 (3,3 V) em I2C
| De (Arduino Uno) | Para (módulo) | Para (OLED) | Observação |
|---|---|---|---|
5V | VB | — | Alimentação do lado B |
3V3 | VA | VCC | Alimentação do lado A e do display |
GND | GND | GND | Terra comum obrigatório |
A4 (SDA) | B1 | A1 → SDA | Linha de dados I2C |
A5 (SCL) | B2 | A2 → SCL | Linha de clock I2C |
| — | OE | VA | Habilita o tradutor |
Cenário 2 — ESP32 (3,3 V) com display LCD 1602 (5 V) em modo 4 bits
| De (ESP32) | Para (módulo) | Para (LCD 1602) | Observação |
|---|---|---|---|
3V3 | VA | — | Alimentação do lado A |
VIN (5 V) | VB | VDD | Alimentação do lado B e do display |
GND | GND | VSS, RW | RW aterrado (somente escrita) |
GPIO 19 | A1 → B1 | RS | Seleção registro/dado |
GPIO 18 | A2 → B2 | E | Pulso de enable |
GPIO 21 | A3 → B3 | D4 | Dado bit 0 |
GPIO 22 | A4 → B4 | D5 | Dado bit 1 |
GPIO 23 | A5 → B5 | D6 | Dado bit 2 |
GPIO 25 | A6 → B6 | D7 | Dado bit 3 |
| — | OE | VA | Habilita o tradutor |
💡 Dica: no cenário 2, o potenciômetro de contraste do LCD (
V0) e o resistor de backlight permanecem ligados ao lado de 5 V. O módulo só traduz os sinais lógicos; ele não interfere na alimentação do display.
Cuidados e observações de segurança
⛔ Perigo: nunca aplique 5 V em
VA. O máximo absoluto do pinoVCCAé 4,6 V, e a faixa recomendada termina em 3,6 V. A inversão entre as fileiras A e B produz dano permanente no CI e pode levar o microcontrolador junto.
⛔ Perigo: não use o módulo para comutar cargas, acionar relés, LEDs de potência ou motores. A corrente contínua especificada para os pinos de I/O é da ordem de microampères a poucos miliampères, e o limite absoluto de 100 mA vale para os pinos de alimentação, não para uso contínuo.
⚠️ Atenção: mantenha o terra comum entre as duas fontes. Sem referência compartilhada, os níveis traduzidos não têm significado elétrico e o CI pode conduzir correntes indesejadas pelas linhas de sinal.
⚠️ Atenção: em barramentos I2C, não instale pull-ups externos fortes (1 kΩ) no lado B. Os 4 kΩ internos já garantem a subida; associá-los a resistores de 1 kΩ aumenta a corrente de dreno sem necessidade e pode elevar o nível baixo (
VOL) acima do limite aceito pelo dispositivo.
⚠️ Atenção: evite sinais com bordas muito lentas ou acionamento por resistor de valor alto (acima de 1 kΩ em série). O one-shot depende de transições nítidas para disparar; drivers fracos podem causar oscilação na saída. O datasheet especifica os tempos considerando impedância de saída inferior a 50 Ω.
Como usar
Guia de operação passo a passo
- Identifique as tensões dos dois lados. Anote a tensão de operação do microcontrolador e a do periférico. O lado de menor tensão vai para
VA; o de maior, paraVB. - Ligue os terras primeiro. Una o
GNDdo módulo ao terra das duas fontes antes de qualquer sinal. - Alimente
VAeVB. Confirme com o multímetro os valores em cada pino antes de conectar o restante do circuito. - Habilite o
OE. LigueOEaoVAcom um jumper. Sem essa ligação, todos os canais permanecem em alta impedância e nada é traduzido. - Conecte os sinais par a par.
A1comB1,A2comB2, sempre mantendo o mesmo canal dos dois lados. - Faça o teste estático. Com o sistema desligado, meça continuidade entre
A1e o pino do periférico e entreB1e o pino do microcontrolador. Confirme que não há curto entre canais vizinhos. - Energize e valide com um sinal conhecido. Gere uma onda quadrada de 1 kHz em um GPIO e meça no outro lado com osciloscópio ou com o próprio microcontrolador (exemplo de auto-teste adiante).
- Ajuste a velocidade do barramento. Se houver erros intermitentes, reduza a frequência de I2C/SPI e encurte os fios antes de suspeitar do módulo.
Diagnóstico rápido de falhas
| Sintoma | Causa provável | Correção |
|---|---|---|
| Nenhum sinal passa, nos dois sentidos | OE flutuante | Ligar OE ao VA |
| Um lado funciona e o outro não | Alimentação ausente em VA ou VB | Verificar as duas tensões |
| Sinal invertido ou atenuado | Canais trocados ou VA maior que VB | Revisar o pareamento e a ordem das tensões |
| Funciona em 100 kHz e falha em 400 kHz (I2C) | Carga capacitiva alta ou fios longos | Encurtar a fiação e reduzir a frequência |
| Aquecimento do CI | 5 V aplicado em VA | Substituir o módulo e corrigir a ligação |
| Leitura instável em SPI | Fios longos ou sem terra de retorno | Usar cabo com terra intercalado e reduzir o clock |
Modos de operação e ajustes
O TXS0108E possui apenas dois modos funcionais, definidos pelo pino OE:
- Habilitado (
OEem nível alto): os oito canais traduzem nos dois sentidos. É o modo de operação normal. O tempo de habilitação é de cerca de 200 ns, prazo necessário para que os circuitos one-shot entrem em regime. - Desabilitado (
OEem nível baixo): todos os I/Os ficam em alta impedância, com consumo reduzido a 0,05 µA no lado A e 4 µA no lado B. Útil para isolar um periférico durante a inicialização ou para economizar energia em sistemas com deep sleep.
Não há jumpers, trimpots ou seletores no módulo: a configuração é inteiramente elétrica. A tensão de cada lado define os níveis traduzidos, e a única escolha de projeto é qual domínio ocupa a fileira A. Mantenha VCCA ≤ VCCB em qualquer combinação.
💡 Dica: para desabilitar o tradutor por software, ligue
OEa um GPIO de 3,3 V e mantenha um resistor de 10 kΩ de pull-down para o terra. Assim, durante o boot do microcontrolador (quando os pinos ficam flutuantes), o módulo permanece desabilitado e não injeta níveis indefinidos no periférico.
Exemplos práticos de uso
Os três exemplos a seguir cobrem as aplicações mais frequentes: I2C com open-drain, barramento paralelo push-pull e um auto-teste que valida os dois sentidos de tradução com um único jumper.
Exemplo 1 — Arduino Uno (5 V) lendo um OLED SSD1306 (3,3 V) por I2C
Este é o caso clássico de uso do TXS0108E: o Arduino Uno opera em 5 V, o display em 3,3 V e o barramento I2C é bidirecional (a linha SDA é compartilhada entre mestre e escravo). As bibliotecas utilizadas são as oficiais da Adafruit, disponíveis no Gerenciador de Bibliotecas da IDE do Arduino.
/*
* ============================================================
* I2C 5 V (Arduino Uno) <-> 3,3 V (OLED SSD1306)
* Módulo: Conversor de Nível Lógico TXS0108E
*
* Lado A (VA = 3,3 V) -> OLED
* Lado B (VB = 5,0 V) -> Arduino Uno
*
* Ligação:
* Arduino 5V -> VB
* Arduino 3V3 -> VA e VCC do OLED
* Arduino GND -> GND do módulo e do OLED
* Arduino A4 -> B1 | A1 -> SDA do OLED
* Arduino A5 -> B2 | A2 -> SCL do OLED
* OE -> VA (habilita o tradutor)
*
* Bibliotecas:
* - Adafruit SSD1306
* - Adafruit GFX Library
* ============================================================
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
constexpr uint8_t OLED_ADDR = 0x3C; // endereço I2C típico do SSD1306
constexpr uint16_t TELA_LARG = 128; // largura em pixels
constexpr uint16_t TELA_ALT = 64; // altura em pixels
constexpr int8_t OLED_RESET = -1; // sem pino de reset dedicado
Adafruit_SSD1306 oled(TELA_LARG, TELA_ALT, &Wire, OLED_RESET);
uint16_t ciclos = 0; // contador de atualizações da tela
void setup() {
Serial.begin(9600); // monitor serial para diagnóstico
Wire.begin(); // SDA = A4 e SCL = A5 no Uno
Wire.setClock(100000L); // 100 kHz: margem segura com o tradutor
// Inicializa o controlador do display; retorna false se não houver resposta
if (!oled.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println(F("OLED nao respondeu. Verifique OE, VA/VB e SDA/SCL."));
while (true) { // trava aqui para facilitar o diagnóstico
delay(1000);
}
}
oled.clearDisplay();
oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1);
oled.setCursor(0, 0);
oled.println(F("TXS0108E OK"));
oled.println(F("I2C 100 kHz"));
oled.display();
delay(1500); // tempo para leitura da mensagem
}
void loop() {
ciclos++; // incrementa o contador de ciclos
oled.clearDisplay();
oled.setCursor(0, 0);
oled.setTextSize(1);
oled.println(F("TXS0108E - I2C"));
oled.println(F("Arduino 5V <> 3V3"));
oled.println();
oled.setTextSize(2);
oled.print(F("N "));
oled.println(ciclos); // imprime o número do ciclo atual
oled.display(); // envia o buffer para o display
Serial.print(F("Ciclo I2C: "));
Serial.println(ciclos); // espelha a informação no monitor serial
delay(1000); // atualiza uma vez por segundo
}
Exemplo 2 — ESP32 (3,3 V) acionando um LCD 1602 (5 V) em modo 4 bits
Aqui o sentido predominante é 3,3 V → 5 V, com sinais push-pull de baixa frequência. O LCD opera em modo de escrita apenas (RW aterrado), o que evita qualquer conflito de direção no barramento. A biblioteca LiquidCrystal acompanha a IDE do Arduino.
/*
* ============================================================
* ESP32 (3,3 V) -> LCD 1602 (5 V) em modo 4 bits
* Módulo: Conversor de Nível Lógico TXS0108E
*
* Lado A (VA = 3,3 V) -> ESP32
* Lado B (VB = 5,0 V) -> LCD
*
* Ligação:
* 3V3 -> VA
* VIN (5 V) -> VB e VDD do LCD
* GND -> GND, VSS e RW do LCD
* GPIO 19 -> A1 | B1 -> RS
* GPIO 18 -> A2 | B2 -> E
* GPIO 21 -> A3 | B3 -> D4
* GPIO 22 -> A4 | B4 -> D5
* GPIO 23 -> A5 | B5 -> D6
* GPIO 25 -> A6 | B6 -> D7
* OE -> VA
*
* O pino V0 do LCD vai ao potenciômetro de contraste (5 V/GND);
* o backlight (A/K) usa resistor de 220 ohms para 5 V.
* ============================================================
*/
#include <LiquidCrystal.h>
// Ordem dos pinos: RS, E, D4, D5, D6, D7 (todos no lado A, 3,3 V)
constexpr uint8_t PIN_RS = 19;
constexpr uint8_t PIN_EN = 18;
constexpr uint8_t PIN_D4 = 21;
constexpr uint8_t PIN_D5 = 22;
constexpr uint8_t PIN_D6 = 23;
constexpr uint8_t PIN_D7 = 25;
LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_D4, PIN_D5, PIN_D6, PIN_D7);
void setup() {
Serial.begin(115200); // diagnóstico pelo monitor serial
lcd.begin(16, 2); // display de 16 colunas por 2 linhas
lcd.setCursor(0, 0);
lcd.print(F("TXS0108E"));
lcd.setCursor(0, 1);
lcd.print(F("ESP32 -> 5 V"));
Serial.println(F("LCD inicializado pelo tradutor TXS0108E."));
}
void loop() {
static uint32_t ultimo = 0; // instante da última atualização
static uint8_t segundos = 0; // contador de segundos
// Atualiza a segunda linha a cada 1 s sem bloquear o restante do programa
if (millis() - ultimo >= 1000UL) {
ultimo = millis();
segundos++;
lcd.setCursor(0, 1);
lcd.print(F("t = "));
lcd.print(segundos);
lcd.print(F(" s ")); // espaços apagam dígitos antigos
Serial.print(F("Segundos: "));
Serial.println(segundos);
}
}
💡 Dica: se o LCD exibir apenas blocos escuros, o problema é quase sempre o contraste (
V0), não o tradutor. Ajuste o potenciômetro até o texto aparecer antes de revisar a fiação dos canais.
Exemplo 3 — Auto-teste de ida e volta com o ESP32 (A→B e B→A)
Este firmware gera uma onda quadrada de 1 kHz no GPIO 25, injeta no canal 1 (A1), retorna pelo canal 2 (B2) por um jumper externo e mede o sinal no GPIO 26. Ele valida simultaneamente os dois sentidos de tradução e a integridade do one-shot em baixa frequência.
/*
* ============================================================
* Auto-teste do TXS0108E (ida e volta)
*
* Ligação:
* ESP32 GPIO 25 -> A1
* B1 ----------- jumper ----------- B2
* A2 -> ESP32 GPIO 26
* VA = 3V3, VB = 5V, GND comum, OE -> VA
*
* Resultado esperado: 1000 Hz com duty cycle de 50% (+/- 2%)
* ============================================================
*/
#include <esp_arduino_version.h> // macros de versão do core ESP32
#include <math.h> // fabs() para as tolerâncias
constexpr uint8_t PIN_GERADOR = 25; // saída que gera a onda quadrada
constexpr uint8_t PIN_LEITOR = 26; // entrada que mede o sinal traduzido
constexpr uint32_t FREQ_HZ = 1000; // frequência de teste, em hertz
void setup() {
Serial.begin(115200);
delay(300); // aguarda a porta serial estabilizar
// Configura o PWM de 10 bits a 1 kHz no gerador, conforme a versão do core
#if ESP_ARDUINO_VERSION_MAJOR >= 3
ledcAttach(PIN_GERADOR, FREQ_HZ, 10); // API do core 3.x
ledcWrite(PIN_GERADOR, 512); // 512 de 1023 = 50% de ciclo ativo
#else
ledcSetup(0, FREQ_HZ, 10); // canal 0, 1 kHz, 10 bits (core 2.x)
ledcAttachPin(PIN_GERADOR, 0);
ledcWrite(0, 512); // mesmo duty cycle de 50%
#endif
pinMode(PIN_LEITOR, INPUT); // GPIO 26 como entrada digital
Serial.println(F("Auto-teste TXS0108E: 1 kHz, 50%"));
}
void loop() {
// Mede a duração do nível alto e do nível baixo (timeout de 50 ms)
unsigned long tAlto = pulseIn(PIN_LEITOR, HIGH, 50000);
unsigned long tBaixo = pulseIn(PIN_LEITOR, LOW, 50000);
// Sem pulso: jumper ausente, OE desabilitado ou canal com defeito
if (tAlto == 0 || tBaixo == 0) {
Serial.println(F("FALHA: sem sinal em A2. Verifique OE, jumper B1-B2 e GND."));
delay(1000);
return;
}
float periodo = (tAlto + tBaixo) * 1e-6f; // período em segundos
float freq = 1.0f / periodo; // frequência em hertz
float duty = 100.0f * tAlto / (tAlto + tBaixo); // ciclo ativo em %
// Tolerâncias: 2% na frequência e 2 pontos percentuais no duty cycle
bool aprovado = (fabs(freq - FREQ_HZ) < 0.02f * FREQ_HZ) &&
(fabs(duty - 50.0f) < 2.0f);
Serial.print(F("f = "));
Serial.print(freq, 1);
Serial.print(F(" Hz | duty = "));
Serial.print(duty, 1);
Serial.print(F(" % | "));
Serial.println(aprovado ? F("APROVADO") : F("REPROVADO"));
delay(1000); // uma medição por segundo
}
Outras aplicações diretas
- UART entre ESP32 e módulo GSM/GPS de 5 V: usar dois canais (TX e RX) e manter o
GNDcomum; taxas de 9600 bps a 115200 bps não representam desafio para o tradutor. - SPI com display ou cartão SD de 5 V: quatro canais (SCK, MOSI, MISO e CS), com clock de até 25 MHz em fiação curta; acima disso, avalie um buffer dedicado.
- PWM para drivers de LED ou servo: o módulo reproduz o ciclo de trabalho com atraso de poucos nanossegundos, sem distorção perceptível em frequências de até 100 kHz.
- Teclado matricial 4×4 de 5 V em placa de 3,3 V: oito canais, um para cada linha e coluna, aproveitando a bidirecionalidade nativa do componente.
Projetos
O conversor de nível é um acessório de bancada: ele aparece como etapa de interface em praticamente qualquer montagem que misture módulos de 5 V com placas de 3,3 V. No blog da RoboBuilders, o projeto de diagnóstico abaixo é o ponto de partida natural para validar a montagem, pois expõe cada GPIO do ESP32 em uma interface web e permite conferir, sem instrumentos, se o sinal chegou ao destino depois de atravessar o tradutor.
- Painel Web de Teste e Diagnóstico de GPIOs com ESP32: firmware de código aberto (RB0718) que sobe um portal cativo e uma API REST no próprio ESP32, permitindo acionar saídas, ler entradas e verificar o estado de cada pino em tempo real pelo navegador. Combinado com o TXS0108E, o painel também serve para testar periféricos de 5 V — relés, LCDs, teclados e sensores TTL — conectados ao lado B do módulo.
O projeto entrega o firmware completo, a documentação da API REST, o mapeamento de pinos da placa e o passo a passo de compilação pela PlatformIO e pela IDE do Arduino, servindo como gabarito para homologar a interface de nível antes de integrá-la a uma montagem definitiva.
Conclusão
O Conversor de Nível Lógico TXS0108E resolve, em uma única placa de 20 pinos, o problema de compatibilidade entre dispositivos de 3,3 V e 5 V que aparece na maioria dos projetos de robótica e automação. O resumo do que foi apresentado neste manual:
- Especificações: oito canais bidirecionais,
VCCAde 1,4 V a 3,6 V,VCCBde 1,65 V a 5,5 V, com a obrigação de manterVCCA≤VCCBe taxas de até 110 Mbps em push-pull ou 1,2 Mbps em open-drain. - Descrição: tradutor sem pino de direção, baseado em porta de passagem com aceleradores de borda e pull-ups internos dinâmicos de 4 kΩ e 40 kΩ, adequado tanto a I2C quanto a SPI, UART e PWM.
- Pinout: fileira A com
VA,A1aA8eOE; fileira B comVB,B1aB8eGND, com pareamento direto entre canais de mesmo número. - Ligação: duas alimentações simultâneas, terra comum obrigatório,
OEligado aoVApara habilitar e fiação curta para preservar a integridade das bordas. - Operação: dois modos (habilitado e alta impedância), sem ajustes mecânicos, com três firmwares completos — I2C em Arduino, LCD paralelo em ESP32 e auto-teste de ida e volta.
Com o módulo corretamente alimentado e o OE habilitado, o TXS0108E torna-se uma etapa transparente no circuito: os sinais chegam ao outro lado com os níveis corretos, a mesma lógica e atraso desprezível para as aplicações usuais de bancada. É a peça que faltava para integrar, com segurança, o ecossistema de 3,3 V ao vasto conjunto de periféricos de 5 V ainda amplamente utilizados.
Solução de problemas
Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Conversor de Nível Lógico TXS0108E: Manual Técnico Completo e eu ajudarei a encontrar a solução.
O assistente usa IA e pode errar. Confirme informações críticas no datasheet oficial do fabricante.