frekans değiştirmek istiyorum

Başlatan niang, 21 Mayıs 2015, 17:19:34

niang

Merhaba elektrik elektronik mühendis yabancı ögrenciyim. Aşagıdaki kodlar frekans 500HZ den başlamaktadır. ben 50HZ den baslaması istiyorum. yardım ederseniz sevinirim. ayrıca bilgisayarımda derlediğim zamanda hata çıkıyor (illegal opcode pic16f876). PICBASIC


DEFINE OSC 4
@ DEVICE pic16F876
@ DEVICE pic16F876, WDT_OFF
@ DEVICE pic16F876, PWRT_On
@ DEVICE pic16F876, PROTECT_OFF

TRISA=%11111111
TRISB=%00000000
TRISC=%00000000
PORTA=0
PORTB=0
PORTC=0

DEFINE LCD_DREG   PORTB
DEFINE LCD_DBIT   4
DEFINE LCD_RSREG  PORTB
DEFINE LCD_RSBIT  2
DEFINE LCD_EREG   PORTB
DEFINE LCD_EBIT   3
DEFINE LCD_BITS   4
DEFINE LCD_LINES  2

DEFINE CCP1_REG   PORTC
DEFINE CCP1_BIT   2

ON INTERRUPT GoTo KESME
ADCON1 = 7
OPTION_REG=%10000010   
INTCON=%10100001 
TMR0=0
T2CON = %00000110
PR2=124

SYMBOL YUKARI=PORTA.0
SYMBOL  ASAGI=PORTA.1
SYMBOL ARTTIR=PORTA.2
SYMBOL  AZALT=PORTA.3
SYMBOL    JOG=PORTA.4
SYMBOL    DUR=PORTA.5

ROLE  VAR PORTC.3
LED1  VAR PORTC.1
LED2  VAR PORTC.0

MODS     VAR BIT
YON      VAR BIT
U        VAR BYTE
W        VAR BYTE
ADR      VAR BYTE
SAYIH    VAR BYTE
SAYIL    VAR BYTE
SON      VAR BYTE
SYC      VAR BYTE
SNY      VAR BYTE
SAYAC    VAR BYTE
DUTY     VAR BYTE
I        VAR WORD
PERYOT   VAR WORD
HAM_DUTY VAR WORD
FREKANS  VAR WORD

PAUSE 200
LCDOUT $FE,1
GIRIS:
LCDOUT $FE,$83,"PWM MOTOR"
LCDOUT $FE,$C4,"KONTROL"
PAUSE 1500
LCDOUT $FE,1

DUTY=0:LED1=0:LED2=1

GOSUB FREKANS_HESAP
GOSUB EKRAN
GOSUB DUTY_YAZ
GOSUB PWM_ON

BASLA:
IF DUTY>0 THEN
IF JOG=0 AND YON=0 THEN
  YON=1
  SON=DUTY
  GOTO SAG
ENDIF

IF JOG=0 AND YON=1 THEN
YON=0
SON=DUTY
GOTO SOL
ENDIF
ENDIF

IF DUR=0 and duty>0 THEN
GOTO DURDUR
ENDIF

GOSUB FREKANS_HESAP
GOSUB DUTY_KONTROL
GOSUB FREKANS_KONTROL

GOTO BASLA

FREKANS_KONTROL:

IF ARTTIR=0 THEN
WHILE ARTTIR=0:WEND
PR2=PR2-1
gosub DUTY_YAZ
IF PR2<5 THEN PR2=5
ENDIF

IF AZALT=0 THEN
WHILE AZALT=0:WEND
PR2=PR2+1
gosub DUTY_YAZ
IF PR2>124 THEN PR2=124
ENDIF
GOSUB EKRAN
RETURN

DUTY_KONTROL:
IF YUKARI=0 THEN
sayac=0
DUTY=DUTY+1
IF DUTY=101 THEN DUTY=100
gosub DUTY_YAZ:GOSUB EKRAN
WHILE YUKARI=0
W=1
IF SAYAC=>50 THEN
   W=0:SAYAC=50
   DUTY=DUTY+1:GOSUB DELAY
   IF DUTY=101 THEN DUTY=100
ENDIF
GOSUB DUTY_YAZ
GOSUB EKRAN
WEND
W=0:SAYAC=0
ELSE
W=0:SAYAC=0
ENDIF

IF ASAGI=0 THEN
sayac=0
DUTY=DUTY-1
IF DUTY=255 THEN DUTY=0
GOSUB DUTY_YAZ
GOSUB EKRAN
WHILE ASAGI=0
W=1
IF SAYAC=>30 THEN
   W=0:SAYAC=30
   DUTY=DUTY-1:GOSUB DELAY
   IF DUTY=255 THEN DUTY=0
ENDIF
GOSUB DUTY_YAZ
GOSUB EKRAN
WEND
W=0
ELSE
W=0:SAYAC=0
ENDIF
 
RETURN

SAG:
DUTY=DUTY-1:GOSUB DELAY
IF DUTY>100 THEN
ROLE=1:LED1=1:LED2=0
GOTO DUTY_ARTTIR
ENDIF
GOSUB DUTY_YAZ:GOSUB EKRAN
GOTO SAG

DUTY_ARTTIR:
DUTY=DUTY+1:GOSUB DELAY
GOSUB DUTY_YAZ:GOSUB EKRAN
IF DUTY=SON THEN
GOTO BASLA
ENDIF
GOTO DUTY_ARTTIR

DURDUR:
DUTY=DUTY-1:GOSUB DELAY
GOSUB DUTY_YAZ:GOSUB EKRAN
IF DUTY=0 THEN
GOTO BASLA
ENDIF
GOTO DURDUR

SOL:
DUTY=DUTY-1:GOSUB DELAY
IF DUTY>100 THEN
ROLE=0:LED1=0:LED2=1
GOTO DUTY_ARTTIR
ENDIF
GOSUB DUTY_YAZ:GOSUB EKRAN
GOTO SOL


DELAY: 'gecikme
  FOR I=0 TO 255:NEXT
RETURN
DELAY1:
  FOR I=0 TO 150:NEXT
RETURN

FREKANS_HESAP:
FREKANS=62500/(PR2+1)
RETURN

DUTY_YAZ:
HAM_DUTY=(PR2+1)*DUTY/25
CCP1CON.4=ham_DUTY.0
CCP1CON.5=HAM_DUTY.1
CCPR1L=HAM_DUTY>>2
return

PWM_ON:
CCP1CON.2=1
CCP1CON.3=1
RETURN

PWM_OFF:
CCP1CON.2=0
CCP1CON.3=0
RETURN

EKRAN:
LCDOUT $FE,$80,"Duty %",#DUTY
IF DUTY<100 THEN
GOSUB HANE_AL1
LCDOUT $FE,ADR,$20
ENDIF
lcdout $fe,$C0,"FREKANS=",#FREKANS
GOSUB HANE_AL2
RETURN

HANE_AL1:
IF DUTY<100 OR DUTY>9 THEN ADR=$88
IF DUTY<10 THEN ADR=$87
RETURN
HANE_AL2:
IF FREKANS>10000 THEN LCDOUT $FE,$CD,"Hz"
IF FREKANS<10000 AND FREKANS>999 THEN LCDOUT $FE,$CC,"Hz "
IF FREKANS<1000 THEN LCDOUT $FE,$CB,"Hz "
RETURN

DISABLE
KESME:
IF W=1 THEN
      SAYAC=SAYAC+1
      IF SAYAC=101 THEN SAYAC=0    
ENDIF
INTCON.2=0   
RESUME
ENABLE

END

ete

Donanımsal pwm frekansı 4 Mhz çalışma frekansında mşnimum 245 hz olabilmektedir. Daha aşağıya düşürülemez. Daha düşük frekanslar için işlemci frekansını düşürmek gerekir.

Illegal opcode hatası derlemede kullandığın yöntem ve sigorta ayarları formatı ile alakalıdır.
Bu forumda önemli bilgiler başlığı altında sigorta ayarları ile ilgili konu başlığı altında anlatılanları okumalısın.

Ete

niang

First of all thanks you for replying..
Asıl ben bitirme projesi olarak 1fazlı inverter (12vdc-220vac) pwm ile frekans değişimi tasarlıyorum. Duty cycle ve frekans, LCD ekranda değiştirmekte. Devrenin isisini ekte bulunur.
Halen benim istediğim çıkışı (220Vac) alamıyorum. Ondan frekansı düsürmeye çalışıyorum. Bir öneriniz varmı acaba..

Powered by EzPortal