Problem with 16f88 steep motor control


Closed Thread
Results 1 to 1 of 1

Hybrid View

  1. #1
    ken_23's Avatar
    ken_23 Guest

    Default Problem with 16f88 steep motor control

    Eiii people....
    I have a problem with my 16f88!
    I put the PIC to control a steep motor unipolar. After a while the motor crash and stop....i dont know why....I tested early in a 16f84 and it works fine!
    I have changed to the 16f88 because I need A/D to my work....


    Please help me....I need to fix this to complete my University final project!




    The code is the following:

    LIST P=16F88
    #INCLUDE <P16F88.INC>
    RADIX DEC
    __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

    I_CNT EQU 254
    COUNT EQU H'11'
    COUNT1 EQU 03FH
    MEM_H EQU 020H
    TEMPO EQU 030H
    DECISAO EQU 040H

    ORG H'0000'

    GOTO MAIN ;Vai para o programa principal

    ORG H'0004'

    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    BCF INTCON, TMR0IF ; Limpa timer 0 interrupcao
    INCFSZ COUNT,F ; Verifica se ha ouverflow
    GOTO Saida ; Nao? entao segue
    MOVLW I_CNT ; Restaura contador
    MOVWF COUNT
    CALL TOGGLE

    Saida
    RETFIE ;Sai da interrupçao


    MAIN:
    BCF STATUS, 6 ;Banco 1
    BSF STATUS, 5
    MOVLW B'00000001' ;PortA 0 analogica, as restantes sao digitais
    MOVWF ANSEL
    BCF ADCON1, VCFG1 ;Referencia do AD V++ e V--
    BCF ADCON1, VCFG0
    BCF ADCON1, ADFM ;Resultado do AD com ADRESL=1
    BCF ADCON1, ADCS2
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    BCF ADCON0, CHS2
    BCF ADCON0, CHS1 ;Seleciona o canal RA0 como analogico
    BCF ADCON0, CHS0
    BCF ADCON0, ADCS1 ;Tad = 6.45 us para f=5 MHz
    BSF ADCON0, ADCS0
    BSF ADCON0, ADON ;activa o conversor
    BCF STATUS, 6 ;Banco 1
    BSF STATUS, 5
    MOVLW B'11101111' ;PORT A como entrada menos a 5 que é saida
    MOVWF TRISA
    MOVLW B'00000000' ;PORT B como saida
    MOVWF TRISB
    MOVLW 50 ;Ajuste dos tempos para 1 s
    MOVWF COUNT1

    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    MOVLW B'00000000' ;Limpa PORTB
    MOVWF PORTB
    BCF STATUS, 6 ;Banco 1
    BSF STATUS, 5
    MOVLW B'00000010'
    MOVWF OPTION_REG
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    BSF INTCON, TMR0IE ; Activa TMR0 interrupcao
    BCF INTCON, TMR0IF ; Limpa flag de interrupcao
    BSF INTCON, GIE ; Activa todas as interrupcoes
    BCF T2CON, 2 ; Desactiva o Timer 2
    MOVLW 20 ;Inicializa o FSR na posiçao 20
    MOVWF FSR
    MOVLW B'00000011'
    MOVWF INDF ;FSR(0)=00000011
    INCF FSR
    MOVLW B'00001001'
    MOVWF INDF ;FSR(1)=00001001
    INCF FSR
    MOVLW B'00001100'
    MOVWF INDF ;FSR(2)=00001100
    INCF FSR
    MOVLW B'00000110'
    MOVWF INDF ;FSR(3)=00000110
    MOVLW 20 ;Inicializa o FSR na posiçao 20
    MOVWF FSR

    JJ
    MOVLW B'00000001' ;Definiçao da variavel DECISAO
    MOVWF DECISAO
    GOTO WAIT

    NN
    MOVLW B'11111111' ;Definiçao da variavel DECISAO
    MOVWF DECISAO
    GOTO WAIT

    ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    WAIT
    MOVLW 10
    MOVWF TEMPO
    Q DECFSZ TEMPO,F ;perde tempo 10 x 1 us devido á nova conversao
    GOTO Q
    BSF ADCON0, 2 ;inicia conversao
    WE BTFSC ADCON0, 2
    GOTO WE
    MOVFW ADRESH
    MOVWF MEM_H
    SUBLW 102 ;Teste aos 2 V de entrada analogica
    BTFSC STATUS, C
    GOTO JJ
    GOTO NN
    GOTO WAIT


    ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\
    TOGGLE
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    INCFSZ COUNT1 ;Ajuste dos tempos
    GOTO SALTO1
    MOVLW 1
    MOVWF COUNT1
    BTFSC PORTA, 4 ;Teste ao LED
    GOTO LED_OFF
    GOTO LED_ON
    MOT
    MOVFW DECISAO
    SUBLW B'11111111'
    BTFSC STATUS, Z ;W=0????
    GOTO DIR
    GOTO ESQ
    ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\
    DIR
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    INCF FSR ;Avança uma posiçao e escreve no PORTB
    MOVF FSR,W
    SUBLW 24
    BTFSS STATUS,Z
    GOTO SALTO3
    MOVLW 20
    MOVWF FSR
    GOTO SALTO3

    ESQ
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    DECF FSR ;Retorna uma posicao atras e escreve no PORTB
    MOVF FSR,W
    SUBLW 19
    BTFSS STATUS,Z
    GOTO SALTO3
    MOVLW 23
    MOVWF FSR
    GOTO SALTO3

    SALTO3
    BCF STATUS, 6 ;Banco 0
    BCF STATUS, 5
    MOVF INDF,W
    MOVWF PORTB
    RETURN

    SALTO1
    RETURN

    LED_OFF
    BCF PORTA,4
    GOTO MOT ;Apaga o LED

    LED_ON
    BSF PORTA,4 ;Acende o LED
    GOTO MOT

    END
    Last edited by ken_23; - 4th July 2008 at 12:27.

Similar Threads

  1. 16F627A to 16F88 conversion problem
    By PICpocket in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 18th February 2009, 19:20
  2. 16F88 ADC problem
    By greensasquatch in forum mel PIC BASIC Pro
    Replies: 19
    Last Post: - 7th September 2008, 16:16
  3. USART Problem , but don't know where, in pc? or in PIC?
    By precision in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 15th July 2007, 08:12
  4. DS18B20, 16F88 problem
    By DynamoBen in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 10th June 2007, 16:11
  5. Problem with 16F88 controlling h-bridges
    By silentwol in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 7th March 2007, 04:16

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts