You are on page 1of 9

ELECTRONICA INDUSTRIAL

Grado en Ingeniería en Tecnologías Industriales

Práctica 4

Control de displays 7 segmentos y temporizadores

Guión de prácticas realizado por Carlos Ruiz
Profesores: Patxi Arregui, Carlos Ruiz, Idoya Castells
Curso 2012-2013

Índice
1.- OBJETIVO ................................................................................................................................. 2
2.- DESARROLLO .......................................................................................................................... 2
3.- PLACA DE DISPLAYS............................................................................................................... 3
3.1.- TEORÍA............................................................................................................................... 3
4.- TEMPORIZADORES/CONTADORES ....................................................................................... 5
4.1.- TEORÍA............................................................................................................................... 5
4.1.1.- Registro TMR0 ................................................................................................................. 5
4.1.2.- Registro de Opciones (OPTION_REG)............................................................................. 5
4.1.3.- Interrupciones: el registro INTCON................................................................................... 6
5.- EJEMPLOS ............................................................................................................................... 8
6.- EJERCICIOS ............................................................................................................................. 9
6.1.- EJERCICIO 1 ...................................................................................................................... 9
6.2.- EJERCICIO 2 ...................................................................................................................... 9

En los ejemplos que se presentarán a continuación y en los posteriores ejercicios de esta práctica se utilizará el PORTD para activar los segmentos de los displays y el PORTA (RA0-RA3) se podrá utilizar para seleccionar los displays que sean necesarios. Además. Displays 7 segmentos y temporizadores 1. RD6 RD5 PortD RD4 RD3 RD2 RD1 BUFFER INVERSOR 74LS540 220Ω Ω RD7 h g f e d c b a RD0 h Display 4 TDSR 5160 PIC16F877A a f b PortA RA2 a Display 1 TDSR 5160 TDSR 5160 c d RA3 Display 2 TDSR 5160 g e 47Ω Ω Display 3 h CC CC CC CC T4 BC548 T3 BC548 T2 BC548 BC548 T1 RA1 RA0 RA4 PortB RB0 P1 P2 Figura 2.. también se contará con los dos pulsadores que estarán conectados al pin 4 del puerto A y al pin 0 del puerto B respectivamente según se muestra en el esquema de la figura 2.. se creará el programa a partir del fichero fuente en lenguaje ensamblador que se facilita a continuación.DESARROLLO Siguiendo las instrucciones del apartado de teoría se configurará la placa para poder conectarla a los displays de 7 segmentos (con punto decimal) cuyo funcionamiento se explica en la parte de teoría.Ejemplo de conexión del microcontrolador PIC16F877A con los displays..1.OBJETIVO Trabajar con los puertos de entrada y salida del PIC para controlar/iluminar varios displays de 7 segmentos mediante la ayuda de rutinas de retardo y del temporizador interno TMR0. A partir de ahí. 2 . En esta práctica se observará el funcionamiento del PIC para el control de dispositivos externos mediante la utilización de sus puertos de E/S y la generación de interrupciones utilizando el temporizador. 2.1.ELECTRONICA INDUSTRIAL Práctica 4. La placa de entrenamiento PICDEM2 PLUS y la placa de displays aportarán los elementos y la electrónica necesaria sobre la que se probarán los programas.

1.PLACA DE DISPLAYS 3.1: Placa de displays de 7 segmentos El esquema eléctrico de los elementos de la tarjeta que se utilizarán en esta práctica se representa en la figura 2.ELECTRONICA INDUSTRIAL Práctica 4.. Así pues. Mediante la utilización de cables deberemos realizar las conexiones entre los puertos del microcontrolador y los terminales T1-T4 (conector 4) que activarán cada uno de los displays.2.1.1.. Por lo tanto habrá que tener en cuenta esta característica y a la hora de enviar el dato al PORTD habrá que mandar el dato en código 7SEG previamente complementado como se muestra en la tabla 3. el valor que reciba el display será el inverso del que mandemos por el PORTD.TEORÍA Para realizar esta práctica vamos a utilizar la placa de displays que aparece en la figura 3. La conexión de los puertos de salida del microcontrolador PIC (PORTD) con los displays de 7 segmentos se realiza a través del buffer inversor 74LS540 y de una resistencia según se muestra en la Figura 3. 3 . Los terminales Vcc (conector 2) y GnD (conector 3) se pueden utilizar como entradas ‘1’ y ‘0’ respectivamente en caso de ser necesario. Figura 3.1. Displays 7 segmentos y temporizadores 3.

pondremos a "1" la salida conectada a T1 (por ejemplo RA0). Displays 7 segmentos y temporizadores Figura 3. pondremos a “1” la salida conectada a T2 (por ejemplo RA1). cuya base se une. Hay que tener en cuenta que la información enviada por el PORTD llegará a todos los displays que estén activos (con su terminal Tx a “1”).ELECTRONICA INDUSTRIAL Práctica 4.1: Representación de los dígitos 0-F en código 7 segmentos. Así pues.2: Conexión de los puertos de salida con los displays. El cátodo común de cada display se conecta al colector de un TRT NPN. HEX h g f e d c b a 7SEG 7SEG 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 3F 06 5B 4F 66 6D 7D 07 7F 67 77 7C 39 5E 79 71 C0 F9 A4 B0 99 92 82 F8 80 98 88 83 C6 A1 86 8E Tabla 3. cuando queramos activar el display 1. Así pues. deberemos cablear una salida del microcontrolador para activar cada uno de los displays. a través de una resistencia a un terminal del conector 2. para activar el display 2. binario y hexadecimal. 4 .

