Hpwm sorunu

Başlatan fzf, 17 Ocak 2018, 22:39:09

fzf

Slm arkadaşlar hpwm ilgili bir sorun yaşamaktayım yazdığım proğrama arka planda çalışacak
Pwm sinyali kullanmam gerekiyor hpwm kodlarını proğrama eklendiğinde preteusta simule ettıgımde bir sonuç alıyorum
Lakin ana programım çalışmayı durduruyor okuduğum yazılarda hpwm arka planda çalıştığını
Ana programı etkilemediği yazıyordu bende sorun oldu bu konuda fikirleri olan arkadaslardan  yardım
Bekliyorum 

ete

Yardıma geldim ancak nasıl yardımcı olacağım bilemiyorum sende bana yardımcı olurmusun?
Yoksa yalnızca nasihat almakmı istiyordun bilemedim.
Bize yardımcı olmak için ne bir kod ne bir şema vs vermediğin için ancak nasihat verebiliirm.
Evet HPWM arka planda çalışır ana programdan etkilenmez. Ama elbette bunun bir takım yolu yordamı var.
Öncelikle sinyali aktif hale getirmen gerekiyor. Bunun için ;
- İşlemcin üzerinde CCP1 veya CCP2 yazan pinlerinden birisini kullanacaksın. İkisinide söyledim işlemcinde belli değil çünki. Bazılarında yalnızca CCp1 var.
- Bu pini mutlaka Tris registerinden Çıkış olarak ayarlayacaksın.
- HPWM frekansın ne olacak ise ona uygun bir PR2 register değeri hesaplayacaksın yada PicMultiCalc.exe isimli kısacık programı kullanıp ona hesaplatacaksın. Bu program seçtiğin işlemci frekansına ve HPWM frekansına göre sana;
PR2 değerinin ne olacağını T2CON registerinde kullanman gereken bölme oranının ne olacağını ve sonunda maksimum Duty değeri ile %50 ye tekabül eden duty değerini gösterecek. Bunları bir yere not edeceksin.
- T2CON registerine bölme oranı değerini yerleştirip timer'ı aktif hale getireceksin. Bu register Timer2 nin kontrol registeridir.
- Sonra CCP1CON (veya diğerini kullanıyor isen CCP2CON) registerinde PWM modunu seçeceksin.
- Duty değerini ya HPWM komutu kullanarak yada direk kendi registerlerinden ayarlayacaksın.
Bu aşamadan sonra sinyali çıkışta görmen gerekir.
Direk HPWM komutunu kullandığın zaman (ben pek kullanmadığım için açıklamamı direk register kullanarak yaptım) bazı ayarlamaları atlaman gerekebilir. Ama yinede duty hariç her şeyi yap sonunda bu komut ile aynı frekansı ve duty değerini ver. Unutma HPWM duty değeri 10 bitliktir. Ancak HPWM komutunu kullnırsan 8 bit lik duty kullanmak zorunda kalırsın.
Ete


Hattuşa

ete hocam;
hassas olmayan pwm çıkışları için protonda hazır komut kullanıyorum. hazır komutta çıkan pwm olması gerekenden eksik veya fazla çıkabiliyor. mesela 10 khz çıkarmak istediğinde 9,8-10,2 khz arasında bir değer çıkıyor. ancak yukarıda bahsettiğiniz şekilde bir ayarlama yapıldığında istediğiniz frekansa çok yakın değerlerde çıkış alabiliyoruz

fzf

