cierto en los comentarios lo explica bien.... pero yo no comprendo la lectura es erronea.... lo probe con el proteus y me daba valores nada correctos....
no se...
yo al final con el 16f628a he conseguido llegar a 290khz
aqui va mi programa....
#include <16F628a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000) //one instruction=0.2us
#use fast_io (a)
#include <lcd_portb.c>
#byte porta = 0x06
#byte cmcon = 0x1f
unsigned int ajuste = 0;
unsigned int j,jj,jjj,jjjj,jjjjj = 0;
unsigned long pulsos,pulsos2 = 0;
unsigned long tiempo = 0;
#int_timer0
void time()
{
++tiempo;
if(tiempo>76){ //la condicion se cumple cada 0.9998 segundos
j = pulsos2; //
jj = pulsos/1000 %10; //prepara valores de las variables
jjj = pulsos/100 %10; //para mostarlos en el lcd
jjjj = pulsos/10 %10; //
jjjjj = pulsos %10; //
lcd_gotoxy(1,1);
if(pulsos2<=0){
printf(lcd_putc, "Freq= %lu Hz "pulsos);
ajuste = 181; //ajustes de la interrupcion del timer0 para frequencias inferiores a 10Khz
}
else
{
if(pulsos2<=4){
printf(lcd_putc, "Freq= %u%u,%u Khz "j,jj,jjj);
ajuste = 168; //ajustes de la interrupcion del timer0 para frequencias inferiores a 40Hkz
}
else
{
if(pulsos2<=26){
printf(lcd_putc, "Freq= %u%u,%u Khz "j,jj,jjj);
ajuste = 154; //ajustes de la interrupcion del timer0 para frequencias inferiores a 250Hkz
}
else
{
printf(lcd_putc, "Freq= %u%u,%u Khz "j,jj,jjj);
ajuste = 127; //ajustes de la interrupcion del timer0 para frequencias superiores a 250Hkz
}
}
}
set_rtcc(ajuste); //asigna el valor "ajuste" para ajustar el valor de frecuencias a diferentes valores
pulsos = tiempo = pulsos2 = 0; //setea valores
}
}
void main()
{
cmcon = 0x07; //comparadores en off
set_tris_a (0x01); //solo esta el PIN_A0 como entrada, el resto salidas
enable_interrupts(int_timer0); //habilito interrupciones timer0
setup_timer_0(rtcc_internal | rtcc_div_256); //configuro interrupciones timer0
enable_interrupts(global); //activo las interrupciones habilitadas
lcd_init(); //inicio el LCD
while(true){ //bucle infinito
do{
while(input(PIN_A0)){
++pulsos;
while(input(PIN_A0)){}
}
}while(pulsos != 10000); //hasta que pulsos no sea 10000, repetira el bucle
pulsos = 0; //setea pulsos
++pulsos2; //suma 1 a pulsos2, con este valor obtendremos las decenas de millar,centenasde millar y unidades de millon
}
}
Hola a todos, soy nuevo en este mundillo. He armado el programa en un pic 16f876, y va de maravilla. Pero tengo dudas, el porque el ajuste se hace a esos valores. Es que utilizo las formulas para hallar esos valores (ya que quiero encontrar el equivalente para un circuito con reloj de 4MHz) de la carga del timer, y no me da igual. Lo que quiero entender es el programa!
Otra pregunta: porque le das redundancia a la siguiente instrucción
while(input(PIN_A0)){
++pulsos;
while(input(PIN_A0)){}La señal se podia introducir por cualquier otro pin?
Gracias de antemano!