Sunteți pe pagina 1din 7

Display de 7 segmentos.

Los displays de 7 segmentos (Figura 4.3) son componentes opto-electrnicos usados para la presentacin de informacin al usuario en formato numrico.

Figura 4.3 Pantalla de 7 segmentos Fuente: Peter Halasz - http://commons.wikimedia.org/wiki/File:Seven_segment_02_Pengo.jpg Estos displays han sido diseados con el fin de generar los diez nmeros romanos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, y los nmeros 0, 6, 7 y 9 se pueden representar en ms de un manera. Adems de los dgitos, es posible representar slo unas pocas letras de forma inequvocas: las letras maysculas A, C, E, F, H, J, L, P, S, T, Z y las minsculas a, b, c, d, h, i, n, o, r, t, u. Los displays pueden ser de ctodo comn o nodo comn, lo que indica de qu forma estn conectados los LED. Sin embargo, esta diferencia no es crtica para este estudio. En la Figura 4.4 podemos ver el diagrama de cableado y el diseo de cada LED en el componente.

Figura 4.4 Diagrama de pantalla segmento de cableado 7 con nodo comn http://www.hobbyprojects.com/the_diode/seven_segment_display.html En la figura 4.4 se puede observar que para que aparezca el nmero en el display es necesario encender los LED a, b, g y d. Si estuviramos usando un display de ctodo comn, necesitamos colocar en un nivel alto para encender los LED, es decir, el LED se enciende con el valor de 1 (uno) y se apaga con un valor de 0 (Cero). Esto tambin se conoce como lgica positiva. La Tabla 4.3 muestra los valores en binario y hexadecimal para cada alfanumrica1.

Tenga en cuenta que los valores hexadecimales slo se muestran cuando no hay una conexin entre los pines de un puerto de un microcontrolador y los pines del display. En algunos sistemas, el display puede

Tabla 4.3 Conversin de binario a hexadecimal para displays de 7 segmentos

Dentro las letras disponibles se presentan slo los caracteres A, b C, d, E y F. Estos fueron escogidos porque son ms utilizados para mostrar los valores hexadecimales en los display. En esta prctica vamos a utilizar el orden directo presentado en la Tabla 4.3. El uso de uno u otro depende de la conexin realizada en la placa. La Figura 4.5 muestra el diagrama de cableado disponible.

Figura 4.5 Conexin de 4 displays de 7 segmentos multiplexados Para simplificar el uso de este tipo de pantalla es comn crear una tabla cuyas posiciones representan el valor de conversin para el display. Como puede verse en el cdigo mostrado ms adelante.

ser controlada por dos diferentes puertos, o tener cualquier cambio en la secuencia de conexin. Para tales casos, es necesario referirse a la Tabla 4.3.

