16f628 Analog giriş ile pwm kontrolü

Başlatan hoten, 27 Ekim 2014, 15:52:14

PhD

Alıntı yapılan: PICaso - 15 Mayıs 2020, 11:01:11Buton ile pwm duty kontrol edeceğim.
Buton ile PWM kontrol yapabilirsiniz, bir problem yok. Yukarıdaki yazılarda REF bir sinyal karşılaştırmasından çıkacak sonuca göre PWM kontrolü yazılmış, o yazılara istinaden tek CCP modülü ile aynı anda hem Compare hem de PWM yapamazsınız dedim.

Kolay gelsin.
...hiç...

mehmet

PICBasic içerisinde POT komutu vardı...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

PICaso

PR2 değerini 250 seçip,
CCPR1L değerinin butonlar ile 0-250 arasında değiştirmek lineer bir pwm çıkışı verir mi?

PICaso

Pic16F628A için pr2 256 dan daha büyük değer verilemez mi?

PICaso


ete

PR2 denilen register 8 bitliktir. Daha büyük değer versenizde almaz. Verilebilecek en büyük değer 255 dir. Anladığım kadarı ile PWM de frekans değiştirmek istiyorsunuz.
Frekans değerinde kullanılan parametreler PR2 register değeri ile T2CON dan ayarlanan Timer2 Bölme oranıdır. Bu nedenle öncelikle frekans aralığını tespit etmeniz gerekir. Bu aralık tek bir bölme oranı ile tutturulabiliyor ise yalnızca PR2 ile oynayarak bunu yapabilirsiniz. Ama bazen öyle frekanslar gerekir ki belirli noktaya kadar bir bölme oranı ve PR2 değeri o noktadan sonra bir üst bölme oranına ve başka PR2 değerine geçmenizi gerektirebilir.
Bunun için PicMulticalc.exe isimli kısacık programı kullanmanızı öneririm. Orada PWM yi seçip OSC frekansını ve frkans başlangıcınızı girerseniz size o frekansı tutturmak için bir kaç alternatif sunabilir. Aynı şeyi Üst frekans noktanız içinde yaparsanız her ikisinide kapsayanbir bölme oranı görürseniz onu seçersiniz olur biter ve yanlızca PR2 ile oynayarak işi halledersiniz.
Ama biri farklı bölme oranında çıkarsa o zaman yapacak bir şey yok hangi nokta olduğunu tespit edip o noktaya kadar ilk bölme oranı ve Pr2 değerleri ile gelir o noktadan sonra pr2 değeri ile bölme oranını değiştirerek frekansın devamını kullanırsınız.
Bu anlattığım sistemi pek çok kez değişik frekans aralıkları için kullandım.
İsterseniz frekans aralığını buraya yazın ayrıca işlemci frekansınıda yazın size uygun olan parametreleri bulup vereyim.
Bu arada başka bir sorunuzu gördüm.
"CCPR1L değerinin butonlar ile 0-250 arasında değiştirmek lineer bir pwm çıkışı verir mi? "
Lineer den neyi kast ediyorsunuz pek anlamadım ama çok düzgün bir sinyal elde edeceğin kesin. Ama sanırım lineerlikten PR2 değişikliğne karşılık gelen frekans değerini kast ediyorsun.
İstersen sana bunu hesap etme imkanı vereyim kendin hesapla;
10 bitlik PWM sinyalinde kullandılan formül şöyledir.
Frekans=1000/[(PR2+1)*4*(1/OSC Frekansı_MHz)*PR2_Bölücüdeğeri]  (sonuç Khz çıkacak)
PR2=249 olsun Bölme oranımız 1/4 olsun ve OSC frekansımızda 4 Mhz olsun.
F=(1000/((250*4)*(1/4)*4))=1000/1000*(1)=1 Khz.
Şimdi PR2 değerini 1 eksiltelim yani 248 olsun yeniden frekans hesaplayalım.
F=(1000/249*4)=1,004 Khz çıkacaktır.
Pr2 değerini 250 alalım (ilk değeri 1 artırmış olduk)
F=1000/(251*4)=0,996Khz veya 996 Hz olarak hesaplarız. Görüleceği üzere min artış miktarı olan 1 ekleyip azalttığımızda elde edilen değerler lineer bir aralık gibi değil. Yada belkide beklediğiniz standart bir artış değerine tekabül etmiyor maalesef.

10 bitlik PWM duty ayarlama işleminde yanlızca CCP1L kullanılmıyor. Sistem şöyle çalışıyor.
DUTY değerimiz 10 bitlik bir sayı olsun.
1. ci adımda CCP1CON.4=Duty.0 ve CCP1CON.5=Duty.1 bitleri veriliyor. Ardından,
2. ci adımda, CCPR1L=DUTY>>2 komutu ile 2 bit sağa kaydırılarak 8 bit haline getirilip CCPR1L registerine veriliyor. Hepsi bu kadar. Bu işlemden sonra PWM sinyali iligli çıkış pininde ayarlanan duty değeri ile belirir.
Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

PICaso

Alıntı yapılan: ete - 27 Mayıs 2020, 18:59:41PR2 denilen register 8 bitliktir. Daha büyük değer versenizde almaz. Verilebilecek en büyük değer 255 dir. Anladığım kadarı ile PWM de frekans değiştirmek istiyorsunuz.
Frekans değerinde kullanılan parametreler PR2 register değeri ile T2CON dan ayarlanan Timer2 Bölme oranıdır. Bu nedenle öncelikle frekans aralığını tespit etmeniz gerekir. Bu aralık tek bir bölme oranı ile tutturulabiliyor ise yalnızca PR2 ile oynayarak bunu yapabilirsiniz. Ama bazen öyle frekanslar gerekir ki belirli noktaya kadar bir bölme oranı ve PR2 değeri o noktadan sonra bir üst bölme oranına ve başka PR2 değerine geçmenizi gerektirebilir.
Bunun için PicMulticalc.exe isimli kısacık programı kullanmanızı öneririm. Orada PWM yi seçip OSC frekansını ve frkans başlangıcınızı girerseniz size o frekansı tutturmak için bir kaç alternatif sunabilir. Aynı şeyi Üst frekans noktanız içinde yaparsanız her ikisinide kapsayanbir bölme oranı görürseniz onu seçersiniz olur biter ve yanlızca PR2 ile oynayarak işi halledersiniz.
Ama biri farklı bölme oranında çıkarsa o zaman yapacak bir şey yok hangi nokta olduğunu tespit edip o noktaya kadar ilk bölme oranı ve Pr2 değerleri ile gelir o noktadan sonra pr2 değeri ile bölme oranını değiştirerek frekansın devamını kullanırsınız.
Bu anlattığım sistemi pek çok kez değişik frekans aralıkları için kullandım.
İsterseniz frekans aralığını buraya yazın ayrıca işlemci frekansınıda yazın size uygun olan parametreleri bulup vereyim.
Bu arada başka bir sorunuzu gördüm.
"CCPR1L değerinin butonlar ile 0-250 arasında değiştirmek lineer bir pwm çıkışı verir mi? "
Lineer den neyi kast ediyorsunuz pek anlamadım ama çok düzgün bir sinyal elde edeceğin kesin. Ama sanırım lineerlikten PR2 değişikliğne karşılık gelen frekans değerini kast ediyorsun.
İstersen sana bunu hesap etme imkanı vereyim kendin hesapla;
10 bitlik PWM sinyalinde kullandılan formül şöyledir.
Frekans=1000/[(PR2+1)*4*(1/OSC Frekansı_MHz)*PR2_Bölücüdeğeri]  (sonuç Khz çıkacak)
PR2=249 olsun Bölme oranımız 1/4 olsun ve OSC frekansımızda 4 Mhz olsun.
F=(1000/((250*4)*(1/4)*4))=1000/1000*(1)=1 Khz.
Şimdi PR2 değerini 1 eksiltelim yani 248 olsun yeniden frekans hesaplayalım.
F=(1000/249*4)=1,004 Khz çıkacaktır.
Pr2 değerini 250 alalım (ilk değeri 1 artırmış olduk)
F=1000/(251*4)=0,996Khz veya 996 Hz olarak hesaplarız. Görüleceği üzere min artış miktarı olan 1 ekleyip azalttığımızda elde edilen değerler lineer bir aralık gibi değil. Yada belkide beklediğiniz standart bir artış değerine tekabül etmiyor maalesef.

10 bitlik PWM duty ayarlama işleminde yanlızca CCP1L kullanılmıyor. Sistem şöyle çalışıyor.
DUTY değerimiz 10 bitlik bir sayı olsun.
1. ci adımda CCP1CON.4=Duty.0 ve CCP1CON.5=Duty.1 bitleri veriliyor. Ardından,
2. ci adımda, CCPR1L=DUTY>>2 komutu ile 2 bit sağa kaydırılarak 8 bit haline getirilip CCPR1L registerine veriliyor. Hepsi bu kadar. Bu işlemden sonra PWM sinyali iligli çıkış pininde ayarlanan duty değeri ile belirir.
Ete


Öncelikle teşekkür ederim.
Hocam benim sorumdan kaynaklı bir yanlış anlaşılma olmuş? Benim amacım duty değiştirmek. Son paragrafta ki açıklamanızı okudum. Ben şöyle düşünüyordum şimdiye kadar;PR2=250 atandığını varsayarsak CCPR1L=125 verirsem duty=%50 olur gibi oran orantı yapıyordum. CCPR1L değerini 0-250 arasında değiştirerek %0 ile %100 arasında duty değerleri elde edeceğimi düşünüyordum. Son paragraftan anladığım kadarıyla CCPR1L 1024 farklı değer alabilir ve PR2 registırıyla duty değiştirmede bir etkisi olmaz.