Autor Tópico: PIC 12F675 + MOTOR DE PASSO  (Lida 2442 vezes)

Description:

0 Membros e 2 Visitantes estão vendo este tópico.

Offline gurob

  • Novato
  • *
  • Posts: 13
  • GUIA-CNC
PIC 12F675 + MOTOR DE PASSO
« Online: 04 de Janeiro de 2012, 20:59 »
Olá amigoS
 
Estou fazendo uma programação, usando o PIC 12F675, pois pretendo usar para uma produção em larga escala e esse pic é o mais barato que encontrei com saídas suficientes pra controlar um motor de passo.
 
Depois de sofrer um bocado eu cheguei num código que creio estar correto, porém quando coloco na protoboard usando leds, ele só dá certo girando pra um lado, o outro lado não gira nada. Além do que os leds ficam piscando aleatoriamente, creio que se trata de alguma interferencia. Quando eu chego com as mãos perto dos leds eles começam a piscar, e se afasto eles param, parece até coisa do além, nunca vi isso.
 
Não sei o que pode ser, já estou vesgo de tanto olhar pra tela do computador.
 
Se alguem  puder dar uma olhada no código abaixo e me dar alguma dica, ficaria muito grato.
 
Obrigado
Gustavo


   list      p=12f675            ; list directive to define processor
   #include <p12f675.inc>        ; processor specific variable definitions

;----------------------------------------------------------------------
; Configuração
   __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF; & _BODEN_ON
;----------------------------------------------------------------------
;
;----------------------------------------------------------------------
#define BOB4      GPIO,0      ; (o) saída bobina 4
#define BOB3      GPIO,1      ; (o) saída bobina 3

#define BOT_DIR      GPIO,2      ; (i) entrada bot_DIR
#define BOT_ESQ      GPIO,3      ; (i) entrada bot_ESQ

#define   BOB2      GPIO,4      ; (o) saída bobina 2
#define   BOB1      GPIO,5      ; (o) saída bobina 1

;----------------------------------------------------------------------
; MEMÓRIA DO SISTEMA
;----------------------------------------------------------------------
   CBLOCK   0X20            ;ENDERECO INICIAL DA MEMORIA DO USUARIO
         TEMPO_3
         TEMPO_2
         TEMPO_1   
   ENDC   
;**********************************************************************************
;               VETOR DE RESET
;**********************************************************************************
      ORG      0X00            ;ENDERECO INICIAL DO PROCESSAMENTO
      GOTO    INICIO

      ORG     0x004              ;INTERRUPÇÃO
      RETFIE         

INICIO
   BSF           STATUS,RP0
   MOVLW        b'00001100'      ;ENTRADAS (1) E SAIDAS (0)
   MOVWF      TRISIO
   BCF           STATUS,RP0

   movlw        b'00000000'      ;ESTIPULA O NIVEL DO SINAL DE CADA PINO (LEDS EM BAIXA E BOTOES DESLIGADOS)
   movwf      GPIO

;-----------------------------------------------------------------------------
; LOOPING DO PROGRAMA
;-----------------------------------------------------------------------------
MAIN
;   CLRF   GPIO         ; POSSIVEL CAUSADOR DOS PAUS

TEST1
   BTFSS   BOT_DIR          ;se o botao direita estiver apertado entao chama MOVE_DIR
   GOTO   TEST2            ; se não estiver apertado, entao chama TEST2
   GOTO   MOVE_DIR
      
TEST2
   BTFSS   BOT_ESQ         ;Acho que aqui deveria ser BTFSS
   GOTO   MAIN
   GOTO   MOVE_ESQ

MOVE_DIR         
   BSF BOB1
   CALL ROT3
   BCF BOB1
   CALL TESTA_DIR
   
   BSF BOB2
   CALL ROT3
   BCF BOB2
   CALL TESTA_DIR   
   
   BSF BOB3
   CALL ROT3
   BCF BOB3
   CALL TESTA_DIR

   BSF BOB4   
   CALL ROT3
   BCF BOB4
   CALL TESTA_DIR   
   GOTO MOVE_DIR
   
MOVE_ESQ
   BSF BOB4
   CALL ROT3
   BCF BOB4
   CALL TESTA_ESQ

   BSF BOB3
   CALL ROT3
   BCF BOB3
   CALL TESTA_ESQ
   
   BSF BOB2
   CALL ROT3
   BCF BOB2
   CALL TESTA_ESQ

   BSF BOB1
   CALL ROT3
   BCF BOB1
   CALL TESTA_ESQ   
   GOTO MOVE_ESQ
;-----------------------------------------------------------------------------
;PROCEDIMENTOS
;-----------------------------------------------------------------------------
TESTA_DIR
   BTFSS BOT_DIR
   GOTO  MAIN
   RETURN

TESTA_ESQ
   BTFSC   BOT_ESQ
   GOTO   MAIN
   RETURN
;-----------------------------------------------------------------------------
;ROTINA DE TEMPO
;-----------------------------------------------------------------------------
ROT3
   MOVLW .2
   MOVWF TEMPO_3