y al pasar por 00h..ELECTRONICA INDUSTRIAL Práctica 4. recibiendo el nombre de temporizador (timer) el elemento encargado de realizar esta función.3).TEMPORIZADORES/CONTADORES 4. TMR1 y TMR2. al llegar al número de impulsos deseado. TMR0 y OPTION_REG y cuyas funciones más representativas son: - TMR0 es un Contador/Temporizador de 8 bits Legible y escribible Reloj interno o externo Selección del flanco en el reloj externo Predivisor de la frecuencia de reloj programable Generación de interrupción opcional de desbordamiento 4.2. siempre y cuando estén activadas (ver registro INTCON de teoría o apartado 4.Registro de Opciones (OPTION_REG) 5 .1... Los PIC16F87x disponen de un potente conjunto de temporizadores para manejar eficientemente todas las operaciones que involucran cuentas de tiempo.1. También suele ser frecuente contar los impulsos que se producen en el exterior del sistema.TEORÍA Una de las labores más habituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo. será: TMR0 = 256-{Temporización/(4·Tosc)·Rango del divisor)} Nota: En nuestro caso la frecuencia del oscilador es Fosc = 1/Tosc = 4 MHz 4. Dichos temporizadores son tres y se denominan técnicamente TMR0.1. De esta manera.Registro TMR0 El registro TMR0 se comporta como un registro de propósito general (SFR) y puede ser leído y escrito en cualquier momento al estar conectado al bus de datos. se activa el señalizador T01F que generará una interrupción.1. denominándose contador el elemento destinado a este fin. cada uno con sus características (ver apartado de teoría).. robarían mucho tiempo al procesador en detrimento de actividades más importantes. Por este motivo se diseñan recursos específicos que se ocupan de estas funciones. El registro TMR0 almacenará el valor de los impulsos que se quiere temporizar en complemento a 2. El TMR0 es un temporizador que se controla mediante los registros de propósito general (SFR). se desborda. Está ubicado en la dirección 1 de los bancos 0 y 2 de la memoria de datos. Para calcular los tiempos a controlar con TMR0 se utiliza la siguiente fórmula: Temporización = 4·Tosc·(256-Valor cargado en TMR0)·(Rango del divisor) o expresado de otra forma. el valor a cargar en TMR0.1. Si las labores del temporizador o contador las asignamos al programa principal. Displays 7 segmentos y temporizadores 4.

El registro INTCON es un registro legible y escribible que. para facilitar su acceso.Interrupciones: el registro INTCON El comportamiento del microcontrolador ante una interrupción es similar al de la instrucción CALL de la llamada a subrutina. y los registros señalizadores de interrupción. Todos los PIC de clase media usan al menos un registro de funciones especiales para controlar las interrupciones: el registro INTCON. Algunos procesadores salvan estos registros en la Pila. Displays 7 segmentos y temporizadores El registro de opciones OPTION_REG se comporta como un registro de propósito general (SFR) y puede ser leído y escrito en cualquier momento al estar conectado al bus de datos. PIR1 y PIR2 (ver teoría). en donde comienza la Rutina de Atención a la Interrupción (RAI). PIE1 y PIE2.. Concretamente. LA RAI suele comenzar guardando en la memoria de datos algunos registros específicos del procesador.3. En general. se recuperan los valores guardados y se restaura completamente el estado del procesador (STATUS). pero los PIC no disponen de instrucciones para meter (push) y sacar (pop) información de la Pila. En ambos casos se detiene la ejecución del programa en curso. utilizando para este fin registros de propósito general de la memoria de datos. el Vector de Interrupción se halla situado en la dirección 0004h. La misión principal de este registro. 10Bh y 18Bh.1: Descripción de los bits del registro OPTION_REG 4. y en el caso de una interrupción. Antes del retorno al programa principal. Además los PIC16F87x disponen de más causas que provocan interrupción y que se controlan con los registros de permiso o prohibición de interrupción. en dicho Vector se suele colocar una instrucción de salto incondicional (GOTO) que traslada el flujo de control a la zona de la memoria de código destinada a contener la rutina de atención a la interrupción. ocupando las direcciones 0Bh. En el PIC16F877A. Está ubicado en la dirección 1 de los bancos 1 y 3 de la memoria de datos. que en el caso de CALL viene acompañando a la propia instrucción. aquellos que la RAI va a emplear y va a alterar su contenido. es una dirección “reservada” de la memoria de código llamada Vector de Interrupción. entre otras.1 (ver teoría). es gobernar el TMR0 y el divisor de frecuencia y la función de cada uno de sus bits se comenta en la Tabla 4. 6 .1. 8Bh. se halla duplicado en los cuatro bancos. se salva la dirección actual del PC en la Pila y se carga el PC con una dirección.ELECTRONICA INDUSTRIAL Práctica 4. Tabla 4.

