highvoltag
Üye
- Katılım
- 10 May 2009
- Mesajlar
- 13
- Puanları
- 1
- Yaş
- 38
arkadaslar ben dc motorun hizini olcup lcd ye yazan bi projeyle ilgileniyorum.kizil otesi sensor den gelen verilerle motor hizini olcmek istiyorum fakat programda bi hata var ve bulamadim.motorun ucunda bi daire var ve uzerinde 6 tane delik var dairenin bir tarafinda sensor diger tarafinda led var ve deliklerin sayisini sayiyor. pic lede bunu isleyip lcd ye yaziyor fakat lcd de devamli 0 gorunuyor.sadece deliklerin sayisini aldigimda ise yani (hiz=sayac; ) olarak degistirdigimde ise 134 gibi sacma bir sayi cikiyor program her 50ms de kesime gidiyor ve fonksiyonu isliyor bu arada sayac taki degeri 100ms de bir isliyor ve hiz degiskenine atiyor 1 sn de bir ise lcd ye yaziyor kodlardaki hatayi bulamadim anlayan arkadaslar bi bakarsa sevinirim yada baska hiz olcme yontem ve projeleri varsa elinizde cok mutlu olurum yorumlar icin simdiden tesekkurler.
#include <16f628.h>
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nocpd
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)
#define use_portb_lcd true
#include <lcd.c>
int sayac,i=0,sn=0;
float hiz;
#int_timer0
void timer0_kesmesi()
{
set_timer0(60);
i++;
sn++;
if(i==2)//100 ms olmasi icin denetleme
{
hiz=((10*sayac)/6)*3600*0.001; //hizi km/h cinsinden yaziyor, hiz=sayac yapnca 134 degerini veriyor.
sayac=0;
i=0;
}
if(sn>=20)//1sn olunca lcd ye yaz
{
sn=0;
printf(lcd_putc,"\f HIZ:%f KM/H",hiz);
}
clear_interrupt(int_timer0);
}
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
set_tris_a(0x10);
output_a(0x00);
set_tris_b(0x00);
output_b(0x00);
setup_timer_0(rtcc_internal|rtcc_div_256);
set_timer0(60);
enable_interrupts(int_timer0);
enable_interrupts(global);
while(1)
{
while(pin_a0==0); //puls gelmesi icin bekliyor
sayac++;
while(pin_a0==1);
}
}
#include <16f628.h>
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nocpd
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)
#define use_portb_lcd true
#include <lcd.c>
int sayac,i=0,sn=0;
float hiz;
#int_timer0
void timer0_kesmesi()
{
set_timer0(60);
i++;
sn++;
if(i==2)//100 ms olmasi icin denetleme
{
hiz=((10*sayac)/6)*3600*0.001; //hizi km/h cinsinden yaziyor, hiz=sayac yapnca 134 degerini veriyor.
sayac=0;
i=0;
}
if(sn>=20)//1sn olunca lcd ye yaz
{
sn=0;
printf(lcd_putc,"\f HIZ:%f KM/H",hiz);
}
clear_interrupt(int_timer0);
}
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
set_tris_a(0x10);
output_a(0x00);
set_tris_b(0x00);
output_b(0x00);
setup_timer_0(rtcc_internal|rtcc_div_256);
set_timer0(60);
enable_interrupts(int_timer0);
enable_interrupts(global);
while(1)
{
while(pin_a0==0); //puls gelmesi icin bekliyor
sayac++;
while(pin_a0==1);
}
}
Son düzenleme: