top of page

DELAY 50ms Timer 0 - PIC18F4550-MPLAB XC8

EL presente proyecto consiste en generar una señal cuadrada por el puerto B (RB4),

mediante un Delay de 50ms según imagen 3.0:

Imagen 3.0 - Señal Cuadrada

Para lograr este objetivo debemos definir lo siguiente:

¿Que un timer y de que tipo debemos utilizar? ,¿ Cuantos Bits sera el registro 8 o 16 bits?, ¿usaremos Pre-escaler?.

Para escoger adecuadamente un Timer debemos primeramente saber cuantos "Timer " cuenta el PIC, puesto que pueden la cantidad dependiendo de la gama del microcontrolador , puesto que nuestro microcontrolador es de gama media-alta un PIC 18F4550, según la pag.1 del data sheet de Microchip (http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf) , nos indica que contamos con 3 Timers, el TMR0, TMR1,TMR2 & TMR3.

Para el manejo adecuado del Timer debemos utilizar 2 registros importantes T0CON & INTCON.

EL T0CON sirve para atribuirle características al timer como por ejemplo:

1) Activar el timer, modo de 8 o 16bits, pre-escaler y oscilador externo o interno.

y el INTCON es un registro el cual contiene un bit indicador llamado TMRIF que mediante su cambio lógico 0 a 1 indica que ha ocurrido un desbordado el timer,( pero que entendemos desbordamiento cuando el timer se termina de contar FFFFxh y regresa a 0000Xh)

Así mismo, es importante también determinar el tipo de oscilador a utilizar, interno o externo, ya que recordemos que la frecuencia y Periodo por ciclo de instrucción Fcy , Tcy:

Fcy= (Fosc/4) & Tcy=(1/Fcy)

Por ejemplo, si tenemos un Crystal de cuarzo de 10Mhz, la Fcy = 10MHz/4 = 2.5Mhz & Tcy= 0.4us.

Ya que , El proceso de utilizar 4 pulsos de reloj para completar un ciclo de Instrucción.

Regresando al proyecto principal, debemos plantear las variables;

Timer 0, Pre-escales : 1: 4 , Modo de 16 bits, Puerto RB4 salida, Oscilador de Crystal de 10Mz.y el delay debe ser de 50ms.

Primeramente, debemos atribuirlas características al Timer0 en el registro T0CON :

T0CON : 0000 0001 // bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7

bit0=0 // Por el momento TIMER0 = OFF

bit1=0 // Modo de 16 bits.

bit2=0 // reloj externo de cristal.

bit3=0// Incremento Low- High.

bit4=0// Pre-escaler ON.

bit5,6 y 7=001// Preescaler 1:4

Procedemos a determinar la Cargar para el TMRH & TMRL. puesto que el TMR0 es de 16bits.

Tdelay = [(65535-x-1)xpre-escalerxTcy]

Ahora veamos, X representa a la carga del registro TMR0 (TMRH & TMRL) pero en decimal, razon por la cual debemos transformarlo en hexadecinal.

Remplazando valores obtenemos lo siguiente:

50x10^-3= [(65535-x-1)x4x0.4x10^-6]

despejando, X = 34286 -------- R -> B------ 85EExh , Por lo tanto, 85=TMR0H & EE=TMR0L

Dicho lo anterior, examines el codigo:

Imagen 3.1 - Señal Cuadrada

#include <xc.h> #include "INICIALIZASISTEMA.h"

void T0Delay(void); #define mybit PORTBbits.RB4

// Programa principal: void main(void) { TRISBbits.TRISB4=0; while(1) { mybit=1; // PIN RB4 ON . T0Delay(); // RETARDO DE 50MS. mybit=0; // PIN RB4 OFF. T0Delay(); // RETARDO DE 50MS. } }

// Sub-programa delay: void T0Delay() { T0CON=0x01; // REGISTRO DE CONFIGURACION. TMR0H=0x85; // CARGA TMR0L=0xEE; // CARGA T0CONbits.TMR0ON=1; // ENCIENDE TIMER 0. while(INTCONbits.TMR0IF==0); // En espera del desborde cuando TMRIF =1. T0CONbits.TMR0ON=0; // APAGA TIMER0. INTCONbits.TMR0IF=0; // Borra flag de 0 a uno para iniciar denuevo. }

Prosigamos nuestro análisis del código, la manera mas fácil de diseñar un programa el cual queramos que los tiempos de ejecución sean muy estrictos. los timers son la solución ideal, puesto que no solo se pueden utilizar como temporizar, sino como un contador muy eficiente, puesto que

que esta limita a las características definidas del pic llega a satisface esta necesidad de crear un numero finito de proyectos sorprendentes.

Imagen 3.1 - Simulación Proteus 8

Finalmente hemos logrado emitir una señal cuadra por el puerto RB4 del micro

controlador de 50ms con una alta precisión mediante la aplicación del Timer 0 y sus

respectivos registros.

Gracias amigos por acompañarnos en el fascinante mundo de la electrónica, sera hasta la próxima.

Si tienen alguna duda o consulta con respecto al tema expuesto, no dudes en ponerte en contacto con nosotros.

Escríbenos : CONTACTO3DTEC@GMAIL.COM


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page