void main(void) interrupt 0 { // vector que almacena la conversin de dgitos para un display 7 segmentos const char conv[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned int var, time; TRISD = 0x00; TRISA = 0x00; PORTA = 0xFF; for(var = 0; var < 16; var++) { // Coloca los caracteres en la secuencia de salida PORTD = conv[var]; // sentencia para generar un retardo for(time = 0; time < 65000; time++); } }

Pantallas de multiplexacin
Cada display de 7 segmentos requiere de 7 terminales de control, o de 8, si tambin se utiliza la coma decimal. Por ejemplo, para un reloj digital se requerira de 4 display, con dos dgitos para la hora y dos dgitos para los minutos, y se necesitara 32 terminales de salida, que puede ser un costo demasiado alto para el proyecto. Una tcnica que se puede utilizar es la multiplexacin de los display. Esta tcnica tiene en cuenta un efecto biolgico llama percepcin de la retina. El ojo humano es incapaz de percibir cambios rpidos de ms de 1/30 seg. Otro factor importante es que las imgenes ms claras quedan grabadas ms tiempo en la retina debido al tiempo que se necesita para sensibilizar y desensibilizar a las clulas (bastiones). As, si activamos/desactivamos rpidamente un display, la imagen permanecer en la retina. Si conectamos cada display de uno en uno, de forma secuencial, con suficiente rapidez, tendremos la impresin de que todos los display estn prendidos. La frecuencia de "conmutacin" debe ser ms rpido que 30 Hz. La figura 4.5 muestra el circuito con 4 display multiplexados. Nos damos cuenta de que los terminales iguales estn conectados entre s. Tambin vemos que los terminales de ctodo comn estn cada uno conectado a una salida diferente. Con esta arquitectura, hemos reducido el nmero de terminales necesarios de 32 a 12, una economa de 20 terminales. Pero esta economa tiene un costo, el sistema se vuelve ms complejo, porque no podemos conectar dos display simultneamente. El control de cualquier display se realiza a travs del transistor que permite la unin de ctodo comn a tierra, o nodo comn a VCC (depende del tipo de dispositivo). Para el correcto funcionamiento no es suficiente ahora encender los LED para formar el nmero correcto, tendremos que seguir un algoritmo ms complejo: 1. 2. 3. 4. 4. 5. 6. Colocar en el bus de datos el valor que se desea mostrar en el display X. Conectar el display X a travs de su lnea de control de activacin. Esperar un tiempo adecuado para evitar el parpadeo2. Desconectar el display X. apagar la pantalla. Elegir el siguiente display (X+1) Volver al paso 1

Si la tasa de refresco del display es demasiado bajo, se presentan una variacin en la intensidad, como si parpadeara. Este efecto se denomina parpadeo (flicker).

Creacin de una funcin de Biblioteca


El programa muestra un cdigo de ejemplo para crear una funcin de biblioteca para los displays de 7 segmentos. El programa 4.2 muestra la cabecera de la biblioteca. Luego, el programa 4.3 presenta una demostracin de la utilizacin de la biblioteca. Programa 4.1: disp7seg.c 1 #include "disp7seg.h" 2 // vector para almacenar la conversin del display 3 static const char valor[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F, 0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; 4 // indica el display actual 5 static char display; 6 // valores de los displays 7 static char v0, v1, v2, v3; 8 void CambiaDigito(char val, char pos) 9 { 10 if(pos == 0) v0 = val; 11 if(pos == 1) v1 = val; 12 if(pos == 2) v2 = val; 13 if(pos == 3) v3 = val; 14 } 15 16 void InicializaDisplays(void) 17{ 18 // configuracin de los pines de control 19 BitClr(TRISA,2); 20 BitClr(TRISA,5); 21 BitClr(TRISE,0); 22 BitClr(TRISE,2); 23 // Solo AN0 es analogica 24 ADCON1 = 0x0E; 25 // Puerto de datos 26 TRISD = 0x00; 27 } 28 29 void AtualizaDisplay(void) 30 { 31 // desactiva todos los displays 32 PORTA = 0x00; 33 PORTE = 0x00; 34 // Apaga todos los leds 35 PORTD = 0x00; 36 // Activa solo un display a la vez 37 switch(display ) 38 { 39 case 0: 40 PORTD = valor [v0]; 41 BitSet(PORTA,5); 42 display = 1; 43 break; 44 case 1: 45 PORTD = valor[v1]; 46 BitSet(PORTA,2); 47 display = 2;

48 break; 49 case 2: 50 PORTD = valor[v2]; 51 BitSet(PORTE,0); 52 display = 3; 64 break; 53 case 3: 54 PORTD = valor[v3]; 55 BitSet(PORTE,2); 56 display = 0; 57 break; 58 default: 59 display = 0; 60 break ; 61 } 62 } Programa 4.2: disp7seg.h 1 #ifndef DISP7SEG_H 2 #define DISP7SEG_H 3 void CambiaDigito(char val, char pos); 4 void AtualizaDisplay(void); 5 void InicializaDisplays(void); 6 #endif Programa 4.3: Utilizando la biblioteca disp7seg 1 #include "basico.h" 2 #include "config.h" 3 #include "disp7seg.h" 5 // inicio del programa 6 void main(void) interrupt 0 7 { 8 unsigned int tempo; 9 InicializaDisplays( ); 10 CambiaDigito(0,0); 11 CambiaDigito(1,1); 12 CambiaDigito(2,2); 13 CambiaDigito(3,3); 14 for(;;) 15 { 16 AtualizaDisplay( ); 17 // retardo de tiempo para evitar el efecto de parpadeo 18 for (tempo=0;tempo<1000;tempo++); 19 } 20 }

