Informe PIC18F452 PDF

Title Informe PIC18F452
Author Gabriel Illera Cifuentes
Course Automatas y Controladores Industriales
Institution Universidad Tecnológica de Chile
Pages 10
File Size 361.5 KB
File Type PDF
Total Downloads 20
Total Views 119

Summary

informe sobre el funcionamiento de TIMER del PIC 18f452...


Description

PIC 18F452 TIMER

NOMBRE: Eduardo Soto Gabriel Illera CARRERA: Ingeniería en automatización y control industrial ASIGNATURA: Programación de micro controladores PROFESOR: Samuel José Cruz FECHA: 27-03-2018

1 ¿Qué es? Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. De hecho, la mayoría de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar pulsos de reloj cuentan los pulsos que llegan a un determinado pin. Por defecto la señal que van a contabilizar los timers corresponde a la frecuencia del oscilador dividida por cuatro. Por lo tanto, en realidad cuentan ciclos máquina, no ciclos de reloj. Con un reloj de 20 Mhz tendríamos una frecuencia de ciclos máquina de 20/4 = 5 MHz, por lo que un ciclo máquina corresponde a 0.2 µs. En principio, el contador del timer se incrementará cada 0.2 microsegundos o 5 veces en 1 µs. Como su nombre indica, estos se utilizan para medir el tiempo o generar el retraso de tiempo exacto. El microcontrolador también puede generar o medir las demoras de tiempo requeridas ejecutando bucles, pero el temporizador/contador alivia la CPU de esa tarea redundante y repetitiva, lo que le permite asignar el tiempo máximo de procesamiento para otras tareas. El temporizador no es más que un simple contador binario que se puede configurar para contar pulsos de reloj (interno / externo). Una vez que alcanza el valor Máx., Volverá a cero configurando un indicador de sobre flujo y generará la interrupción si está habilitado. Características principales (18F452) 

Arquitectura RISC (Reduced Instruction Set Computer). - Juego de instrucciones reducido para ejecución rápida. - Oscilador hasta 40 MHz, 10 MIPs (Million Instructions Per second). - Optimizado para compilación desde lenguaje C.

           

Código compatible con la familia 16 y 17 de los PIC Reloj que puede por trabajar encima de10 MIPs. Cristales de 4 Mhz a 10 Mhz utilizando un multiplicador de frecuencia PLL. Instrucciones de 16 bits con bus de datos de 8 bits. Prioridad de interrupciones Multiplicador hardware de 8 x 8 que funciona en un solo ciclo de máquina. Tres pines para manejo de interrupciones externas. Manejo de corriente niveles de 25 mA en modo fuente y sumidero Timer 1 de 16 bits, Timer 2 de 8 bits. Timer 3, (no lo posee la gama media), de 16 bits (65535 conteos). Dos módulos de Captura/Comparación/PWM. Módulo de comunicación serial con soporte para RS-485 y RS-232

2 Como está implementado un timer en un PIC El pic18f452 tiene 4 timers. Cada temporizador tiene como elemento esencial un contador síncrono ascendente de 8 o 16 bits. Estos contadores se pueden programar

para contar pulsos internos o externos. El numero almacenado en cada contador se puede leer o modificar mediante la lectura o escritura de registros de funciones especiales asociados al temporizado en cuestión. El desbordamiento de los contadores queda reportado en los bits indicadores disponibles en esos registros, y pueden generar también una solicitud de interrupción al micro controlador. Los temporizadores pueden disponer de un contador asincrónico auxiliar. Este contador auxiliar se inserta en el camino de los pulsos antes del contador principal, en cuyo caso funciona como un pre-divisor (prescaler) o después del contador principal, funcionando entonces como prost-dividor (postscaler). Los temporizadores 0 y 1 tienen solamente un predivisor.

Organización de la memoria: PIC18F452 posee 32 K Bytes de memoria FLASH de programa, agrupados de a 2 MBytes, con el fin de contener instrucciones complejas. Por lo tanto, este dispositivo puede almacenar 16mil instrucciones simples. El vector de RESET se halla en la dirección 0000h y el de interrupciones en las posiciones 0008h y 0018h.

Características de los timers: Timer0:     

Software seleccionable como temporizador / contador de 8 o 16 bits Legible y escribible Preescalador programable de software dedicado de 8 bits Fuente de reloj seleccionable para ser externa o interna Interrumpir en desbordamiento de FFh a 00h en modo de 8 bits y FFFFh a 0000h en modo de 16 bits  Selección de borde para reloj externo  Retraso máximo por temporizador 0: 65.536 ms en 8 bits y 16.777 segundos en 16 bits Timer1:    

Temporizador / contador de 16 bits (dos registros de 8 bits, TMR1H y TMR1L) Legible y escribible Selección de reloj interno o externo Interrumpir en desbordamiento de FFFFh a 0000h Retraso máximo por temporizador 1: 524.288 ms

Timer2:   

Temporizador de 8 bits (registro TMR2) Registro de período de 8 bits (PR2) Legible y escribible

  

Preescalador programable por software (1: 1, 1: 4, 1:16) Posicionador programable (1: 1 a 1:16) Interrupción cuando TMR2 coincide con PR2 Retraso máximo por temporizador2: 65.536 ms

Timer3:  Temporizador / contador de 16 bits (dos registros de 8 bits; TMR3H y TMR3L)  Legible y escribible  Selección de reloj interno o externo  Interrumpir en desbordamiento de FFFFh a 0000h  Retraso máximo por temporizador 3: 524.288 ms  Para calcular el valor que se cargará en los registros TMR3, observe los siguientes pasos:

2.1 Diagrama de boque

3 Ventajas y desventajas Ventajas 

Selección de tamaño del registro en 8 o 16 bits del Timer a utilizar.

  

Se puede utilizar como contador o como temporizador. Fácil uso. Los datos se pueden sobrescribir en cualquier momento.

Desventajas   

No todos los Timer tienen prescalar Dependen de una señal oscilante El PIC18F52 no posee un oscilador interno a diferencia de su sucesor PIC18F4520

4 Esquema de conexión

5 Ejemplo de lenguaje Ejemplo de programación para el Timer1 para activar/desactivar una salida cada 1 segundo teniendo un oscilador de 20 Mhz y usando un prescalar de 4. Una instrucción se realiza cada 4 ciclos de máquina. Con la fórmula a continuación se calcula el tiempo que demora en ejecutarse 1 instrucción. Esto es: TIns (Periodo Instrucción) = 4 / 20.000.000 = 0,0000002[s] = 0,2[µs]. Luego usando el prescalar 4 obtenemos el tiempo para que se ejecute cada instrucción: TPresc = 4 * TIns = 4 * 0,2 [us] = 0,8[µs]. El Timer1 cuenta con un registrador de 16 bits T1CON, el cual consta del registro TMR1 en donde TMR1H registra el bit más significativo y TMR1L el menos significativo. Esto significa que TMR1 puede contener 216 registros, comprendidos entre los valores 0 al 216 −1(65535 ) . Como ya se dijo que cada incremento se produce cada 8[µs], para llenar el registro TMR1 completo incluido el desbordamiento (overflow) es: TTMR1 = TRES (Resolución del Timer1) * 0,8[µs] = 216 * 0,8[µs] = 52,4[ms] Cuando han pasado 52,4[s] y se produce el desbordamiento de TMR1 del valor 65535 al 0 se activa TMR1IF (Overflow Interrupt Flag). Para calcular cuantas interrupciones se deben detectar par cumplir 1 segundo (aprox.) se debe realizar lo siguiente: N = t / TTMR = 1[s] / 52,4[ms] = 1000[ms] / 52,4[ms] ≈ 19 Esto significa que cada 19 interrupciones tendremos aproximadamente un segundo.

