TM1637

El TM1637 es un circuito integrado de Titan Micro Electronics dedicado a controlar displays LED de 7 segmentos y leer un teclado matricial, compartiendo la mayoría de los pines para ambas funciones. Soporta hasta 6 dígitos × 8 segmentos y una matriz de hasta 16 teclas (8×2). Combina en un único chip lo que normalmente requeriría un microcontrolador dedicado: registros de datos, los drivers de alta corriente para el display y la circuitería de lectura de teclas. Se comunica con el microcontrolador anfitrión mediante un bus serie de solo dos hilos (CLK y DIO), lo que reduce a cuatro el número de pines necesarios para pilotar un display completo con teclado.

Los displays deben ser de ánodo común: las salidas GRID (PMOS) suministran corriente al ánodo compartido de cada dígito, mientras que las salidas SEG (NMOS) drenan a masa cada segmento individual.

Aunque el fabricante lo orienta a electrodomésticos (inducción, microondas, pequeño electrodoméstico con display), es uno de los integrados más usados en electrónica de afición para módulos de reloj y contador de 4 dígitos con 7 segmentos, gracias a su sencillez de conexión y a las librerías disponibles para casi cualquier plataforma.

Encapsulado DIP20 / SOP20.

Diagrama de pines

Pinout del TM1637 en DIP20/SOP20

Los ocho pines SEG1–SEG8 hacen doble función: pilotan los segmentos del display (drenador abierto a masa) y, en los intervalos en que el display está apagado, actúan como entradas de escaneo de teclado. Los seis GRID1–GRID6 seleccionan qué dígito está activo (drenador abierto hacia VDD). K1 y K2 son las dos líneas de retorno de la matriz de teclado.

Cómo funciona

Multiplexado del display. El TM1637 no mantiene los 6 dígitos encendidos a la vez: enciende un GRID (dígito) cada vez, con el patrón de segmentos correspondiente en las salidas SEG, y va recorriendo los seis dígitos en secuencia lo bastante rápido como para que el ojo humano vea los seis encendidos de forma continua (persistencia de la visión). El brillo se ajusta con un circuito de PWM interno de 8 niveles: cuanto más ancho el pulso de encendido de cada dígito dentro de su turno, más brillante se ve.

Escaneo de teclado. Durante los huecos en los que el display está apagado, el chip reutiliza las líneas SEG como entradas y comprueba si alguna tecla conectada entre una línea SEGn y K1/K2 está pulsada, formando una matriz de hasta 16 teclas (8×2). El propio chip filtra los rebotes y el ruido típico de electrodomésticos con motor (inducción, microondas) mediante un circuito de reconocimiento por flanco.

Toda esta gestión —multiplexado, brillo, lectura de teclado— la hace el TM1637 de forma autónoma una vez configurada: el microcontrolador solo necesita escribir los patrones de segmentos a mostrar y, opcionalmente, leer el estado del teclado.

Protocolo de comunicación

El TM1637 usa un bus serie de dos hilos (CLK, DIO) que se parece a I²C en la forma de las transacciones —condición de START, bytes con bit de confirmación ACK, condición de STOP— pero no es I²C: no hay dirección de 7 bits para varios dispositivos en el mismo bus (solo puede haber un TM1637 por bus) y el significado de cada byte lo define un juego de comandos propio del chip, no un protocolo estándar.

Diagrama de tiempos del protocolo de dos hilos del TM1637: START, byte de comando con ACK, campos S0-S2/K1-K2 con ACK, STOP

El diagrama corresponde al ejemplo de lectura de teclado: tras el byte command (la orden de leer teclas), el propio TM1637 toma el control de DIO y devuelve un segundo byte formado por los campos S0–S2 (qué línea SEGn detectó la tecla pulsada) y K1–K2 (qué línea de retorno, K1 o K2, se activó). Cada uno de los dos bytes de la transacción termina con un pulso de reloj adicional (el nº 9) en el que el chip fuerza brevemente DIO a nivel bajo para confirmar la recepción (ACK); esa es la pequeña flecha marcada bajo cada pulso 9 del diagrama.

Reglas básicas de la señal:

  • Los bits de DIO deben estar estables en cada flanco de subida de CLK, que es el instante en que se leen; solo pueden cambiar mientras CLK está en nivel bajo.
  • START: DIO cae de alto a bajo mientras CLK está en alto.
  • STOP: DIO sube de bajo a alto mientras CLK está en alto.
  • Cada byte se envía bit menos significativo primero. Tras los 8 bits, el chip genera un noveno pulso de reloj durante el cual fuerza DIO a bajo como confirmación (ACK) de que ha recibido el byte correctamente.
  • La frecuencia de reloj puede llegar a 500 kHz en escritura, pero debe bajarse por debajo de 250 kHz cuando se leen datos de teclado.

Qué bytes se envían. Los dos bits más significativos del primer byte de cada transacción indican qué tipo de comando es:

Bits altosComandoPara qué sirve
01Comando de datosConfigura si se va a escribir el display o a leer el teclado, y si la dirección avanza sola o queda fija
11Comando de direcciónSelecciona en qué dígito (00H–05H) empieza a escribirse el siguiente byte de datos
10Comando de control de displayEnciende/apaga el display y fija el brillo (8 niveles)

Secuencia típica para escribir el display: START → comando de datos (modo escritura, dirección automática) → ACK → comando de dirección (00H) → ACK → hasta 6 bytes con los patrones de segmentos de cada dígito, cada uno con su ACK → STOP → START → comando de control de display (encendido, brillo) → ACK → STOP.

Para leer el teclado: START → comando de datos con el bit de lectura activado → ACK del chip → el TM1637 toma el control de DIO y envía 1 byte con el estado de las teclas → el maestro genera su propio ACK (o no) → STOP.

Otras aplicaciones

Más allá de los ejemplos de electrodoméstico del propio fabricante (paneles de inducción, microondas, pequeño electrodoméstico), el TM1637 se usa sobre todo en:

  • Relojes y temporizadores de 4 dígitos. El módulo más popular en proyectos DIY, con 4 displays de 7 segmentos y dos puntos centrales para el separador de hora.
  • Contadores y marcadores. Displays numéricos con botones de incremento/decremento aprovechando el escaneo de teclado integrado.
  • Indicadores de medida. Mostrar temperatura, tensión, RPM u otras magnitudes numéricas leídas por un microcontrolador, sin gastar más de dos pines de E/S.