Вы находитесь на странице: 1из 19

2017617 Displaysde4digitosy7segmentos|TutorialesArduino

(http://www.prometec.net)

DISPLAY DE 7 SEGMENTOS Y 4 DGITOS


TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

Displays numricos de 7 segmentos


RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

Home (Http://Www.Prometec.Net) Display De 7 Segmentos Y 4 Dgitos

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

OBJETIVOS

Nuestro primer display numrico de 4 digitos.

Multiplxando los digitos.

Aprendiendo a programar: Dividiendo el problema en funciones.

Vuelta a las operaciones con enteros

MATERIAL REQUERIDO.

Arduino Uno o similar (http://www.prometec.net/categoria-


producto/arduinos/). Esta sesin acepta cualquier otro modelo de Arduino.

(http://www.prometec.net/producto/arduino-uno/)

Una Protoboard (http://www.prometec.net/producto/protoboard-830/).

(http://www.prometec.net/wp-
content/uploads/2014/09/Img_3_4.png)

Cables (http://www.prometec.net/producto/cables-dupont-macho-
macho/)de protoboard

(http://www.prometec.net/wp-
content/uploads/2014/09/Img_3_6.png)

4 x resistencias (http://www.prometec.net/producto/kit-de-resistencias-
variadas/)de 330.

(http://www.prometec.net/wp-
content/uploads/2014/09/Img_3_5.png)

http://www.prometec.net/display4digitos/# 1/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

(http://www.prometec.net)

Un display de 7 segmentos y 4 dgitos.

TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)


(http://www.prometec.net/wp-content/uploads/2014/10/BCD-
4-digit.jpg)
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

4 x Transistor 2N2222 (http://www.prometec.net/producto/transistor-


FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
2222n/)

(http://www.prometec.net/wp-
content/uploads/2014/10/2N2222.jpg)

LOS DISPLAYS LED DE 4 DGITOS

En la sesin anterior, la cosa ha ido bastante bien con un dgito, pero ahora que le hemos cogido el puntillo, queremos poder usar 4 dgitos para,
digamos dar la hora.

Y si queremos mostrar 4 dgitos Vamos a multiplicar 8 cables x 4 dgitos ms tensin y GND, en total 34 pines?

Para empezar, Arduino UNO no tiene tantos pines (Si, el Mega s que los tiene, pero recordad, elegancia, mucha elegancia), entonces si vosotros
fabricarais estos displays Cmo evitarais usar 34 pines? Pensadlo, Qu solucin darais vosotros al problema?

Pues una fcil ( y barata que es lo que les gusta a los que fabrican) es la de mantener 8 pines para iluminar los 7 segmentos ms el punto, y
poner otros 4 pines para indicar a cul de los dgitos corresponde la informacin que ponis en a, b, c, d, e, f, g, h.

La cosa va por ah, pero para eso habra que poner unas memorias y latch como en el shift register y alguien dijo: No, no, ms barato aun. Y un
ingeniero creativo dijo: pues si hacemos que esos 4 pines para indicar la posicin vayan a tierra pasando por un transistor cada uno podemos
hacer que se ilumine solo uno cada vez. Y si hacemos el ciclo lo bastante rpido, pasando de uno a otro, ni se enteran. Ni que decir tiene que el
ingeniero creativo pas a jefe de proyectos.

Y eso es todo. Simplemente seguimos utilizando 8 pines para iluminar los segmentos, pero solo hay uno activo en un momento concreto. Y
haciendo un ciclo rpido, iluminamos uno cada vez rpidamente y pasamos al siguiente y luego al siguiente y problema resuelto.

As que lo primero que vamos a hacer es conectar los 8 segmentos del display a los pines del 2 al 10 de nuestro Arduino, para probarlos.
Conectad GND al ctodo del primer digito con una resistencia y comprobad las conexiones.

CONEXIONES INICIALES

De nuevo, tengo que insistiros en que leis la hoja de caractersticas de vuestro display y no os eis del diagrama de abajo, porque el vuestro
puede ser distinto. Mirad el cdigo de vuestro display y bajaros la data sheet de Internet. Leedla, aunque solo sea para comprobar si vuestros
pines coinciden con el diagrama que os pongo debajo (Que es del manual de Parallax).

Este diagrama es para el display que tengo entre manos (5461AS (http://www.google.es/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=12&cad=rja&uact=8&ved=0CEIQFjABOAo&url=http%3A%2F%2Fwww.partnumber.co.kr%2Fdatasheet%2FETC%2FSH5461AS.ht
y el vuestro no tiene por qu usar los mismos pines ( Aunque la probabilidad de que sea as es alta, y en caso negativo tampoco es grave
porque basta con que conectis los pines correctos al mismo orden de vuestro Arduino).

http://www.prometec.net/display4digitos/# 2/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

(http://www.prometec.net)

TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

(http://www.prometec.net/wp-content/uploads/2014/10/Img_31_1.jpg)Lo que yo he hecho (porque mi display solo tiene 12 pines), es conectar los
8 segmentos y enviar el ctodo a masa mediante una resistencia, para probar el primer digito y ya me preocupare del resto luego. Es imperativo
que os aseguris de conectar correctamente los segmentos antes que nada.

Podes correr un programa simple como este, para comprobar la conexin de los segmentos, que los va encendiendo y apagando en
secuencia:Prog_31_1 (http://www.prometec.net/wp-content/uploads/2014/10/Prog_31_1.rar)

voidsetup()
{
for(inti=2;i<10;i++)
pinMode(i,OUTPUT);
}

voidloop()
{
for(intj=2;j<10;j++)
{digitalWrite(j,HIGH);
delay(300);
digitalWrite(j,LOW);
delay(300);
}
}

Si todos se encienden, ya podemos pasar a la siguiente fase.

Probando el display

DIAGRAMA DE CONEXIN

Ahora que estamos seguros de que nuestros 7 segmentos estn enchufados donde corresponde viene la cuestin de utilizar 4 pines de Arduino
para elegir cual se ilumina.

Nuestra primera idea sera conectar esas salidas del display, 12, 9, 8 y 6 a 4 pines de nuestro Arduino. Si mantenemos esos pines en HIGH
excepto el que queremos iluminar, que ponemos en LOW, parece que cerrara el circuito a GND y ya est.

http://www.prometec.net/display4digitos/# 3/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
Pero no. El consumo tpico de cada segmento, (como de cada LED) es de entre 15 y 20mA. Como son 8 segmentos cuando escribamos el 8 ms
el punto, el consumo ser de 8 x 15 = 120 mA y pudiendo llegar a 160mA. Muy por encima de los 40 mA que un pin de nuestro Arduino puede
(http://www.prometec.net)
suministrar o drenar, as que mejor que pensemos otra cosa antes de que huela a quemado.

Y la solucin, queridos amigos, es, naturalmente, utilizar un transistor para permitir cerrar el circuito de cada dgito.
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

(http://www.prometec.net/wp-content/uploads/2014/10/Img_31_2.jpg)
El 2N2222 es ya un viejo conocido (No os olvidis de la resistencia de la base, es imprescindible), poniendo a LOW los pines 9, 10, 11, y 12 los
transistores estn al corte, y ningn digito puede iluminarse. Si ponemos tensin en el pin 12, su transistor se satura y permite la salida a
Ground del primer digito que encender los segmentos que le indiquen los pines 2 al 8.

Ahora ponemos en LOW el pin 12 y en HIGH el 11. Los valores de los segmentos iluminaran ahora el segundo digito. Y luego el terceo y el
cuarto. El nico trucos es hacerlo rpido, y eso se le da muy bien a nuestro Duino.

EL PROGRAMA DE CONTROL

Vamos a reaprovechar la funcin Display () que escribimos en la sesin anterior para dibujar los dgitos en el display, que si recordis se apoyaba
en un array para saber que segmentos encender:Prog_31_2 (http://www.prometec.net/wp-content/uploads/2014/10/Prog_31_2.rar)

byteDigit[10][8]=
{
{1,1,1,1,1,1,0,0},//0
{0,1,1,0,0,0,0,0},//1
{1,1,0,1,1,0,1,0},//2
{1,1,1,1,0,0,1,0},//3
{0,0,1,0,0,1,1,0},//4
{1,0,1,1,0,1,1,0},//5
{1,0,1,1,1,1,1,0},//6
{1,1,1,0,0,0,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,0,0,1,1,0}//9
};

voidsetup()
{for(inti=2;i<13;i++)
pinMode(i,OUTPUT);
}

Pero vamos a extender Display para que escriba un digito en la posicin que queramos, donde la posicin 0 son las unidades, 1 las decenas, 2
las centenas y 3 los miles.

http://www.prometec.net/display4digitos/# 4/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

voidDisplay(intpos,intN)
{
(http://www.prometec.net)
digitalWrite(9,LOW);//Apagatodoslosdigitos
digitalWrite(10,LOW);
digitalWrite(11,LOW);
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/)
digitalWrite(12,LOW); ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

for(inti=0;i<8;i++)//Estonocambiadelasessionanterior
digitalWrite(i+2,Digit[N][i]);
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

digitalWrite(pos+9,HIGH);//Enciendeeldigitopos
}
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

Como veis, es la misma funcin en la parte de iluminar segmentos, pero hemos hecho que al entrar los apague todos, luego levanta los pines
que queremos y solo luego activamos el transistor de salida de la posicin que queremos, lo que hace que ilumine la posicin pedida en pos.

Calculamos el pin de salida como pos + 9, porque a las posiciones 0, 1, 2, 3 les corresponden los pines 9, 10, 11, 12, tambin aqu, la eleccin del
orden de los pines juega a nuestro favor.

Una vez que tenemos resuelto dibujar el nmero buscado en la posicin elegida tenemos que escribir otra funcin que descomponga un nmero
dado en unidades, decenas, centenas y miles.

En un alarde de creatividadhe bautizado a esta funcin como CalculaDigitos()

voidCalculaDigitos(intNum)
{
intDigit0=Num%10;
intDigit1=(Num%100)/10;
intDigit2=(Num%1000)/100;
intDigit3=Num/1000);

Display(3,Digit3);
Display(2,Digit2);
Display(1,Digit1);
Display(0,Digit0);
}

Por si acaso alguien falt el da que hablamos de las operaciones con enteros haremos un caso concreto. Supongamos un nmero como 2.386.
Cmo obtenemos sus dgitos separados?

2386%10=6Porqueel%nosdevuelveelrestodedividirpor10,osea6.
2386%100=86Ahorahacemosladivisinenterapor10osea8,losdecimalessetiran
2386%1000=386386/100=3
2386/1000=2Directamente,paraesoseinventladivisinentera.

Y a continuacin le pedimos directamente que nos saque los dgitos al display.

Por ultimo para la funcin principal, empecemos pidindole que cuente dcimas de segundo (La cuenta atrs la hacemos, luego)

voidloop()
{
CalculaDigitos(millis()/100);
}

Creas que iba a ser difcil? Pues lo siento. Es as de sencillo. Ya conocamos millis(), el reloj interno de nuestro Duino en milisegundos. Pues
haciendo la divisin entera (otra vez) nos da un contador de hasta 999 segundos.

Y si queremos hacer una cuenta atrs? Venga pensad un momento antes de mirar la solucin.


Muy fcil tambin. Como nuestro contador va hasta 9999 basta con restarle a esto el clculo de arriba,
o simplemente poner en lugar del 9999 la cifra desde la que deseamos descontar.

Ms interesante, y prctico supone convertir esa cifra a minutos y segundos sexagesimales para hacer un reloj.

http://www.prometec.net/display4digitos/# 5/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

voidloop()
{
(http://www.prometec.net)
intn=millis()/1000;//Lopasamosasegundos
intsegundos=n%60;
intminutos=n/60;
TIENDA
(HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
intk=minutos*100+segundos;
CalculaDigitos(k);
}
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

De nuevo a partir del reloj interno de nuestro Duino, millis(),(que cuenta en milisegundos por lo que lo dividimos por mil para pasarlo a
FORO (HTTP:/
segundos), /WWW.PROMETEC.NET/FOROS-PROMETEC/)
calculamos CONTACTO
los segundos y minutos, para luego llamar (HTTP://WWW.PROMETEC.NET/CONTACT/)
a CalculaDigitos() que espera un numero centesimal y por eso multiplicamos
por 100 los minutos para que cuadre el display.

Contador en un display de 4 digitos

Os dejo como ejercicio que hagis un reloj que efecta una cuenta atrs desde un nmero dado.


El circuito que hemos visto, es el correcto para garantizar que el display tenga una vida larga y pac ca,
de hecho es el que recomienda el fabricante.En internet encontrareis bastantes ejemplos en los que, en
vez de transistores usan resistencias de un cierto valor para limitar la intensidad en los controles de
salida. He preferido no hacerlo as, a sabiendas de que el montaje que os he propuesto es bastante ms
pesado.

ALGUNOS COMENTARIOS FINALES

Cablear este montaje es un asco y si fuera un circuito comercial seria caro (Porque aunque los componentes sean baratos, montarlos cuesta
pasta, ms que los componentes en este caso).

As que en la prctica os desaconsejo que usis estos displays de por si,en vuestros proyectos. Hay demasiados cables y siempre hay alguno
dando guerra. Lo normal es usar un display tipo I2C o similar que lleven un circuito de control interno, o bien usar un integrado de control BCD
como el Max7219 (Volveremos a hablar del asunto en un futuro prximo).

Y Por qu a pesar de todo hemos hecho esta prctica? Pues porque es importante que entendis cmo funcionan las cosas y el concepto de
multiplexado es uno de los claves bsicas para entender la electrnica digital,

Por cierto, Os habis dado cuenta de que, al hacer un multiplexado de los dgitos basado en que nuestro Duino recorra el ciclo completo en
menos tiempo de lo que nuestro ojo percibe, cualquier uso de un delay() dar al traste con el invento?. Meted uno por donde queris y ved lo
que ocurre.

Aunque hasta ahora hemos usado y abusado de los delays, son algo poco prctico y potencialmente muy peligroso a medida que los proyectos
que presentemos se vayan complicando, y este es uno de esos casos. Ya hablaremos de las soluciones.

RESUMEN DE LA SESIN
http://www.prometec.net/display4digitos/# 6/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

(http://www.prometec.net)

Hemos presentado los displays LED de 7 segmentos y 4 digitos.


Lo suciente como para comprender, que como ejercicio est bien, pero veremos otras maneras de
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
incluir estos displays, menos trabajosas.

Hemos mejorado nuestra funcin Display(), para que podamos usarla en displays de digitos
mltiples(Seria muy fcil extenderla a 8 digitos).
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
Hemos resuelto una serie de problemas lgicos, en pasos ms pequeos de abordar para mejorar
nuestra competencia en la bsqueda de algoritmos tiles.
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO
Hemos visto que podemos (HTTP:/
abordar /WWW.PROMETEC.NET/CONTACT/)
problemas complejos mediante pequeos pasos y funciones, que al
combinarse resuelven problemas que inicialmente parecen inabordables.

Anterior Siguiente
(http://www.prometec.net/display- (http://www.prometec.net/display-
7segmentos/) (https://www.facebook.com/prometecnet-
con-interface/)
1541207239447373/timeline/)

COMENTARIOS MS VIEJOS (HTTP://WWW.PROMETEC.NET/DISPLAY-4DIGITOS/COMMENT-PAGE-1/#COMMENTS)

(80) COMMENTS

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=22079#Respond)
Juan 06 Jun 2017
Hola, muy buenas, lo primero decir que muchas gracias por este tutorial, muy bien y fcil explicado y llegando a todos los niveles
con entretenimiento y resultando interesante (que no es nada fcil). En mi caso haba hecho bastantes cosas de circuitos y de
programacin en otros lenguajes, lo estoy usando para aprender arduino y C++ y no aburre para nada aunsabiendo de estos temas,
lo hago con mi novia que ella aprende de 0 y la verdad que ella tambin lo est disfrutando sin necesidad de ayuda extra.

Lo segundo, mi duda, estoy utilizando el display de 4 dgitos de 7 segmentos, intentando implementarlo sin transistores, al nal est
mi cdigo con comentarios. Cambiando en l el valor de j, en la denicin de variables antes del void setup, se puede obtener
cualquier nmero con un buffer circular y distintos nmeros en cada display con una relacin matemticas al activarlos (de
momentos solo lo he implementado para 2 de los 4 displays, ampliarlo no parece dicil), mi pregunta viene al intentar hacerlo
dinmico, las 4 ltimas lneas del cdigo.

k=k+16*exp(-6);
if (k=1)
{j++;
k=0;
}

Para evitar overow deno k como double y lo inicializo en 0. Sabiendo que la frecuencia de procesador de arduino UNO (con la que
trabajo) es de 16MHZ, quiere decir que hace 16*10^6 ciclos por segundo, le sumo a k la inversa 16*exp(-6) cada ciclo, de forma que
despus de un segundo (16*exp(-6)) ciclos k ser igual a uno, aumento el nmero de j y por tanto el de cada display y reinicializo k
en 0. Mi problema es que no consigo que funcione y no encuentro el error, si me podrais ayudar os lo agradecera.

Un saludo
Copio el cdigo entero:

int matrix[10][7]=
{ // Correspondencia les nmeros
{2,3,4,5,6,7,0}, //0
{4,7,0,0,0,0,0}, //1
{3,4,1,5,6,0,0}, //2
{3,4,1,7,6,0,0}, //3
{2,1,4,7,0,0,0}, //4

http://www.prometec.net/display4digitos/# 7/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
{3,1,2,7,6,0,0}, //5
{3,2,5,6,7,1,0}, //6
{3,4,7,0,0,0,0}, //7 (http://www.prometec.net)
{1,2,3,4,5,6,7}, //8
{1,2,3,4,0,6,7} //9
}; TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
int j=21;
double k=0;
int t=1;
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
void setup() IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
{// Del pin 1 al 8 est usado para escribir el nmero y del 10 al 13 para elegir que 7 segmentos usar
for (int i=1;i<14;i++)
pinMode(i,OUTPUT);
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

digitalWrite(12,HIGH);
digitalWrite(13,HIGH);

void loop()
{
/*Cada loop enciende y apaga el 7 segmentos 10 y 11 alternativamente, tan rpido que se ve de forma ja, al sacar num como
un buffer circular puedo sacar dos nmero distintos en cada led, cambiando j al principio puedo poner cualquier nmero del
1 al 9 en cada display
*/

int num=j%9;
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
for (int i=0;i<7;i++)
digitalWrite(matrix[num][i],HIGH);

for (int i=0;i<7;i++)


digitalWrite(matrix[num][i],LOW);

digitalWrite(10,HIGH);
digitalWrite(11,LOW);
for (int i=0;i<7;i++)
digitalWrite(matrix[num+3][i],HIGH);

for (int i=0;i<7;i++)


digitalWrite(matrix[num+3][i],LOW);

k=k+16*exp(-6);
if (k=1)
{j++;
k=0;
}

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=22159#Respond)
admin (http://www.prometec.net/members/admin/) 08 Jun 2017
Hola Juan , muchas gracias por publicar tu codigo, pero siento decirte que me resulta imposible por falta de tiempo
cargar y revisar tu programa porque estamos que no llegamos ya a anda

Un saludo

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=21445#Respond)

http://www.prometec.net/display4digitos/# 8/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
David 08 May 2017
Estimado Buenas tardes, muy bien explicado el tutorial, te comento que estoy entrando en el mundo Arduino, y quiero hacer lo
(http://www.prometec.net)
siguiente:

un circuito que electrnico que tenga 5 switch y estos switch tengas cada uno un valor de 1000, 500, 100, 50 y 10 ademas que me
sumeTIENDA (HTTP:/en
la cantidad /WWW.PROMETEC.NET/TIENDA/)
otro display, ser posible realizarARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
esto mediante arduino???

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

Reply
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=21514#Respond)
Ivan (http://www.prometec.net/members/ivan/) 09 May 2017
Hola David, con switch supongo qu te reeres a interruptores no? Podras hacerlo perfectamente, prueba un poco y si
tienes dudas nos dices. Un saludo.

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=18006#Respond)
Richard Aguirre 29 Ene 2017
Buenas tardes soy programador pero quiero complementar mis estudios con electronica un amigo me obsequio como regalo el
upgraded learning kit de arduino y estoy aprendiendo mucho con sus tutoriales. Ahora bien indico que me gusta probar por mi
mismo he intentar que sin copiar mucho su codigo lograrlo por mi mismo. Hay algunos detalles tecnicos que no segui al pie de la
letra pero logre implementar un relog a la perfeccin, entre comillas por que creo que estoy forzando el arduino.1.- No se por que
pero creo que mi circuito esta un poco desordenado y que estoy invirtiendo los polos por que en la parte donde apago los pines que
indican cada digito tuve que ponerlos en HIGH en vez de LOW para que apagaran. 2.- no implemente los Transistores. 3.- aun asi
me funciona jajaja que locura no.

Codigo:
int Hora=02; //Cambiar este dato para la hora
int Min=00; //Cambiar este dato para los min
byte Digit[10][7]=
{ //a b c d e f g
{1,1,1,1,1,1,0}, //0
{0,1,1,0,0,0,0}, //1
{1,1,0,1,1,0,1}, //2
{1,1,1,1,0,0,1}, //3
{0,1,1,0,0,1,1}, //4
{1,0,1,1,0,1,1}, //5
{1,0,1,1,1,1,1}, //6
{1,1,1,0,0,0,0}, //7
{1,1,1,1,1,1,1}, //8
{1,1,1,1,0,1,1} //9
};

int counterx=10;
void setup() {
// put your setup code here, to run once:

for(int i=2;i<=13;i++)
{
pinMode(i,OUTPUT);
}
}

void loop() {
int n = millis() / 60000 ; // Lo pasamos a segundos
int segundos = n % 60 ;
int minutos = n / 60 ;

int k = minutos * 100 + segundos ;


k=k+(Hora*100)+Min;
CalculaDigitos(k) ;

http://www.prometec.net/display4digitos/# 9/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
void Display(int pos,int N)
{
digitalWrite(9 ,HIGH); // Apaga todos los digitos (http://www.prometec.net)
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
for (int j=0;j<=6;j++)
{
int valor=Digit[N][j];
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
digitalWrite(j+2,valor); IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

}
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
digitalWrite(pos+9,LOW);

void CalculaDigitos( int Num)


{
int Digit0 = Num %10 ;
int Digit1 = (Num % 100) / 10;
int Digit2 = (Num % 1000) / 100;
int Digit3 = (Num / 1000);

Display(3 , Digit3);
Display(2 , Digit2);
Display(1 , Digit1);
Display(0 , Digit0);

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=18043#Respond)
admin (http://www.prometec.net/members/admin/) 30 Ene 2017
Hola Richard, e sun plcer saber que avanzas, pero hemos tenido que dejar de revisar programas porque snecillamente
no nos d ala vida. Prueba a comentarlo en el foro a ver si alguien se anima

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=16321#Respond)
JOSEP (http://www.prometec.net/members/joseppampalona/) 11 Dic 2016
Hola

Estoy que me sale humo, intentando un contavueltas (Ascendente,descendente) mediante dos pulsadores y no lo logro con el
problema aadido que son dos displays grandes de 10 cm y trabajan a una tensin de 10 v. Me puedes ayudar con el programa y la
conexin ?
Muchas gracias.
Josep

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=16418#Respond)
admin (http://www.prometec.net/members/admin/) 13 Dic 2016
No nos das muchas pistas Josep

http://www.prometec.net/display4digitos/# 10/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
JOSEP (http://www.prometec.net/members/joseppampalona/) 15 Dic 2016
Hola de nuevo y gracias por responder.
(http://www.prometec.net)
Replyintentando disear un contavueltas para las carreras de Dirt Track de las que por acin soy
Estoy
cronometrador y siempre veo sufrir al compaero de turno bajando las vueltas con unas plasticaciones
(Http://Www.Prometec.Net/Display-
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO
con anillas y as poder (HTTP:/
hacer /WWW.PROMETEC.NET/INDICE-TUTORIALES)
un regalo al club de mis amores MOTO CLUB SEGRE.
4digitos/?
Replytocom=16482#Respond)
No hace mucho sigo tu tutorial y agradecerte lo que ayuda y ensea, as que decid hacer un paso
adelante.
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

Como dices tu en tus tutoriales , hay que ser practico, as que encontr un programa que me vala ( esto
ha sido despus del primer comentario).
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
El problema de la programacin y los pulsadores es que a veces te sube dos dgitos o te los baja, hice un
antirrebote fsico con una resistencia y un condensador, pero como es difcil saber el tiempo que tienes
que poner el dedo en el pulsador para que no te suba o baje un dgito de mas.

Adjunto el programa a ver si me puedes ayudar.

#dene A2
#dene B3
#dene C4
#dene D5
#dene E6
#dene F7
#dene G8

// Pulsadoes boton conectados a pines 9 y 10


#dene BTN1 14 //pulsador a A0
#dene BTN2 15 //pulsador A1
#dene led 13
// Pines comunes de cada display de anodo comun
#dene CA1 9
#dene CA2 10

// Pines para A B C D E F G, en secuencia


// se pueden usar los que ms interesen
const int segs[7] = { 2, 3, 4, 5, 6, 7, 8 };

const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,


0b0000010, 0b1111000, 0b0000000, 0b0010000};

int digit1 = 0;
int digit2 = 0;

void setup()
{
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(BTN1, INPUT);
pinMode(BTN2, INPUT);
digitalWrite(BTN1, LOW);
digitalWrite(BTN2, LOW);
pinMode(CA1, OUTPUT);
pinMode(CA2, OUTPUT);
pinMode(led, OUTPUT);

// digit1 = 9; digit2 = 10;

void loop()
{
// chequea boton1. Incrementa
int val1 = digitalRead(BTN1);
if (val1 == HIGH)
{
if (digit2 >= 9 && digit1 >= 9)
{
digit2 = 0;
digit1++;
digit1 %= 10;
if (digit1 >=9)

http://www.prometec.net/display4digitos/# 11/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
{
digit2++;
} (http://www.prometec.net)
} else if (digit1 >= 9)
{
digit2++;
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
digit2 %= 10;
}
digit1++;
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
digit1 %= 10; IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
delay(10);
}
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
// cheque boton2. Decrementa
int val2 = digitalRead(BTN2);
if (val2 == HIGH)
{
if (digit1 >= 0)
{
if (digit1 < 0)
{
digit1 = 0;
}
digit1;
}
if(digit1 < 0)
{
digit1 = 9;
if (digit2 < 0)
{
digit2 = 0;
}
digit2;
}
if (digit2 < 0)
{
digit2 = 9;
}
}

// display numero
unsigned long startTime = millis();
for (unsigned long elapsed=0; elapsed < 300; elapsed = millis() startTime)
{
lightDigit1(numbers[digit1]);
delay(5);
lightDigit2(numbers[digit2]);
delay(5);
}
}

void lightDigit1(byte number)


{
digitalWrite(CA1, LOW);
digitalWrite(CA2, HIGH);
lightSegments(number);
}

void lightDigit2(byte number)


{
digitalWrite(CA1, HIGH);
digitalWrite(CA2, LOW);
lightSegments(number);
}

void lightSegments(byte number)


{
for (int i = 0; i < 7; i++)
{
int bit = bitRead(number, i);
digitalWrite(segs[i], bit);
}
}

El otro problema que comente de los displays de 7 segmentos de 10 cm de altura, nodo comn y tensin
de alimentacin de 8,4 a 10 v lo he solventado con los magncos transistores NPN 2N2222 .

http://www.prometec.net/display4digitos/# 12/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
Me puedes ayudar con el antirebote del programa para que si me paso un poquito con el dedo en el
pulsador no me suba o baje dos dgitos con una sola pulsacin.
(http://www.prometec.net)
Muchas gracias por delante y si puedes ho te interesa te puedo conseguir una invitacin para el Dirt Track
de Barcelona este n de semana.
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
PD. Comenta a tu departamento de envos , que hice un pedido (que llego rpido y bien ) y en la tarjeta
del pedido haba mezclado direccin de facturacin con direccin de envi. El transportista me llamo y no
hubo ningn problema.
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
Si quieres por el email te lo puedoIMPRESORA
concretar3D
un(HTTP:/
poco/WWW.PROMETEC.NET/3D-INDICE/)
mas .

Muchas gracias de nuevo.


FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=14018#Respond)
tomas perez (http://www.prometec.net/display-4digitos/#comment-14010) 30 Sep 2016
Ivan tendras algun texto de referencia para saber como se utiliza el void CalculaDigitos ???

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=14010#Respond)
tomas perez (http://www.prometec.net/display-4digitos/#comment-13883) 30 Sep 2016
Hola Ivan, gracias por contestar.
lo que quiero hacer es contador que cuente el paso de objetos a partir de la seal de un sensor. Ya he hecho la modicacion
conforme a tu recomendacion, no estoy del todo seguro si la est haciendo bien (obviament no, por que aun no me queda jeje),
checa:

void loop()
{
CalculaDigitos(valor);

if (boton==HIGH)
valor=(digitalRead, boton);

valor++;
}
//declaradas mis variables globales int valor, int boton

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=14020#Respond)
Ivan (http://www.prometec.net/members/ivan/) 30 Sep 2016
Hola Toms, esta es la funcin , la tienes en esta misma sesin: void CalculaDigitos( int Num)
{
int Digit0 = Num %10 ;
int Digit1 = (Num % 100) / 10 ;
int Digit2 = (Num % 1000) / 100 ;
int Digit3 = Num / 1000) ;

Display(3 , Digit3);
Display(2 , Digit2);
Display(1 , Digit1);
Display(0 , Digit0);
}

Lo que tendras que hacer es pasarle un valor que comience en 1 y que se incremente en 1 cada vez que aprietes el
botn. Eso s, me he jado en la funcin y tienes que multiplicarlo por diez para que te encaje como un segundo cada
pulsacin. O sea o empezar en 10 y sumarle 10 con cada pulsacin, o empezar en uno y sumarle uno en cada pulsacin

http://www.prometec.net/display4digitos/# 13/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
y multiplicarlo por diez antes de los clculos. Si tienes alguna duda dime. Un saludote!

(http://www.prometec.net)

TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)


Reply
(Http://Www.Prometec.Net/Display-
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
4digitos/? IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
Replytocom=13883#Respond)
tomas perez (http://www.prometec.net/display-4digitos/) 27 Sep 2016
Hola,FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
me podria orientar un poco sobre una duda, he tratado de modicar el programa para que el display cuente por cada pulso que d
un boton, haciendo pruebas he modicado el tiempo de millis y si responde a el cambio, por lo que pareciera que millis es el que
controla el cambio, solo que no entiendo bien como trabaja esta funciona y no encuentro donde meter el pulso del boton.

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=13912#Respond)
Ivan (http://www.prometec.net/members/ivan/) 27 Sep 2016
Hola Toms, no estoy seguro de entenderte del todo, pero si lo que quieres es que sume un segundo cada vez que
pulsas un botn lo que tendras que cambiar es el loop(). En vez de pasarle a la funcin CalculaDigitos( millis() / 100);
le pasaras algo as como CalculaDigitos(valor);
Con esto solo tendras que meter un if para detectar la pulsacin (quitando el rebote) y sumar 1 a la variable dentro de
ese if.
Un saludo!

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=13751#Respond)
Lucho 22 Sep 2016
Hola, muy bueno el tutorial!!!

Te hago una consulta, si quiero usar este mismo metodo de multiplexado pero en un display grande, o sea un display armado por mi
de 4 digitos de 7 segmentos pero de serie de 5 leds de 5mm por segmentos, como debo calcular el consumo, entiendo como
conectarlos y que debo usar algn transistor para usarlos a un voltaje mayor al que trabaja el Arduino pero me reero que si
multiplexando debo calcular el consuma de un solo display o el delos 4 encendidos, se entiende?

En limpio:

Display grande.
Usara leds de 2volt rojos de 20 mA. en series de a 5 por cada display, o sea que seria cada display de 7 segmentos de 5 leds en
serie.

Cuanto seria el voltaje de mi fuente si multiplexo esos 4 display.

Gracias!!!

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=13779#Respond)
admin (http://www.prometec.net/members/admin/) 23 Sep 2016
No m eatrevo a decirte gran cosa sin entrar en pruebas pero en principio deberia funcionar, el consumo dependera un
poco de las necesidades de la electronica que uses pero no deberia haber grandes problemas

http://www.prometec.net/display4digitos/# 14/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

(http://www.prometec.net)
Reply
(Http://Www.Prometec.Net/Display-
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/)
4digitos/?
ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

Replytocom=12570#Respond)
Carlos Piles 19 Ago 2016
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
No seria conveniente poner en serie una resistencia de 220 330 Omh entre los pines del arduino y los segmentos de led del
display? Con el montaje mostrado, da la sensacion que si cometemos un error en el programa y no multiplexamos correctamente, la
intensidad que pasara por el led ser muy alta y o fundir el led o el arduino; ya que los transistores en modo activado no reducen
FORO
voltaje (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/)
ni limitan CONTACTO
la intensidad. No digo de poner la resistencia (HTTP://WWW.PROMETEC.NET/CONTACT/)
en los catodos en serie con los transistores, porque el brillo
disminuiria conforme aumenta el numero de segmentos. O es que el display ya incorpora las resistencias internamnete? Otra
solucion seria utilizar analogWrite() en los pines 9-12 para controlar el brillo del display (o variar el ciclo activo de multiplexado con
delayMicroseconds())

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=12596#Respond)
admin (http://www.prometec.net/members/admin/) 20 Ago 2016
tienes toda la razonn carlos. jate que el primer diagrama incluye una resistencia de 330ohm en el pin 12 que es el
catodom comun por el que circula roda la,corriente y i
limita sumintensidad

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=12292#Respond)
Efrain F. (http://www.prometec.net/display-4digitos/) 09 Ago 2016
BUENAS noches, He realizado un pequeo cubo led 4x4x4 capa inferior (Led rojo ultrabrillante), segunda capa (Led Azul
Ultrabrillante), Tercera capa Color Blanco y cuata capa verde, intento encender los cuatro Niveles (capas) y solo enciende la primera
capa (color Rojo), pero tambin se puede encender las capas, 2,3 y 4 juntas pero no los rojos, cada capa esta controlada por un
Transistor 3904 con una resistencia de saturacin de 160 ohmios conectada a la salida del puerto c del pic 16f877A, las 16 columnas
estn conectadas por medio de una resistencia de160 ohmios al pic 16f877A, quisiera saber por que no encienden las cuatro capas
juntas

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=12316#Respond)
Ivan (http://www.prometec.net/members/ivan/) 09 Ago 2016
Hola Efrain, yo te aconsejo que postees tu proyecto en el foro explicndolo lo mejor posible, para que te podamos
ayudar un poco entre todos.

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=10783#Respond)
David (http://www.prometec.net/display-4digitos/) 04 Jul 2016
Hola, me gustara saber como seria el programa para hacer una cuenta atrs. He intentado hacer esto:

void loop()
{
int n = millis() / 1000 ;

http://www.prometec.net/display4digitos/# 15/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
int segundos = n % 60 ;
int minutos = n / 60 ;
(http://www.prometec.net)
int k = 1000 minutos * 100 40 segundos + 0 ;
CalculaDigitos(k) ;
} TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)

pero entonces en vez de 10 minutos me pone 9 minutos 60 segundos.

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)


Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=9458#Respond)
Fran (http://fran) 25 May 2016
Hola hay alguna forma de jar un tiempo con switchs y que luego suene a ese tiempo, algo asi como un despertador ?

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=9464#Respond)
admin (http://www.prometec.net/members/admin/) 26 May 2016
Hola Fran a que swithes te reeres?

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=8009#Respond)
Garser 30 Mar 2016
Una pregunta sabe como podria yo agregarle interrupciones a cada display para que se reinicie en cero?

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=8017#Respond)
admin (http://www.prometec.net/members/admin/) 30 Mar 2016
No estoy muy seguro de lo que me preguntas

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=7249#Respond)
Jaume (http://www.prometec.net/display-4digitos/) 09 Mar 2016
Hola de nuevo, admi, por aqu ando con los displays. Muy buenos los tutos y esclarecedores (ya ni les tengo pnico a los
transistores).

Bueno, solo un par de cosas.

1.- Siguiendo tu tuto, coge el array de los nmeros de la sesin anterior, pero cuando lo pona en marcha, algunos dgitos no salan
correctos (el 3 al revs, al 4 le faltaba un led, el 6 era un 9, etc.). Esto est solucionado, cambiando los 1 y 0 gracias a la maqueta
del tuto anterior (que ilustra perfectamente las cadencias de los leds), y ahora se ven correctamente.

http://www.prometec.net/display4digitos/# 16/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
El display que uso no tiene el mismo patillaje que el tuyo, y lo descifr a base de buscar el comn ir haciendo pruebas. Podra ser
que al no ser el mismo patillaje, las combinaciones de 1 y 0 sean diferentes, y por eso he tenido que adaptarlas?
(http://www.prometec.net)
2.- El display hace el conteo de segundos y minutos correctamente, hasta que llega a los 3 segundos. Al mostrar los dgitos 0.3.0,
se reinicia el solito. Le he puesto una alimentacin externa, por si acaso, pero hace lo mismo. No se si es un problema del
programa,
TIENDAo(HTTP:/
a que/WWW.PROMETEC.NET/TIENDA/)
puede deberse. Tienes idea de que problema
ARDUINO puede
(HTTP:/ haber?
/WWW.PROMETEC.NET/INDICE-TUTORIALES)

Gracias por la ayuda, e insisto, magncos tutoriales.

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
Saludos IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=7252#Respond)
admin (http://www.prometec.net/members/admin/) 09 Mar 2016
Asi es Jauma,
Dependiendo de que tu displaya sea de anodo comun o catodo comun hay que invertir el 0o el 1.
En cuanto al reseteo al llegar a 3 minutos parece mas un tema de soft

Jaume (http://www.prometec.net/display-4digitos/) 10 Mar 2016


Al programa? A que software te reeres?

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=7274#Respond)

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=6311#Respond)
Jos (http://www.prometec.net/members/marote/) 15 Feb 2016
for (int i= 0 ; i<8 ; i++) // Esto no cambia de la session anterior
digitalWrite(i+2 , Digit[N][i]) ;

Me parece que debera ser i<7

En el ejercicio anterior trabajando con el D.P. (conectado al pin 9) se poda hacer,


pero ahora el pin 9 es la activacin del primer display.

Para los que se le encienden todos los displays y le cambian de intensidad, a mi se me ha


soluccionado haciendo este cambio.

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=6357#Respond)
admin (http://www.prometec.net/members/admin/) 17 Feb 2016
Muchas gracias por la correccion Jose

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=5925#Respond)
Fernando 04 Feb 2016

http://www.prometec.net/display4digitos/# 17/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino
Perdn, se me olvidaba un detalle: en mi esquema no he utilizado transistores. Dado que trabajando a 5V y con una resistencia de
330 Ohmios tenemos una corriente inferior a 10mA, se puede comandar los displays directamente desde la salida digital.
(http://www.prometec.net)
De esta forma cada terminal comn se conecta mediante una resistencia de 330 Ohms a la salida digital que comandar cada dgito.

En ctodo
TIENDAcomn un 0 activar el dgito y en nodo ARDUINO
(HTTP://WWW.PROMETEC.NET/TIENDA/) comn ser un/WWW.PROMETEC.NET/INDICE-TUTORIALES)
(HTTP:/ 1 para la activacin del dgito.

Con los segmentos ocurre al contrario, en ctodo comn ser un 1 el que active los segmentos mientras que en nodo comn se
har con un 0.
RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)
Esto se controla fcilmente mediante xor o not de la variable CommonTerminal que valdr 1 para nodo comn y 0 para ctodo
comn.
FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)
Un saludo.

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=5923#Respond)
Fernando 04 Feb 2016
Hola, acabo de recibir mi Arduino Nano y como cosa chula me he puesto a pincharle un display de 7 segmentos que tena por ah,
el caso es que me he dicho que para que currarme todo si alguien ya lo habr hecho y as es como he llegado aqu.

Total, que una vez funcionando el tema, teniendo en cuenta que mi display es de nodo comn, le he pegado un repaso al cdigo y
este es el resultado:

byte Digit[10][8] = {
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
{ 1, 1, 1, 0, 0, 1, 1, 0 }, // 9
};

byte Segments[] = { 2, 3, 4, 5, 6, 7, 8 };
byte Digits[] = { 9, 10, 11, 12 };

#dene Anode 1
#dene Cathode 0
int CommonTerminal = Anode;

void setup() {
for (int i = 0; i < sizeof(Segments); i++) pinMode(Segments[i], OUTPUT);
for (int i = 0; i < sizeof(Digits); i++) pinMode(Digits[i], OUTPUT);
}

void Display (int Num) {


for (int d = 0; d < sizeof(Digits); d++) {
int N = (Num % int(pow(10, d + 1))) / pow(10, d);
for (int i = 0; i < sizeof(Digits); i++) digitalWrite(Digits[i], not CommonTerminal);
for (int i = 0; i < sizeof(Segments); i++) digitalWrite(Segments[i], CommonTerminal xor Digit[N][i]);
digitalWrite(Digits[d], CommonTerminal);
}
}

void loop() {
Display( millis() / 100);
}

Como se puede ver permito congurar dnde se conecta cada segmento y dnde cada dgito del display de forma fcil, tambin
permite denir de manera fcil si el display es de nodo comn o de ctodo comn.

Un saludo

http://www.prometec.net/display4digitos/# 18/19
2017617 Displaysde4digitosy7segmentos|TutorialesArduino

Reply
(Http://Www.Prometec.Net/Display-
(http://www.prometec.net)
4digitos/?
Replytocom=5926#Respond)
admin (http://www.prometec.net/members/admin/) 05 Feb 2016
TIENDA (HTTP://WWW.PROMETEC.NET/TIENDA/) ARDUINO (HTTP://WWW.PROMETEC.NET/INDICE-TUTORIALES)
Muchas gracias por tu aporte Fernando

RASPBERRY PI (HTTP://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/) IMPRESORA 3D (HTTP://WWW.PROMETEC.NET/3D-INDICE/)

FORO (HTTP://WWW.PROMETEC.NET/FOROS-PROMETEC/) CONTACTO (HTTP://WWW.PROMETEC.NET/CONTACT/)


Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=4650#Respond)
ERNESTO (http://www.prometec.net/display-4digitos/) 05 Ene 2016
Disculpe sabe como hacer el contador pero con botones para hacerlo decendente y acendente???

Reply
(Http://Www.Prometec.Net/Display-
4digitos/?
Replytocom=4661#Respond)
admin (http://www.prometec.net/members/admin/) 05 Ene 2016
Hola Ernesto, Naturalmente que puedes hacer eso. basta con que mezcles los tutoriales de botones y este del display.
SI te animas te echaremos una mano encantado y ademas si quieres lo publicamos como proyecto tuyo

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress Anti-Spam by WP-SpamShield (https://wordpress.org/extend/plugins/wp-spamshield/)

Copyright Prometec (http://www.prometec.net) (https://www.facebook.com/pages/prometecnet/15


(https://plus.google.com/10259983750
(https://www.youtube.com/cha

http://www.prometec.net/display4digitos/# 19/19

Вам также может понравиться