Hola, necesito contar pulsos usando algun tipo de interrupcio, para saber los que van ocurriendo mientras se ejecuta una porcion de codigo del programa.
He buscado y rebuscado, pero nada se adapta a lo que necesito.
El caso es que no me parecia tan complicado, pero a la hora de montarlo y ver en el osciloscopio, nada era lo que debia ser. Lo intenté con la simulación por si el error estaba en la señal que generaba los pulsos, pero el resultado era el mismo.
A ver si me podeis echar una mano.
El asunto es:
Tengo una señal que me envia pulsos a una frecuancia aproximada de 250Hz ( una señal cuasisenoidal sin semiciclo negativo )
Necesito ejecutar una porción de código que cuando termine, vuelva a repetirse, pero siempre en un intervalo de 8 ciclos de la señal de referencia.
Es decir, espero un pulso , ejecuto el código y cuando termine tengo que saber cuantos pulsos han pasado por RA4 para esperar hasta el pulso nº 8 y volver a ejecutar el código otra vez y así siempre.
El caso es que no soy capaz de contar los pulsos por RA4 durante la ejecución del código. Pensaba que con el contador de RTCC podría hacerlo, pero los resultados son desfavorables.
Este es el código :
#include <stdlib.h>
#ZERO_RAM
#byte LEDS = 0x06 // PORTB
#define bobina PIN_A0 //Entrada señal
int cnt4;
int flancos;
void main()
{
set_rtcc(0);
setup_counters(RTCC_EXT_H_TO_L,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
SET_TRIS_B(0b00000000);
SET_TRIS_A(0b00010000);
flancos = 0;
While (1)
{
cnt4 = 0;
while (cnt4<221)
{
// Aqui iria el código a ejecutar
LEDS = 0b11111111;
delay_us(100);
LEDS = 0;
cnt4++;
}
flancos = get_rtcc(); // Veo cuantos pulsos han pasado
while (flancos<8)
{
flancos = get_rtcc(); // Espero hasta el pulso nº8
}
set_rtcc(0); // Reinicio el rtcc
}
}
En este caso solo pretendo en un intervalo de 8 pulsos ( es que la frecuencia de referencia puede variar, no es 250Hz exacta, puede ser de 150 Hz a 280Hz, pero lo habitual es que sea 250 Hz ) enviar un tren de 221 pulsos 1010101010....... para ver el resultado en el osciloscopio.
A ver si me podeis ayudar.
Gracias y salu2