mekatronikci
Üye
- Katılım
- 4 Ara 2006
- Mesajlar
- 3
- Puanları
- 1
- Yaş
- 39
Merhaba arkadaşlar
aşağıdaki programla iki pals arasındaki zamanı ölçmeye çalıştım daha sonrada bunu devir sayısına oranlayacaktım fakat önceden doğru aldığım zaman bilgisinin programa yeni kodlar ekleyince (ref bilgisi almak için adc çevirici kullandım) yanlış olduğunu gördüm
unsigned sinyal=100,gb,digital;
int16 pals, time, f;
#define pals pin_C0
void main()
{
setup_adc_ports(ALL_ANALOG);
setup_adc(adc_clock_div_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_16,250,1);
setup_CCP1(CCP_PWM);
setup_CCP2(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_timer1(0); // TMR1 değeri belirleniyor
set_tris_b(0x00);
set_tris_c(0x01);
set_tris_e(0xFF);
lcd_init();
printf(lcd_putc, "\f pals olcum");
delay_ms(10);
set_pwm1_duty(0);
set_pwm2_duty(0);
enable_interrupts(INT_timer1); // int_timer1 kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(true)
{
while(!input(pals))
{}
set_timer1(0);
while(input(pals))
{}
while(!input(pals))
{}
time=get_timer1();// iki pals arası zaman bulunuyor
f=50000/time;// frekans bulunuyor
f=f*20;
gb=f/6;// 0-255 arasındaki değerlere oranlama
output_high(pin_c3);
output_low(pin_c4);
set_adc_channel(5); //an5
delay_us(20);
digital=read_adc();
delay_us(20);
if(gb<digital)
sinyal=sinyal+1;
if(gb>digital)
sinyal=sinyal-1;
if(sinyal>250)
sinyal=250;
if(sinyal<1)
sinyal=1;
set_pwm1_duty(sinyal);
set_pwm2_duty(sinyal);
printf(LCD_PUTC, "\fD %u S %u\nG %u F %ld",digital,sinyal,gb,f);
delay_ms(100);
}
}
yazdığım program bu şekilde adc çevirici eklediğimde timer1 yanlış zaman bilgisi alıyor bu hatayı nasıl çözebilirim ?