Boa tarde galera,
Já sofri que so com esse programa, na minha visão esta tudo certo, porém quando leio o ccp_1 ele da um valor muito diferente do que era pra receber. estou injetando uma onda quadrada com duty de 50% as duas variaveis que coloquei para ler o tempo high e o tempo low do ciclo registram a mesma coisa, porém quando mudo o duty ele ainda fica mostrando a mesma coisa, já fiz na pratica li no osciloscopio e persiste o erro. Alguem poderia me ajudar?
programa
#include <18f4550.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7,bits=8)
#fuses HS,nowdt,nolvp,noprotect,brownout,noput,nocpd,nowrt,nodebug,cpudiv1,pll5
char dado='0';
unsigned int16 sub=0,des=0,p_total=0;
float periodo=0.0;
unsigned int n=0,pulso=1,m1=0;
#use fast_io (a)
#use fast_io (b)
#use fast_io (c)
#use fast_io (d)
#INT_CCP1
void pulsos_encolder()
{
if(pulso==0&&m1==0)
{
sub=ccp_1;
setup_ccp1(CCP_CAPTURE_FE);
pulso=1;
}
if(pulso==1&&m1==0)
{
set_timer1(0);
des=ccp_1;
setup_ccp1(CCP_CAPTURE_RE);
m1=1;
set_timer1(0);
}
}
#int_timer0
void varredura(){
if(n==10)
{
output_toggle(pin_d0);
n=0;
}
else
{
n++;
}
}
void main()
{
enable_interrupts(global);
enable_interrupts(int_ccp1);
setup_ccp2(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(int_timer0);
setup_timer_0(rtcc_internal|RTCC_DIV_2);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_CAPTURE_RE);
set_tris_c(0b10000110);
set_tris_b(0b00000011);
set_tris_a(0b11111111);
set_tris_d(0b00000000);
set_timer1(0);
output_low(pin_d0);
// printf("E1)-%ld\n\n ",sub);
// printf("E1)-%ld\n\n 2)-%ld\n\n",sub,des);
while(1)
{
if(m1==1)
{
//printf("*");
printf("1)%lu\n\n 2)%lu\n\n ",sub,des);
//printf("*");
m1=0;
pulso=0;
}
}
}
simulaçao.rar