TWITTER:@TierraArduino

DISPLAY 7 SEGMENTOS

Con José Pujol: tecnopujol.wordpress.com/

Finalidad

 

Controlar un display doble de 7 segmentos de forma que podamos contar de 0 hasta 99.

Para hacerlo vamos a usar un registro de desplazamiento, lo cual nos permite controlar los 16 pines del Display con solo 3 salidas digitales de Arduino.

 

 

Información

 

A.- Cómo funciona display de 7 segmentos:

Es un display formado por 7 LEDs para los segmentos y el LED del punto. Este display nos permite crear números e incluso algunas letras dándole la orden de que LEDs deben estar encendidos y de cuales apagados.

Los displays, pueden ser de cátodo común o de ánodo común, en este caso nos conviene que sean de cátodo común ya que nos permiten programar en lógica positiva.

 

 

B.- Cómo funciona el registro de desplazamiento:

 

 


 

Q0 – Q7: Salidas en paralelo a las que conectaremos los ánodos de nuestro Display.

Gnd: Masa de alimentación del chip.

Q7: Salida serie donde conectaremos otro, de manera que el primer byte pasaría de largo del primer chip y se derivaría por esta patilla al segundo.

MR: Master reset, conectado a +Vcc.

SH_CP: Pin para el reloj que controlaremos desde Arduino y que marcará la frecuencia de desplazamiento del registro a modo de un pulso por bit.

ST_CP: Pin para el latch, a “0″ cuando queramos enviar un dato y a “1″ cuando hayamos terminado.

OE: Ouput enable negado, o salida disponible negada, la cual llevaremos a masa.

DS: Datos en serie que enviaremos desde nuestro Arduino para que los reparta por las salidas.

Vcc: Alimentación +5v del chip
 

 

Nota: El registro de desplazamiento que se conecte directamente a la placa será el primero, el que conectado a su Q7’ el segundo... y los displays que se conecten a estos tendrán la misma numeración. Esto hay que tenerlo en cuenta a la hora en que hagamos el código, puesto que el primer número que se envíe irá al primero, el segundo al segundo y así sucesivamente.

 

 

 

C.-Cómo conectamos el registro de desplazamiento y el Display de 7 segmentos

 

 


 

Conectamos:

Q0-b

Q1-a

Q2-f

Q3-g

Q4-e

Q5-d

Q6-c

Q7-P
 

 

Enlazando cada pin con su segmento

 

También necesitamos conectar el display a tierra. Este, al ser de cátodo común, no será necesario conectarlo a tierra por cada segmento, solo lo contactaremos por una sola patilla, que será cualquiera de las CCM.

 

 

Para formar los números:

 

Hardware

 

1.Display de 7 segmentos de Cátodo común (2)

2. Registro de desplazamiento 74HC595 (2)

3.Resistencias 220Ω(14)

4.Arduino UNO

 

 

 

Esquema de montaje gráfico



Nota: El pin del display que sobra es el del punto, solo habrá que conectarlo si queremos que funcione el punto. En ese caso lo colocaremos en el Q7.

 

 

Esquema en Fritzing





 

Programación

 

Para controlar el registro de desplazamiento usar ShiftOut

shiftOut(pinDatos, pinReloj, ordenBits, valor)

pinDatos: el pin en el cual extraer cada bit (int)

pinReloj: el pin que hay que conmutar cada vez que a un pinDatos le ha sido enviado el valor correcto (int)

ordenBits: en qué orden desplazar los bits; si hacia el MSBFIRST (bit más significante primero) o hacia el LSBFIRST(bit menos significante primero).

valor: los datos que rotar. (byte)

 

Software para el control de un Display de 7 segmentos

 

Vídeo

                        

 

Programa

/*Este programa permite contar en un solo display desde el 0 hasta el 9
*/

