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 4
CMCON=7
PORTA=0:TRISA=0
PORTB=0:TRISB=%11111111

ON INTERRUPT GoTo KESME   
OPTION_REG=%00000011     
INTCON=%10100000

DUTY_R VAR BYTE 56
DUTY_G VAR BYTE 57
DUTY_B VAR BYTE 58
LEDA VAR BYTE   60
LEDB VAR BYTE   61
LEDC VAR BYTE   62
I VAR WORD
X VAR BYTE

PAUSE 200

  DUTY_R=1
   DUTY_G=1
   DUTY_B=1

BASLA:

DUTY_R=DUTY_R+PORTB.0
DUTY_R=DUTY_R-PORTB.1

DUTY_G=DUTY_G+PORTB.2
DUTY_G=DUTY_G-PORTB.3

DUTY_B=DUTY_B+PORTB.4
DUTY_B=DUTY_B-PORTB.5

FOR I=0 TO 150:NEXT I

GOTO BASLA

DISABLE
KESME:
      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 4

OPTION_REG.7=0     

CMCON=7

TRISA=0

TRISB.6=1
TRISB.7=1
     TRISB.3=0
     
          PORTA=0
               
               
      clear
           pause 500
           


bas:
         
           
GOSUB YOLLA

goto bas


YOLLA:
        HPWM 1,0,0
             porta=0
             
    HPWM 1,255,5000
       

   
PORTA.0=1
PORTA.1=0
PORTA.2=0
PORTA.3=0
            PAUSEUS 50


        HPWM 1,128,5000
             


PORTA.0=0
PORTA.1=1
PORTA.2=0
PORTA.3=0
             PAUSEUS 50
     
               HPWM 1,2,5000
               
PORTA.0=0
PORTA.1=0
PORTA.2=1
PORTA.3=0
       
       
                 PAUSEUS 50

             
             

RETURN



end

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal