Assembly PWM-Frekans Sorunu

Başlatan protech06, 11 Haziran 2008, 00:00:51

protech06

Arkadaslar forumdaki ornekleri ve ete hocamızın PWM üzerine yazmıs oldugu dersini okudum fakat ben assembly kullanıyorum  forumdaki ornekler genelde sadece pbp ve ccs uzerine yazılmıs assembly alanında pwm ve frekans uzerine bir yazı yada ornek bulamadım benim yapmak istedigim ve anlamadıgım kısıma gelince arkadaslar

  Pic 16F628A   ve 20mhz osc kullanıyorum amacım herhangi bir cıkıstan tek kanal pwm uretmek ve bu pwm in 100hz olması lazım mesela 100hzlik bir frekansta herhangi bir cıkıstan 60 sn icinde  0 dan -255 e yukseliş  ve tekrar 60sn icinde 255 ten -0 a inen bu degerler arasında pwm cıkısı alma işlemini yapamadım forumda bir kac pwm ornegi var fakat pwm cıkısı uretilirken frekans ayarı neye gore yapılıyor? 0-255 cıkıs ve tekrar iniş suresi nasıl ayarlanmalı ? ben bunu timer kullanmadan kod dongusu ile frekans 100hz ayarlayabilirimiyim yoksa timer kullanmak dahamı saglam ve kararlı olur daha once assemblyde pwm le ugrasmıs sorun yasamıs arkadasların yardımlarını bekliyorum

Forumda buldugum tek kanaldan pwm ureten ornek bir kod fakat bu kod kac mhzde cıkıs veriyor anlayamadım

;****************************************************** 
      LIST      P=16F876A 
      INCLUDE      "P16F876A.INC" 
;****************************************************** 
      CBLOCK      0x20 
PWM_DUTY 
LOW_PWM 
HIGH_PWM 
PWM_SAYAC 
DLY1 
DLY2 
      ENDC 
;****************************************************** 
#DEFINE      PWM_OUT      PORTC,0  ;pwm cıkısının baglandıgı pin 
;****************************************************** 
      ORG         0x00 
      GOTO      START 
;****************************************************** 
START 
      BSF         STATUS,5 
      MOVLW      0x07 
      MOVWF      ADCON1 
      CLRF      TRISC 
      BCF         STATUS,5 
      CLRF      PORTC 
      CLRF      PWM_SAYAC 
;****************************************************** 
MAIN 
      MOVF      PWM_SAYAC,W 
      MOVWF      PWM_DUTY 
      CALL      START_PWM 
      INCF      PWM_SAYAC,F    
      CALL      DELAY 
      GOTO      MAIN 
;****************************************************** 
START_PWM 
      MOVF      PWM_DUTY,W 
      BCF         PWM_OUT 
      BTFSC      STATUS,Z 
      RETURN 
      MOVWF      HIGH_PWM 
      SUBLW      .255 
      MOVWF      LOW_PWM 
      BSF         PWM_OUT 
      BTFSC      STATUS,Z 
      RETURN 
      DECFSZ      HIGH_PWM,F 
      GOTO      $-1 
      BCF         PWM_OUT 
      DECFSZ      LOW_PWM,F 
      GOTO      $-1 
      RETURN 
;****************************************************** 
DELAY 
      MOVLW      .1 
      MOVWF      DLY1 
LOOP1 
      MOVLW      .10 
      MOVWF      DLY2 
LOOP2 
      DECFSZ      DLY2,F 
      GOTO      LOOP2 
      DECFSZ      DLY1,F 
      GOTO      LOOP1 
      RETURN 
;****************************************************** 
      END

kaplan_65

Slm.

Yazılım ile PWM

Donanımsal PWM kullanırsanız daha kararlı çalışır ve de işlem kapasiteniz artar. Kaç Hertz de çalıştıracağınızı ve çözünürlüğünün ne olacağını öğrenmek için, datasheet teki PWM bölümündeki iki formüle bakabilirsiniz.
Örneğin frekans için;
PWM period =[(PR2)+ 1]*4* T osc *TMR2 prescale value

formülünü kullanabilirsiniz(f=1/T). Mesela 4Mhz lik bir kristal kullanıyorsanız ve PR2 ye 18H  sayısını yüklerseniz 40Khz lik sinyal elde edersiniz.

Doluluk oranını ise CCPR1L ile ayarlayabilirsiniz
KAZIM ASLAN Gazi Üniversitesi Elektrik Elektronik  Mühendisliği...

protech06

20mhz Kristal kullanılarak yapılmıs bir kod ornegi varmı hocam elinizde ben bu formule gore cıkartamadım tam olarak 100hz cıkıs alabilecegim dongu timer kullanmadan yapmam lazım donanımsal olmayacak yazılım dongu olarak kullanıcam

kaplan_65

Slm.

PWM periyodu 1/100=10ms

Doluluk oranı %60 olursa: 4ms low, 6ms high olmalıdır.

Aşağıdaki kod RB0 ucundan 100Hz lik %60 lık PWM sinyali üretmektedir.

LIST	P=16F628
	INCLUDE	"P16F628.INC"
	__CONFIG _HS_OSC &_WDT_OFF &_PWRTE_ON &_MCLRE_OFF &_BODEN_OFF &_LVP_OFF
SAYAC1	EQU	h'20'
SAYAC2	EQU	h'21'
	MOVLW	h'07'
	MOVWF	CMCON
	CLRF	PORTB
	CLRF	PORTA
	BSF	STATUS,5
	CLRF	TRISB
	BCF	STATUS,5
BASLA
	BCF	PORTB,0
	CALL	BEKLE_4MS
	BSF	PORTB,0
	CALL	BEKLE_6MS
	GOTO 	BASLA
BEKLE_4MS
	MOVLW	h'51'
	MOVWF	SAYAC1
DONGU1
	MOVLW	h'51'
	MOVWF	SAYAC2
DONGU2
	DECFSZ	SAYAC2,F
	GOTO	DONGU2
	DECFSZ	SAYAC1,F
	GOTO	DONGU1
	RETURN
BEKLE_6MS
	MOVLW	h'64'
	MOVWF	SAYAC1
DONGU3
	MOVLW	h'64'
	MOVWF	SAYAC2
DONGU4
	DECFSZ	SAYAC2,F
	GOTO	DONGU4
	DECFSZ	SAYAC1,F
	GOTO	DONGU3
	RETURN
	END


Not:Proteusta 4Mhz lik kristal için 20Hz sinyal elde ettim. Siz 20Mhz lik kristal kullanırsanız 5 katı yani 20*5=100Hz lik pwm çıkışı elde edersiniz.
Kolay gelsin...
KAZIM ASLAN Gazi Üniversitesi Elektrik Elektronik  Mühendisliği...