Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: oongit - 05 Kasım 2010, 22:26:24

Başlık: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:26:24
Merhaba...

PIC16F877A ve 20 MHz. kristal kullanılarak, neden 100 Hz.'lik (%50 Duty) kare dalga üretilemiyor? CCS C ile PIC Programlama kitabında okumuştum... Minimum 240 Hz. civarında bir PWM frekansı üretilebiliyormuş. Bunun sebebi nedir acaba? Yani neden 100 Hz.'lik bir kare dalga üretilemiyor?

Teşekkürler...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: OG - 05 Kasım 2010, 22:28:39
Datasheet de pwm hesabına bakarsanız görülecektir.

Xtal frequency Lowest useable Pwm frequency
4MHz 145Hz
8MHz 489Hz
10MHz 611Hz
12MHz 733Hz
16MHz 977Hz
20MHz 1221Hz
24MHz 1465Hz
33MHz 2015Hz
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:31:31
Verdiğiniz değerler, üretilebilecek minimum PWM değerleri midir?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 22:32:31
timer1 clcok frekansını dışardan verirseniz istediğiniz hıda üretebilirsiniz. 18F de olduğu gibi 16F de bu özelliği destekliyordu sanırım.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:35:33
4 MHz.'lik kristal OSC1 ve OSC2 pinlerine bağlandığına göre; T1 Clock frekansının zaten dışarıdan verilmiş olduğu anlamına gelmiyor mu?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: OG - 05 Kasım 2010, 22:38:52
Gelmiyor, harici bir osilatör ile üretip Clkin PIN13 den giriş yapılır.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 05 Kasım 2010, 22:41:36
arkadasim 20 MHzde minimum 1.22 kHz uretebiliyosun..

PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)

burdaki formulden hesaplayabilirsin..

PR2 max 255

TMR2 Prescale ise max 16 verebilirsin...

Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: muhittin_kaplan - 05 Kasım 2010, 22:44:34
Bunu ben neden düşünemedim :)
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 22:46:34
T1OSI(RC1) ,T1OSO(RC2) pinleri aynı zamanda timer 1 clcok girişidir ayrı bir kristal veya rc devre ile düşük frekanslı clock uygulayarak istediğiniz yapılabilir.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:47:17
Yardımcı olmaya çalıştığınız için teşekkür ederim arkadaşlar...

CLKIN girişinde mecburen kristal takılı olacağı için, o pine dışarıdan ekstra bir osilatör eklemek olmaz sanırım... Hem dışarıdan devre ekledikten sonra, PWM kodu yazmaktansa 555'li bir devre ile bunu halledebilirim...

Tekrar teşekkürler arkadaşlar...  :(
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 22:48:52
OG hocam dalgın bu aralar söylemek istediğini yanlış anlattı sanırım orası zaten cpu clock girişidir. :)

saygılar.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: muhittin_kaplan - 05 Kasım 2010, 22:50:44
bu extra osc 15 ve 16 pinlere bağlanıyor sanırım.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 05 Kasım 2010, 22:51:53
eger hiz onemli diilsen bence 4 Mhz kristal takip tum sorunlarini halledersin arkadasim....

Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:56:42
100Hz. %50 Duty Cycle PWM sinyali için, OSC1/OSC2 ya da CCP1/CCP2 olsun; bu pinlere dışarıdan bir clock sinyali uygulamak bana mantıksız geldi açıkçası... Yoksa biz bu MCU'ları neden kullanıyoruz ki? 555'li bir devre kurar onunla üretmeye çalışırım olur biter... Ne yapalım? Bu sinyali MCU kullanarak üretebilmek nasip değilmiş demek ki...  :(

Tekrar teşekkür ederim arkadaşlar...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 22:58:15
Ya da 1kHz. PWM üretip, bunu bir frekans bölücü ile 10'a bölsem? Acaba olur mu?  ::)
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 23:01:47
frekans bölücüler yapısı gereği pwm frekansını doğru çevirmez çıkış sinyalindeki eğrisel değişmeler olacaktır buda çalışmanızı etkileyebilir.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:03:45
Sanırım haklısın... Tek çare 555...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 23:12:23
hocam nerede kullanacağınızı söylerseniz daha iyi yardımcı oluruz 555 ile kapalı devre çalışırsanız ilerde müdehale etmeniz zor olur.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:14:28
Alıntı yapılan: justice_for_all - 05 Kasım 2010, 22:51:53
eger hiz onemli diilsen bence 4 Mhz kristal takip tum sorunlarini halledersin arkadasim....

Ne yazık ki önemli arkadaşım...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:17:18
Alıntı yapılan: X-Fi - 05 Kasım 2010, 23:12:23
hocam nerede kullanacağınızı söylerseniz daha iyi yardımcı oluruz 555 ile kapalı devre çalışırsanız ilerde müdehale etmeniz zor olur.
Basit bir metal dedektörü üzerinde çalışıyorum... 100 Hz.'lik sinyal ile IRF740'ı süreceğim...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 23:26:10
komple dijital bir sistem değil demekki pek luzumu yok o zaman pic kullanmanın 555 de yeterli bir pot ayarı ile herz değiştirilede bilir zaten metal dedektörlerinde birsürü pot olur 2 yıl önce bende pcb basıp deltapulse yapmıştım.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 05 Kasım 2010, 23:29:18
peki osilator frekansiniz 4 MHz olsa devrenizde bi aksaklik olurmu...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:34:11
Alıntı yapılan: X-Fi - 05 Kasım 2010, 23:26:10
komple dijital bir sistem değil demekki pek luzumu yok o zaman pic kullanmanın 555 de yeterli bir pot ayarı ile herz değiştirilede bilir zaten metal dedektörlerinde birsürü pot olur 2 yıl önce bende pcb basıp deltapulse yapmıştım.
O bir sürü ayarı minimize edebilmek adına PIC kullanacağım zaten... Ama verici katını da onunla yapabilseydim çok iyi olacaktı... İkincisi; ben frekansla değil, duty cycle ile oynayacaktım... Delta Pulse devresini de referans olarak alıyorum zaten... Ama çok daha kalitelisi olacak... Hattâ; 3 dijital pota kadar da düşürebilirim o devreyi... Ve düşüreceğim de... Yüksek frekanslı kristal kullanarak düşük frekanslı PWM üretebilme isteğim de bunun için... Kristalin yüksek frekanslı olması, alıcı devresi çıkışını daha ayrıntılı olarak yorumlayabilmem için... Sanırım ne yapmaya çalıştığımı anladınız...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:36:56
Alıntı yapılan: justice_for_all - 05 Kasım 2010, 23:29:18
peki osilator frekansiniz 4 MHz olsa devrenizde bi aksaklik olurmu...
PWM üretebilmek için hayır olmaz... Ama analog kanaldan yeteri kadar hızlı bilgi alabilmem ve onu yorumlayabilmem için yüksek hızlı kristal kullanmalıyım... Yani ne yapıp ne edip kristalim 20MHz. olacak
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 05 Kasım 2010, 23:39:40
evet anlaşıldı çalışmanızda başarılar bende biraz kullandım ayarların neye göre nasıl yapıldığını öğrenemeyince bırakmıştım çok ince uğraş gerektiriyor delta pulse siz ticari olarak faydalanmak düşünüyorsanız devam edin ama yapmak istedikleriniz ciddi biriş daha pekçok sorunla karşılaşacaksınız analog ve dijital birbirini hiç sevmez kolay gelsin.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 05 Kasım 2010, 23:40:33
anladim arkadasim o zaman pwmi yazilim icinde timer ile yapmak zorundasiniz frekansida dusuk nasil olsa rahatlikla yapabilirsiniz...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:45:44
Alıntı yapılan: X-Fi - 05 Kasım 2010, 23:39:40
evet anlaşıldı çalışmanızda başarılar bende biraz kullandım ayarların neye göre nasıl yapıldığını öğrenemeyince bırakmıştım çok ince uğraş gerektiriyor delta pulse siz ticari olarak faydalanmak düşünüyorsanız devam edin ama yapmak istedikleriniz ciddi biriş daha pekçok sorunla karşılaşacaksınız analog ve dijital birbirini hiç sevmez kolay gelsin.
Elbette ticari olarak düşünüyorum... Burada önemli olan; doğru kodu, doğru yerde ve zamanda kullanmak... İşin sırrı burada...

Delta Pulse'i anlamak için kaç PCB tasarladığımı, bunun için kaç saat harcadığımı bir bilseniz... Ama iyi ki o vakti harcamışım... Artık PI sistemlerin çalışma mantığını çok çok daha iyi biliyorum...

Merak etmeyin, analog ve dijital birbirini sevebilir, sevmelidir, sevecektir...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:46:58
Alıntı yapılan: justice_for_all - 05 Kasım 2010, 23:40:33
anladim arkadasim o zaman pwmi yazilim icinde timer ile yapmak zorundasiniz frekansida dusuk nasil olsa rahatlikla yapabilirsiniz...
Mesela?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 05 Kasım 2010, 23:53:20
siz 100 Hz istiyosunuz yani 10 ms periyodu ornegin timeri 100 us ayarladik dimi periyodumuzda 100 olsun...

100*100 us =10 ms yapar..

koduda su sekilde

timer kesmesi
{
        if(++periyot==100)
          {
             pwmpini =1;
             periyot=0;
          }

           if(duty-periyot==0)       //duty=50  -> %50 duty
              {
                    pwmpin=0;
              }

}
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 05 Kasım 2010, 23:58:53
Mantıklı... Denemeye değer...

Peki; PWM frekansı sabit kalmak koşuluyla, 2 buton ile duty değerini artırıp azaltabilir miyim? Bu arada duty değerini artırıp azaltırken, programda herhangi bir kesme meydana gelecek midir? Çünkü bu işlemi yaparken, programın kesintiye uğramasını istemiyorum. Eğer kesintiye uğrarsa, analog kanaldaki bilgiyi yorumlamada sıkıntılara yol açabilir diye tahmin ediyorum...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 06 Kasım 2010, 00:19:41
Harici kesme girislerine buton koyarak yapabilirsin..

harici kesme fonksiyonundada duty cycle ni attirip azaltabilirsin ..
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 06 Kasım 2010, 00:22:16
Valla ne yalan söyleyeyim... Şu kesme olayını halâ tam olarak çözebilmiş değilim... Demek ki biraz daha üzerinde çalışmalıyım... Ama kısa zamanda çözerim sanırım...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 06 Kasım 2010, 00:27:20
simdi baktin da 877A da harici kesme bitane var ozaman B4-B7 pinlerinde olusan kesmelere koyabilirsin..

veya butonlari herhangi iki pine baglarsin bu pinlerden den 1 tane iki girisli AND kapisina baglarsin butonlar yukari cekme direnciyle 5volta bagli olacak AND kapisininda cikisini INT0 pinine baglarsin butonlarda herhangi bi degisiklik olmayinca AND kapisinin cikisi 1 olacagi icin kesme meydana gelmez butonlarin herhangi bitine basilinca AND kapisi 0 olur ve kesme meydana gelir kesmede butonlara bagli pinleri okuyarak if in icinde arttirip azaltabilirsin...

birinci yol daha kolay ama birinci yolda butona basinca kesme oluyor nutondan elimizi cekincede kesme oluyor..hata meydana gelebilir ama birinci durumdada if kosulu yaparak hangi butona basildigini bulabilirsiniz...


Kolay gelsin...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 21:44:27
Yapmak istediğim devrenin başlangıcı böyle:
http://www.upload.gen.tr/resim.php/s16/3k5l02ry/Ads__z.jpg.html

PWM başladığı zaman, Duty Cycle %50 olarak başlayacak.
Arttır butonuna tıkladığımda Duty Cycle %5 artacak,
Azalt butonuna tıkladığımda Duty Cycle %5 azalacak...
Duty Cycle oranı min. %10, max ise %90 olacak
Ve CCP1 veya CCP2 pininden sabit 100 Hz. alacağım...

4 Mhz kristal kullanıldığında min. PWM frekansı donanımsal olarak 249 Hz. olabiliyormuş... Frekans bölücü kullanımı PWM'i bozabiliyormuş... Peki o halde yazılımsal olarak nasıl 100 Hz. PWM alabilirim.

NOT: PWM frekansı üretilirken ve Duty Cycle değiştirilirken, programda kesinlikle bir kesme ya da sapma olmamalı... Bu mümkün müdür? Mümkünse nasıl?  :-\
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 21:50:14
Yine de problem çıkabilir diyorsanız; mebcuren 250 Hz. kullanacağım... Peki 250 Hz. için aşağıdaki kod nasıl değişmeli?

setup_timer_2(T2_DIV_BY_16,170,1);
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 21:51:55
100 hz pwm alamazsin 4 mhz ile alabilecegin dedigin gibi 250 hz... benim yazdigim programi denemedin mi 100 hz uretmiyomu...

Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 21:56:27
Alıntı yapılan: justice_for_all - 11 Kasım 2010, 21:51:55
benim yazdigim programi denemedin mi 100 hz uretmiyomu...
Yanlış hatırlamıyorsam kesmelerden falan bahsetmiştiniz... Açıkçası programda kesme olabileceği fikri beni endişelendirdi. Üstelik C dilinde henüz acemi olduğum için programı tam olarak nasıl yazmam gerektiğini bilemedim... Bu yüzden de denemedim.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: neural - 11 Kasım 2010, 22:04:37
Programda kesme oluşuyor ancak o kesmeler pwm üretmek için ayrıca kesme içerisindeki kodlar basit olduğu için çok fazla bir bekleme olmuyor.
Buton okuma işini main program içerisinde de yapabilirsiniz. Bu şekilde butona basıldığında program kesintiye uğramaz. Arkadaşların bahsettiği kesme ana program çalışırken araya daha önemli bir programın girip çalışması oluyor. Yani kesme programı sizin pwm üreten programınız, ana program altında da buton okuma, ledlerin kontrolu, lcd kontrolü gibi uygulamaları yapabilirsiniz.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 22:06:12
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)

