Hola un saludo a todos.
Estoy intentando leer un tren de pulsos variable, pero que como máximo alcanza, 25kHz. Navegando por internet y estudiando los timers de los pic, por cierto programo en C con el CCS, Estoy teniendo algunos problemas.
Adjunto mi código:
He configurado el timer0 para que reciba la señal externa y empezará a almacenar pulsos (Contar), y el timer1 para que lo haga con pulsos del reloj interno.
con la formula del timer para que desborde:
La he calculado para que me cuente cada 1mS:
[donde pone 250 debería poner 25]
Por lo que si con 25kHz tengo un periodo de 40µS, haciendo una simple regla de tres cada milisegundo me contará 250 pulsos, no?
bueno pues implemento esto en el Proteus y el LCD me saca por pantalla "13" que dista mucho de los 25 que pensaba obtener.
¿Alguien que me eche una manita!?
gracias!
Estoy intentando leer un tren de pulsos variable, pero que como máximo alcanza, 25kHz. Navegando por internet y estudiando los timers de los pic, por cierto programo en C con el CCS, Estoy teniendo algunos problemas.
Adjunto mi código:
Código:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
//DEFINES
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_D0
#define LCD_RW PIN_D1
#define LCD_E PIN_D2
#include <flex_lcd.c>
int16 contador=0;
#int_TIMER1
void TIMER1_isr(void)
{
contador=get_timer0();
printf(lcd_putc,"\f %lu",contador);
set_timer0(0);
set_timer1(65411);
}
void main()
{
lcd_init();
setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_8);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer0(0);
set_timer1(65411);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(1)
{
}
// TODO: USER CODE!!
}
He configurado el timer0 para que reciba la señal externa y empezará a almacenar pulsos (Contar), y el timer1 para que lo haga con pulsos del reloj interno.
con la formula del timer para que desborde:
La he calculado para que me cuente cada 1mS:
[donde pone 250 debería poner 25]
Por lo que si con 25kHz tengo un periodo de 40µS, haciendo una simple regla de tres cada milisegundo me contará 250 pulsos, no?
bueno pues implemento esto en el Proteus y el LCD me saca por pantalla "13" que dista mucho de los 25 que pensaba obtener.
¿Alguien que me eche una manita!?
gracias!
Última edición: