terça-feira, abril 08, 2014

MAX7219 Display Driver - Introdução

Já falei muito por aqui sobre LEDs e como usar multiplexação para reduzir a quantidade de pinos para ligação deles a um microcontrolador. Mesmo assim, a ligação de uma quantidade grande de LEDs pode exigir vários componentes externos e algum tempo de processamento. Para simplificar isto, existem CIs dedicados ao controle de LEDs. Vamos ver aqui o MAX7219 que se conecta serialmente a um microcontrolador e permite conectar display de 7 segmentos com até 8 dígitos ou 64 LEDs individuais.


Visão Geral

O MAX7219 possui uma memória para guardar o estado dos LEDs e implementa todo o processo de multiplexação sem necessidade de interferência do microcontrolador. Quando configurado para trabalhar com displays de 7 segmentos, traduz automaticamente os valores decimais no acionamentos dos segmentos adequados. Suporta correntes elevadas, o que na maioria dos casos dispensa o uso de transistores externos. A corrente máxima por segmento ou LED é determinada por um único resistor, que muitas vezes é o único componente adicional necessário.

O datasheet pode ser baixado do site da Sparkfun.

A Comunicação com o Microcontrolador

A comunicação serial utiliza três sinais: dado (DIN), clock (CLK) e load. Cada borda de subida do clock desloca o valor no dado para um registrador interno de 16 bits. A borda de subida do sinal load causa a "execução" do valor carregado, que é a escrita de um valor em um registrador de controle.


O MAX7219 possui ainda um pino de reproduz, com um certo atraso, o sinal DIN. Isto simplifica o encadeamento de vários 7219 para controlar displays maiores.

A Ligação dos LEDs

O MAX7219 se liga aos LEDs através de 8 linhas ("dígitos") e 8 colunas ("segmentos"). O tratamento de display de 7 segmentos pressupõe display de catodo comum:


No caso de LEDs discretos, basta seguir a polaridade (catodos ligados a SEGxm anodos ligados a DIGn):


Um resistor (RSet) no pino ISET determina a corrente máxima em cada LED ou segmento. Quanto maior a corrente maior a intensidade, mas existe um limite de corrente que um LED suporta. Outros limites são a corrente máxima emitida pelos pinos SEG (100mA) e absorvida pelos pinos DIG (500mA). Por último, deve ser considerado o limite de dissipação do integrado.

Escolhida a corrente máxima desejada, uma tabela no datasheet informa o valor de RSet conforme a queda de tensão no LED.

Os Registradores de Controle

O valor de 16 bits escrito serialmente pelo microcontrolador é composto de duas partes: o byte mais significativo é o endereço do registrador de controle e o menos significativo o valor a ser escrito. No endereço somente os quatro bits menos significativos são relevantes, selecionando um dentre os 14 registradores:


O registrador 0 não faz nada, o valor escrito é ignorado. É útil quando temos 7219s encadeados.

Os registradores 1 a 8 controlam os LEDs. Cada registrador define o valor dos pinos SEG quando o pino DIG correspondente por acionado. Se o dígito foi configurado com display de 7 segmentos, somente os 4 bits menos significativos do dado são relevantes:




Se o dígito foi configurado sem decodificação, cada um dos 8 bits do valor corresponde a um segmento:


O registrador 9 define, para cada dígito (registrador 1 a 8) se será feita a decodificação (bit em 1 indica que sim bit em 0 indica que não).

O registrador 10 controla a intensidade do display (através do duty cycle); somente os 4 bits menos significativos do valor são usados para fornecer 16 níveis de intensidade.

O registrador 11 define quantos dígitos serão tratados. Reduzindo este valor a varredura fica mais rápida e a intensidade aparente aumenta.

O registrador 12 permite colocar e tirar o 7219 do modo shutdown. Neste modo o display fica apagado e o consumo é reduzido a um mínimo. Atenção que inicialmente o 7219 está neste modo.

Por último, o registrador 15 fornece alguns recursos de teste. Não existem registradores 13 e 14.

2 comentários:

rafael rocha disse...

Ola Daniel, tudo bem?
Fiquei muito interessado em utilizar esse componente, entretanto uma coisa não
ficou bastante clara pra mim: Sua multiplexação.
Pretendo utilizar o MAX7219 em uma Matriz de LEDs formada por LEDs discretos
(Ou seja, não é uma matriz já comprada pronta) e, para isso, gostaria de saber como funciona
seu mecanismo de multiplexação. Já acendi uma matriz utilizando um par de 74HC595 sendo um para colunas e outro para linhas e, para criar a multiplexação, definia o valor das colunas (01110001, 10001110,... por exemplo) e deixava uma linha acesa uma de cada vez (00100000 por exemplo).
Como funciona o mecanismo de Multiplexação do MAX7219 já que é apenas um único CI?

Daniel Quadros disse...

Então Rafael, o MAX7219 faz todo o trabalho para você! Você escreve nos registradores Digit1 a Digit7 o estado de cada LED (aceso ou apagado). O MAX7219 sozinho aciona uma linha de cada vez colocando os valores corretos nas colunas. Ou seja, ele substitui tanto os dois 595 como toda a parte do seu programa que fica continuamente atualizando linhas e colunas.