'************************************************************************* ' PWM KONTROLLU DC MOTOR '************************************************************************** DEVICE 16F628 XTAL 4 TRISB.7=1 TRISB.6=1 TRISB.5=1 TRISB.4=1 TRISB.3=0 TRISB.2=0 DECLARE LCD_TYPE 0 DECLARE LCD_DTPIN PORTA.0 DECLARE LCD_ENPIN PORTB.1 DECLARE LCD_RSPIN PORTB.0 DECLARE LCD_INTERFACE 4 DECLARE LCD_LINES 2 PRINT $FE ,1 DUTY VAR WORD FREKANS VAR FLOAT YUZDE VAR BYTE YON VAR BYTE PORTB.2=0 '***********************500 HZ **************************************** START_500_0: PR2=124 DUTY=0 START_500: PAUSE 50 CCP1CON=0 TMR2=0 CCP1CON=%00001100 'PWM MODU' T2CON=%00000111 'TMR2 ACIK PRESCALER DEGERI 1:16' CCP1CON.4=DUTY.0 CCP1CON.5=DUTY.1 CCPR1L=DUTY>>2 FREKANS=((1000)/(PR2+1)) YUZDE=DUTY/5 IF PORTB.2=0 THEN YON=60 ELSE YON=62 ENDIF PRINT $FE,1 PRINT DEC1 FREKANS/16,"KHz" PAUSE 5 PRINT $FE,$C0 PRINT "%",DEC YUZDE," YON ",YON,YON PAUSE 5 ANA_500: IF PORTB.4=0 THEN PAUSE 50 DUTY=DUTY+5 IF DUTY>=500 THEN DUTY=500 ENDIF GOTO START_500 ELSEIF PORTB.5=0 THEN PAUSE 50 DUTY=DUTY-5 IF DUTY<=0 THEN DUTY=0 ENDIF GOTO START_500 ELSEIF PORTB.6=0 THEN PAUSE 50 GOTO START_2_0 ELSEIF PORTB.7=0 THEN CCP1CON=0 portb.3=0 PAUSE 100 TOGGLE PORTB.2 GOTO START_500 ENDIF GOTO ANA_500 '*************************2KHZ************************************ START_2_0: DUTY=0 PR2=124 START_2: PAUSE 50 CCP1CON=0 TMR2=0 CCP1CON=%00001100 'PWM MODU' T2CON=%00000101 'TMR2 ACIK PRESCALER DEGERI 1:4' CCP1CON.4=DUTY.0 CCP1CON.5=DUTY.1 CCPR1L=DUTY>>2 FREKANS=((1000)/(PR2+1)) YUZDE=DUTY/5 IF PORTB.2=0 THEN YON=60 ELSE YON=62 ENDIF PRINT $FE,1 PRINT DEC1 FREKANS/4,"KHz" PAUSE 5 PRINT $FE,$C0 PRINT "%",DEC YUZDE," YON ",YON,YON PAUSE 5 ANA_2: IF PORTB.4=0 THEN PAUSE 50 DUTY=DUTY+5 IF DUTY>=500 THEN DUTY=500 ENDIF GOTO START_2 ELSEIF PORTB.5=0 THEN PAUSE 50 DUTY=DUTY-5 IF DUTY<=0 THEN DUTY=0 ENDIF GOTO START_2 ELSEIF PORTB.6=0 THEN PAUSE 50 GOTO START_5_0 ELSEIF PORTB.7=0 THEN CCP1CON=0 portb.3=0 PAUSE 100 TOGGLE PORTB.2 GOTO START_2 ENDIF GOTO ANA_2 '**************************5KHZ************************************ START_5_0: DUTY=0 PR2=49 START_5: PAUSE 50 CCP1CON=0 TMR2=0 CCP1CON=%00001100 'PWM MODU' T2CON=%00000111 'TMR2 ACIK PRESCALER DEGERI 1:4' CCP1CON.4=DUTY.0 CCP1CON.5=DUTY.1 CCPR1L=DUTY>>2 FREKANS=((1000)/(PR2+1)) YUZDE=DUTY/2 IF PORTB.2=0 THEN YON=60 ELSE YON=62 ENDIF PRINT $FE,1 PRINT DEC1 FREKANS/4,"KHz" PAUSE 5 PRINT $FE,$C0 PRINT "%",DEC YUZDE," YON ",YON,YON PAUSE 5 ANA_5: IF PORTB.4=0 THEN PAUSE 50 DUTY=DUTY+2 IF DUTY>=200 THEN DUTY=200 ENDIF GOTO START_5 ELSEIF PORTB.5=0 THEN PAUSE 50 DUTY=DUTY-2 IF DUTY<=0 THEN DUTY=0 ENDIF GOTO START_5 ELSEIF PORTB.6=0 THEN PAUSE 50 GOTO START_10_0 ELSEIF PORTB.7=0 THEN CCP1CON=0 portb.3=0 PAUSE 100 TOGGLE PORTB.2 GOTO START_5 ENDIF GOTO ANA_5 '****************************10KHZ********************************* START_10_0: DUTY=0 PR2=99 START_10: PAUSE 50 CCP1CON=0 TMR2=0 CCP1CON=%00001100 'PWM MODU T2CON=%00000100 'TMR2 ACIK PRESCALER DEGERI 1:1' CCP1CON.4=DUTY.0 CCP1CON.5=DUTY.1 CCPR1L=DUTY>>2 FREKANS=((1000)/(PR2+1)) YUZDE=DUTY/4 IF PORTB.2=0 THEN YON=60 ELSE YON=62 ENDIF PRINT $FE,1 PRINT DEC1 FREKANS,"KHz" PAUSE 5 PRINT $FE,$C0 PRINT "%",DEC YUZDE," YON ",YON,YON PAUSE 5 ANA_10: IF PORTB.4=0 THEN PAUSE 50 DUTY=DUTY+4 IF DUTY>=400 THEN DUTY=400 ENDIF GOTO START_10 ELSEIF PORTB.5=0 THEN PAUSE 50 DUTY=DUTY-4 IF DUTY<=0 THEN DUTY=0 ENDIF GOTO START_10 ELSEIF PORTB.6=0 THEN PAUSE 50 GOTO START_20_0 ELSEIF PORTB.7=0 THEN CCP1CON=0 portb.3=0 PAUSE 100 TOGGLE PORTB.2 GOTO START_10 ENDIF GOTO ANA_10 '***********************20KHZ***************************** START_20_0: DUTY=0 PR2=49 START_20: PAUSE 50 CCP1CON=0 TMR2=0 CCP1CON=%00001100 'PWM MODU' T2CON=%00000100 'TMR2 ACIK PRESCALER DEGERI 1:1' CCP1CON.4=DUTY.0 CCP1CON.5=DUTY.1 CCPR1L=DUTY>>2 FREKANS=((1000)/(PR2+1)) YUZDE=DUTY/2 IF PORTB.2=0 THEN YON=60 ELSE YON=62 ENDIF PRINT $FE,1 PRINT DEC1 FREKANS,"KHz" PAUSE 5 PRINT $FE,$C0 PRINT "%",DEC YUZDE," YON ",YON,YON PAUSE 5 ANA_20: IF PORTB.4=0 THEN PAUSE 50 DUTY=DUTY+2 IF DUTY>=200 THEN DUTY=200 ENDIF GOTO START_20 ELSEIF PORTB.5=0 THEN PAUSE 50 DUTY=DUTY-2 IF DUTY<=0 THEN DUTY=0 ENDIF GOTO START_20 ELSEIF PORTB.6=0 THEN PAUSE 50 GOTO START_500_0 ELSEIF PORTB.7=0 THEN CCP1CON=0 PORTB.3=0 PAUSE 100 TOGGLE PORTB.2 GOTO START_20 ENDIF GOTO ANA_20 END