terça-feira, dezembro 09, 2014

Display LED Alfanumérico por Segmentos - Parte 2

Nesta segunda parte vamos ver uma montagem em protoboard  usando um display alfanumérico de 14 segmentos ligado a um ATtiny2313.


O circuito é bastante simples e utiliza quase todos os pinos de saída digital do ATtiny2313. Os oito pinos do PORTB e seis pinos do PORTD são ligados aos segmentos, através de resistores de 220 ohms. Os dois pinos do PORTA são usados para controlar os catodos dos caracteres; um transistor MOSFET de uso geral é usado pois a corrente pode ultrapassar o limite do ATtiny:


É usado o clock interno de 8MHz do ATtiny. Como demonstração, o software mostra continuamente os caracteres de 0 a 9 e A a Z e um texto. A tabela que indica quais segmentos devem ser associados a cada caracter foi obtida a partir uma imagem na wikipedia (artigo, imagem - criação de Michael J). Ela é armazenada na Flash, na forma de 16bits para cada caracter; os bits estão na posição correta para escrita nos PORTS B e D.

A ação toda do programa se passa na interrupção de tempo real, que ocorre a cada 8,192 milisegundos. A cada interrupção um dos caracteres do display é apresentado, a cada 60 interrupções (cerca de meio segundo) passa-se para o caracter seguinte da mensagem:
// Tratamento da interrupção do timer 0
ISR (TIMER0_OVF_vect)
{
    static uint8_t c1 = 0;
    static uint8_t c2 = 0;
    static uint8_t cnt = 60;
    uint16_t padrao;
    
    if (--cnt == 0)
    {
        c1 = c2;
        c2 = msg[iMsg++];
        if ((c2 < 0x30) || (c2 > 'Z'))
            c2 = 0;
        else
            c2 = c2 - '0' + 1;
        if (msg[iMsg] == 0)
            iMsg = 0;
        cnt = 60;
    }
    
    if (iDisp == 0)
    {
        PORTA &= 0xFC;
        PORTA |= DIG1;
        padrao = pgm_read_word(&(fonte[c1]));
    }
    else
    {
        PORTA &= 0xFC;
        PORTA |= DIG2;
        padrao = pgm_read_word(&(fonte[c2]));
    }
    PORTB = padrao & 0xFF;
    PORTD &= 0xC0;
    PORTD |= padrao >> 8;
    iDisp ^= 1;
}
O projeto completo (AlfaSegto.zip) pode ser baixado dos arquivos do blog.

O vídeo abaixo mostra o resultado final.


Nenhum comentário: