5 farklı frekansta Kare Dalga PWM

Başlatan oongit, 20 Kasım 2010, 22:14:43

oongit

Hani bana en son gönderdiğin C dosyası var ya... İşte o programdaki kodların, benim anlayacağım dille ne işe yaradığını da yazabilir misin yanlarına...

Örneğin;
#int_EXT
void  EXT_isr(void) 
{
      if(++i==6)
        i=1;
      if(i==1)
        setup_timer_2(T2_DIV_BY_16,155,1); //100 Hz


Mesela burada
#int_EXT ya da void EXT_isr(void) ne demektir,
if(++i==6)
i=1; ne demektir vs. gibi...

Yani yazdığın o kodların yanlarına da açıklamalarını kısaca yazabilir misin? Senin için yorucu olmayacaksa yani... Çünkü bu dili öğrenmeyi çok istiyorum...

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Bu devre simülasyonda sapıtmaya başladı... Frekansı her zaman değiştirmiyor, frekans değiştirme butonu her zaman iş yapmıyor, Duty Arttır butonu frekansı değiştiriyor vs... Acaba atladığımız bir şey falan olmuş olabilir mi? İstediğim gibi sadece 1 kez çalıştı, ondan sonra tamamen saçmalamaya başladı  :-\

justice_for_all

ne Tur hata var bende iyi calisiyor...

bitek su var bendede bazi frekanslarda duty farklilasiyor sizdede oylemi...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

#49
Mesela;
PWM 100 Hz ile sorunsuz olarak başlıyor... Frekans değiştirme butonuna ilk tıkladığımda frekansın değişmesi gerekirken değiştirmiyor.
2. kez tıkladığımda frekansı bir üst frekansa ayarlıyor. 3. basışımda pulse tamamen gidiyor...

Devreyi yeniden başlatıyorum. Yine aynı olaylar devam ediyor... Bir de frekans değiştirme butonu Duty Arttır işlevini, Duty Arttır butonu da frekans değiştirme işlevini gerçekleştiriyor... Ondan sonra yine sapıtıyor...

Valla işin içinden nasıl çıkacağımı şaşırdım açıkçası  :(

Bir de mesela Duty %50 ile başlamış olsa bile Duty Azalt dediğim zaman Duty oranı direkt olarak %10 gibi bir orana iniyor ve ordan devam ediyor...

justice_for_all

Alıntı yapılan: oongit - 25 Kasım 2010, 00:02:41
Mesela;
PWM 100 Hz ile sorunsuz olarak başlıyor... Frekans değiştirme butonuna ilk tıkladığımda frekansın değişmesi gerekirken değiştirmiyor.
2. kez tıkladığımda frekansı bir üst frekansa ayarlıyor.

nedeni devre ilk basladiginda 100 hz basliyor ve butona basinca ilk istedigin frekans 100 hz oldugu icin ilk basicta bi degisiklik olmuyor...

Alıntı yapılan: oongit - 25 Kasım 2010, 00:02:41

Devreyi yeniden başlatıyorum. Yine aynı olaylar devam ediyor... Bir de frekans değiştirme butonu Duty Arttır işlevini, Duty Arttır butonu da frekans değiştirme işlevini gerçekleştiriyor... Ondan sonra yine sapıtıyor...


bende o hatalar meydana gelmiyor...cok iyi frekansi ve dutysini degistiriyor..Proteus versiyonun kac?

Alıntı yapılan: oongit - 25 Kasım 2010, 00:02:41
Bir de mesela Duty %50 ile başlamış olsa bile Duty Azalt dediğim zaman Duty oranı direkt olarak %10 gibi bir orana iniyor ve ordan devam ediyor...

o zaman programi soyle degistirin...

degisken tanimlamasini bu sekilde yapin...
int8 i=0,sayac=70;
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

7.4 SP3 Portable...

Bu sefer de 300 Hz.den 400 Hz.e geçerken sapıtıyor... 200 Hz deyken, duty değeri %100'ü aşınca frekans 100 hz.e iniyor.

justice_for_all

simdi arkadasim her frekansin kendine ayri max dutysi var ok 100 hzin max dutysi 200 hze uymuyor o yuzden frekans degisiyomus gibi geliyo...

o max degerleri belirleyip ona gore kod yazmalisin sen degerleri belirle yeter kodlari ben yazarim ok ...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Tamam... Uğraşacağım... Bakalım altından kalkabilecek miyim? Şimdi uyku zamanı  ;D

oongit

#54
Devre şemasını aşağıdaki gibi değiştirdim...
http://img713.imageshack.us/img713/5525/adszkxv.jpg

Başlangıç prosedürleri;

if (input(pin_a0))
     setup_timer_2(t2_div_by_16,155,1);
     set_pwm1_duty(62);
     setup_ccp1(ccp_pwm);

if (input(pin_a1))
     setup_timer_2(t2_div_by_16,103,1);
     set_pwm1_duty(41);
     setup_ccp1(ccp_pwm);

if (input(pin_a2))
     setup_timer_2(t2_div_by_16,77,1);
     set_pwm1_duty(31);
     setup_ccp1(ccp_pwm);

if (input(pin_a3))
     setup_timer_2(t2_div_by_16,61,1);
     set_pwm1_duty(25);
     setup_ccp1(ccp_pwm);

if (input(pin_a4))
     setup_timer_2(t2_div_by_16,51,1);
     set_pwm1_duty(20);
     setup_ccp1(ccp_pwm);

(Buraya kadar sırasıyla 100-150-200-250 ve 300 Hz (%10 Duty) üretecek)

Buradan itibaren de; Duty ayarlama prosedürleri olacak;
void (main)
ana prosedürler...

OG

Arkadaşım, yazım dili önemli değilse verdiğimi kullanabilirsiniz. Çalışıyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

oongit

#56
Aslına bakarsanız; alıp kullanacağım için çok da önemli sayılmaz... Ancak; balık verilmesindense, balık tutmanın öğretilmesinden yanayım... Bilmem anlatabildim mi?

Madem ki bu işe gönül verdim... O halde bu işi düşe kalka öğrenmeliyim... Etim sizin, kemiğim babamın yani  ;D

oongit

Alıntı yapılan: oongit - 26 Kasım 2010, 00:30:03
Devre şemasını aşağıdaki gibi değiştirdim...
http://img713.imageshack.us/img713/5525/adszkxv.jpg

Başlangıç prosedürleri;

if (input(pin_a0))
     setup_timer_2(t2_div_by_16,155,1);
     set_pwm1_duty(62);
     setup_ccp1(ccp_pwm);

if (input(pin_a1))
     setup_timer_2(t2_div_by_16,103,1);
     set_pwm1_duty(41);
     setup_ccp1(ccp_pwm);

if (input(pin_a2))
     setup_timer_2(t2_div_by_16,77,1);
     set_pwm1_duty(31);
     setup_ccp1(ccp_pwm);

if (input(pin_a3))
     setup_timer_2(t2_div_by_16,61,1);
     set_pwm1_duty(25);
     setup_ccp1(ccp_pwm);

if (input(pin_a4))
     setup_timer_2(t2_div_by_16,51,1);
     set_pwm1_duty(20);
     setup_ccp1(ccp_pwm);

(Buraya kadar sırasıyla 100-150-200-250 ve 300 Hz (%10 Duty) üretecek)

Buradan itibaren de; Duty ayarlama prosedürleri olacak;
void (main)
ana prosedürler...


Buradaki gibi bir yol izlemek mantıklı mıdır?

justice_for_all

arkadasım kesme ile yapacaksn a portunu kullanamazsın ama kesme kullanmadan yapcaksan olabilir ama if leri while dogusunun içine yazmalısın ayrıca iflere parantez koylmalısın if(sart) kume parantezi içinde komutlar gibi...ayrıca o butonlar frekans ayarlamak için mi...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Alıntı yapılan: oongit - 26 Kasım 2010, 00:30:03
Devre şemasını aşağıdaki gibi değiştirdim...
http://img713.imageshack.us/img713/5525/adszkxv.jpg

Yukarıdaki şemada olduğu gibi olabilir diye o şekilde düşündüm... PWM değiştirmek için A portunu, Duty oranını değiştirmek için de B6 ve B7 pinini kullanmayı düşünüyorum... Bu şekilde istediğim gibi çalışmaz mı yoksa?