int pinLatch = 10;    //Pin para el latch de los 74CH495
int pinDatos = 11;    //Pin para Datos serie del 74CH495
int pinReloj = 12;     //Pin para reloj del 74CH495
//Codificación hexadecimal de los dígitos decimales en el display de 7 segmentos
byte digitOne[10]= {
0xEE, 0x82, 0xDC, 0xD6, 0xB2, 0x76, 0x7E, 0xC2, 0xFE, 0xF2};

void setup(){
pinMode(pinLatch,OUTPUT);
pinMode(pinDatos,OUTPUT);
pinMode(pinReloj,OUTPUT);

}

void loop(){
//Para contar del 0 al 9
for(int i=0; i<10; i++){
  digitalWrite(pinLatch, LOW);
  shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[i]); // Imprimir unidades
  digitalWrite(pinLatch, HIGH);
  delay(1000);
}
delay(2000);
}

 

Software para contar del 0 al 99 con dos displays

 

Vídeo

                       

 

Programa

/*Este programa permite contar en un solo display desde el 0 hasta el 99
*/

int pinLatch = 10;     //Pin para el latch de los 74CH495
int pinDatos = 11;    //Pin para Datos serie del 74CH495
int pinReloj = 12;     //Pin para reloj del 74CH495
int i=0;                    //Número de las decenas
int j=0;                    //Número de las unidades

byte digitOne[10]= {
  // Codificación hexadecimal de los dígitos decimales en el display de 7 segmentos
  0xEE, 0x82, 0xDC, 0xD6, 0xB2, 0x76, 0x7E, 0xC2, 0xFE, 0xF6};

void setup(){
  pinMode(pinLatch,OUTPUT);
  pinMode(pinDatos,OUTPUT);
  pinMode(pinReloj,OUTPUT);
}

void loop(){
  // Para que imprima del 0 al 99
  for(i=0; i<10; i++){      //Aumneta en uno, hasta que llegue a 10, el numero de las decenas
    for(j=0; j<10; j++){    //Aumneta en uno, hasta que llegue a 10, el numero de las unidades
      digitalWrite(pinLatch, LOW);
      shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[j]);  // digitOne unidades
      shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[i]);  //digitOne decenas
      digitalWrite(pinLatch, HIGH);
      delay(1000);
    }
  }
}

 

Software para contar del 0 al 9 con decimales usando dos displays

 

Vídeo

                          

 

Programa

/*Este programa permite contar en un solo display desde el 0 hasta el 9 con decimales
*/

int pinLatch = 10;    //Pin para el latch de los 74CH495
int pinDatos = 11;    //Pin para Datos serie del 74CH495
int pinReloj = 12;    //Pin para reloj del 74CH495

byte unidades[10]= {
  // Codificación hexadecimal de los dígitos decimales en el display de 7 segmentos
  0xEE, 0x82, 0xDC, 0xD6, 0xB2, 0x76, 0x7E, 0xC2, 0xFE, 0xF2};
byte decimales[10]= {
  // Codificación hexadecimal de los dígitos decimales en el display de 7 segmentos con la coma de los decimales
  0xEF, 0x83, 0xDD, 0xD7, 0xB3, 0x77, 0x7F, 0xC3, 0xFF, 0xF3};

void setup(){
  pinMode(pinLatch,OUTPUT);
  pinMode(pinDatos,OUTPUT);
  pinMode(pinReloj,OUTPUT);

}

void loop(){
  // Para que imprima del 0 al 9
  for(int i=0; i<10; i++){
    // Para que imprima los decimales
    for(int j=0; j<10; j++){
      digitalWrite(pinLatch, LOW);
      shiftOut(pinDatos, pinReloj, LSBFIRST, decimales[i]); //Imprimir las decimas primero ya que estamos usando LSBFIRST
      shiftOut(pinDatos, pinReloj, LSBFIRST, unidades[j]); //Imprimir las unidades
      digitalWrite(pinLatch, HIGH);
      delay(100); //Esperar 0.1 segundo que repetido 10 veces son 1 segundo
    }
  }
}

 

Licencia de Creative Commons
Tierra Arduino by Alberto Pumar Jiménez is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.