pic c beni verem edecek :(

Başlatan bulut_01, 25 Haziran 2012, 21:38:15

bulut_01

arkadaslar 40 hz frekansına ayarladıgım kod cıkıs verecek frekans ben istediğim gibi değiştirmeliyim ccp kulandıysamda kod calısmıyor yardım edın !

#include <16f628A.h>
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)

unsigned int32 i=0;
int s=0;
float y,j=0;

#int_timer1
void timer1_kesme()
{
s++;

}

#int_CCP1
void yakala_kesmesi()
{
i=get_timer1();
set_timer1(0);
i=i+65535*s;
s=0;
j=i*0.000008/4;
j=60/j;

}

void main()
{

setup_timer_1(T1_INTERNAL |T1_DIV_BY_8);

enable_interrupts(INT_CCP1);
enable_interrupts(int_timer1);
enable_interrupts(GLOBAL);
setup_ccp1(CCP_CAPTURE_DIV_4);

CCP_1_HIGH=0x00;
CCP_1_LOW=0x00;

set_tris_A(0x00);
set_tris_B(0b000001000);

output_A(0x00);
output_B(0x00);

if (j==40)                   //  burası kendım ayarlıyacagım.
{
output_high(pin_a0);
}

while(1);

 }
YENİLMEZ..

Okan AKÇA

#include <16f628A.h>
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)

unsigned int32 i=0;
int s=0;
float y,j=0;

#int_timer1
void timer1_kesme()
{
s++;

}

#int_CCP1
void yakala_kesmesi()
{
i=get_timer1();
set_timer1(0);
i=i+65535*s;
s=0;
j=i*0.000008/4;
j=60/j;




if (j==40)                   //  burası kendım ayarlıyacagım.
{
output_high(pin_a0);
}}

void main()
{

setup_timer_1(T1_INTERNAL |T1_DIV_BY_8);

enable_interrupts(INT_CCP1);
enable_interrupts(int_timer1);
enable_interrupts(GLOBAL);
setup_ccp1(CCP_CAPTURE_DIV_4);

CCP_1_HIGH=0x00;
CCP_1_LOW=0x00;

set_tris_A(0x00);
set_tris_B(0b000001000);

output_A(0x00);
output_B(0x00);



while(1);

}

bulut_01

cyclone duzeltıgın sekılde derledım ccp portuna pıcın 40 hz clock gırıyorum port hıgh olmuyo ??
YENİLMEZ..

bulut_01

sordugum soru cok mu zor kımse cvp yazmıyor.bır el atında arkadaslar sızde bende kurtuluyum.
YENİLMEZ..

mufitsozen

#4
baska hatalarda olabilir ama, ilk goze carpan:

j float bir deger, o yuzden hicbir zaman 40'a esit olamayabilir. (kusurattan dolayi) bu yuzden j==40 yerine asagidakine benzer birsey yazmak lazim.

if (fabs(j-40.) < 0.0001) {

/* vs vs  */

}

Programin diger akisni kontrol etmedigimi belirteyim, baska problemlerde olabilir.

kolay gelsin.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

bulut_01

pekı hocam işlemın kusuratlı cıkmaması ıcın j float yerıne farklı nasıl komut yazabılırız float yerıne ?
YENİLMEZ..

bulut_01

YENİLMEZ..

M_B

Alıntı yapılan: bulut_01 - 26 Haziran 2012, 20:07:16
bu komutu derlemıyor ccs

hocam derlemesi icin
#include <math.h> eklemen lazım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

bulut_01

hocam bunların hiç birine gerek yok ccp donanımı kullanarak pıc in puls sayacı bı arkadas kodu yazsa cok mu zor yada benım yazmak ıstedıgım ama amacı dısı calısan kodun uzerınde degısıklık yaparak  amaca uygun hala getırmek bu kadar zor mudur ?.
YENİLMEZ..

bulut_01

YENİLMEZ..

rree

pic16f628A pdf inde max frekansı Dc20Mhz.

bulut_01

kardes max frekans bılıyorum bana 100 hz e kadar ccp modulunu kullanarak cıkıs vermesını ıstedıgım kod yazmam lazım yazdıgım kod calısmıyor bana 0 dan 100 hz kadar kod ıcınde kendım ayarlıyabılecegım c kodu yazmam lazım yardımlarınızı beklıyorum.puls sayacak ornek 60 hz oldumu port cıkısı aktıf edecek.
YENİLMEZ..

darklancet

arkadaşım öncelikle birisi bana c kodu yazsın çokmu zor olayından vazgeçlemisin, çünkü kimse sana c kodu yazmaz, yazmakta istemez sadece belirli bir örnek verir sende bilgisayarın başına oturursun klavyeyide eline alırsın başlarsın yazmaya.
anladığım kadarıyla yapmak istediğin şey porta 60 hz sinyal geldiğinde herhangi bir portu aktif etmek
bunun için ilk önce 1 saniyelik bir timer yapman lazım bu timer başlangıcında sayıcı değerine bakıp eger degerin 60 olmuşsa portu aktif edersin sonra
sayıcıyı sıfırlayıp 1 saniye daha bekleyip tekrar aynı işlemi yaparsan senin istediğin gibi 60 hz geldiğinde yani 1 saniyede 60 plus geldiğinde portu ister açarsın ister kapatırsın ne yapmak istersen yaparsın.
kolay gelsin.