Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

P4 Micro 13 E3

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 15

Benemérita Universidad Autónoma de

Puebla

Facultad de Ciencias de la Electrónica

Licenciatura en Ingeniería Mecatrónica,


Licenciatura en Electrónica

Escobar Vázquez Eduardo R.


Jimenez Garcia Diana L.
Peláez Ramírez Angel
Ramos Xelhuantzi Arturo
Solano Corona Pamela S.

8 de Octubre de 2021

Microcontroladores
Álvarez González Ricardo

Práctica 4
“Contador 0000-9999 (Timer0)”
Objetivo 3
Desarrollo Teórico 3
Temporizador/Contador 0 3
Instrucciones de lectura de tabla 3
Desarrollo Practico 4
Programa para 4MHz 4
Diagrama 7
Programa para 31kHz 7
Diagrama 10
Evidencia de funcionamiento 11
Conclusiones 14
Bibliografía 14
● Objetivo
Usando cuatro displays de 7 segmentos, diseñar un contador de 000 hasta 9999 ascendente, el
incremento será por un tiempo aproximado de 1 s utilizando el timer 0. Usar las
instrucciones específicas de lectura de tablas. Mediante la interrupción externa INT0, cada
vez que se pulse el botón pre cargar la cuenta al valor 0810.

● Desarrollo Teórico
Temporizador/Contador 0
Puede funcionar en dos modos: reloj (temporizador) o contador. Si funciona como
temporizador (poniendo a ‘0’ el bit T0CS) el registro aumentará una unidad con cada ciclo de
instrucción. Si funciona como contador (un ‘1’ en el bit T0CS), el registro aumentará con
cada subida o bajada del pin RA4/T0CKI. Este aumento será producido con el flanco de
bajada o de subida según se programe en el bit T0SE.

El pre divisor sirve para incrementar la capacidad del timer, si no está asignado, el timer se
incrementará cada vez que reciba un flanco, ó con cada ciclo de instrucción, según se halla
programado como contador o temporizador, respectivamente. Este divisor se puede
programar con los bits T0PS (Timer0 Preescaler Select).

Instrucciones de lectura de tabla


TBLPTR (TaBL PoinTeR) es el registro de puntero a tabla. Está formado por tres registros de
funciones especiales, los cuales al unirse forman un puntero de 22 bits de ancho. Los
primeros 21 bits son los registros de 8 bits: TBLPTRL, TBLPTRH, TBLPTRU, como se
muestra en la figura 2.

Fig. 2: Registro apuntador de tabla a un byte en la memoria de programa


La memoria de programa tiene un ancho de 16 bits, mientras que la de datos tiene un ancho
de 8; para solucionarlo, el traspaso de datos se hace a través de un registro de 8 bits
TABLAT.
● Desarrollo Practico
En un principio se propuso que la frecuencia del PIC fuera de 4 MHz, pero al momento de
simularlo, en los 4 display multiplexados no funcionaba y aparecía un mensaje de que la
simulación no estaba corriendo en tiempo real. Pero el mismo programa si funcionaba en una
pantalla de 4 displays (una donde ya por default están conectados) por lo que el programa
está bien solo que no es posible simularlo con los multiplexados porque el cambio pasa muy
rápido y la simulación falla. Por este motivo se realizó un segundo programa, bajando la
frecuencia de funcionamiento del PIC a 31kHz, de esta forma pasa más lento y es posible la
simulación.

Al oprimir el botón, el cambio a mostrar es el 0810 por lo que en el programa se debe cargar
el 0809. Además en esta práctica usaremos TRISC para el control de los transistores que
multiplexan a los display, para eso usaremos las siguientes líneas de código.

movlw 0x39 ;00111001


movwf TRISC,0 ;RC1, RC2, RC6, RC7 configuradas como salidas

Programa para 4MHz


Para un conteo ascendente en el display de siete segmentos, usando el timer0, debemos
calcular el valor del timer y el pre carga, para la frecuencia de 4MHz.
Usando
t = 1s
f = 4MHz
presc = 64
Valor_del_timer = 1000*10-3s/(4 * 0.25 + *10-6 s* 64) = 15625
Valor_precarga = 65536 — 15625 = 49911 → C2F7

Este valor tenemos que cargarlo en los registros TMR0H y TMR0L, por lo que debemos usar
las siguientes instrucciones
movlw 0xc2
movwf TMR0H,0
movlw 0xf7
movwf TMR0L, 0; valor de precarga para 1s a 4MHz, prescaler 64

Ahora debemos configurar los registros necesarios para activar el timer:

T0CON

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1

TMR0ON T08BIT TOCS TOSE PSA T0PS2 T0PS1 T0PS0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

1 0 0 1 0 1 0 1

Este valor binario 1001 0101 equivale a 0x95, que debemos cargar en el registro T0CON.
Diagrama

Programa para 31kHz


Usando
t = 1s
f = 31kHz
presc = 64
1
Valor_del_timer = 1000*10-3s/(4 * + *10-3 s* 64) = 121.09
31
Valor_precarga = 256 — 121 = 135→87

Este valor tenemos que cargarlo en los registros TMR0H y TMR0L, por lo que debemos usar
las siguientes instrucciones
movlw 0x87
movwf TMR0L, 0; valor de precarga para 1s a 31kHz, prescaler 64

Ahora debemos configurar los registros necesarios para activar el timer0 en 8 bits:
T0CON

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1

TMR0ON T08BIT TOCS TOSE PSA T0PS2 T0PS1 T0PS0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

1 1 0 1 0 1 0 1
Este valor binario 1101 0101 equivale a 0xD5, que debemos cargar en el registro T0CON.
Diagrama
Evidencia de funcionamiento
Al correr el código en MPLAB obtenemos lo siguiente:
➢ Puerto D Configurado como salida

➢ Cuando el timer se enciende, 16 bits predivisor x64

➢ Se activan las interrupciones Tmr0,INT0,GIEH y GIEL


➢ Precarga para un segundo

➢ Se enciende el display de unidades


➢ Inicia a contar, ejemplo número 249 con display de centenas encendido

El funcionamiento del circuito simulado en Proteus se puede ver en el siguiente enlace:


https://youtu.be/u1zSGg0F-rs

● Conclusiones
Al inicio de la práctica se presentaron dudas sobre si nuestro código estaba bien elaborado o
no debido a que a la hora de correr la simulación en Proteus nos aparecía un error y no se
apreciaba el funcionamiento del contador, no obstante, después de descubrir que el error se
debía a la frecuencia en la que operaba el PIC y cambiar el modelo de cuatro displays
multiplexados por un display de cuatro dígitos se concluyó de manera satisfactoria la
práctica.
Se pudo realizar un contador ascendente-descendente con displays de unidades, decenas,
centenas y unidades de millar con el uso de tablas de búsqueda en memoria de programa; en
especial con el uso instrucciones de lectura de tabla del registro TABLAT de ocho bits, con
lo que se optimizó el uso de la memoria porque como vimos en la práctica anterior,
almacenamos cada código del contador usando un solo byte.
● Bibliografía
Álvarez, R. (2021). Apuntes de la asignatura Microcontroladores.
Edipame. (s.f.). Compilador de C para el microcontrolador Microchip PIC18F4550.
Recuperado el 25 de septiembre de 2021 de: ttps://pdfcoffee.com/pic18f4550pdf-5-pdf-
free.html
Universidad de Sevilla. (s.f.). Sistema de desarrollo PIC18F452: Capítulo 3.
Microcontroladores PIC, Recuperado el 25 de septiembre de 2021 de:
http://bibing.us.es/proyectos/abreproy/11301/fichero/Memoria%252FCap
%C3%ADtulo+3.pdf+

También podría gustarte