Yazılımsal Pwm

Başlatan serhat1990, 21 Mart 2012, 22:15:19

bymrz

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...



serhat1990

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...

bymrz

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...

serhat1990

Tabiki hocam . Bugün biter diye umuyorum bakalım . :)

serhat1990

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...

mekatronica

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?

xoom

#21
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.

sadogan

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.

xoom

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..

sadogan

#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.

xoom

#25
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
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..

sadogan

pwm_dutyA=75;
pwm_dutyB=75;
buları değiştiriyorsunuz.
Similasyonda scope bağlayarak farkı gözlemleyebilirsiniz.
     

17omer17

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?

caqqoo

#28
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 ?