REPETE_3
   NOP
   CALL ROT2
   NOP
   DECFSZ TEMPO_3
   GOTO REPETE_3
   RETURN      
ROT2
   MOVLW .1
   MOVWF TEMPO_2
REPETE_2   
   CALL ROT1
   NOP
   DECFSZ TEMPO_2
   GOTO REPETE_2
   RETURN
   GOTO MAIN
ROT1
   MOVLW .9
   MOVWF TEMPO_1
REPETE
   NOP
   DECFSZ TEMPO_1
   GOTO REPETE
   NOP
   RETURN
   GOTO MAIN
;-----------------------------------------------------------------------------
;FIM DA ROTINA DE TEMPO
;-----------------------------------------------------------------------------
   
   GOTO MAIN

   END         


 

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:PIC 12F675 + MOTOR DE PASSO
« Resposta #1 Online: 05 de Janeiro de 2012, 09:14 »
Gurob,

Bom dia, qual o seu nome? Em que você trabalha? Você poderia se apresentar?

Offline jorge

  • Fuso
  • **
  • Posts: 218
  • Sexo: Masculino
  • Cidade - UF: são paulo - sp
Re:PIC 12F675 + MOTOR DE PASSO
« Resposta #2 Online: 06 de Janeiro de 2012, 16:08 »
Gurob

Não gosto de dar o peixe ,mas........ acho que é isto que vc quer , espero que analise o prog e que se APRESENTE.

   list      p=12f675            ; list directive to define processor
   #include <p12f675.inc>        ; processor specific variable definitions

;----------------------------------------------------------------------
; Configuração
   __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF; & _BODEN_ON
;----------------------------------------------------------------------
;
;----------------------------------------------------------------------
#define   BOB1      GPIO,0      ; (o) saída bobina 1
#define BOB2      GPIO,1      ; (o) saída bobina 2
#define   BOB3      GPIO,4      ; (o) saída bobina 3
#define   BOB4      GPIO,5      ; (o) saída bobina 4

#define   BOT_DIR   GPIO,2      ; (i) entrada bot_DIR
#define   BOT_ESQ   GPIO,3      ; (i) entrada bot_ESQ

;----------------------------------------------------------------------
; MEMORIA DO SISTEMA
;----------------------------------------------------------------------
   CBLOCK   0X20      ;ENDERECO INICIAL DA MEMORIA DO USUARIO
   INDEX
    TEMPO_2
    TEMPO_1   
   ENDC   
;**********************************************************************************
;               VETOR DE RESET
;**********************************************************************************
      ORG      0X00      ;ENDERECO INICIAL DO PROCESSAMENTO
      GOTO    INICIO

      ORG     0x004      ;INTERRUP€™ES
      RETFIE

 BYTE
   ADDWF   PCL
   RETLW   B'00010001'
   RETLW   B'00100001'
   RETLW   B'00100010'
   RETLW   B'00010010'
   RETURN       

INICIO
   BSF      STATUS,RP0
   MOVLW   b'00001100'   ;ENTRADAS (1) E SAIDAS (0)
   MOVWF   TRISIO
   MOVLW   0X00      ;DESABILITA ENT ANALOGICAS
   MOVWF   ANSEL
   BCF     STATUS,RP0

   MOVLW   0X07      ;DESLIGA COMPARADOR
   MOVWF   CMCON

   MOVLW   B'00010001'   ;CARREGA SAIDA DO MOTOR
   MOVWF   GPIO

   CLRF   INDEX
;-----------------------------------------------------------------------------
; LOOPING DO PROGRAMA
;-----------------------------------------------------------------------------
MAIN

TEST1
    BTFSS  BOT_ESQ      ;se o botao esquerda estiver apertado entao chama MOVE_esq
    GOTO   TEST2               ;se não estiver apertado, entao chama TEST2
    GOTO   MOVE_ESQ

TEST2
   BTFSS  BOT_DIR   
   GOTO   MAIN      
   
MOVE_DIR         
   INCF   INDEX
   MOVLW   B'00000011'
   ANDWF   INDEX,W
   CALL   BYTE
   MOVWF   GPIO
   CALL   DELAY
   GOTO   MAIN   

MOVE_ESQ
   DECF   INDEX
   MOVLW   B'00000011'
   ANDWF   INDEX,W
   CALL   BYTE
   MOVWF   GPIO
   CALL   DELAY
   GOTO   MAIN
;-----------------------------------------------------------------------------
;ROTINA DE TEMPO (AQUI VC AJUSTA A VELOCIDADE DO MOTOR)
;-----------------------------------------------------------------------------
DELAY   ;DELAY DE 0,0025 S
   movlw 0xF3
   movwf TEMPO_1
   movlw 0x02
   movwf TEMPO_2
Delay_0
   decfsz TEMPO_1, f
   goto  $+2
   decfsz TEMPO_2, f
   goto Delay_0
   goto  $+1
   RETURN
;-----------------------------------------------------------------------------
;FIM DA ROTINA DE TEMPO
;-----------------------------------------------------------------------------

 
   END         

abraço
« Última modificação: 12 de Janeiro de 2012, 09:37 por jorge »

 

/** * */