#3
Alıntı yapılan: ete - 18 Ocak 2018, 07:15:49
Yardıma geldim ancak nasıl yardımcı olacağım bilemiyorum sende bana yardımcı olurmusun?
Yoksa yalnızca nasihat almakmı istiyordun bilemedim.
Bize yardımcı olmak için ne bir kod ne bir şema vs vermediğin için ancak nasihat verebiliirm.
Evet HPWM arka planda çalışır ana programdan etkilenmez. Ama elbette bunun bir takım yolu yordamı var.
Öncelikle sinyali aktif hale getirmen gerekiyor. Bunun için ;
- İşlemcin üzerinde CCP1 veya CCP2 yazan pinlerinden birisini kullanacaksın. İkisinide söyledim işlemcinde belli değil çünki. Bazılarında yalnızca CCp1 var.
- Bu pini mutlaka Tris registerinden Çıkış olarak ayarlayacaksın.
- HPWM frekansın ne olacak ise ona uygun bir PR2 register değeri hesaplayacaksın yada PicMultiCalc.exe isimli kısacık programı kullanıp ona hesaplatacaksın. Bu program seçtiğin işlemci frekansına ve HPWM frekansına göre sana;
PR2 değerinin ne olacağını T2CON registerinde kullanman gereken bölme oranının ne olacağını ve sonunda maksimum Duty değeri ile %50 ye tekabül eden duty değerini gösterecek. Bunları bir yere not edeceksin.
- T2CON registerine bölme oranı değerini yerleştirip timer'ı aktif hale getireceksin. Bu register Timer2 nin kontrol registeridir.
- Sonra CCP1CON (veya diğerini kullanıyor isen CCP2CON) registerinde PWM modunu seçeceksin.
- Duty değerini ya HPWM komutu kullanarak yada direk kendi registerlerinden ayarlayacaksın.
Bu aşamadan sonra sinyali çıkışta görmen gerekir.
Direk HPWM komutunu kullandığın zaman (ben pek kullanmadığım için açıklamamı direk register kullanarak yaptım) bazı ayarlamaları atlaman gerekebilir. Ama yinede duty hariç her şeyi yap sonunda bu komut ile aynı frekansı ve duty değerini ver. Unutma HPWM duty değeri 10 bitliktir. Ancak HPWM komutunu kullnırsan 8 bit lik duty kullanmak zorunda kalırsın.
Ete
slm ete hocam bilgileriniz için çok tşk ederim aslında yapmak istedıgmı bıraz izah edeyım hpwm kullanarak 0-10 volt elde etmeye çalışıyorum yazdıgım progrmalada bu voltajı ayarlamak  istiyorum kullandığım cıp 16f877a 4mhz kullanıyorum
TRISA=%00000000
TRISB=%00000000                            'PORTB TAMAMI ÇIKIŞ
TRISD=%00000000                             'PORTC TAMAMI ÇIKIŞ
TRISC=%01111000
TRISE=%000
PORTA=0
PORTC=0
PORTE=0
PORTB=0
PORTD=0
DEFINE CCP1_REG   PORTC   
DEFINE CCP1_BIT     2     
DEFINE CCP2_REG   PORTC   
DEFINE CCP2_BIT     1   
T2CON = %00000101
PR2=249
RP   VAR WORD
RP=0
CCP1CON.2=1
CCP1CON.3=1
RP=63
CCP1CON.4=RP.0
CCP1CON.5=RP.1
CCPR1L=x>>2


yukardaki kodu ekliyorum programa
rp degerini degiştirdikce istedgım voltaj degerini alabiliyorum buraya kadar sıkıntı yok  bu kodu ana programa ekleyıncede çalışıyor ama ana program oldukca yavaşlıyor hatta duruyor pwm çıkış vermeye devam edıyor bırde preteusta şoyle bir uyarı alıyorum program gerçek zamanlı çalışmıyor dıye acaba bunun etkısı varmıdır
yanlışı nerede yapıyorum yardımcı olurmusunuz 

ete

Bütün bu olumsuzluklar proteus da oluyorsa hiç birisini dikkate alma. Zira bir işlemciyi devresi ile simule etmek hiç kolay değil hızı gerçek zamanlı yapmaya yetmiyor program bunu sana ikaz olarak veriyor. Gerçek devrede sorun yaşamazsın.
Ete

Powered by EzPortal