Display de 7 segmentos

Buenas!

En esta entrada vamos a intentar aprender cómo usar un display de 7 segmentos de ánodo común

Si se adquiere este componente por internet podremos saber si es de ánodo común o de cátodo común buscando por internet la referencia que viene impresa en el dispositivo seguida de la palabra datasheet.

En nuestro caso, esta es la información que hemos recopilado:

Model : 5161BS
Size : 0.56-inch
Emitting color : Red (Ultra-Bright )
Mode : Common-Anode (CA)
Digit : Single Digit
Category : LED 7-Segment Display
Maker : XLITX Technology

Es de Ánodo común, pero ¿qué significa esto? Vamos a intentar averiguarlo a continuación.

Descripción del módulo

Detalle del display de un dígito de 7 segmentos

El display de 7 segmentos como se aprecia en la imagen es un concentrado con varias barras de leds que al encenderse pueden identificarse con un número del 0 al 9 (nombrarse con un número del 1 al 10). Los leds recordemos que se encuentran conformados por un ánodo (parte positiva) y un cátodo (parte negativa). El módulo de display de 7 segmentos tiene un led común que en función del dispositivo que compremos funcionará como ánodo o como cátodo común y al que se conectan el resto de los leds.

Si el display de 7 segmentos es de ánodo común los pines serán los cátodos y en caso de tratarse de un display de cátodo común los pines serán los ánodos.

Es decir, existen dos tipos de displays de 7 segmentos, los de ánodo común y los de cátodo común. Esto quiere decir que en los primeros, todos los LEDs comparten un mismo ánodo ( polo +), y en los segundos, que todos los LEDs comparten un mismo cátodo.  

Esto se traduce en que si disponemos de un display del tipo cátodo común un valor HIGH  encenderá el segmento y un valor LOW (0) lo apagará . Es decir en los de cátodo común, se aplica un voltaje bajo al terminal común del display y un voltaje alto a cada segmento para su iluminación. En nuestro proyecto con este modelo de ánodo común necesitaremos un valor LOW para encender el segmento y un valor HIGH para apagarlo, el terminal común del display que funciona como ánodo común se alimentará con la salida VCC de Arduino, y sobre cada segmento se aplicará una resistencia de 220 ohms para reducir el voltaje.

La diferencia entre un cátodo común y un ánodo común estriba en el flujo de la corriente. Con un cátodo común los pins necesitarán proporcionar corriente, con un ánodo común los pins necesitarán recibir corriente.


Cada led del display se identifica con una  letra y cada pin del led está asociado a esa letra tal y como hemos visto en la imagen anterior, y que se resume en la siguiente tabla

Pines del display
Segmentos
1E
2D
3Ánodo/Cátodo común redundante
4C
5
DP (Punto Decimal)
6B
7A
8Ánodo/Cátodo común redundante
9F
10G

De tal manera que para producir el número cero en el display deberemos encender todos los leds a excepción del DP , por ejemplo, como se muestra en la imagen. Los pines 3 y 8 son redundantes y hacen referencia al ánodo o cátodo común según el tipo de módulo que tengamos en nuestro proyecto.

Diagrama de conexión

Nuestro display de ánodo común es el de la derecha en la siguiente imagen, la conexión GND es común a todos los leds

Necesitaremos un cable para alimentar cada uno de los 8 pines que energizan cada segmento-led, incluído el punto, si es que lo necesitamos, por lo que el diagrama de conexión se podría parecer al siguiente y una resistencia por cada segmento de unos 170 ohmios, aunque hay diagramas que muestran una sola resistencia para el ánodo común

Recordar que todos los LEDs necesitan una resistencia que limite la intensidad de la corriente recibida o entregada para prevenir que se deterioren o exploten.


Diagrama de conexión display 7 segmentos cátodo común

Es decir hemos configurado la siguiente conexión con Arduino

Pines de Arduino seleccionados
      Segmentos y pines Display
