Configuración de los contadores usando
LENGUAJE C CON CSS Y PROTEUS
Elaborado por:
Ivan Londoño
José Fernando Perez
Los contadores
Un contador es un registro interno de los microcontroladores
que se incrementa de forma automática cuando recibe pulsos externos por
medio de uno de los pines de un puerto:
El microcontrolador PIC18F4550 tiene dos contadores TMR0 y TMR1 y
cuentas los pulsos que llegan por RA4 y RC0 respectivamente.
Bloque de TMR0 Bloque de TMR1
Configuración (8 bits) configuración (16 bits)
RA4 RC0
Configuración del TMR1
El TMR1 es un contador de 16 bits es decir que puede contar
Desde 0 hasta 65535 pulsos. Su circuito interno esta
conformado por los siguientes elementos:
Configuración del TMR1
Cundo se requieren contar pulsos externos , estos debe llegar a
través del pin RC0, se debe habilitar el prescaler en 1 para que
no modifique la frecuencia de los pulsos (Fext) y se debe
activar la señal TMR1ON que permite que los pulsos lleguen
al TMR1.
Configuración del TMR1
Las instrucciones que configuran el TMR1 en el compilador CCSC son:
Instrucción que habilita el TMR1 y lo configura como contador de pulsos externos sin división de frecuencia
es decir Prescaler =1 :
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
• Instrucción que deshabilita el TMR1 manteniendo el conteo actual:
setup_timer_1(T1_DISABLED);
• Instrucción que escribe un valor de 16 bis en el TMR1, se usa cuando se requiere darle un valor inicial al
conteo . Se debe tener en cuenta que X puede ser una variable int16 o una constante entre 0 y 65535
set_timer1(X);
• Instrucciones que lee el contenido del conteo (TMR1), este conteo se debe guardar en una variable
declarada como int16 (ejemplo int16 Z)
Z = get_timer1();
Ejemplo 1: Conteo de pulsos y visualización de
Conteo en un LCD
Escriba un programa para el microcontrolador
PIC18F4550 que cuente los pulsos que llegan por
el pin RC0 y visualice dicho conteo en un display
de cristal liquido como se observa en la
Siguiente grafica:
Ejemplo 1: Conteo de pulsos y visualización de
Conteo en un LCD
#Include <18f4550.h>
#use delay(clock=4000000)
#include <lcd.c>
Void Main ()
{
int16 X;
lcd_init();
setup_timer_1( T1_EXTERNAL | T1_DIV_BY_1 );
set_timer1(0);
lcd_putc("Pulsos:");
ciclo: X=get_timer1();
lcd_gotoxy(8,1);
printf(Lcd_putc,"%05lu",Aux);
goto ciclo;
}
Ejemplo 2: Medición de Velocidad de un Motor
Escriba un programa para el microcontrolador
PIC18F4550 que mida la velocidad de un motor DC en
RPM, que usa un ecoder que envía 4 pulsos por cada
giro y visualice dicha velocidad en un display de
cristal liquido como se observa en la Siguiente grafica:
Ejemplo 2: Medición de Velocidad de un Motor
#include <18F4550.h>
#use delay(clock=4000000)
#include <lcd.c>
Void Main ()
{
int16 X;
float vel;
lcd_init();
setup_timer_1( T1_EXTERNAL | T1_DIV_BY_1 );
lcd_putc("veloc: ");
Se pone el
contador en 0 y se
ciclo: llama un delay de A partir de los pulsos
set_timer1(0); 1segundo contado se calcula la
delay_ms(1000); velocidad teniendo en
X=get_timer1(); cuenta que 4 pulsos
vel=((float) X/4)*60; equivalena una vuelta y
lcd_gotoxy(8,1); que
printf(Lcd_putc,"%04.0f RPM",vel); 1 minuto = 60segundos
goto ciclo;
}
Problema Propuesto:
Medición de Velocidad de un Motor
Escriba un programa para el microcontrolador PIC18F4550 que mida la velocidad de un motor DC en
RPM, que usa un ecoder que envía 8 pulsos por cada giro y visualice dicha velocidad en un display de
cristal liquido como se observa en la Siguiente grafica:
Además compare la velocidad medida con los valores mínimos y máximos introducidos por cuatro
pulsadores conectados en la parte alta del Puerto B.
Interruptores para
modificar los valores
Mínimos y máximos
A compara con la
velocidad
Problema Propuesto:
Medición de Velocidad de un Motor
Si la velocidad medida es menor que la velocidad Si la velocidad medida es mayor que la velocidad
mínima configurada se debe mínima configurada se debe
Activar la salida conectada en el pin RC6 Activar la salida conectada en el pin RC7
Si la velocidad medida se encuentra dentro del
rango mínimo y máximo los led’s deben permanecer
apagados