Hola, que tal?
Me surgió una duda respecto del tmr0 del 16f628a.
Estoy intentando hacer un frecuencímetro con este uC, de forma que se le inyecta una señal por RA4 y el PIC cuenta el número de ciclos que entran durante 1 seg.
El TMR1 realiza un conteo de 1 segundo con el reloj interno del PIC, mientras que el TMR0 cuenta el número de ciclos que entran en RA4. Cuando el TMR1 se desborda 5 veces (Cada desbordamiento ocupa 200ms) se realiza un cálculo mediante el TMR0.
Mi duda es la siguiente. Se supone que el TMR0 puede realizar conteos hasta que la variable "float overflow" se llene, cosa ardua. Por lo tanto, se podrían realizar conteos de forma que este frecuencímetro llegara a los 6MHz?
Simulé el programa con proteus, sin embargo, éste me da una lectura de 1604902'08Hz. Quiero saber si con este código se podría llegar a los 6MHz, con lo cual la simulación no sería fiable, o si por el contrario es imposible llegar así a los 6MHz.
Gracias, y un saludo.
Me surgió una duda respecto del tmr0 del 16f628a.
Estoy intentando hacer un frecuencímetro con este uC, de forma que se le inyecta una señal por RA4 y el PIC cuenta el número de ciclos que entran durante 1 seg.
Código:
#include <16F628A.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B0,rcv=PIN_B1,bits=8)
float overflow;
int counter=5;
int timer;
float frequency;
#int_TIMER0
void TIMER0_isr(void)
{
overflow=overflow+1;
}
#int_TIMER1
void TIMER1_isr(void)
{
set_timer1(0);
counter--;
if (counter==0)
{
timer=get_timer0();
set_timer0(0);
frequency=((float)overflow*256)+(float)timer;
printf("Frecuencia:%g\r",frequency);
overflow=0;
counter=5;
}
}
void main()
{
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer0(0);
set_timer1(40536);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(true);
}
El TMR1 realiza un conteo de 1 segundo con el reloj interno del PIC, mientras que el TMR0 cuenta el número de ciclos que entran en RA4. Cuando el TMR1 se desborda 5 veces (Cada desbordamiento ocupa 200ms) se realiza un cálculo mediante el TMR0.
Mi duda es la siguiente. Se supone que el TMR0 puede realizar conteos hasta que la variable "float overflow" se llene, cosa ardua. Por lo tanto, se podrían realizar conteos de forma que este frecuencímetro llegara a los 6MHz?
Simulé el programa con proteus, sin embargo, éste me da una lectura de 1604902'08Hz. Quiero saber si con este código se podría llegar a los 6MHz, con lo cual la simulación no sería fiable, o si por el contrario es imposible llegar así a los 6MHz.
Gracias, y un saludo.