2
B (pin 6 display)
3
A (pin 7 display)
VCC
Ánodo/Cátodo común redundante (pin 3 display)
4
C (pin 4 display)
-
DP (Punto Decimal, pin 5 display)
11
E (pin 1 display)
12
F (pin 9 display)
VCC
Ánodo/Cátodo común redundante (pin 8 display)
13
G (pin 10 display)


Código

En este sketch definimos dos arrays y utilizamos la función random (aleatoria) que precisa de una semilla (origen) y aprovechamos para visualizar los números 0 a 9 en sentido ascendente y descendente y 10 números aleatorios, de forma cíclica..
 #define PIN2 2
#define PIN3 3
#define PIN4 4
#define PIN10 10
#define PIN11 11
#define PIN12 12
#define PIN13 13

/*
PIN ard - pin display
2  B (pin 6 display)
3 A (pin 7 display)
VCC Ánodo/Cátodo común redundante (pin 3 display)
4 C (pin 4 display)
- DP (Punto Decimal, pin 5 display)
11  E (pin 1 display)
12  F (pin 9 display)
VCC Ánodo/Cátodo común redundante (pin 8 display)
13  G (pin 10 display)
*/
long randomNumber;
byte segment_ard_corr_array[7]= {3,2,4,11,10,12,13};
//,a,b,c,d,e,f,g
byte segment_num_array[10][7] = {  { 0,0,0,0,0,0,1 },    // 0
                          { 1,0,0,1,1,1,1 },    // 1
                          { 0,0,1,0,0,1,0 },    // 2
                          { 0,0,0,0,1,1,0 },    // 3
                          { 1,0,0,1,1,0,0 },    // 4
                          { 0,1,0,0,1,0,0 },    // 5
                          { 0,1,0,0,0,0,0 },    // 6
                          { 0,0,0,1,1,1,1 },    // 7
                          { 0,0,0,0,0,0,0 },    // 8
                          { 0,0,0,1,1,0,0 }};   // 9

void setup() {
  // put your setup code here, to run once:
pinMode(PIN2,OUTPUT);
pinMode(PIN3,OUTPUT);
pinMode(PIN4,OUTPUT);
pinMode(PIN10,OUTPUT);
pinMode(PIN11,OUTPUT);
pinMode(PIN12,OUTPUT);
pinMode(PIN13,OUTPUT);

randomSeed(analogRead(A0));


}

void loop() {

//compruebaLedsCorrespondencia();

SecuenciaEnteros09(1);
SecuenciaEnteros09(0);
SecuenciaRandom();


}
void SecuenciaRandom(){
   
    for(int i=0;i<10;i++){
      randomNumber = random(1,9);
       Num_Write(randomNumber);
    delay(800);
    }
}
void SecuenciaEnteros09(byte sentido)
{
  byte i;
  if(sentido==1){//ascendente
  for(i=0;i<10;i++){
    Num_Write(i);
    delay(800);
    }

   
  }
  else {
    if(sentido==0){
    for(i=10;i>0;i--){
    Num_Write(i-1);
     delay(800);
    }
    }
  }
}

void Num_Write(byte number)
{
  int pin= 2;
  for (int j=0; j < 7; j++) {
   
     digitalWrite(segment_ard_corr_array[j], segment_num_array[number][j]);
   
 
  }
}

void compruebaLedsCorrespondencia(){
  byte i;
  for(i=0;i<7;i++)
  {
    digitalWrite(segment_ard_corr_array[i],HIGH);
    delay(600);
  }
  for(i=0;i<7;i++)
  {
    digitalWrite(segment_ard_corr_array[i],LOW);
    delay(600);
  }
}
Y esto es todo, 
Gracias por vuestro tiempo y atención,

Referencias

  • https://www.digikey.com/en/maker/projects/how-to-interface-a-seven-segment-display-with-an-arduino/9c05f147618c4fe3b8bb79acce5c60e3
  • https://arduino.stackexchange.com/questions/70571/7-segment-display-with-common-anode
  • https://www.electronicwings.com/arduino/7-segment-display-interfacing-with-arduino-uno