Lectura de teclas
Para hacer la lectura de una tecla es necesario crear un circuito que lleva a cabo la lectura de una seal elctrica para el valor de cero y el otro para el valor uno. Los niveles de voltaje asociados dependen fuertemente de los circuitos involucrados. Los niveles ms comunes son compatibles con TTL, donde el cero lgico est representado por 0 V (cero voltios) y el uno lgico est representado por 5 V (cinco voltios). Una forma de lograr esta operacin es utilizar un pulsador conectado a VCC y una resistencia pull-down o un pulsador conectado a tierra (GND) y una resistencia pull-up. En la figura 4.6 vemos que la tensin de salida es igual a VCC cuando el pulsador est OFF ya que no hay corriente que fluye en el circuito por lo que la cada de voltaje a travs de R1 es cero. Cundo se pulsa el pulsador, una corriente fluye de VCC a tierra a travs de R1. Como no existe ninguna otra resistencia en el circuito toda la tensin del circuito est por encima de R1 y la tensin de salida pasa a convertirse en cero. A pesar de la aparentemente simple operacin, este tipo de circuiFigura 4-6. Circuito to presenta un problema oscilacin de la seal cuando se pulsa el de lectura del interruptor botn. Esta oscilacin se conoce como rebote (Figura 4.7).

Figura 4.7: La seal de oscilacin al cambiar de estado un pulsador. http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Andrew Greensted Estas oscilaciones indebidas pueden generar activaciones accidentales, causando un mal funcionamiento del programa. Para evitar esto, podemos utilizar tcnicas de eliminacin de rebote, por hardware o por software. Una opcin de antirrebote se puede ver en la Figura 4.8. En este circuito, el condensador acta como un amortiguador de seal. Un circuito con una resistencia y un condensador generan un retardo de tiempo para la seFigura 4.8 Circuito antirrebote

al. Este es el tiempo requerido para cargar el condensador. As, los cambios rpidos en la seal, debido a la oscilacin mecnica del pulsador, son filtrados y no ocurre el problema de la conmutacin indebida como puede verse en la Figura 4.9.

Figura 4.9 Uso de un filtro RC para usarlo como antirrebote de una seal. http://www.labbookpages.co.uk/electronics/debounce.html A. Greensted (modicado) Tenga en cuenta que el nivel de la seal filtrada no llega a cero en ningn momento debido a que la constante de tiempo del filtro RC es mayor que el perodo de supresin de rebotes. Antirrebote por software El antirrebote por software se utiliza generalmente en situaciones en las que se desea aumentar la robustez de una entrada que ya tiene una supresin de rebotes por hardware o reducir el costo de la placa utilizando slo una solucin por software. La gran desventaja de este tipo de sistema es la de introducir un retardo en la deteccin de informacin. Para realizar un rebote software necesitan tener un sentido del tiempo que la tecla necesidad de estabilizar. Figura 4.7 tiene que en esta ocasin, para una clave dada es aproximadamente 150 (? s). Un ciclo de reloj del sistema en cuestin (PIC18F4550 con el cristal es 0.56 (? S). Antes de utilizar el valor que estamos leyendo en la puerta en cuestin debe esperar 300 ciclos de reloj despus de cualquier cambio para asegurarse de que la seal se ha estabilizado, o es decir, la fase de rebotar sobre. Tenga en cuenta que, en el cdigo, el contador se inicia con el valor 22. A travs del anlisis del ensamblador sabemos que cada seal de ciclo de conferencias tiene 14 instrucciones. Por lo tanto es necesario que la seal se mantenga en el mismo valor durante 308 ciclos para recibir la variable de valAtual el valor del puerto B. Estos valores se pueden determinar empricamente ensayando osciloscopios.

S-ar putea să vă placă și