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; }O código acima incrementa um contador de segundos de 0 a 9999. Os dois pontos piscam a cada 0,5 segundo.
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