#include //La libreria xc.h tiene ya predefinidos los registros, bits de configuración y hardware que se requieren modificar #pragma config OSC = HS //High-Speed oscillator #pragma config WDT = OFF //Watchdog timer OFF #pragma config LVP = OFF //Low-voltage programming OFF

#define _XTAL_FREQ 20000000 // se declara un cristal de frecuencia 20MHz volatile int count = 0; //se declara un entero volátil “count” igual a cero (es un contador/acumulador)

// Función timer void timer_init() { TMR1H = TMR1L = 0; // Limpiar los registros almacenados alto (TMR1H) y bajo (TMR1L) del Timer1 T1CONbits.T1CKPS1 = 1; // Ingresamos el valor de prescalar 1:4 según corresponde T1CONbits.T1CKPS0 = 0; //00 — 1:1 prescale value //01 — 1:2 prescale value //10 — 1:4 prescale value //11 — 1:8 prescale value PIE1bits.TMR1IE = 1; //Habilita flag de interrupción del Timer1 //Registro PIE1 (peripheral interrupt enable). // TMR1IE: Habilitador del bit de la interrupción por desbordamiento del TMR1. // 1 = Habilita la interrupción por desbordamiento del TMR1. // 0 = Deshabilita la interrupción por desbordamiento del TMR1. T1CONbits.TMR1ON = 1; // Encender el Timer1 INTCONbits.PEIE = 1; // Habilitar interrupciones periféricas INTCONbits.GIE = 1; // Habilitar interrupciones globales }

// Función de servicio de interrupciones (interrupt service routine ISR) void interrupt ISR() { // ¿Fue la interrupción disparada por el Timer1? // Registro PIR contiene las banderas para las interrupciones por periféricos incluidos en el PIE1. // TMR1IF: TMR1 Overflow Interrupt Flag bit. Bandera de la interrupción por desbordamiento del TMR1. //1 = El registro TMR1 se desbordó (debe ser puesto a 0 por software), 0 = El registro TMR1 no se ha desbordado. if(PIR1bits.TMR1IF == 1) { count++; // Incrementa en +1 al contador “count” if(count == 19) { // Comprueba si alcanzó 19 interrupciones (cerca de 1 segundo ha transcurrido) LATDbits.LATD1 ^= 1; // Cambia estado de pin RD1 (0 a 1 o 1 a 0) count = 0; // Resetea el contador “count” } PIR1bits.TMR1IF = 0; // Resetea el flag de interrupción por desborde (overflow interrupt flag) } }

//Programa principal int main() { TRISDbits.RD1 = 0; // Setea el pin RD1 como output. //(El registro TRIS controla la dirección de funcionamiento del puerto) timer_init(); // Llamada a función timer_init() while(1); // Aquí solo mantiene el programa corriendo. // Todo el trabajo lo realiza la función void interrupt ISR(). }

6 Bibliografía -

www.microchip.com/stellent/idcplgidcplg? IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010296 www.datasheetcatalog.net/es/datasheets_pdf/P/I/C/1/PIC18F452-I_PT.shtml www.datasheetcatalog.net/es/datasheets_pdf/P/I/C/1/PIC18F452-I_PT.shtml www.neoteo.com/tag/pic+18f452+tutorial.neo www.ing.puc.cl/~mtorrest/downloads/pic/ www.bricogeek.com/index/nid/957/ www.chilebot.cl/tutoriales/robot-basico.php classes.engr.oregonstate.edu/eecs/fall2006/ece441/groups/g24/documents/refere nce/Protel%20DXP%20Tutorial.pdf www.scribd.com/doc/47281/picmicro-interrupt www.embeddedrelated.com/groups/piclist/show/6332.php www.sunrom.com/c-149.html www.microchip.com/ www.abcdatos.com/tutoriales/tutorial/l6112.html www.frino.com.ar/mplab.htm http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf http://marianlonga.com/pic-timers-with-blinking-led/...


Similar Free PDFs