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