Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: hoten - 27 Ekim 2014, 15:52:14

Başlık: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 27 Ekim 2014, 15:52:14
Arkadaşlar merhaba,

16f628 in analog girişlerinden 2 analog sinyali karşılaştırıp, RB3 çıkışından elde ettiğim pwm değerini değiştirmek istiyorum. mesela; AN1'den bir gerilim değerini okuyup AN2 den gelen Vref değeriyle karşılaştırarak pwm çıkışını kontrol etmek.  Bu konuda yardımcı olabilir misiniz?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: sadogan - 27 Ekim 2014, 16:34:41
16F628 de ADC modülü bulunmuyor.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: ismailhtc - 27 Ekim 2014, 16:49:11
2 tane analog girişi var diye biliyorum. dökümanlarında gözüküyor yoksa ben mi yanlış baktım emin olamadım.

"ccs c derleyici kitabı" örnek uygulamalarında bulabilirsin. sitede veya google'da araman yeterli.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: Maxim - 27 Ekim 2014, 16:56:17
16F627A-16F628A-16F648A hiç birinde analog giriş yok
2 adet comparatör girişleri var
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: ismailhtc - 27 Ekim 2014, 16:57:52
Datasheete bakmamanın zararları :)
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: Recep METE - 27 Ekim 2014, 17:29:29
Evet 16f628 ve 16f628A2da adc girişi yok yok.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 27 Ekim 2014, 18:00:25
comparator girişiyle karşılaştırma yaparak yapılamaz mı? illa adc mi olması lazım? Vref büyükse pwm azaltırsın Vref küçükse pwm artırırsın?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: kayatech - 27 Ekim 2014, 18:12:15
16F88 iyi bir alternatif.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: selimkoc - 27 Ekim 2014, 18:17:05
http://elektrokod.wordpress.com/2014/06/07/pic-analog-karsilastirici-modulunun-kullanilmasi/ (http://elektrokod.wordpress.com/2014/06/07/pic-analog-karsilastirici-modulunun-kullanilmasi/)

Aynı mantıkla PIC16F628A içinde kullanlabilir. Ancak datasheetine bakmanız gerekir. Bazı değişiklikler olabiliyor.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 27 Ekim 2014, 18:28:54
aynen selim hocam benim dediğimde bu tür bişi. Yani iki değeri karşılaştırıp, vref  büyükse pwm artır küçükse pwm azalt yapılabilir diye düşünüyordum. fikir alayım diye sordum adc yok yok yok diye cevaplar gelmeye başladı. illa adc olması gerekir mi?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: sadogan - 27 Ekim 2014, 19:27:19
Alıntı yapılan: hoten - 27 Ekim 2014, 18:00:25
comparator girişiyle karşılaştırma yaparak yapılamaz mı? illa adc mi olması lazım? Vref büyükse pwm azaltırsın Vref küçükse pwm artırırsın?
Karşılaştırıcı  girişlerden bir tanesi pwm den geliyorsa yapılabilir.
Karşılaştırıcı girişlerinden biri PWM deyilse nereye kadar artıp eksilteceksin.
Yapmak istediğin işi çok genel sorunca bu yargıya varmak zor.



mesaj birleştirme:: 27 Ekim 2014, 19:39:28

Alıntı yapılan: hoten - 27 Ekim 2014, 18:28:54
aynen selim hocam benim dediğimde bu tür bişi. Yani iki değeri karşılaştırıp, vref  büyükse pwm artır küçükse pwm azalt yapılabilir diye düşünüyordum. fikir alayım diye sordum adc yok yok yok diye cevaplar gelmeye başladı. illa adc olması gerekir mi?
Sorundan böyle bir şey anlaşılmıyor. Farkılı 2 analog girişin farkı ile pwm değerini değiştirmekten bahsediyorsun.

Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 27 Ekim 2014, 21:02:47
Hocam genel manada yapmak istediğim şudur;

Mosfeti pwm ile tetikleyerek buck converter yapmak. Fakat buck converterın çıkış gerilimini Vref'a verdiğim bir değerle karşılaştırarak pwm değerini artırmak yada azaltmak istiyorum.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: mehmet - 28 Ekim 2014, 00:21:07
İşte anlaşılmayan kısım burada; ne kadar
azaltılacak ya da artırılacak. Eğer
sabit bir artırma ya da azaltma var ise
yapılabilir. Aç/kapa gibi. Birinci
konumda pwm 10 ise, diğer konumda 50. Bu
yapılabilir diye düşünüyorum.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: veliusta - 28 Ekim 2014, 03:58:33
Atmel Daha iyi ve daha ucuz değil mi?

http://www.ebay.com/itm/NEW-ATmega328P-PU-with-Arduino-UNO-bootloader-ATMEL-FREE-SHIPPING-FROM-USA-T7-/121290603497?pt=LH_DefaultDomain_0&hash=item1c3d7bbbe9 (http://www.ebay.com/itm/NEW-ATmega328P-PU-with-Arduino-UNO-bootloader-ATMEL-FREE-SHIPPING-FROM-USA-T7-/121290603497?pt=LH_DefaultDomain_0&hash=item1c3d7bbbe9)

Bu MCU'ya PIC'ten alternatif var mı?

http://www.ebay.com/itm/1PCS-MCU-IC-MICROCHIP-DIP-18-PIC16F628A-I-P-PIC16F628A-/271284421806?pt=LH_DefaultDomain_0&hash=item3f29cfc4ae (http://www.ebay.com/itm/1PCS-MCU-IC-MICROCHIP-DIP-18-PIC16F628A-I-P-PIC16F628A-/271284421806?pt=LH_DefaultDomain_0&hash=item3f29cfc4ae)

