Mis hermanos de este tan apreciado foro, les saludo y a la vez les pido de su ayuda en este desarrollo con Pic ccs c.
Me explico...
Tengo un tren de pulsos de un sensor, este tren varia de 1 a 8 pulsos. Dependiendo de la ocasión que se presente (indeterminada).
cada pulso tiene un tiempo de 20ms en alto y 20ms en bajo, es decir, en el caso de que se presenten los 8 pulsos serian 160ms en total del tiempo transcurrido.
Bueno, pues quiero saber cuantos de esos pulsos se presentan en 200ms, los 200ms son por que como comente antes, en el caso de que se presenten lo máximo de 8 pulsos son 160ms.
Para contar los pulsos estoy utilizando el CCP1 del Pic18F de esta manera:
Código: C++
#int_ccp1 void trata_pulsos(void) { pulsos++; }
Y para contar los 200ms estoy incrementando el timer0 cada 1 ms asi:Código: C++
#int_TIMER0 void tiempo_200ms(void) { aux++; // incrementa cada 1 ms if(aux==200){ // Si pasaron los 200ms actúo. } set_timer0 (65223); // para 1 ms }
Este es el código que tengo hasta ahora...Código: C++
int16 pulsos; int16 aux; #int_ccp1 void trata_pulsos(void) { pulsos++; } #int_TIMER0 void tiempo_200ms(void) { aux++; output_toggle(pin_c0); if(aux==200){disable_interrupts(INT_TIMER0); disable_interrupts(INT_CCP1); } set_timer0 (65223); } void main() { porta=0x00; set_tris_a(0b00000001); portb=0x00; set_tris_b(0b11111111); portc=0x00; set_tris_c(0b10000000); portd=0x00; set_tris_d(0b00000100); porte=0x00; set_tris_e(0b00001000); lcd_init(); setup_ccp1(CCP_CAPTURE_RE); enable_interrupts(INT_CCP1); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); disable_interrupts(INT_TIMER0); set_timer0 (65223); enable_interrupts(global); while(true) { lcd_gotoxy(1,2); printf(lcd_putc,"pulsos = %lu %lu",pulsos,aux); } }
Lo que no se, es como hacer lo comentado... Que a partir de que el ccp1 encuentre un o unos de los pulsos el timer0 empiece a contar el tiempo y a partir de que se concluyan los 200ms deje de contar y me diga cuantos pulsos entraron en ese tiempo.
Espero haberme dado a entender y con ello me puedan ayudar, quizás alguien tenga otra idea para resolver esto.
Coloco una imagen para darme a entender mejor. Saludos a todos mis hermanos.
DominusDRR
Efectivamente, emite pulsos, entra en reposo otro corto tiempo (supongamos un segundo) y después vuelve enviar pulsos.
Un duda más.. e visto que en algunos diagramas al pic, en especifico cuando se trabaja con e modulo ccp, se le pone una resistencia de 10k o 4.7k en paralalo a la entrada ccp y gnd. Esto que sentido tiene?.
DominusDRR.
Háblame más de eso... Tendrás algun ejemplo de diagrama de este amplificador diferencial y el filtro pasando que comentas?. Me interesa y es mero aprendizaje para mi. :mrgreen:
También se podría poner una compuerta 74LS07 para corregir el pulso ruidoso o mal formado?.
O no sería lo mejor?.
Es una Schmitt Trigger. Con inversión a su salida.
Hay alguna Schmitt Trigger con salida yes. O no invertida?.
Es una Schmitt Trigger. Con inversión a su salida.
Hay alguna Schmitt Trigger con salida yes. O no invertida?.