2. Tabla 4. Displays 7 segmentos y temporizadores respectivamente.2: Descripción de los bits del registro INTCON 7 .ELECTRONICA INDUSTRIAL Práctica 4. Tiene la misión de controlar las interrupciones provocadas por el TMR0 entre otras y su configuración se detalla en la Tabla 4.

x<2. void main(void){ //Puerto D como salida TRISD=0x00.. GIE=0. PORTA=0x0F.h> //Incluimos libreria del micro a usar __CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_XT & LVP_OFF). //Saca el valor que correponde al puerto D __delay_ms(100). si se encienden y apagan todos los segmentos. //DesACTIVA INTERURPCIONES POR PERIFERICOS while(1){ for(x=0. PROGRAMA FUENTE: Comprobación de displays 7 segmentos #include <htc. //Variable para el ciclo FOR unsigned char x. Para ello deberemos cablear las conexiones que se indican más abajo (ver Figura 3.x++){ //Ciclo for PORTD=mostrar[x]. //INTERRUPCIONES GLOBALES DesACTIVADAS PEIE=0. //LLama a la funcion de retardo de 1seg } } } 8 . • • • • El terminal RA0 (PORTA 0) con el terminal T1 del conector 4 (TRT) (display 1) El terminal RA1 (PORTA 1) con el terminal T2 del conector 4 (TRT) (display 2) El terminal RA2 (PORTA 2) con el terminal T3 del conector 4 (TRT) (display 3) El terminal RA3 (PORTA 3) con el terminal T4 del conector 4 (TRT) (display 4) A continuación se presenta el código y los comentarios del programa que enciende y apaga los displays 7 segmentos cada 100ms.1).0xff}.EJEMPLOS En este ejemplo comprobaremos el correcto funcionamiento de los displays. Displays 7 segmentos y temporizadores 5. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ //WRT_OFF = Codigo no Potegido //WDTE_OFF = Watch Dog Timer Desactivado //PWRTE_OFF = Power Activado //FOSC_XT = Osiclador cristal //LVP_OFF = Low Voltage Porgramming Desactivado /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define _XTAL_FREQ 4000000 //Oscilador Interno de 4MHZ //Arreglo de 1 byte que contiene los códigos 7 SEG // para apagar y encender los displays unsigned char mostrar[]={0x00.ELECTRONICA INDUSTRIAL Práctica 4. //Puerto RA0-RA3 como salida y RA0-RA3 activado TRISA=0xF0. es decir.

EJERCICIOS 6.ELECTRONICA INDUSTRIAL Práctica 4. c) Los ficheros de código deberán incluir los comentarios correspondientes 9 . IMPORTANTE a) Mostrar al tutor del laboratorio el funcionamiento de los ejercicios. que indique el estado del relos (parado/funcionando). Habrá que prestar especial atención en activar únicamente un display cada vez dado que el dígito aparecerá representado en todos los displays que se encuentren activos. Es decir.. b) Modificar el programa anterior de manera que permita ajustar el predivisor del TMR0 (PS2PS1-PS0) mediante las entradas RA3=PS2.. de forma que cuando se accione el pulsador conectado a RB0 se detenga el reloj hasta que se produzca una nueva pulsación. nos valdría con iluminar cada uno de ellos una vez cada 20 mseg. RA2=PS1. no es necesario presentar la información luminosa de los displays de forma permanente. Basta con ir iluminándolos (refrescándolos) uno a uno con una frecuencia suficiente (50Hz). Displays 7 segmentos y temporizadores 6.1. (Ver teoría “Temporizador TMR0”). a) El reloj deberá contar minutos y segundos hasta un máximo de 59:59 b) Implementar a partir del programa del apartado anterior la función de STOP.. b) Entregar con la práctica la explicación del ejercicio y los archivos de código. RA1=PS0. Así. Cuando llegue a ‘F’ volverá a comenzar desde ‘0’. Nota: Se recomienda utilizar una variable de “ESTADO”. a) Realizar el ejercicio utilizando las interrupciones generadas por el temporizador TMR0 para calcular el retardo. 6.EJERCICIO 2 Debido a la persistencia visual de la retina. para evitar la sensación de parpadeo. Partiendo del programa realizado en el ejercicio anterior se deben realizar las modificaciones oportunas para mostrar en los 4 displays de 7 segmentos un reloj que muestre minutos y segundos en el formato indicado en la figura inferior (el segundo display deberá activar el punto): . se podrá utilizar una rutina de retardo para realizar el refresco de los displays o un temporizador que genere una interrupción cada 5 ms para cambiar el display activo.2.EJERCICIO 1 A partir del programa del ejemplo 1 realice un programa que muestre por el Display 1 los números hexadecimales desde el ‘0’ hasta ‘F’ cambiando de dígito cada segundo.