buformulden yerine koyarsak  PR2=255 presscale icin ise 1 koyarak hesaplarmisin...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 22:08:40
arkadasim PR2 ye 0 ver prescale e de 1 ver ve hesapla...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 22:17:19
O formülde nasıl hesaplayacağım, anlayamadım...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 22:36:58
arkadasim sana lazim olan PR2 degeri

PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value) 

(pwm periyot * FOSC/ 4/timer2 prescale )-1=PR2

simdi FOSC= 4Mhz
timer prescale=16 verin
pwm periyot=1/250=0.004

PR2yede =249 verip formulde yerina koyarmisiniz...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 22:48:17
setup_timer_2(T2_DIV_BY_16,170,1);
Yukarıda verdiğim kodu, aşağıdakine çevirdim..
setup_timer_2(T2_DIV_BY_16,249,1);
ISIS simülasyonunda 250 Hz. verdi  :)
Çok teşekkür ederim...

Peki az önce sorduğum Duty Cycle işini nasıl yapacağım?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 22:56:34
Programı şu şekilde yaptım:
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(c)
#use fast_io(d)

int i=5; //Tamsayı tipinde değişken tanımlanıyor

void main()
{
   setup_PSP(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   
   set_tris_d(0b11000000);    //RD6 ve RD7 giriş
   set_tris_c(0b11111001);    //RC1 ve RC2 çıkış
   
   setup_ccp1(CCP_PWM);       //CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);       //CCP2 birimi PWM çıkışı için ayarlandı
   setup_timer_2(T2_DIV_BY_16,249,1);
   
   set_pwm1_duty(i);
   set_pwm2_duty(i);
   
   while(1)
   {
      if (input(pin_d7))
      {
         delay_ms(20);
         while(input(pin_d7));
         i+=3;
         
         if (i>=170)
         i=170;
         
         set_pwm1_duty(i);
         set_pwm2_duty(i);
      }
     
      if (input(pin_d6))
      {
         delay_ms(20);
         while(input(pin_d6));
         i-=3;
         
         if (i<5)
         i=5;
         
         set_pwm1_duty(i);
         set_pwm2_duty(i);
      }
   }
}

Peki Duty Cycle oranının min. ve max. seviyesini ve %5'lik değişimlerini nasıl yapacağım?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 22:57:16
yani eger programinizin aksamasi problem yaratmazsa sonsuz dongude butonlari kontrol ettirirsiniz ama yok benim programim baska islerlede ugrascak zaman benim icin onemli diyosan o zaman kesme ile yapmak zorundasiniz...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 23:02:12
Alıntı yapılan: justice_for_all - 11 Kasım 2010, 22:57:16
yani eger programinizin aksamasi problem yaratmazsa sonsuz dongude butonlari kontrol ettirirsiniz ama yok benim programim baska islerlede ugrascak zaman benim icin onemli diyosan o zaman kesme ile yapmak zorundasiniz...
PWM arka planda sürekli çalışırken, program başka işlerle uğraşmak zorunda... Zaman ciddi derecede önemli... Hassasiyet için µs'lerin bile ciddi önemi var...

Aslında çift işlemci kullansam da olur ama, bu sefer de maliyeti artacak cihazın... Mesela PIC16F84 ya da PIC16F628 PWM ve Duty Cycle işi ile uğraşırken, PIC16F877 de asıl programı yürütebilir...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: iyildirim - 11 Kasım 2010, 23:09:29
Peki niçin daha güçlü bir işlemci kullanmıyorsunuz.. Niçin illa da 16F olması gerekiyor.  1-2 TL  daha pahalı diyemi ?


Hoşçakalın,
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 23:12:44
Alıntı yapılan: iyildirim - 11 Kasım 2010, 23:09:29
Peki niçin daha güçlü bir işlemci kullanmıyorsunuz.. Niçin illa da 16F olması gerekiyor.  1-2 TL  daha pahalı diyemi ?


Hoşçakalın,

Daha güçlü derken? Mesela Atmel falan mı?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: muhittin_kaplan - 11 Kasım 2010, 23:26:52
sanırım iyıldırım arm dan bahsdiyor. us önemli olunca ister istemez daha hızlı işlemciler devreye girer.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: iyildirim - 11 Kasım 2010, 23:28:52
Hayır 24F, 30F, 33FJ,  gibi 16 bit işlemcilerden bahsediyorum.  Atmel de kötü değil fakat ben Farnell den ısmarlamak istediğimde 16 bit ATXMEGA ların  TÜRKiYE'ye  satışına izin verilmediğini öğrenmistim.  O yüzden Microchip le çalışmaya başlamıştım.  ???

16 serileri genellikle 5 MIPS işlem gücü sağlar iken 30F' ler 30 MIPS, 33FJ'ler 40 MIPS işlem gücü sağlıyor. Üstelik high end bir işlemci seçerseniz bir sürü işi direkt olarak peripheral'a bırakıyorsunuz. Hatta DMA de kullanabilirsiniz. 2Mbit hızla UART kulllanırken işlemcinizi yüzlerce byte göndermek için tek bir byte göndermek için kullandığınız  kadar yoruyorsunuz ..  İşlemciniz size kalıyor.  :)

Lütfen Microchip hayranı gibi algılamayın beni. Gözünüz kesiyorsa ARM 'lere bulaşın. Ben, şu anki aklım olsaydı direk ARM'lerle başlardım.. 

Kolay gelsin..

Hoşçakalın
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: X-Fi - 11 Kasım 2010, 23:34:27
hocam neden ATXmega ların türkiyeye satış yapılmıyor firma türkiyeye mal dağıtımını yasaklamış yoksa beklemedemiyiz altyapı oturmadığı için. Bu garibime gitti halbuki atxmegaların atmega serisinden daha performanslı ve ucuz olduğunu biliyoruz.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 23:35:10
Bilgi verdiğiniz için teşekkür ederim... Gözüm korktu açıkçası... Önce 16F'leri öğreneyim, sıra elbet bir gün onlara da gelir... ama şimdilik benim boyumu aşar  ::)

Şimdi; anladığım kadarıyla, min. PWM frekansı, kullanılan MCU'nun harici osilatörüne bağlı, ve bu frekans 4 MHz. kristal için 249 Hz... Bildiğim kadarıyla da 16F628'in içinde bir adet dahili osilatör mevcut... Bu dahili osilatörün frekansını değiştirip, alçak frekanslı PWM üretebilecek şekilde yapılandırabiliyor muyuz?
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: iyildirim - 11 Kasım 2010, 23:38:12
Sayın Muhittin_Kaplan;

Ben yazarken siz benden önce davranmışsınız. Kötüde olmamış.

Aslında söylemek istediğim;
İşe uygun ne ise onu kullanmanız.. Ancak küçükte olsa bir proje geliştirmek için belli bir altypı (donanım,programlayıcı, tecrübe vs.) gerektiği düşünüldüğünde hem burada, hem de diğer Türkçe kaynaklara baktığımda gençlerimizin (ben artık kendimi genç veya orta yaşlı saymıyorum.)  çok gerilerden başladığını, çok zaman kaybettiklerini düşünüyorum.  Bu biraz iç dökme gibi oluyor ama Lütfen mazur görün.. 

Hoşçakalın
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 23:45:07
bence koyun butonlari B4-B7 pin degisikligi kesmelerine olsun bitsin programiniz aksamamis olur butonlarada basinca dutyniz azalir cogalir...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 11 Kasım 2010, 23:46:47
PORTB'de LCD bağlı olacak...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: iyildirim - 11 Kasım 2010, 23:50:20
X-Fi;

Sayın Muhittin_Kaplan ile benzer hedeflerimiz var..

Fazla uğraşmadan(pcb, tasarım vs. ) bir IMU'ya sahip olmak için ST'nin i-NEMO kodlu ürününü almak istemiştim. Üzerine ihtiyacım olan neredeyse herşey vardı. Digikey bu ürünün Amerikan Gümrük İdaresi tarafından  belli ülkere satışının yasaklandığını söyledi ve siparişimi reject etti. Farnell' deki ATXMEGA lar da aynı nedenle bana satılmadı.. 

oongit ;
Lütfen gözünüzü korkutmayın. Ben şu anda burada verilen 16-18 serisi örneklerin inanın hiçbirini anlayamıyorum.  Çünkü hiç bunlarla çalışmadım, uğraşmadım.  Sadece karar verip ilgili datasheet'leri okumanız yeterli.. İsterseniz elimden geldiğince yardımcı olmayada bende, eminim ki diğer üyelerde çalışacaktır.  Ben boyunuzun yeterli olduğunu düşünüyorum.

Hoşçakalın,

Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 11 Kasım 2010, 23:53:08
o zaman lcdyi PORTDye gecirmelisiniz eger devreyi cizmediyseniz...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:00:39
Alıntı yapılan: iyildirim - 11 Kasım 2010, 23:50:20
oongit ;
Lütfen gözünüzü korkutmayın. Ben şu anda burada verilen 16-18 serisi örneklerin inanın hiçbirini anlayamıyorum.  Çünkü hiç bunlarla çalışmadım, uğraşmadım.  Sadece karar verip ilgili datasheet'leri okumanız yeterli.. İsterseniz elimden geldiğince yardımcı olmayada bende, eminim ki diğer üyelerde çalışacaktır.  Ben boyunuzun yeterli olduğunu düşünüyorum.

Hoşçakalın,

Sn. "iyildirim";

Moral verdiğiniz, teşvik ettiğiniz için gerçekten çok teşekkür ederim... 16F serisiyle çalışmaya mecburum desem yeridir... Bırakın Atmega veya ARM serisini, buralarda 18F serisini bulmak bile çok zor... Ben elektronik komponent satan bir dükkânda çalışıyorum ve neredeyse bir çok dükkânla da dolaylı olarak bağlantım var... Bunları bulmak cidden güç bir iş... 16F877'nin 20 MHz.'lik olanından bile bir çoğunun haberi dahi yok...

Günlerdir burada bir çok arkadaşımız ellerinden geldiğince bana yardımcı olmaya çalışıyorlar zaten... Hepsine tek tek teşekkür etmeyi bir borç bilirim...

Olayın mantığını çözmeye çalışıyorum ben de... Zamanla çözeceğime de eminim... Ancak; çok zaman kaybettiğimin farkındayım. Bu yüzden bu forumda "işi bilenlere" soruyorum ki; sorunumu veya sorunlarımı çözebileyim... Beni anladığınızı umuyorum...

Tekrar teşekkürler...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:08:55
Alıntı yapılan: justice_for_all - 11 Kasım 2010, 23:53:08
o zaman lcdyi PORTDye gecirmelisiniz eger devreyi cizmediyseniz...

Böyle bir imkân da varmış demek ki... Ben de az önce öğrendim... Hayır devreyi çizmeyi bitirmedim henüz... Zaten çizmiş olsam da değiştirirdim hemen...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: iyildirim - 12 Kasım 2010, 00:11:33
Talep edenler olarak ne istiyorsak, arzedenlerden onları bulabiliyoruz.


Hoşçakalın..
 
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:13:07
Kesinlikle haklısınız... Ancak bunu her forum için söyleyemeyeceğim...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:13:59
evet lcdyi baska porta baglama imkaniniz var...kodda bi kac duzeltme sadece okadar...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:19:53
Peki...

Şimdilik kod karmaşasına pabuç bırakmayıp, gerekirse bir kaç TL daha fazla harcayıp, 1 yerine 2 MCU kullanıp, PWM için 16F628 ve dahili osilatörünü kullanıp, düşük frekanslı PWM üretmeye devam etme taraftarıyım.

MCU: 16F628
OSC: Internal
PWM: 100 Hz - 300 Hz Ayarlı (%10 Hassasiyet ile)
Duty: %10 - %90 Ayarlı (%5 Hassasiyet ile)

Ama nasıl ???
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:23:01
baska ne takmayi dusunuyosunuz 877 ye...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:26:01
2x16 LCD, akü kapasitesini ölçmek için ek bir devre, akü göstergesi (3 LED'li), bir VCO... Şimdilik aklıma gelenler bunlar...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:29:38
İnadım inat... Vazgeçmeyeceğim... Bunların hepsini tek bir F877 yapacak, yapmalı... >:(
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:30:53
o zaman bence baska entegre almatin derim ben cunku pwmoicin calismasina engel olmaz portb ye butonlari koyarsaniz oda engel olmaz eger kesme yapamayacaginiz icin baska pic aliyosaniz almayin kesme isini ben hallederim ok...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: muhittin_kaplan - 12 Kasım 2010, 00:31:46
işte Programcılık Bu Olsa Gerek :)
olayı bitirdiniz bence şimdiden hayırlı olsun.
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:33:19
Alıntı yapılan: muhittin_kaplan - 12 Kasım 2010, 00:31:46
işte Programcılık Bu Olsa Gerek :)
olayı bitirdiniz bence şimdiden hayırlı olsun.
Galiba :)
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:35:05
Alıntı yapılan: justice_for_all - 12 Kasım 2010, 00:30:53
o zaman bence baska entegre almatin derim ben cunku pwmoicin calismasina engel olmaz portb ye butonlari koyarsaniz oda engel olmaz eger kesme yapamayacaginiz icin baska pic aliyosaniz almayin kesme isini ben hallederim ok...

O zaman ben en kısa zamanda devreyi çizeyim. Yapmak istediklerimi de net olarak anlatayım...
Takıldığım her yerde, bir forum uzağımdasınız ona göre :)
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:38:08
ok aksamlari ben hep burdayim mailim altta yaziyo zaten siz sadece proteusda baglayip kodunu yazin sadece kesme olayini bana birakin hallederim...ok...simdiden baslatin derim ben hatta hemen kodu yazim ben biyere yukleyin kodu devreyi proteusda cizdikten sonra...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:41:37
Tamam... En kısa zamanda... Tekrar tekrar teşekkürler...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:43:30
bekliyorum ben o zaman...

Iyi Calismalar...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:46:55
Yarın akşam devre çizimi tamamlanmış olacaktır muhtemelen... Sizi de yordum bu arada; beni mazur görün...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 00:52:25
yok hocam yorulmasi ...

gayet iyiyim ben ok yarin bekliyorum o zaman ama butonlari  pullup direnciyle +ya baglayin yani basinca 0 gitsin ok...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 00:54:31
Tamam...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 20:47:07
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

int i=5; //Tamsayı tipinde değişken tanımlanıyor

void main()
{
   setup_PSP(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   
   set_tris_b(0b11111111);
   set_tris_c(0b11111001);
   set_tris_d(0b00000000);
   
   setup_ccp1(CCP_PWM);       //CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);       //CCP2 birimi PWM çıkışı için ayarlandı
   setup_timer_2(T2_DIV_BY_16,249,1);
   
   set_pwm1_duty(i);
   set_pwm2_duty(i);
   
   while(1)
   {
      if (input(pin_b6))
      {
         delay_ms(20);
         while(input(pin_b6));
         i+=5;
         
         if (i>=249)
         i=249;
         
         set_pwm1_duty(i);
         set_pwm2_duty(i);
      }
     
      if (input(pin_b7))
      {
         delay_ms(20);
         while(input(pin_b7));
         i-=5;
         
         if (i<5)
         i=5;
         
         set_pwm1_duty(i);
         set_pwm2_duty(i);
      }
   }
}


Bu sefer resim eklemeyi beceremedim... Upload.gen.tr de açılmıyor. Nasıl yapacağım bilmiyorum...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 20:59:45
http://www.dosyaupload.net/556Adsız.jpg
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 21:18:19
invalid link diyor arkadasim

http://www.imageshack.us/ busiteye yuklermisin..
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 21:22:46
[IMG]http://img201.imageshack.us/img201/4387/adszvhn.th.jpg[/img] (http://img201.imageshack.us/i/adszvhn.jpg/)

Uploaded with ImageShack.us (http://imageshack.us)
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 21:38:28
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

int i=5; //Tamsayý tipinde deðiþken tanýmlanýyor

#int_RB
void  RB_isr(void)
{
      if (input(pin_b6))
      {
         //delay_ms(5);//boyle kullan olmazsa  delayms leri acarsin ok
         i+=5;
         
         if (i>=249)
         i=249;
         
         set_pwm2_duty(i);
      }
     
      if (input(pin_b7))
      {
         //delay_ms(5);//boyle kullan olmazsa  delayms leri acarsin ok
         i-=5;
         
         if (i<5)
         i=5;
      }
     
      set_pwm1_duty(i);
      set_pwm2_duty(i);

}

void main()
{
   setup_PSP(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   
   set_tris_b(0b11111111);
   set_tris_c(0b11111001);
   set_tris_d(0b00000000);
   
   setup_ccp1(CCP_PWM);       //CCP1 birimi PWM çýkýþý için ayarlandý
   setup_ccp2(CCP_PWM);       //CCP2 birimi PWM çýkýþý için ayarlandý
   setup_timer_2(T2_DIV_BY_16,249,1);
   
   set_pwm1_duty(i);
   set_pwm2_duty(i);
   
   while(1)
   {

   

   }
}


boyle bidenermisiniz...proteusda...bekliyorum olmasi gerek ama simdi bence butonlari b4 ve b5 e alirsaniz daya ii olur eger entegreyi devre uzerinde programlicaksaniz veya debug yapcaksaniz eger entegreyi zif sokette programlicaksaniz boyle kalabilir...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 21:43:27
250 Hz PWM alabiliyorum. Ancak "ARTTIR" ve "AZALT" tuşları ile Duty oranını ayarlayamıyorum..
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 21:47:11
Devre ilk açıldığında Duty %50 olarak başlamalı,
"Arttır" butonuna her tıkladığımda, Duty oranı %5, %5 artmalı,
"Azalt" butonuna her tıkladığımda, Duty oranı %5, %5 azalmalı...

Umarım anlatabilmişimdir  ???
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 21:58:06
ozur sunu eklememeyi unutmusum

   setup_ccp1(CCP_PWM);       //CCP1 birimi PWM çýkýþý için ayarlandý
   setup_ccp2(CCP_PWM);       //CCP2 birimi PWM çýkýþý için ayarlandý
   setup_timer_2(T2_DIV_BY_16,249,1);
 
   bu satirdan sonra

asagidakini kopyala yapistir...

   
   enable_interrupts(int_rb);
   enable_interrupts(global);
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 22:01:55
int i =5 ; tanimlamasinida asagidaki ile degistir ok...

int i=125; //Tamsayý tipinde deðiþken tanýmlanýyor
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 22:03:15
Tamam şimdi çalıştı... Ancak; yukarıda bahsettiğim şekilde nasıl değiştirmeliyiz bu programı?

Devre ilk açıldığında Duty %50 olarak başlamalı,
"Arttır" butonuna her tıkladığımda, Duty oranı %5, %5 artmalı,
"Azalt" butonuna her tıkladığımda, Duty oranı %5, %5 azalmalı...

Duty min. %10, max. %90 olacak şekilde olabilmeli...

Çok şey istiyorum sanırım...  :-[

NOT: Sonsuz teşekkür ederim. Hakkınızı ödeyemem...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 22:16:47
int i =5 ; tanimlamasinida asagidaki ile degistir ok...

int i=125; //Tamsayý tipinde deðiþken tanýmlanýyor


%5 arttirma;

250 * 5 /100 =12 yani i yi 12 ser azaltip cogaltman gerek yani soyle olcak


      if (input(pin_b6))
      {
         //delay_ms(5);//boyle kullan olmazsa  delayms leri acarsin ok
         i+=12;
         
         if (i>=252)
         i=240;
      }
     
      if (input(pin_b7))
      {
         //delay_ms(5);//boyle kullan olmazsa  delayms leri acarsin ok
         i-=12;
         
         if (i<=12)
         i=12;
      }
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 22:24:59
Süpersiniz...

Şimdi yazılan bu kodla min. duty %10, max. duty %90 mı olmuş oldu? Proteus osiloskoptan tam anlayamadım ama olmuşa benziyor...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 22:33:01
eger min %10 yapmak istiyosaniz

bu islemde 

         i-=12;
         
         if (i<=24)
         i=24;

olcak

%90 icin de


         i+=12;
         
         if (i>=216)
         i=216;


boyle duzeltirseniz olur ayrica osilascoptan kareleri sayarakda yuzde hesaplayabilirsiniz ama ben bunu hesapla yaptigim icin buyuk ihtimalle dogru...
Kolay Gelsin...
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: oongit - 12 Kasım 2010, 22:42:52
Harikasınız... İnanın ne diyeceğimi bilemiyorum...

Peki bu hesaplamaları neye göre yapıyorsunuz? Yani PR2 veya diğer şeyleri nasıl hesaplıyorsunuz? O komutlarda nasıl yerine koyuyorsunuz? Bunları da kaparsam çok yol katetmiş olacağım sanırım...

Tekrar tekrar teşekkürler... ;D
Başlık: Ynt: PIC16F877A min. PWM frekansı
Gönderen: justice_for_all - 12 Kasım 2010, 22:51:58
simdi hocam sana PR2 hesaplama formulu sana mesajlarimda vermistim orda kullacagin degerleri koyup PR2 yi buluyosun...

cozunurluk formulu var bide kullancagin pwm frekansini kac bit kullanacagini buluyosun bu formulde

cozunurluk = log(FOSC/FPWM) / log(2)    bit kullanabilirsin...

yuzdeleride kullanabilecegin cozunurluk bitine gore hesapliyosun

mesela seninki 8 bitlik yani 255 deger alir ben duz hesap 250 aldim %10 ->  250*10/100=25 ben hesap duz olsun die 24 yaptim...hesap boyle...