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:
Postar um comentário