Atmega328 e 4Digit 7 Segmento fantasma piscando!
Eu conectei 4 leds 7seg (CC) com transistores NPN no cátodo de cada dígito. Estou usando o registrador de deslocamento 74HC595 conectado no circuito de uma forma bastante comum. O código que estou executando é o código de verificação básico para o 7seg. O problema é que também vejo os números digitalizados em outros dígitos do LED. Em anexo está a imagem. Eu os chamo de "fantasmas". O circuito que estou usando tem um Atmega328 com um Osc interno de 8MHz. Os resistores nos segmentos são de 220Ohm e 4 BC547 nos cátodos dos dígitos com resistores de 1kOhm em sua base.
abaixo está o código:
void loop () {
cathode_high (); // apaga a tela
break_number (número);
display_number ();
atraso (1);
}
void break_number (int num) {// separe o número de entrada em 4 dígitos únicos
primeiro_digito = num / 1000;
dígitos [0] = primeiro_digito;
int first_left = num - (first_digit * 1000);
segundo_digito = primeiro_esquerdo / 100;
dígitos [1] = segundo_digito;
int segundo_esquerdo = primeiro_esquerdo - (segundo_digito * 100);
terceiro_digito = segundo_esquerdo / 10;
dígitos [2] = terceiro_dígito;
quarto_digito = segundo_esquerdo - (terceiro_digito * 10);
dígitos [3] = quarto_digito;
}
void display_number () {// digitalização
cathode_high ();
digitalWrite (trava, BAIXO);
shiftOut (dados, clk, LSBFIRST, números [dígitos [contagem]]);
digitalWrite (CAS [contagem], HIGH);
digitalWrite (trava, ALTO);
contagem ++;
if (contagem == 4) {
contagem = 0;
}
}
void cathode_high () {// desativa todos os 4 dígitos
digitalWrite (CA_1, BAIXO);
digitalWrite (CA_2, LOW);
digitalWrite (CA_3, LOW);
digitalWrite (CA_4, LOW);
}
Qualquer ajuda seria muito apreciada. Obrigado antecipadamente!
Respostas
Você muda os cátodos (dígitos) antes de travar os novos dados. Portanto, por um segundo, os dados dos dígitos anteriores são mostrados no dígito atual.
Troca digitalWrite(CAS[count], HIGH);e digitalWrite(latch, HIGH);deve consertar isso.