0% encontró este documento útil (0 votos)
53 vistas5 páginas

Práctica 4

Este documento describe una práctica de laboratorio para programar un microcontrolador PIC18F45K50 para manejar un temporizador y exhibidor de 7 segmentos. Se utiliza el temporizador interno TMR0 del PIC para generar interrupciones periódicas que incrementan un contador visualizado en el exhibidor. El código programa el TMR0, configura las interrupciones y los puertos, y usa una tabla de conversión para mostrar el contador en el exhibidor. El documento también incluye ejercicios para modificar el código y usar el temporizador TMR1 en

Cargado por

Julio A. Padilla
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Descargar como pdf o txt
0% encontró este documento útil (0 votos)
53 vistas5 páginas

Práctica 4

Este documento describe una práctica de laboratorio para programar un microcontrolador PIC18F45K50 para manejar un temporizador y exhibidor de 7 segmentos. Se utiliza el temporizador interno TMR0 del PIC para generar interrupciones periódicas que incrementan un contador visualizado en el exhibidor. El código programa el TMR0, configura las interrupciones y los puertos, y usa una tabla de conversión para mostrar el contador en el exhibidor. El documento también incluye ejercicios para modificar el código y usar el temporizador TMR1 en

Cargado por

Julio A. Padilla
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 5

Laboratorio de Microprocesadores y Microcontroladores D.I.C.I.

UNIVERSIDAD DE GUANAJUATO
D. I. C. I. S.

Laboratorio de Microprocesadores y
Microcontroladores
Práctica de Laboratorio No. 4:

Manejo de temporizador y exhibidor de 7 segmentos.

Gustavo Cerda Villafaña, Sergio Eduardo Ledesma Orozco


Laboratorio de Microprocesadores y Microcontroladores D.I.C.I.S

Práctica de Laboratorio No. 4

MANEJO DE TEMPORIZADOR Y EXHIBIDOR DE 7 SEGMENTOS.

Objetivo:
Programar el microcontrolador para que utilice el temporizador TMR0 y una tabla de conversión
para la operación del exhibidor de 7 segmentos.

Componentes:
1 Microcontrolador PIC 18f45K50
1 Exhibidor 7 segmentos

Equipo:
1 Fuente de +5V
1 Punta lógica
1 Multímetro
1 Plantilla
1 Programa MPLAB X IDE
1 Laptop
1 Progamador para PIC 18F45K50
1 Hoja de datos del PIC18F45K50

4.1 Introducción
En esta práctica se programará el PIC para que genere un contador que será desplegado en un exhibidor de 7
segmentos. El contador se implementará utilizando el temporizador TIMER0 que tiene la opción de utilizar
un divisor de frecuencia con razones de 1:2 a 1:256. Además, puede trabajar como temporizador/contador de
8 o 16 bits.

El módulo TIMER0 es un temporizador/contador con las siguientes características:


 Es un contador/temporizador de 8 o 16 bits
 Permite lectura/escritura
 Puede utilizar un divisor de frecuencia programable por software de 8 bits
 Se puede seleccionar una señal de reloj interna o una externa
 Tiene interrupción en sobre flujo de FFh (FFFFh) a 00h (0000h).
 Tiene la opción de selección de disparo de señal externa

El temporizador se programa mediante el registro T0CON. Todos los bits de este registro están en ‘1’ por
default.
Bit 7 habilita el TIMER0.
Bit 6 configura el TIMER0 como un temporizador/contador de 8 o 16-bit.
Bit 5 selecciona la fuente de reloj: pin T0CKI (RA4) o la señal interna del ciclo de instrucción.
Bit 4 selecciona el incremento por disparo positivo o negativo en el pin T0CKI.
Bit 3 asigna el divisor (prescaler) al TIMER0
Bits 2-0 Seleccionan la razón del divisor (prescaler).

Si se trabaja con una frecuencia de reloj de 4 MHz, el temporizador trabaja de 0000h a FFFFh y utiliza el
divisor con una razón 1:16, generará una interrupción cada 1.048 S. El temporizador generará una
interrupción al desbordarse (al pasar de FFFFh a 0000h) y en la rutina de interrupción se incrementará el
registro auxiliar. La interrupción se programa al cargar el registro INTCON con el valor A0h.

Gustavo Cerda Villafaña, Sergio Eduardo Ledesma Orozco


Laboratorio de Microprocesadores y Microcontroladores D.I.C.I.S

La interrupción del temporizador TMR0 no despierta al procesador del modo “Sleep” ya que el temporizador
se apaga en este modo.
Para manejar el exhibidor de 7 segmentos se tiene que transformar el número en binario del contador en el
valor de salida que desplegará el exhibidor en decimal. Esto se refleja en la siguiente tabla que representa los
valores para un exhibidor de cátodo común:

Valor Valor RB6 RB5 RB4 RB3 RB2 RB1 RB0 Hexadecimal
Decimal Binario A B C D E F G output
0 0000 1 1 1 1 1 1 0 7E
1 0001 0 1 1 0 0 0 0 30
2 0010 1 1 0 1 1 0 1 6D
3 0011 1 1 1 1 0 0 1 79
4 0100 0 1 1 0 0 1 1 33
5 0101 1 0 1 1 0 1 1 5B
6 0110 1 0 1 1 1 1 1 5F
7 0111 1 1 1 0 0 0 0 70
8 1000 1 1 1 1 1 1 1 7F
9 1001 1 1 1 0 0 1 1 73

