Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: serhat1990 - 21 Mart 2012, 22:15:19

Başlık: Yazılımsal Pwm
Gönderen: serhat1990 - 21 Mart 2012, 22:15:19
Merhaba arkadaşlar , ben yazılımsal pwm yapmak istiyorum 2 kanal falan yaptım sıkıntısız çalışıyor yalnız 8 kanal gibi bir ihtiyacım var. Ayrıca her kanal dışarıdan kontrol edileceğinden program sürekli denetleme durumunda yaptım pwm'i fakat veri beklemek falan işlemleri karıştırıyor. Tam olarak çözebilmiş değilim bu konuda fikir verebilecek arkadaşlardan cevap bekliyorum. Benim izlediğim yol 2 tane timer kullandım 1 timer 4 kanalı diğer timer'da diger 4 kanalı kontrol ediyor. Osilaskopta gözlemlediğimde pwm sinyalinin sonunda bir bosluk var . Yani diger pwm sinyali olusmadan arada bir bosluk var. Yardımcı olursanız sevinirim iyi çalışmalar...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: z - 21 Mart 2012, 22:35:16
https://www.picproje.org/index.php/topic,35896.msg266261.html#msg266261 (https://www.picproje.org/index.php/topic,35896.msg266261.html#msg266261)

Linkteki int rutinini kullanabilirsin.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 21 Mart 2012, 22:53:07
Sağolun Bülent Hocam çok teşekkür ederim ,
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 30 Mart 2012, 16:36:13
Yazılımsal pwm oldu yalnız söyle bir sıkıntı yaşıyorum. Simulasyon ortamında osilaskopta falan çok güzel bir sinyal görüyorum fakat gerçekte denediğimde bazı portlarda görmem gereken gerilimleri görüyorum fakat bazılarında alakasız degerler cıkıyor bunun nedeni ne olabilir acaba.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 02 Nisan 2012, 14:42:27
Bu konu hakkında yorumu olan yokmu çıkışları tek tek inceledim , simulasyon ortamında sonuçlar çok güzel fakat gerçekte alakasız değerler görüyorum 

pwm şu sekilde sağlanıyor... pwm1 ,pwm2,pwm3... hepsi b portunda... 16mhz osc kullanıyorum...

if(TMR1IF)
 
{
pwmsayici++; //pwm sayıcısını arttır. ( peryod için kullanırım )
GIE=0;PEIE=0; //GENEL VE YARDIMCI KESMELER KAPATILIR...
TMR1ON=0; //TMR1 SAYMAZ.
TMR1L=0xFC; // TMR1 DEGERİNE 65532 YÜKLENİR ( 3 KERE SAYACAK )
TMR1H=0xFF; // TMR1 DEGERİNE 65532 YÜKLENİR / 3 KERE SAYACAK )

if(pwmsayici==pwmvariable1)PWM1=0;
if(pwmsayici==pwmvariable2)PWM2=0;
if(pwmsayici==pwmvariable3)PWM3=0;
if(pwmsayici==pwmvariable4)PWM4=0;
if(pwmsayici==pwmvariable5)PWM5=0;
if(pwmsayici==pwmvariable6)PWM6=0;
if(pwmsayici==pwmvariable7)PWM7=0;
if(pwmsayici==pwmvariable8)PWM8=0;

if(pwmsayici==1024)
{
pwmvariable1=100;//pwmdeger1; //pwm1 'in duty degeri yüklenir.
pwmvariable2=200;//pwmdeger2; //pwm2 'nin duty degeri yüklenir.
pwmvariable3=400;//pwmdeger3; //pwm3 'ün duty degeri yüklenir.
pwmvariable4=500;//pwmdeger4; //pwm4 'ün duty degeri yüklenir.
pwmvariable5=700;//pwmdeger5; //pwm5 'in duty degeri yüklenir.
pwmvariable6=800;//pwmdeger6; //pwm6 'nın duty degeri yüklenir.
pwmvariable7=900;//pwmdeger7; //pwm7 'nin duty degeri yüklenir.
pwmvariable8=1000;//pwmdeger8; //pwm8 'in duty degeri yüklenir.
pwmsayici=0;
PORTB=255;

}
TMR1IF=0; //bayragı temizle
TMR1ON=1; //TİMER1 BASLATILIR...
GIE=1; //kesmeleri ac
PEIE=1; //yardımcı kesmeleri ac.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 02 Nisan 2012, 16:32:12
Gerilimler tam gözükmeye başladı sayılır fakat bir kac kanalda 5-10mV Bir fark söz konusu osilaskop görüntüsü aşağıdadır. Sizce ne yapmak gerekiyor. Her kanalda olsa neyse diyecem  ama bazı kanallarda şaşırttı beni.

Görüntüler aşağıdaki gibidir.

(http://s17.postimg.cc/kyp9xqsvf/G_r_nt_367.jpg) (http://postimg.cc/image/kyp9xqsvf/)

(http://s17.postimg.cc/4oz3uui7f/G_r_nt_368.jpg) (http://postimg.cc/image/4oz3uui7f/)
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 02 Nisan 2012, 17:12:35
- O portun hepsinin çıkış olduğuna emin misin ?
- O portlardan herhangi birinde, o porta özel bir özellik olup ta bu özellik aktif durumda olabilir mi?( işlemci modelin nedir? )
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 02 Nisan 2012, 17:15:21
1827 kullanıyorum hocam , portun hepsi cıkıs cünkü gerilimleri tam görmeye basladım fakat bazı pinlerde 5-10 mV farklılıklar var. Buda kafamı karıştırıyor. Neden sadece bir kaç kanalda var yada neden hepsinde yok..
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 03 Nisan 2012, 08:48:10
ANSELB
LATB
OPTION_
PORTB
TRISB
WPUB


Bu registerların hepsini kontrol ettiğine emin misin hocam. Bu portta bir çok özellik var, Bunlara iyice bakıp, o özellikleri doğru ayarlamalı, iptal etmelisin...


Özellikle datasheet teki TABLE 12-5: PORTB OUTPUT PRIORITY' ye bakarsan, o portlarda neler olduğunu görebilirsin...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 09:02:28
Hocam hepsini kontrol ettim , onlarda sıkıntı yok... Nedenini çözebilmiş değilim.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 10:44:43
RC filtre falan çok şey denedim fakat resimlerde kırmızı ile belirtilen dalgalanmayı önleyemedim bu yüzden voltaj değeri bazı pwm kanallarında 5-10mV civarı bir oynama yapıyor sizce nasıl bir filtre uygulamalıyım.

(http://s7.postimg.cc/4146fu4hz/pwmm.jpg) (http://postimg.cc/image/4146fu4hz/)

(http://s7.postimg.cc/z9crd5u87/pwmmm.jpg) (http://postimg.cc/image/z9crd5u87/)
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 03 Nisan 2012, 10:50:30
hocam resimlerde net gözükmüyorda, yazılımdan da anladığım kadarı ile senin timer kesmesine girme süren çok mu kısa sanki? 65536-65532 = 4usn çok kısa bir süre. Bu kadar hızlı kesmeye gidersen stabil bir pwm alamazsın bu arada. Fakat senin bu alttaki kırmızı işaretli yerlerdeki dalga çok garip . sanki hatta bir capacitor varmış gibi. Hocam bu arada bu ölçümü yaparken bu ölçtüğün bacaklar tamamen boşta değil mi, ve de işlemcinin bacağının dibinden ölçüyorsun ? 
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 11:16:12
Aynen hocam dediğiniz gibi ölçüyorum benim anlamadığım şey kondasatör şarj olma karakteristiği gibi alttaki işaretli bölüm. Timer süresine gelince hocam uzun tutunca pwm periyodu çok uzun oluyor buda çıkış voltjında değişimler gözükebiliyor.  Ondan dolayı çok kısa hocam...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 03 Nisan 2012, 11:36:24
yalnız timer kesmesi içerisindeki if komutlarının koşullarına göre kesme içinde her seferinde farklı zamanlar geçeceğinden, zaten pwminde bir kararsızlık olacaktır.  Bu arada bu bahsettiğim kararsızlık olmaması için de timer değerine daha düşük bir değer yükle ve timer ı hiç bir zaman durdurma, kesmenin içinde de saysın...

Ama senin şu eğri, sanki pinin çıkışında bir direnç ve kondansatör varmış gibi... Sen yine de bi şu portların capacitive touch vs. özellikleri kısmını felan bi kontrol et... :)
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 11:48:32
Anladım hocam , kesmeyi hiç durdurmazsam örneğin 8.kanal 10 bit değer üzerinden 15 yüklendi diyelim geLen veriye göre . Ama ben kesmeyi kapatmadığımdan oraya gelene kadar kesme girdiğinden araya puls üretirkenki gecikme sıkıntı yaratmazmı sizce hocam. Parazit sadece puls'in kenarlarında var osilaskopta gördüğüm kadarıyla voltaj değerinede bakarken söyle birsey dikkatimi çekiyor. 5 10 mV bir fark var diyorum ya bu fark sürekli değil şu şekilde örneğin görmem gereken değer 1.615 v olsun ben su degerleri goruyorum sureklı degiserek , 1.615 , 1.614 , 1.610 , 1.617 , 1.620 gibi ...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 03 Nisan 2012, 13:15:21
Alıntı yapılan: serhat1990 - 03 Nisan 2012, 11:48:32
Anladım hocam , kesmeyi hiç durdurmazsam örneğin 8.kanal 10 bit değer üzerinden 15 yüklendi diyelim geLen veriye göre . Ama ben kesmeyi kapatmadığımdan oraya gelene kadar kesme girdiğinden araya puls üretirkenki gecikme sıkıntı yaratmazmı sizce hocam.

zaten o yüzden diyorum ya kesme süresini uzatman gerekir diye. Fakat scobe da görünen o gıcık eğrinin bununla bir ilgisi yok zaten. bu arada senin asıl sorunun 10mV civarındaki dengesizlik ise, bu zaten ölçtüğün ölçü aletine göre bile değişkenlik gösterebilir. Zaten senin çözünürlüğün 10 bit ise
5V/1024 = 4.88 mV. Bu durumda 10mVluk bir ripple da normal gözüküyor...

Fakat benimde kafama takılan şu porttaki eğri... Bana sorarsan, senin hala bazı register ayarlamalarında sıkıntı var. İşlemcilerin extra özellikleri ve dolayısıyla Özel Registerları çoğaldıkça, bu tarz noktalar, yazılımda gözden kaçabiliyor...


Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 13:49:05
Hocam b portunu kullanıyorum uygulamamda , pull_up devre dışı bıraktım , analog modul comparator vs hepsi kapalı . Ama bi datasheet'i komple gözden gecireyim olmassa , cok yakınından rf hattı geciyor problem yapıyor olabilir diye düşünüyorum . Hocam ben bi kondansatör koyayım rf hatla arasına bide öyle deniyeyim  :) çok saolun çok ilgilendiniz...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: bymrz - 03 Nisan 2012, 14:22:27
Alıntı yapılan: serhat1990 - 03 Nisan 2012, 13:49:05
Hocam b portunu kullanıyorum uygulamamda , pull_up devre dışı bıraktım , analog modul comparator vs hepsi kapalı . Ama bi datasheet'i komple gözden gecireyim olmassa , cok yakınından rf hattı geciyor problem yapıyor olabilir diye düşünüyorum . Hocam ben bi kondansatör koyayım rf hatla arasına bide öyle deniyeyim  :) çok sağolun çok ilgilendiniz...

Rica ederim.

Ben de bir ara 18F452 ile benzer bi konuda sıkıntı yaşamıştım. TRISE deki bazı bitler ile Portd miydi Portb miydi neydi ondaki bi özellik açılıyor kapanıyordu. Ben de datasheeti tam okumadan TRISE nin hepsine 0x00 mı ne yazmıştım. Ondan sonra ara bul TRISE nin son bi kaç biti başka bir portun bir özelliği ile alakalı.

Bu arada RF ile ilgili olacağını sanmıyorum.

Kolay gelsin.

Sonuçlanırsa burada paylaşırsan, biz de öğrenmiş oluruz nedenini...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 03 Nisan 2012, 15:04:21
Tabiki hocam . Bugün biter diye umuyorum bakalım . :)
Başlık: Ynt: Yazılımsal Pwm
Gönderen: serhat1990 - 04 Nisan 2012, 17:13:42
Tamamdır . Bazı pwm yolları ile gnd hattı ve rf hattı birbirine çok yakındı bu bölümlere smd 100nF Kondansatör koydum ve parazitlerden kurtuldu pwm. Herkese çok teşekkür ederim...
Başlık: Ynt: Yazılımsal Pwm
Gönderen: mekatronica - 17 Nisan 2012, 10:45:28
Merhaba aynı kod'a benimde ihtiyacım var pwm ile servo motor sürmeyi hedefliyoruz fakat 6 tane servo sürmemiz gerekli yardımcı olabilirmisiniz?
Başlık: Ynt: Yazılımsal Pwm
Gönderen: xoom - 09 Mart 2013, 15:41:57
Merhaba, Acaba bu konuya paralel.. 16f628'in Ra1 ve Ra2 pinlerinden PWM sinyalini nasıl alabilirim? CCS C kullanıyorum
Edit:Örneğin bu pinlerdeki kırmızı ledin ışık şiddetini değiştirmek için elde edebileceğim yazılımsal pwm işimi görecektir.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: sadogan - 09 Mart 2013, 20:36:37
Alıntı yapılan: xoom - 09 Mart 2013, 15:41:57
Merhaba, Acaba bu konuya paralel.. 16f628'in Ra1 ve Ra2 pinlerinden PWM sinyalini nasıl alabilirim? CCS C kullanıyorum
Edit:Örneğin bu pinlerdeki kırmızı ledin ışık şiddetini değiştirmek için elde edebileceğim yazılımsal pwm işimi görecektir.
unsigned int8 pwm_valA=0,pwm_valB=0,pwm_dutyA=0,pwm_dutyB=0;
#int_timer1
void timer1_kesmesi()
{
     
      set_timer1(15035);//20mhz kristai ile 10ms
      if(++pwm_valA<pwm_dutyA)output_high(pin_a1);
      else output_low(pin_a1);
      if(++pwm_valB<pwm_dutyB)output_high(pin_a2);
      else output_low(pin_a2);     
}

duty degereri 255 den kuçük olmalı
çözünürlük 8 bit frekans 100 hz
frekansı timer1 ön yüklemesi ile değiştirebilirsin.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: xoom - 10 Mart 2013, 12:45:56
Hocam Daha önce Pwm kullanmadım.. Şimdi bu kodları bahsettiğim şekle sokabilirseniz daha net anlayabilirim..
Dahili OSC kullanrak 4Mhz Ra1 Pinindeki Led'in şiddettini değişitirebileceğim bir tam kod yazabilirmisiniz? bu verdiğinizi nasıl kulllanacağımı idrak edemedim..Yani yazdığınız kodu ben derleyip proteusta incelemek istiyorum..
Başlık: Ynt: Yazılımsal Pwm
Gönderen: sadogan - 12 Mart 2013, 12:38:32
(http://c1303.hizliresim.com/17/d/kzkh1.png) (http://bit.ly/c25MCx)#include <16f628a.h>         
#FUSES NOWDT                   
#FUSES HS                       
#FUSES PUT                   
#FUSES NOPROTECT               
#FUSES NOBROWNOUT               
#FUSES NOMCLR                   
#FUSES NOCPD                   
#use delay(clock=20000000)
unsigned int8 pwm_valA=0,pwm_valB=0,pwm_dutyA=0,pwm_dutyB=0;
#int_timer1
void timer1_kesmesi()
{
     
      set_timer1(65185);//20mhz kristai ile 70usn
      if(++pwm_valA<pwm_dutyA)output_high(pin_a1);
      else output_low(pin_a1);
      if(++pwm_valB<pwm_dutyB)output_high(pin_a2);
      else output_low(pin_a2);     
}
void McuInit()
{
    setup_comparator(NC_NC_NC_NC);
    set_tris_a(0b11111001);
    set_timer1(15035);// soft pwm
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);// soft pwm
   
    setup_timer_2(T2_DIV_BY_1,255,1);// hard pwm 19.8khz
    setup_CCP1(CCP_PWM);// hard pwm
    set_pwm1_duty(0);// hard pwm
}
void main()
{
   McuInit();
   enable_interrupts(int_timer1);// soft pwm
   enable_interrupts(GLOBAL);// soft pwm
   while(TRUE)
   {
       pwm_dutyA=75;// soft pwm
       pwm_dutyB=50;// soft pwm
       set_pwm1_duty(100);// hard pwm
   }

}

4 Mhz de osc ile 1komut süresi 1uSn oluyor bu nedenle 4 mhz de soft pwm kullanılabilir olmuyo.
Burdaki örnek 20 mhz . ve pwm frekansı 56 hz . Bu bile çok yoğun işlemci kulanımı .
Tavsiyem donanımsal pwm kullanman. 16f628 de 1 adet donamımal pwm var örnek koda uygulaması var.
Kolay gelsin.
Başlık: Ynt: Yazılımsal Pwm
Gönderen: xoom - 12 Mart 2013, 17:58:22
Yanıt için tşkler.. Donanımsal pwm pini kullanımda o yüzden boşta olan pinlerden birisinden pwm elde etmek istedim.. bu durumda kristali 20mhz yaparak elde edebiliyoruz sanırım..
Hocam Şimdi bunu simule ettiğimizde led flip-flop gibi yanıp sönüyor.. gerçektede bu böylemi oluyor yoksa
PWM RGB LED Control (http://www.youtube.com/watch?v=ZtnnU-iFgUs#)
bu linkteki hızdaki gibi (tabikisadece tek renk)
Kısaca ışık çoğalıp azalma hızını hangi değeri değiştirerek ayarlayabiliyoruz..
Başlık: Ynt: Yazılımsal Pwm
Gönderen: sadogan - 12 Mart 2013, 23:58:12
pwm_dutyA=75;
pwm_dutyB=75;
buları değiştiriyorsunuz.
Similasyonda scope bağlayarak farkı gözlemleyebilirsiniz.
     
Başlık: Ynt: Yazılımsal Pwm
Gönderen: 17omer17 - 26 Eylül 2016, 16:41:21
Yukarıdaki kodu RGB led devresi kurup denedim.Renk değişimi gözleniyor ışık azalıp artıyor fakat ışıkta bir titreme meydana geliyor buna nasıl engel olunabilir?
Başlık: Ynt: Yazılımsal Pwm
Gönderen: caqqoo - 06 Mart 2021, 12:15:24
ARKADAŞLAR SELAM,

BEN EVİME 12 ADET LED SPOT BAĞLADIM. 48 V. BU SPOTLARIN IŞIK ŞİDDETİNİ AYARLAMAK İSTİYORUM TEK BUTON İLE YARDIMCI OLUR MUSUNUZ ?


Arkadaşlar selam,

Ben evime 12 adet led spot bağladım. 48 v. Bu spotların ışık şiddetini ayarlamak istiyorum tek buton ile yardımcı olur musunuz ?