TWITTER:@TierraArduino
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.
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:
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
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
}
}
}
Tierra Arduino by Alberto Pumar Jiménez is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.