TİMER0'I SAYICI OLARAK KULLANACAĞIM LÜTFEN YARDIM

jonhboris

Üye
Katılım
27 Haz 2009
Mesajlar
54
Puanları
1
timer0 i dışarıdan bir sinyalle başlatıp sonra tekrar dışarıdan başka bir sinyalle durduracağım.. ve iki sinyal arasındaki bit sayısını tespit edeceğim..

birkaç birşeyler yapmaya çalıştım ama fayda vermedi yardım ederseniz sevinirim

ccs c kullanıyorum
 
asıl amacım pic in algılayabildiği ancak plc nin algılamadığı usn sinyal aralığını büyüterek plc nin algı düzeyine getirmek
 
Sayın jonhboris,
Yapmak istediğinizi biraz daha açarmısınız.Yardımcı olmaya çalışalım.
 
ne yapmak istediğin anlaşılmıyor
------------------
belki de pic programlama eğitim cd çekilişine katılmak için konu açtın.olabilir mi?
 
Son düzenleme:
mikroişlemciye dışarıdan yani harici belli aralıklarda sinyal uygulayacağım bu sinyallerin arasındaki zamanı hesaplayacağım daha sonrada onu 1000 kat ve başka bir sayı ile büyüterek iki sinyal arasındaki zaman farkını arttıracağım bunda anlaşılmayan bi nokta var mı..

pic in algıladığı 0.2 usn lik aralığı plc nin rahat birşekilde algılaması için 0.2 msn aralığına çıkartmak istiyorum...

yazdığım program bu
------------------------------------------------------

#include <16f877.h>
#include <stdio.h>
#fuses HS,NOPROTECT,NOLVP,NOCPD
#use delay (clock=20000000)
#use fast_io(a)
int fark,binkati,tam,gecikme;

void main ( )
{
setup_psp(PSP_DISABLED);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_a(0x03); // RA0, RA1 pinleri giriş

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);

while(TRUE)
{
if(input(PIN_A0)==1)
{ while(TRUE)
{set_timer1(0);tam=0;
do
{if(65535==get_timer1()){tam=tam+1;set_timer1(0);}

}while(input(PIN_A1)==0);

fark=get_timer1();
binkati=fark*0.2*1000000;
gecikme=tam*binkati;
output_high(PIN_B0);
delay_ms(gecikme);
output_high(PIN_B1);
break;
}
}delay_ms(gecikme);output_b(0x00);
}
}

----------------------------------------------------------

gördüğünüz gibi delay_ms(gecikme);

bu fonksiyon yazlıyor ama gerçekleşmiyor bu gerçekleşse olay çözülecek..

ama kabul edilmesine rağmen bu komutu gecikme olarak görmüyor...

OSİLASKOP GÖRÜNTÜSÜ

burada sinyal aralığı çok fazla nedeni buton kullanılması normalde böyle olmyabilir..
 
Ben plc de bişeyler yapmak istediğinizi sandım. Pic bilgim cok iyi değildir.
 
ne yapmak istediğin anlaşılmıyor
------------------
belki de pic programlama eğitim cd çekilişine katılmak için konu açtın.olabilir mi?

çok yanlış bir tabir kınıyorum.. şimdi anladıysan problemi.. çözüm getirirsen sevinirim.. kapiş?
 
ustam gördüğüm kadarı ile delay_ms(gecikme) fonksiyonunda gecikme yerine herhangi bir değer atanmamış dolayısı ile fonksiyon görevini yerine getirmiyor olabilir gecikme yerine float bir değer girersen sanki çözülecekgibi duruyor. hee kardeşim şimdi sen gecikme değişkenini inteager tanımlamışsın inteager 0 dan 255 e kadar olduğu için senin gecikme=tam*binkati; işleminde sonuç 255 aşdığı için işlem yapmıyor gecikmeyi float olarak tanımlamanı tavsiye ederim kolay gelsin hakkını helal et.:)
 
ustam gördüğüm kadarı ile delay_ms(gecikme) fonksiyonunda gecikme yerine herhangi bir değer atanmamış dolayısı ile fonksiyon görevini yerine getirmiyor olabilir gecikme yerine float bir değer girersen sanki çözülecekgibi duruyor. hee kardeşim şimdi sen gecikme değişkenini inteager tanımlamışsın inteager 0 dan 255 e kadar olduğu için senin gecikme=tam*binkati; işleminde sonuç 255 aşdığı için işlem yapmıyor gecikmeyi float olarak tanımlamanı tavsiye ederim kolay gelsin hakkını helal et.:)

ancak benim gecikme ibaresini int tanımlamam lazım yani delay_ms(...) buraya yazılacak sayıyı int olarak yazmam gerekli..

float olarak yazarsam zaman aralığı çok uzun oluyor..
 

Yeni mesajlar

Forum istatistikleri

Konular
127,964
Mesajlar
913,943
Kullanıcılar
449,611
Son üye
ramazansanli@

Yeni konular

Geri
Üst