Aralarında sadece 0,48$ var. Neden ben PIC kullanayım ??
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 28 Ekim 2014, 06:49:01
Aynen öyle, 1. durumda pwm 10 artar ikinci durumda 10 azalır gibi. Tabi devamlı bir çevrim olacak
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 28 Ekim 2014, 11:20:56
CSS'de bu kodun nasıl yazılacağı konusunda yardımcı olabilir misiniz?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 29 Ekim 2014, 11:34:50
Arkadaşlar karşılaştırma ve buna bağlı olarak pwm üretme ile alakalı örnek CCS kodu var mıdır? yardımcı olabilir misiniz?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: papsukkal - 30 Ekim 2014, 11:54:46
#include <main.h>


long adc_in=0;
long adc_out=0;
int16 i=2000;
signed long fark=0;
#int_EXT

void  EXT_isr(void)
{
      delay_us(i);   
      output_high(pin_a5);
      delay_us(100);
      output_low(pin_a5);

         set_adc_channel(0);
         delay_us(25);
         adc_in=read_adc();
         set_adc_channel(1);
         delay_us(25);
         adc_out=read_adc();
         fark=adc_in-adc_out;

         
         
         
         
         if(fark>170)
         {
            i=i+50;
            if(i>=8950) i=9000;
         }
         if(fark<160)
         {
            i=i-50;
            if(i==1550) i=1600;
         }
         
}



void main()
{
   
   setup_adc(ADC_CLOCK_INTERNAL );
   setup_adc_ports( AN0_analog|AN1_analog);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   set_tris_a(0x0f);
   
   PORT_a_PULLUPS(1);

   while(true) {}
   
}


12f675 ile iki analog sinyali karşılaştırıp farkına göre triac kontrol etmiştim.
inceleyip kendine göre uyarlayabilirsin.

kolay gelsin.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: hoten - 03 Kasım 2014, 12:13:29
Hem karşılaştıcı modu kullanıp hemde pwm modu kullanmak mümkün müdür?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: papsukkal - 04 Kasım 2014, 11:39:20
Ben komparatörü kullanmadım. İncelemek lazım.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: selimkoc - 05 Kasım 2014, 21:45:57
Alıntı Yap"Hem karşılaştıcı modu kullanıp hemde pwm modu kullanmak mümkün müdür?"

Her ikisi de farklı modül olduğundan birbirini etkilemez yani her ikisini de aynı anda kullanabilirsin.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 14 Mayıs 2020, 14:03:30
Comparator modu ile pwm duty kontrol etmek mümkün müdür?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: selimkoc - 14 Mayıs 2020, 15:19:26
https://elektrokod.wordpress.com/2014/06/07/pic-analog-karsilastirici-modulunun-kullanilmasi/ (https://elektrokod.wordpress.com/2014/06/07/pic-analog-karsilastirici-modulunun-kullanilmasi/)

Kesme içinde pwm duty ayarlanabilir.

Veya capture kullanılabilir.

https://elektrokod.wordpress.com/2014/01/23/ultrasonik-mesafe-sensoru-uygulamasi-3/ (https://elektrokod.wordpress.com/2014/01/23/ultrasonik-mesafe-sensoru-uygulamasi-3/)
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 14 Mayıs 2020, 16:47:49
Dc motor hız kontrolü yapmayı düşünüyordum (potans ile). Bu durumda farklı bir işlemci seçmem gerekecek.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: sadogan - 14 Mayıs 2020, 20:12:40
Hangi mcu yu kullanmayı düşünüyordunuz ki ?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: fide - 14 Mayıs 2020, 23:05:46
16f628 yerine pin to pin 16f1826-27 deneyebilirsiniz
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: omereliusuk - 15 Mayıs 2020, 05:27:27
12f1572
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 15 Mayıs 2020, 09:25:30
Alıntı yapılan: sadogan - 14 Mayıs 2020, 20:12:40Hangi mcu yu kullanmayı düşünüyordunuz ki ?
16F628A elimde vardı. Yazılım da lcd ayarlarını yapmıştım. Adc için datasheeti açtığımda beynimden vurulmuşa döndüm. Adc yi iptal edip buton kullanacağım.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PhD - 15 Mayıs 2020, 10:08:47
PIC16F628 veya PIC16F628A türevlerinde tek CCP (Capture, Compare, PWM) modulü bir tane olduğu için hem karşılaştırma hem de aynı anda PWM yapılamaz.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 15 Mayıs 2020, 11:01:11
Alıntı yapılan: PhD - 15 Mayıs 2020, 10:08:47PIC16F628 veya PIC16F628A türevlerinde tek CCP (Capture, Compare, PWM) modulü bir tane olduğu için hem karşılaştırma hem de aynı anda PWM yapılamaz.
Buton ile pwm duty kontrol edeceğim.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PhD - 15 Mayıs 2020, 19:09:49
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.
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: mehmet - 15 Mayıs 2020, 23:05:41
PICBasic içerisinde POT komutu vardı...
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 26 Mayıs 2020, 18:42:50
PR2 değerini 250 seçip,
CCPR1L değerinin butonlar ile 0-250 arasında değiştirmek lineer bir pwm çıkışı verir mi?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 26 Mayıs 2020, 21:31:08
Pic16F628A için pr2 256 dan daha büyük değer verilemez mi?
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 27 Mayıs 2020, 16:19:49
GÜNCEL!
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: ete - 27 Mayıs 2020, 18:59:41
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

Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: mehmet - 27 Mayıs 2020, 19:46:10
http://eng-serve.com/pic/pic_pwm.html
Başlık: Ynt: 16f628 Analog giriş ile pwm kontrolü
Gönderen: PICaso - 27 Mayıs 2020, 21:09:04
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.