quinta-feira, novembro 15, 2012

Display de LEDs JY-LKM1638 - Parte 1

Este módulo (que você encontra na DealExtreme pelo preço de um sanduíche) contém oito displays de 7 segmentos (mais o ponto decimal), oito LEDs bicolores e ainda oito botões. Um controlador dedicado (TM1638) permite interfacear tudo isto a um microcontrolador usando apenas três sinais lógicos (além deles precisa da alimentação, é claro).



Encontrei bibliotecas para uso com o Arduino (a fonte principal de informações sobre este display), MSP430, Stellaris Launchpad e Raspberry Pi,  mas existe pouca documentação sobre os detalhes do circuito.

Neste primeiro post vou comentar um pouco sobre o controlador usado, em um segundo vou falar sobre a placa em si e no seu uso simples junto com um Arduino e na parte final mostrar uma versão revisada do meu Lunar Lander.

Visão Geral do TM1638

Este chip (cujo datasheet traduzido "mecanicamente" está nos arquivos do blog com o nome TM168en.pdf) possui internamente 16 bytes de Ram para armazenar o estado dos LEDs e quatro bytes para armazenar o estado das teclas.

O TM1638 é capaz de controlar até 80 LEDs e ler até 24 teclas. A pinagem deste integrado está abaixo.



Embora o datasheet mencione operação com 5V +/- 10%, existem vários relatos de uso sem problemas com 3V.

Acionamento dos LEDs

Os LEDs são multiplexados usando uma frequência entre 150 e 170 Hz (não é precisa). A cada 6 a 7 mSeg as linhas SEG são posicionadas e um sinal GRID é acionado (isto é, passa a conduzir corrente para o terra). Utilizando displays de sete segmentos do tipo catodo comum, as linhas SEG são ligadas aos segmentos e os sinais GRID selecionam o dígito. O tempo que o sinal GRID fica acionado é ajustável em 8 passos, para permitir controlar a intensidade do display.

O mapeamento da memória nos LEDs considera os bytes em duplas. Cada dupla indica o estado dos 10 segmentos para um sinal GRID. Os bytes com endereço par controlam os segmentos de 1 (bit menos significativo) a 8 (bit mais significativo). Nos bytes com endereço impar são usados apenas os dois bits menos significativos, que controlam os segmentos 9 e 10:


Leitura das Chaves

As oito primeiras linhas SEG são usadas também para ler chaves. As chaves devem ser organizadas em uma matriz de 8 x 3. Os valores lidos são armazenados em 4 bytes (em cada byte são usados apenas 6 bits):



Comunicação

A comunicação com o microcontrolador é feita com três sinais lógicos: um clock (CLK), um sinal bidirecional de dados (DIO) e um sinal de seleção (Strobe). Com estes sinais são enviados serialmente comandos e dados de 8 bits.

O início de um comando é determinado pela mudança do strobe do nível alto para baixo. Os bytes seguintes a um comando (com strobe mantido em nível baixo) são bytes de dados que serão escritos na memória (ou lidos dos bytes de teclado se for um comando de leitura).

Comandos

Os dois bits mais significativos do comando determinam o tipo: controle (01), definição do endereço (11) ou controle do display (10).  Em todos os comandos, colocar 0 nos bits não usados.

O comando de controle determina:
  • bit 1: se faremos uma escrita na memória dos LEDs (0) ou uma leitura nos bytes das teclas (1).
  • bit 2: se o endereço será incrementado a cada operação (0) ou será fixo (1).
  • bit 3: 1 coloca no modo de teste para a fábrica, use 0 para operação normal.
O comando de definição do endereço recebe o endereço nos 4 bits menos significativos.

O comando de controle do display determina:
  • bits 2, 1 e 0: a largura do pulso (o que controla a intensidade dos LEDs). 0 é o mais apagado e 7 o mais intenso.
  • bit 3: 0 apaga o display, 1 acende.
Para escrever na memória dos LEDs, usando o auto incremento:
  • Enviar um comando de controle para escrita com endereço incrementado (0100000b).
  • Enviar o comando de definição de endereço com o endereço inicial e manter o strobe em nível baixo
  • Enviar os dados (até 16)
Para escrever na memória dos LEDs, usando o endereçamento fixo:
  • Enviar um comando de controle para escrita com endereço fixo (0100100b).
  • Enviar o comando de definição de endereço com o endereço inicial e manter o strobe em nível baixo
  • Enviar o dado a ser escrito no endereço
A leitura dos bytes das chaves deve ser feita em uma única operação, mantendo o strobe baixo:
  • Enviar o comando de leitura (01000010b)
  • "Virar" a linha de dados para entrada
  • Ler os quatro bytes
No próximo post veremos como o TM1638 é usado no display JY-LKM1638.

Um comentário:

Anônimo disse...

esta ligação

https://skyduino.wordpress.com/2012/07/31/arduino-carte-tm1638-7-segments-leds-boutons/


contador sozinha comigo mesma conta de zero quando ligado, agora o que você faz com esse código para contar os impulsos externos sobre o princípio: sensor de entrada 1 fornece impulsos i1, entrada do sensor 2 dá pulsos i2. O princípio deve ser que um certo número de impulsos I2 devem ser seleccionados individualmente para cada caso de uma possível alteração do código. E depois de chegar a este número deve terminar contando i1 entrada, reescrever resultado na tela eo usuário desfrutar. Com wzglkędu nos botões localizados na placa do display, eles podem tomar algumas funções úteis, tais como; quando você pressiona um deles mostrando um volume de negócios de sensor 2 RPM, ele também pode pressionando outro pulso contagem, eo mesmo na próxima após a adição de sensores apropriados.