Los valores de esta tabla se cargarán en una variable tipo arreglo para ser llamados en función del valor del
argumento de la variable.

4.2 Desarrollo

A. Se programa el PIC con el siguiente código en xC8 (en caso de duda de cómo hacerlo consulte la Práctica
No. 1).

La primera parte es la misma que en los códigos anteriores.


; Program using TMR0 timer and a lookup table for operating
; a 7-segment display

#pragma config FOSC = INTOSCIO // Oscillator Selection (Internal oscillator)


#pragma config WDTEN = OFF // Watchdog Timer Enable bits (WDT disabled in hardware (SWDTEN
ignored))
#pragma config MCLRE = ON // Master Clear Reset Pin Enable (MCLR pin enabled; RE3 input disabled)
#pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming Port Enable (ICPORT
disabled)

#include <xc.h>
#include <pic18f45k50.h>
//#include <pic18f45k50.h>

#define _XTAL_FREQ 1000000 // Frecuencia por default

El desbordamiento del temporizador generará el salto a la función de interrupción de alta prioridad. En esta se
incrementa la variable global Value que será utilizada en la función main. Value se incrementará cada 1.048
segundos y, cuando alcance un valor mayor a 9 se regresa nuevamente a 0. Observar la última instrucción que
limpia la bandera de interrupción del temporizador.
char Value;

void __interrupt(high_priority) myHiIsr(void)


{
Value += 1;

Gustavo Cerda Villafaña, Sergio Eduardo Ledesma Orozco


Laboratorio de Microprocesadores y Microcontroladores D.I.C.I.S

if (Value > 9)
{
Value = 0;
}

INTCONbits.TMR0IF=0;
}

En la sección de configuración se definen los puertos A y D como salidas digitales. Se activa la interrupción
por desbordamiento del temporizador TMR0, se define de 16 bits, para su operación se selecciona como señal
de reloj el reloj del microcontrolador y se define una razón del divisor de 1:16.
void Configuracion(void)
{
TRISA=0;
TRISD=0;
ANSELA=0;
ANSELD=0;
LATA = 0;

INTCON=0xA0; // Habilita interrupcion por TMR0


RCONbits.IPEN = 1; // Habilita niveles de interrupción
T0CON=0x83; // Habilita TMR0 con razón 1:16
}

Finalmente, en la función main se declara la constante tipo char como un arreglo unidimensional de 10
valores. Estos valores formarán la “look-up table” que permitirá desplegar en el exhibidor de 7 segmentos los
valores en decimal del contenido de la variable Value. Entre cada llamado a la look-up table se tendrá un
retardo de 50 microsegundos.

void main(void) {

const char Dis7seg[10] = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x73};

Configuracion();

while(1)
{
PORTD = Dis7seg[Value]; // Parpadea LED RA0
__delay_ms(50);
}

return;
}

B. Ya que se haya programado el PIC, este se inserta en la plantilla de trabajo y se conectará de acuerdo con
el siguiente diagrama que es para el PIC18F4550. Tenga cuidado al manejar el PIC de no dañarlo con
electricidad estática (utilizar pinzas para su manejo). El voltaje que se utilizará es de 5V para VDD y 0V para
VSS. Si utiliza un exhibidor de 7 segmentos de ánodo común debe cambiar los valores de la tabla de
conversión (1s por 0s y 0s por 1s). Los pines del microcontrolador generan, cada uno, una corriente de 25mA.
Si los LEDs del exhibidor no soportan esta magnitud conecte una resistencia en serie en cada línea con un
valor de 220 ohm.

Gustavo Cerda Villafaña, Sergio Eduardo Ledesma Orozco


Laboratorio de Microprocesadores y Microcontroladores D.I.C.I.S

4.3 Ejercicios en el laboratorio (para incluir en el reporte de la práctica)


1. Modifique el código para utilizar el TMR0 como contador de eventos externos a través del pin 6 TOCKI
(RA4) con una razón del divisor de frecuencia 1:2, y que esté configurado como un temporizador/contador de
8 bits. Indique el valor con el que se debe cargar el registro T0CON. Como señal de activación utilice una
señal cuadrada de 0 a 5V de 500 Hz con el generador de funciones.

4.4 Ejercicios de tarea (para incluir en el reporte de la práctica)


1. Si se quiere utilizar el temporizador TIMER1 (de 16 bits) en lugar del TIMER0 utilizado en esta práctica,
escriba que registros se deben utilizar y con qué valores se deben cargar. Recuerde que el TIMER0 se
configuró en esta práctica para que genere una interrupción cada 1.048 S.

2. Investigue y reporte los registros necesarios para utilizar la memoria EEPROM, así como el significado de
EEPROM.

Gustavo Cerda Villafaña, Sergio Eduardo Ledesma Orozco

También podría gustarte