Onda Cuadrada 1 KHz

Esta es una vista previa de la lección

Compra el curso, o accede si ya te has inscrito, para acceder a esta lección.

Repaso

Un timer (Temporizador; en español, pero aun en español siempre se nombra timer), es un periférico incorporado al microcontrolador que cuenta pulso de reloj para medir el tiempo de forma precisa.

El funcionamiento del timer implica un contador que se incrementa cada que recibe pulsos de reloj. Cada ve que este alcanza un valor predefinido genera una interrupción y se reinicia el conteo.

El timer 0 puede configurarse en 8 o 16 bits. En 8 bits el timer solo podrá contar de 0 a 255, y en 16 bits el timer puede contar de 0 a 65535.

Para configurar el timer 0, se utiliza la función:

setup_timer_0(Fuente de reloj | Preescaler | Modo);

El timer puede iniciar su conteo en 0, o se puede establecer un valor inicial, este valor se suele llamar carga. La carga se establece entre los paréntesis de la siguiente función y debe ser un valor menor que el limite máximo que el modo permite.

set_timer0(Carga);    //Establecer la carga del timer

El timer empezara a contar ya sea desde 0 o desde el valor de carga hasta el limite máximo dependiendo del modo. Cuando el timer alcanza el valor máximo este ya no puede seguir contando y sucede un desbordamiento o overflow. En este punto el timer también puede generar una interrupción. La interrupción del timer 0 es INT_TIMER0.

#INT_TIMER0   //Interrupcion del timer0
void nombre_de_la_funcion(){
   
   //Código a ejecutar

}

Cuando se genera la interrupción por desbordamiento se ejecutara todo el código que se encuentre en la función de la interrupción. Aquí se pondrán todo el código que se quiere cuando se desborde el timer.

El tiempo que transcurre por cada desbordamiento esta dado por la formula:

La G-One incorpora un bootloader que reubica los vectores de interrupciones. debido a esto todas las interrupciones se generan con un pequeño retraso de 7.65 microsegundos (7.65×10-6 Segundos).

La siguiente tabla muestra el rango de frecuencias con las que sucede la interrupción del Timer 0 según se elija el preescalar. Sabemos que el tiempo del periodo es el inverso de la frecuencia.

Cuando el Timer se trabaja en modo de 16 bits no acepta valores carga. La frecuencia de la interrupción siempre será la misma.

Correcto. 0.4 milisegundos es una frecuencia 2.5 KHz. Una frecuencia que se puede encuentra en el rango con este preescaler.

0.4 milisegundos es una frecuencia de 2.5 KHz. Eso esta fuera del rango de frecuencias para este preescaler.

Código

Onda Cuadrada 1KHz

#include <18F45K50.h>      //Libreria del microcontrolador
#use delay(internal=48MHz) //Frecuencia del reloj
#build(reset=0x02000,interrupt=0x02008)   //Reubicacion de vectores
#org 0x0000,0x1FFF {}      //Reserva de memoria para el bootloader

#INT_TIMER0
void timer_0(){
   output_toggle(PIN_A1);
   set_timer0(164);

}


void main(){      //Funcion Principal
   set_tris_a(0x00);
   setup_timer_0(T0_INTERNAL | T0_DIV_64 | T0_8_BIT);
   set_timer0(164);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);

while (1){        //Bucle Infinito
      output_toggle(PIN_A2);
      delay_us(500);
   }
}

El precio de tu G-One, incluye el curso G-One Basic.

X