5 farklı frekansta Kare Dalga PWM

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

oongit

Yine anlayamadım sanırım... Bu satırı çözemedim...

int16 i=0,sayac=70,maxduty;

Sanırım olay burada karışıyor ???

OG

Alıntı yapılan: oongit - 26 Kasım 2010, 00:36:52
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..
Ortak amaç o zaten. Siz çok butonlu istiyorsunuz, al kullan demekle program üzerinde çalışarak, değişiklik yaparak, bir yandan öğrenerek demek istedim.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

oongit

Alıntı yapılan: OG - 28 Kasım 2010, 15:28:11
Alıntı yapılan: oongit - 26 Kasım 2010, 00:36:52
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..
Ortak amaç o zaten. Siz çok butonlu istiyorsunuz, al kullan demekle program üzerinde çalışarak, değişiklik yaparak, bir yandan öğrenerek demek istedim.

Vakit ayırmış olmanız bile yeter... Hepinizin amacının, öğrenmek isteyen acemi birine bir şekilde bu işi öğretmeye çalışmak zaten... Hepinize teker teker teşekkür ediyorum tekrar...

justice_for_all

Alıntı yapılan: oongit link=topic=30515.msg212428#msg212428
code]int16 i=0,sayac=70,maxduty;[/code]

   while(1)
   {
 
      else if(!input(pwm150)) //A1 pinindeki butona basildi mi?
      {
         setup_timer_2(T2s_DIV_BY_16,103,1); //150 Hz ikinci kez basilinca
         maxduty=375;
         sayac=41;
         set_pwm1_duty(sayac);
      }

}
}[/code]

Yukarda yaptığımı butun iflere koy...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

#79
Derlemede hata veriyor...

Özür dilerim, benim hatammış... Şimdi derledi. Şu an %10'lar seviyesinde başlıyor her biri. Ancak Duty Arttır ve Duty Azalt tuşları ile işlem yapamıyorum.

Edit kullanınız (OG)

oongit

#80
Tekrar özür dilerim, bu da benim hatammış. Başından beri Duty butonlarını 10k'lar ile yükseğe çekmemişim... Şu an harika çalışıyor.

Ancak Duty oranının minimum %10'da,
Maksimum Duty oranının ise %75'de kalabilmesi gerekiyor. Program şu anki haliyle bunu sağlayamıyor. %0'ın altına indiğinde ve %100'ün üstüne çıktığında frekansı da bozuyor...

Şimdi;
Seçilen her frekans min. %10 Duty oranı ile başlamalı ve max. %75 Duty oranı ile sınırlı kalabilmeli,
Ve Duty butonlarına her tıkladığımda, %5'er %5'er artırılıp, azaltılabilmeli...

Bunu sağlayabilmek için yapmamız gereken değişiklik nasıl olmalıdır? Her frekans için ayrı bir değişken falan mı tanımlamalıyız?
Örneğin; 100 Hz için "i" değişkeni, 150 Hz için "j" değişkeni, 200 Hz için "k" değişkeni vs. gibi...

Edit kullanınız (OG):
Özür dilerim haklısınız...

justice_for_all

#81
sorun ne anlamadim bende max degerini asmiyor...siz ilk basta %90 diyodunuz bende ona gore yaptin degerleride siz buldunuz hatta..

sizde neden max degeri astigini anladim...

mesela birinci if dongusunde sizin normal degeriniz 61 ben bunu 5'in katiyla degistirdim asagidaki gibi sizde o degerleri duzeltirsen sorun kalmicaktir..

arkadasim...
         sayac=60;
         set_pwm1_duty(sayac);
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Sorun sizde değil, kesinlikle yanlış anlamayın beni... Sorun bende... Yaptığım araştırmayı, yazdıkalrıma aktarmayı unutmuşum sadece, kafam biraz karışık şu günlerde. %75'i aşmaya başladığım zaman, süreceğim Mosfeti yakma ihtimalim kuvvetleniyormuş. Bu yüzden 75'in aşılmaması daha mantıklı oluyormuş, unuttuğum için kusuruma bakmayın...

Bunu engelleyebilmek adına; her frekans değeri için min. ve max. duty oranlarını hesaplamaya çalışıyorum. Örneğin; 100 Hz. PWM, %10 başlangıç,%5 arttırma ve %5 azaltma için kodları aşağıdaki gibi değiştirmem gerekir mi yoksa saçmalamış mıyım?
//100 Hz PWM, %50 Duty başlangıcı için
int i=62         //%50 Duty

//%5 arttırmak için, Frekans*5/100=i yerine yazılacak değer
if(!input(duty_arttir))
{
   delay_ms(5);
   i+=5;
   if(i>=75)
   i=75;
}

//%5 azaltmak için, Frekans*5/100=i yerine yazılacak değer
if(!input(duty_azalt))
{
   delay_ms(5);
   i-=5;
   if(i<=5)
   i=5;


Tekrar özür dilerim...

justice_for_all

simdi 75 demissiniz ama dutynin %75i  75 sayisina esit degil...yani o kisim hatali arkadasim...

dutynin yuzdesi pwm cozunurlugu ile alakali sizin frekansiniza gore cozunurlugunuz degisir 8bit 9bit 10bit gibi iste bu cozunurlugu hesaplamalisiniz..

mesela 10 bit cikti diyelim hesaplamasi soyle

duty degerinin %75i=1024*75/100 ordaki 1024 cozunurluk 10 bit oldugu icin kullanilmistir senin cozunurlugun kac bitse ona gore orasi degisecektir...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Peki çözünürlüğümün kaç bit olması gerektiğini nasıl bileceğim?

justice_for_all

resolution = log(FOSC/FPWM) / log(2) bits hesaplamasi boyle arkadasim...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Eyvah! "log" sanırım logaritma olmalı... Şimdi Google'a bir bakayım, nasıl hesaplanıyormuş. Teşekkür ederim.

justice_for_all

arkadasim bilgisayarin heap makinasinda hesaplaniyo logaritma...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oongit

Çok teşekkür ederim, bunu da sizden öğrenmiş oldum.

justice_for_all

buldugunuz degerleri ise yazilimdaki dutymax degiskenine ayri ayri yazarsaniz istediginizi elde etmis olursunuz...

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