Buenas a todos, les comento que estoy realizando una marcador deportivo digital como ayuda comunitaria para un colegio.
Estoy utilizando un atmega328p programado directamente por ISP con un arduino UNO.
Bueno he realizado la software y el hardware.
Los display estan hecho basados en el 7seg. Usando 5 leds rojos en serie por segmento. Cabe destacar, que los leds son de 10mm, altobrillo, con un angulo maximo de 45º de emision. Y los alimento con 12v.
En el programa, hice una matriz con los numeros en binarios tipo BCD y luego esta salen a un 74ls47. Para que me controle el led 7seg.
Así:
const unsigned short DIGITOS[] =
{
B0000,//0
B0001,//1
B0010,//2
B0011,//3
B0100,//4
B0101,//5
B0110,//6
B0111,//7
B1000,//8
B1001,//9
B0000,//10
};
Luego multiplexo los display controlando los anodos comun con salidas digitales, que a su vez van a un uln2003a, luego un transistor, y finalmente al anodo.
Pin de salida digital>>Entrada uln2003a>>|---------|Salida uln2003a<<Resistencia<<base trans PNP
Adjunte como los conecte.
Para multiplexar los 14 displays enciendo uno, doy el numero correspondiente, y lo apago. Eso lo hago sucesivamente con los otros 13.
PORTD = DIGITOS[segundos1]; //
digitalWrite(disp1, HIGH);
delay(1.5);
digitalWrite(disp1, LOW);
PORTD = 0xff;
PORTD = DIGITOS [segundos2];
digitalWrite(disp2, HIGH);
delay(1.5);
digitalWrite(disp2, LOW);
PORTD = 0xff;
PORTD = DIGITOS [minutos1];
digitalWrite(disp3, HIGH);
delay(1.5);
digitalWrite(disp3, LOW);
PORTD = 0xff;
PORTD = DIGITOS[minutos2];
digitalWrite(disp4, HIGH);
delay(1.5);
digitalWrite(disp4, LOW);
PORTD = 0xff;
PORTD = DIGITOS[visitante1];
digitalWrite(disp5, HIGH);
delay(1.5);
digitalWrite(disp5, LOW);
PORTD = DIGITOS[visitante2];
digitalWrite(disp6, HIGH);
delay(1.5);
digitalWrite(disp6, LOW);
PORTD = 0xff;
PORTD = DIGITOS[local1];
digitalWrite(disp7, HIGH);
delay(1.5);
digitalWrite(disp7, LOW);
PORTD = 0xff;
PORTD = DIGITOS[local2];
digitalWrite(disp8, HIGH);
delay(1.5);
digitalWrite(disp8, LOW);
PORTD = 0xff;
PORTD = DIGITOS[faltasvisitante];
digitalWrite(disp9, HIGH);
delay(1.5);
digitalWrite(disp9, LOW);
PORTD = 0xff;
PORTD = DIGITOS[faltaslocal];
digitalWrite(disp10, HIGH);
delay(1.5);
digitalWrite(disp10, LOW);
PORTD = 0xff;
PORTD = DIGITOS[periodo];
digitalWrite(disp11, HIGH);
delay(1.5);
digitalWrite(disp11, LOW);
PORTD = 0xff;
PORTD = DIGITOS[tiempoextra];
digitalWrite(disp12, HIGH);
delay(1.5);
digitalWrite(disp12, LOW);
PORTD = 0xff;
El problema radica en que si les pongo 5 de delay para los 14 display se ve el parpadeo. Si se lo bajo a 1.5 ya no se ve el parpadeo, pero la luminosidad de los led cayo fuertemente.
Creo que es porque entre mas pequeño sea el delay, el voltaje que sale en los pines digitales va disminuyendo, y creo que no alimentan bien la base del uln2003a, y a su vez los transistores pnp (2n3906) no trabajan bien.
Ahora si cambio el voltaje de alimentacion de 12v a 15v (el pic se alimenta por un 7805 que baja los 12-15v a 5v), los leds brillan un poco mas fuerte, pero lo maximo de amperaje que logro que obtengan es de 3-4mA. Cuando lo ideal es que brillen con 10mA que es un brillo fuerte. Si le pongo 18v brillan totalmente fuertes, pero los transistores me dejan de conmutar bien y los displays cuando hacen su función de contar se ven mal (los segmentos que deben apagarse se mantienen encendidos con poco brillo,y los que deben estar encendido sobresalen de brillo un poco. a veces hasta se reinicia), y los transistores empiezan a calentar mas de lo debido.
No se como hacer brillar mas los led, no se si es el transistor en los anodos que no me deja pasar suficiente corriente. No se si sera por el voltaje.
Quisiera su ayuda, si necesitan otra informacion de mi circuito me dicen.



