Está en la página 1de 7

Display 7 Segmento

Manejo de display 7 segmentos y antirebote

Los Display 7 Segmentos son dispositivos electrónicos que contienen en su interior


un arreglo de LEDs (8 leds en total) solo que por lo general solo se usan 7 leds que
conforman los segmentos de un número arábigo, y el octavo led solo es usado
para mostrar un punto decimal.

Existen 2 tipos de Display 7 Segmentos: Cátodo Común y Ánodo Común.


En el Display de 7 Segmentos de Cátodo Común, el pin común se conecta
a tierra (GND) y el resto de patas van a las salidas del ARDUINO a través de
resistencias limitadoras de corriente (220 ohms), donde para encender cada
segmento necesitamos mandar una señal alta o de 5
volts, digitalWrite(pin,HIGH).

En el Display de 7 Segmentos de Ánodo Común, el pin común se conecta a 5V


(Vcc) y el resto de patas van a las salidas del ARDUINO a través de resistencias
limitadoras de corriente (220 ohms), donde para encender cada segmento
necesitamos mandar una señal baja o de 0 volts, digitalWrite(pin,LOW).

A continuación se muestra el conexionado de un Display 7 Segementos de Cátodo


Común, pero el conexionado es igual para el Display 7 Segementos de Ánodo
Común, con la diferencia que el común va a positivo y no a GND.
Números en Display 7 Segmentos

Para mostrar los números en un display de 7 segmentos, debemos proporcionar


con el ARDUINO la secuencia de la tabla de verdad de los displays de Cátodo o
Ánodo común:

La tabla muestra la secuencia que debe ser ingresada en los displays en cada
segmento desde el a hasta el g en binario y también muestra la cantidad en
Hexadecimal, que para nuestra facilidad, utilizaremos el numero Hexadecimal para
formar esta tabla dentro del Arduino IDE.

A continuación te dejo las dos tablas para que las copies en Arduino IDE dentro de
un Arreglo (vector)

//Display 7 Segmentos Catodo Común

int display7c[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};

//Display 7 Segmentos Anodo Común


int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};

para facilitar nuestra vida, usaremos una función de ARDUINO llamada:

bitRead(x, n)

Parametros

x: el numero que se desea leer


n: cual bit desea devolver (el menos significante se encuntra a la
derecha)

Ejemplo

El numero 11 en binario se escribe como (0b1011), si usamos bitRead podremos


obtener cualquiera de los 4 bits:

bitRead(11,0); //obtiene el bit 0 (1)

bitRead(11,1); //obtiene el bit 1 (1)

bitRead(11,2); //obtiene el bit 2 (0)

bitRead(11,3); //obtiene el bit 3 (1)


Función PUERTO

La función PUERTO es creada por MI y es própia del Canal CONTROL AUTOMÁTICO


EDUCACIÓN, la función lo que hace es tomar un numero entero y lo divide en bits
mandando cada bit a las salidas digitales comenzando desde un PIN cualquiera hasta
un PIN final cualquiera (El orden de los pines se hará de forma ascendente)

función puerto(bits, Pin Inicial, Pin Final);

• bits: numero entero que se desea sacar por las salidas digitales
• Pin Inicial: El primer pin del arreglo de bits en Arduino que es una salida digital
• Pin Final: El ultimo pin del arreglo de bits en Arduino que es una salida digital

Ejemplo

Vamos a suponer que los PINES 2 al 8 del arduino son salidas digitales y que yo
quiero sacar el número 63 por el puerto digital. El 63 se escribe en binario (0b0011
1111) o en hexadecimal como (0x3F)
llamamos la función puerto para eso:

púerto(0x3F,2,8);

le dijimos saque por el puerto el número 63 comenzando en el PIN 2 hasta el PIN


8.

La función puerto la declaramos antes del void SETUP, y es la siguiente:

//Fúncion qúe coloca en el púerto de salida los bits comenzando

// desde el pin ini hasta el pin fin

void púerto(int bits,int ini,int fin){

for(int i=ini;i<=fin;i++)

digitalWrite(i,bitRead(bits,i-ini));

AntiRebote
En los elementos mecánicos como pulsadores, switches, relés, etc. Sucede un
fenómeno conocido como el Rebote, el cual es una señal de RUIDO que ingresa en
las entradas digitales del ARDUINO cuando se cambia de estado lógico. La señal de
Rebote tiene la siguiente forma:
Vemos que cambiando de estado logico de 0 para 1, hubieron varios picos y el
arduino o microcontrolador en general, puede interpretar esos picos como si se
hubiera activado y desactivado varias veces aquella entrada digital, cuando en
realidad solo hizo un único cambio.

Para evitar el Rebote, debemos colocar en nuestros códigos un simple retardo de


150ms o 200ms siempre que queramos leer un dispositivo mecanico, de esa forma
le damos tiempo al Rebote de desaparecer y asi el ARDUINO consigue leer la señal
verdadera en sus entradas

//Display 7 Segmentos Catodo Común


int display7c[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
//Display 7 Segmentos Anodo Común
int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//Delcaración de Los Pines del Display
byte a=2;
byte b=3;
byte c=4;
byte d=5;
byte e=6;
byte f=7;
byte g=8;
byte inc=9; //Pulsador Incremento (Resistencia pulldown)
byte dec=10; //Pulsador Incremento (Resistencia pullup)
int contador=0;
//Función que coloca en el puerto de salida los bits comenzando
// desde el pin ini hasta el pin fin
void puerto(int bits,int ini,int fin){
for(int i=ini;i<=fin;i++)
{
digitalWrite(i,bitRead(bits,i-ini));
}
}
void setup() {
//Configura los 8 Pines digitales como SALIDAS
for(int i=a;i<=g;i++){
pinMode(i,OUTPUT);
}
pinMode(inc,INPUT);
pinMode(dec,INPUT_PULLUP);
}
void loop() {
//Incremento del Contador
if(digitalRead(inc)){
delay(100);
while(digitalRead(inc)); //Anti-Rebote
delay(100);
contador++;
}
//Decremento del Contador
if(!digitalRead(dec)){
delay(100);
while(!digitalRead(dec)); //Anti-Rebote
delay(100);
contador--;
}
//Si pasa de 9 en el incremento
if(contador>9){
contador=0;
}
//Si pasa de 0 en el decremento
if(contador<0){
contador=9;
}
//Muestra los numeros en el Display
puerto(display7c[contador],a,g);
}

También podría gustarte