Aziz Bench

Endereço I²C do HT16K33

O HT16K33 (driver de matriz de LED 16×8 com varredura de teclado) pode responder em 0x70–0x77: veja abaixo como escolher.

Endereço I²C (7 bits)
0x70–0x77
8 endereços possíveis
Escrita / leitura (8 bits)
0xE0 / 0xE1
Binário
1110000
Compartilha endereço com
12 dispositivos
Onde ele fica no barramento seus endereços reservados
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

Como definir o endereço

Ligue os pinos de endereço assim:

A2 A1 A0 → 0x70–0x77

Só a versão de 28 pinos tem os três pinos de endereço (0x70–0x77); a de 24 pinos tem A1 e A0 (0x70–0x73) e a de 20 pinos é fixa em 0x70. Os pinos também são saídas ROW: desconectados, valem 0, e para ter 1 é preciso um diodo e um resistor, como no datasheet.

Dispositivos que usam os mesmos endereços

Dois dispositivos no mesmo barramento não podem responder no mesmo endereço. Estes módulos da nossa lista usam pelo menos um destes endereços:

DispositivoO que éEndereço em comum
PCA9685driver PWM / servo de 16 canais, 12 bits0x70–0x77 (8)
SHTC3sensor de temperatura e umidade0x70
SX1509expansor de E/S de 16 canais com driver de LED e controle de teclado0x70, 0x71
TCA9548Amultiplexador I²C de 8 canais0x70–0x77 (8)
IP5306SoC para power bank (carregador + boost), versão I²C0x75
BME280sensor de temperatura, umidade e pressão0x76, 0x77
BME680sensor de gás (VOC), temperatura, umidade e pressão0x76, 0x77
BME688sensor de gás com IA, temperatura, umidade e pressão0x76, 0x77
BMP280sensor de pressão e temperatura0x76, 0x77
BMP388sensor de pressão e temperatura0x76, 0x77
MS5611-01BAsensor de pressão barométrica (altímetro)0x76, 0x77
BMP180sensor de pressão e temperatura0x77

Se dois deles ficarem no mesmo endereço, mude o endereço de um deles pelo pino de endereço, coloque um atrás de um multiplexador TCA9548A (0x70–0x77) ou use um segundo barramento I²C: o ESP32, o ESP32-S3 e o RP2040 têm dois controladores I²C (o ESP32-C3 tem um).

Verificar o barramento inteiro →Adicione o HT16K33 e os seus outros módulos: o verificador encontra conflitos, sugere endereços livres e dimensiona os pull-ups.

Endereço de 7 bits e de 8 bits

Os endereços I²C têm 7 bits. Alguns datasheets e bibliotecas os escrevem como números de 8 bits, com o bit de leitura/escrita acrescentado à direita: por isso o mesmo chip pode aparecer como 0x70 ou como 0xE0. A biblioteca Wire do Arduino e o ESPHome usam a forma de 7 bits.

7 bitsBinárioEscrita (8 bits)Leitura (8 bits)
0x7011100000xE00xE1
0x7111100010xE20xE3
0x7211100100xE40xE5
0x7311100110xE60xE7
0x7411101000xE80xE9
0x7511101010xEA0xEB
0x7611101100xEC0xED
0x7711101110xEE0xEF

Confira se ele responde

Carregue este sketch com o HT16K33 ligado a SDA e SCL: ele testa todos os endereços que o chip pode usar e mostra no monitor serial o endereço que responde. No ESP32, os pinos padrão são GPIO21 (SDA) e GPIO22 (SCL); no Arduino Uno, A4 e A5.

#include <Wire.h>

const byte ADDRS[] = {0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77};

void setup() {
  Serial.begin(115200);
  Wire.begin();
  for (byte a : ADDRS) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) {
      Serial.print("HT16K33 responde em 0x");
      if (a < 0x10) Serial.print('0');
      Serial.println(a, HEX);
      return;
    }
  }
  Serial.println("Sem resposta: verifique os fios");
}

void loop() {}

No ESPHome, o barramento é varrido na inicialização (scan: true é o padrão): o log lista todos os endereços que respondem.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

Resistores de pull-up

SDA e SCL precisam de resistores de pull-up para a alimentação. Muitos módulos já vêm com eles, geralmente de 4,7 kΩ ou 10 kΩ, e com vários módulos no barramento eles se somam em paralelo. O verificador de endereços I²C calcula a faixa permitida para a tensão e a velocidade do seu barramento.

Perguntas frequentes

Qual é o endereço I2C do HT16K33?

0x70–0x77, dependendo da ligação: A2 A1 A0 → 0x70–0x77.

Posso usar mais de um HT16K33 no mesmo barramento?

Sim, até 8, cada um configurado com um endereço diferente. Acima disso, use um multiplexador TCA9548A ou um segundo barramento I²C.

Por que o HT16K33 não aparece na varredura I2C?

Confira, nesta ordem: SDA e SCL não invertidos; GND em comum entre as placas; resistores de pull-up em SDA e SCL; o módulo alimentado na tensão para a qual foi projetado; os pinos de endereço conectados, não flutuando; e se o seu código usa o endereço de 7 bits (0x70), não o de 8 bits (0xE0).

Dispositivos semelhantes

Endereços conferidos no datasheet do HT16K33.