Problema con 5 displays de 7 segmentos

¡Hola! Tengo un problema con uno de los segmentos de este proyecto. La idea es generar letras y números, pero el segmento e no funciona correctamente.

Si lo enciendo de manera individual, solamente el e, funciona lo ponga en un display, en varios o en todos. El problema aparece cuando enciendo el e junto a otro, ahí se enciende el otro pero no el e. Por ejemplo, si quiero poner un 6, muestra un 5 al no encender el e. Con una excepción, al poner un 8 con el dp también activo, si se enciende (el 8 sin el punto no).

Todos los demás funcionan sin problemas, tanto la pantalla que pretendo encender (sea una o varias), como los segmentos que escojo.

He probado a conectarlo en otra salida, la 12 en vez de la 13, pero continúa haciendo lo mismo.

Adjunto un dibujo cutre del esquema y parte del código (no todo porque es todo el rato enciende esto apaga lo otro). Estoy usando un Arduino Nano, por si sirve de algo la información. Y el haber usado las salidas analógicas como digitales es porque hay más cosas conectadas, no lo incluyo en el esquema porque he probado a desconectarlo y sigue haciendo lo mismo por lo que no creo que tenga nada que ver.

Muchas gracias de antemano.

#define a         19
#define b         6
#define c         14
#define d         16
#define e         13
#define f         18
#define g         17
#define dp        15
#define uno       1
#define dos       4
#define tres      5
#define cuatro    2  
#define cinco     3

void setup() {
  
  for(byte x=1; x<20; x++){       //Del 1 al 19 porque hay más cosas conectadas
    pinMode(x, OUTPUT);
  }  

}

void loop() {

  
  digitalWrite(uno, HIGH);        //7 en la primera pantalla
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(uno, LOW);  
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);

  digitalWrite(tres, HIGH);       //6 en la tercera pantalla
  digitalWrite(a, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(tres, LOW;    
  digitalWrite(a, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);

  digitalWrite(cinco, HIGH);      //E en la quinta pantalla
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(cinco, LOW); 
  digitalWrite(a, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);


}

Falta el código. Coloca lo que tengas usando etiquetas. Si no sabes lee ls normas para postearlo, si aún asi no entiendes mira otros hilos para entender cómo debe verse.

Lo di a subir sin querer antes de pegarlo. Ya está subido.

Dame unos momentos para verlo y hacerte sugerencias, si corresponde.
Prueba asi, para poder ver los cambios

void loop() {
  
  digitalWrite(uno, HIGH);
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(uno, LOW);  
  delay(1000);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(uno, HIGH);
  digitalWrite(tres, HIGH);       //6 en la tercera pantalla
  digitalWrite(a, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(tres, LOW); 
  delay(1000);   
  digitalWrite(a, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(tres, HIGH);    
  digitalWrite(cinco, HIGH);      //E en la quinta pantalla
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(cinco, LOW); 
  delay(1000);
  digitalWrite(a, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(cinco, HIGH);      //E en la quinta pantalla
}
1 Like

Ahora muestra:
5 en la primera pantalla y en la última.
Un cinco pero sin el segmento c en la primera y tercera.
Y un 7 en la tercera y última.

Ok. Lo que muestra es lo le has indicado a cada digito (no pantalla) y el resto es de tu competencia.
Como activas y desactivas los segmentos es como terminas resolviendo las cosas.

Por el camino que vas solo podras ver cosas muy estáticas.
Tienes que aprender a usar vectores para crear números y luego decidir que quieres ver y simplemente presentarlo.

Esto podrá resulta complicado asi que te voy a enviar a que leas algo previamente para luego seguir con la idea del manejo de segmentos.
Este es un camino, no es el mejor pero es uno que te introduce en el manejo mas eficiente.
https://create.arduino.cc/projecthub/aboda243/get-started-with-seven-segment-c73200
Si tienes dudas no dudes en consultar.
El mejor camino no es usar un entero por cada segmento sino usar bits pero lo dejamos para la siguiente lección.

1 Like

Lo acabo de hacer con ese código como si fuera una sola pantalla (dejando encendido el transistor "uno" para que solo se active esa pantalla. Sigue haciendo lo mismo, enciende todos menos el segmento e. De nuevo, si doy a mostrar únicamente el e o a mostrar todos (es decir, "8.") si lo enciende.

Bueno revisa conexiones.
Algo esta mal en ellas o tienes el display con ese segmento quemado.

image

No uses el pin 13 porque tmb tiene un led conectado del Arduino, usa el 12 por ejemplo.

Con el 12 probé y hacía lo mismo. Pero, si estuviera quemado, no se encendería nunca, pero si que se enciende cuando se enciende todo o cuando enciendo solo ese. Más aún en todos los displays el mismo segmento quemado. Es que es muy raro, es la primera vez que tengo este problema y he usado estos displays en la mitad de mis proyectos.

Edito con ejemplos:

Este código funciona (enciende a y g en las pantallas 2, 3 y 4):

  digitalWrite(dos, HIGH);
  digitalWrite(tres, HIGH);
  digitalWrite(cuatro, HIGH);
  digitalWrite(a, HIGH);
  digitalWrite(g, HIGH);

Este también (enciende el e en las pantallas 2 y 3):

  digitalWrite(dos, HIGH);
  digitalWrite(tres, HIGH);
  digitalWrite(e, HIGH);

Aquí ya falla (enciende solo el a en las pantallas 3 y 4):

  digitalWrite(tres, HIGH);
  digitalWrite(cuatro, HIGH);
  digitalWrite(a, HIGH);
  digitalWrite(e, HIGH);

No se dice pantallas, son displays.

Estoy seguro que tienes una mala conexión, algo mezclado con otro segmento..
Sinceramente no se que mas decirte.
Debes probar con tu tester y buscar continuidad entre pines o mejor dicho segmentos
Los transistores tienen su emisor a gnd supongo?

Si, van conectados al GND. La verdad es que yo también creo que se tratará de una mala conexión, está todo muy empacado porque debe ir en un hueco enano. Pero por más que miro, no encuentro nada que haga contacto y no se ocurre qué puede estar haciendo el corto para que funcione en unos casos si y otros no. De todas formas seguiré mirando o incluso lo desoldaré y haré otra vez.

Simple si funciona con otros segmentos y no funciona con uno es porque ese segmento presenta alguna anormalidad.
Encuéntrala porque desde acá es muy dificil darte alguna otra idea.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.