O módulo é relativamente pequeno: a placa mede 42 x 23 mm e cada dígito cerca de 5 x 9 mm.Um conector do tipo "espeto" (de 90°) é usado para alimentação e comunicação: os pinos são marcados como CLK, DIO, Vcc e Gnd.
A alimentação recomendada é 5V, mas o módulo opera com tensões de 3,3 a 5,5V. A luminosidade varia pouco com a tensão de alimentação.
A comunicação utiliza somente dois pinos (padrão I2C) graças ao uso do driver TM1637. Já vimos aqui uma placa baseada em um irmão dele, o TM1638. Infelizmente, o datasheet do TM1637 parece estar disponível apenas em chinês. O que não impediu que algumas bibliotecas fossem desenvolvidas:
- O Seeedstudio tem uma placa semelhante, aqui está a documentação com um link para uma biblioteca.
- O Arduino Playground também tem uma página sobre estes displays.
- Aqui uma explicação curta do autor do código referenciado no Arduino Playground.
Como um primeiro teste, conectei o display a um Arduino Uno, usando a biblioteca do Arduino Playground. A ligação do display é simples: GND ao GND, Vcc ao 5V, CLK ao pino 2 e DIO ao pino 3. O código de teste é:
- // Teste de Display de 4 dígitos controlado com TM1637
- #include <TM1637Display.h>
- // Conexão ao módulo
- #define CLK 2
- #define DIO 3
- TM1637Display display(CLK, DIO);
- int cont = 0;
- // Iniciação - Coloca o brilho no máximo
- void setup()
- {
- display.setBrightness(0xF);
- }
- // Loop principal - mostra contador
- void loop()
- {
- uint8_t segto;
- // Mostra o valor atual
- display.showNumberDec(cont, true);
- delay(500);
- // Acende o ':' do display
- segto = 0x80 | display.encodeDigit ((cont / 100) % 10);
- display.setSegments (&segto, 1, 1);
- delay(500);
- // Avança a contagem
- if (++cont == 10000)
- cont = 0;
- }
Como segundo teste, conectei o display a uma Launchpad MSP430. Para isto fiz uma mistura do código da biblioteca para o Arduino com um código que eu tinha feito para conectar por I2C uma EEprom.Duas curiosidades aqui: a primeira é que o compilador IAR não aceita a sintaxe (não padrão) do GCC para constantes binárias. A segunda é que o meu código tinha um pequeno erro: o bit de reset da interface I2C fica no registrador USICTL0 e não em USICKCTL. Por uma destas coincidências perigosas, este erro não impedia o funcionamento do código original. A ligação do display à Launchpad consiste em ligar GND a GND, Vcc a Vcc, CLK a P1.6 e DIO a P1.7.
Os códigos dos dois exemplos estão nos arquivos do blog em DisplayTM1637.zip.
Conclusão
Embora um display de 4 dígitos possa ser comprado por um quarto do preço desta placa, é bastante desajeitado ligá-lo a um microcontrolador, tanto do ponto de vista elétrico como mecânico. Este módulo é extremamente prático, simplificando as conexões e a montagem mecânica. Apenas gostaria da opção de um display com dígitos maiores.
2 comentários:
Boa Noite! Parabéns pelo Blog. Você têm alguma ideia de como usar dois ou mais módulos em um arduino?
Romildo, basta você ligar cada display a dois pinos do Arduino e criar várias instâncias da classe TM1637Display. Por exemplo, se você tiver um display ligado aos pinos 2 e 3 e outros aos pinos 4 e 5:
TM1637Display display1(2, 3), display2(4, 5);
Postar um comentário