Hpwm değil Pwm

Başlatan kağan1, 10 Şubat 2016, 12:04:33

kağan1

Arkadaşlar merhaba aranıza yeni katıldım,sizlerler olmak güzel...
Proton kullanıyorum ve bir yerde takıldım yardımınızı bekliyorum,Entegre 16f628a kullanıyorum. 9 nolu pin (hpwm bacağını kullanmadım).
10-11-12-13 nolu bacakları kullanarak pwm uygulaması yapıyorum.  Çalışma mantığı ledi pwm sinyali ile yakıp söndürmek,pinleri tek tek çalıştırdığım zaman problem yok istediğim gibi çalışmakta,fakat iki tane aynı pini aynı anda çalıştırmak istediğimde beraber çalışmıyor birisi yanıyor sönüyor sonra diğeri yanıyor sönüyor bu neden olur ?

Device 16F628A
XTAL=4
TRISA=%11110111
TRISB=%00000011
PORTA=0
PORTB=0
CMCON=7
Dim solar As PORTA.2
Dim out1 As PORTB.4
Dim out2 As PORTB.5
Dim out3 As PORTB.6
Dim out4 As PORTB.7
Dim sw1 As PORTA.6
Dim sw2 As PORTA.7
Dim sw3 As PORTA.0
Dim sw4 As PORTA.1

  Config WDT_OFF, BODEN_ON,INTRC_OSC_NOCLKOUT,LVP_OFF,CP_OFF, PWRTE_ON, MCLRE_OFF
           
basla:
       If  sw1=1 And sw2=1 And sw3=1 And sw4=1  Then  GoTo senaryo2
       If  sw1=0 And sw2=1 And sw3=1 And sw4=1  Then  GoTo senaryo3
       If  sw1=1 And sw2=0 And sw3=1 And sw4=1  Then  GoTo senaryo4
       If  sw1=0 And sw2=0 And sw3=1 And sw4=1  Then  GoTo senaryo5
GoTo basla


senaryo2:   
     PWM  PORTB.5,5,100           'bu satırda normal çıkış vermekte problem yok
               
GoTo basla


senaryo3:     
       PWM  PORTB.6,5,100          'bu satırda normal çıkış vermekte problem yok
       
GoTo basla


senaryo4:     
       PWM  PORTB.7,5,100           'bu satırda normal çıkış vermekte problem yok
     
GoTo basla
     

senaryo5:     
       PWM  PORTB.6,5,100         ' bu iki satırda iki pini aynı anda yakmak istiyorum fakat aynı anda çıkış vermiyor biri yanıp diğeri
       PWM  PORTB.7,5,100           sönüyor problem nedir acaba
GoTo basla


Özellikle söyleyim neden HPWM kullanmadın diye soran olursa 16f628a'de  tek çıkış hpwm var. benim farklı 4 çıkış kullanmam gerekli  bilginize
Şimdiden teşekkür ederim

ete

Komut yalnızca bir pinden çıkış verebilecek bir komuttur. KOmutun parametrelerine bakarsan daha iyi anlaşılır sorun.
PWM Pin,Duty,Cycle

Bu komut Pin olarak isimlendirilen bir port pininden 0-255 (%0-100) duty aralığında Cycle kere puls çıkartır. Belirli bir frekansı falan yoktur. Cycle kadar puls üretmeden komutun işi bitmez ve sende ikinci pini aynı anda devreye sokamazsın.
Bu iş için kesme yöntemi kullanman gerekecek.

Aşağıda 3 pin (PORTA.0-PORTA.1 ve PORTA.2) den PWM sinyali çıkartabilen bir program örneği veriyorum.
Gerekirse bunu 4 adede kolaylıkla çıkartabilirsin.

'-----------------------------------------------------------------@ DEVICE pic16F628                      'işlemci 16F628                                @ DEVICE pic16F628, WDT_OFF              'Watch Dog timer kapalı@ DEVICE pic16F628, PWRT_ON              'Power on timer açık@ DEVICE pic16F628, PROTECT_OFF          'Kod Koruma kapalı@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılmıyor.@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak '-----------------------------------------------------------------Define OSC 4CMCON=7PORTA=0:TRISA=0PORTB=0:TRISB=%11111111ON INTERRUPT GoTo KESME   OPTION_REG=%00000011      INTCON=%10100000DUTY_R VAR BYTE 56DUTY_G VAR BYTE 57DUTY_B VAR BYTE 58LEDA VAR BYTE   60LEDB VAR BYTE   61LEDC VAR BYTE   62I VAR WORDX VAR BYTEPAUSE 200  DUTY_R=1   DUTY_G=1   DUTY_B=1BASLA:DUTY_R=DUTY_R+PORTB.0DUTY_R=DUTY_R-PORTB.1DUTY_G=DUTY_G+PORTB.2DUTY_G=DUTY_G-PORTB.3DUTY_B=DUTY_B+PORTB.4DUTY_B=DUTY_B-PORTB.5FOR I=0 TO 150:NEXT IGOTO BASLADISABLEKESME:      FOR X=0 TO 255      IF x<=DUTY_R THEN          PORTA.0=1      ELSE         PORTA.0=0      ENDIF            IF x<=DUTY_G THEN          PORTA.1=1      ELSE         PORTA.1=0      ENDIF             IF x<=DUTY_B THEN          PORTA.2=1      ELSE         PORTA.2=0      ENDIF   '      pauseus 5          NEXT      INTCON.2=0             RESUME      ENABLE     END

BASLA satırı ile GOTO basla arasındakiler seni şaşırtmasın. PORTB nin pinleri giriş olarak ayarlanmış olup bu pinlere birer buton bağlayarak 3 adet PWM (R-G-B) çıkışının duty değerlerini bu satırlarda artırıp azaltabiliyorsun.
Kesme kısmında ise verilen her bir renge ait Duty değerine bağlı olarak sinyaller ilgili pinlerden çıkartılmaktadır.

Ete

kağan1

Ete hocam cevabınız için teşekkür ederim
Gördüğüm kadarıyla çıkış pinleri ayrı ayrı çıkış veriyor.3 pinde aynı anda pwm sinyali uygulamıyor,benim istediğim 3 pinde veya 4 pinde aynı anda pwm ile yanması ve sönmesi..

ete

Bir deneyip gör istersen. Böyle bir kanıya nerden vardın onuda anlamış değilim.
Kanalların duty değeri mikrosaniyeler mertebesinde ayarlanıyor ve 3 kanalda aynı anda çıkış veriyor. Üstelik bu çıkış süreklidir. Duty değerini sıfırlarsan çıkış kapatılır.

Ete

otansev

hardware ilave donanımla dediğiniz yapılabilir ancak ve/veya gibi kapılarla.
Kolay gelsin
TA1MK

ete

Hardware den kastın tek kanal HPWM çıkışı ise buradan alacağın ref sinyalin tek bir duty değeri olur. Kapılarla bu sinyali bir kaç sinyal haline getirebilirsin ama hepsi aynı duty değrine sahip olur. Halbuki burada her sinyalin farklı duty değeri olması gerkir diye düşünüyorum.

Ete

otansev

Pardon hepsinin farklı duty değeri olacaksa maalesef olmaz tabiiki  gözümden kaçmış bu konu özür dilerim.
Kolay gelsin
TA1MK

İlyas KAYA

#7
Hiç denemedim ne gibi sorun çıkar bilmiyorum ama sesli düşünüyorum;

HPWM kanalı display sürme gibi tarama usulü kapılar ile sürer isek ne olur ?


HPWM 1,20,5000
1 nci kapıyı aç

pause 20

1nci kapıyı kapat
HPWM 1,50,5000
2nci kapıyı aç

..
.
gibi.

Bir ara denemek lazım ancak belki deneyen olmuştur diye sormak istedim.

Ekleme:

Reel devrede de denedim oluyor. Ancak pek verimli olduğu söylenemez. Yoklukta iş görür gibi :)

Denemek isteyen veya geliştirmek isteyen için isis şeması ektedir.


#CONFIG      __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_ON#ENDCONFIG      DEFINE OSC 4OPTION_REG.7=0     CMCON=7TRISA=0TRISB.6=1TRISB.7=1     TRISB.3=0               PORTA=0                                     clear           pause 500           bas:                     GOSUB YOLLAgoto basYOLLA:        HPWM 1,0,0             porta=0                 HPWM 1,255,5000           PORTA.0=1PORTA.1=0PORTA.2=0PORTA.3=0            PAUSEUS 50        HPWM 1,128,5000             PORTA.0=0PORTA.1=1PORTA.2=0PORTA.3=0             PAUSEUS 50                     HPWM 1,2,5000               PORTA.0=0PORTA.1=0PORTA.2=1PORTA.3=0                               PAUSEUS 50                          RETURNend
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal