Autor Tema: Control Motor Pap  (Leído 1978 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Poliestireno

  • PIC10
  • *
  • Mensajes: 10
Control Motor Pap
« en: 06 de Octubre de 2008, 16:13:01 »
Hola amigos:

               Necesito vuestra ayuda, entiendo algo en assembler, pero muy poco. Estoy modificando el siguiente programa, que no es mio, para añadir por los puertos rb3 y rb4 don finales de carrera, me gustaria que le echaran un vistazo a ver si estoy bien encaminado. Gracias de antemano.


 ;********************************************************
;
;               Stepper Motor controller
;
;                                 Author : Seiichi Inoue   (http://www.sxlist.com/images/www/hobby_elec/e_step.htm)
;********************************************************

        list            p=pic16f84a
        include         p16f84a.inc
        __config _hs_osc & _wdt_off & _pwrte_on & _cp_off

;****************  Label Definition  ********************
        cblock  h'0c'
mode                            ;Operation mode
                                ;0=stop 1=right 2=left
count1                          ;Wait counter
count2                          ;Wait counter(for 1msec)
        endc

rb0     equ     0               ;RB0 of PORTB
rb1     equ     1               ;RB1 of PORTB
rb2     equ     2               ;RB2 of PORTB



rb3     equ     3               ;RB3 of PORTB;####  Modificado
rb4     equ     4               ;RB4 of PORTB;####  Modificado




rb5     equ     5               ;RB5 of PORTB
rb7     equ     7               ;RB7 of PORTB

;****************  Program Start  ***********************
        org     0               ;Reset Vector
        goto    init
        org     4               ;Interrupt Vector
        clrf    intcon          ;Clear Interruption reg

;****************  Initial Process  *********************
init



        bsf     status,rp0      ;Change to Bank1
        clrf    trisa           ;Set PORTA all OUT
   ;    movlw   b'00100111'     ;RB0,1,2.5=IN RB7=OUT


    movlw   b'00111111'     ;RB0,1,2,3,4,5=IN RB7=OUT;####  Modificado


        movwf   trisb           ;Set PORTB
        movlw   b'10000000'     ;RBPU=1 Pull up not use
        movwf   option_reg      ;Set OPTION_REG
        bcf     status,rp0      ;Change to Bank0
        clrf    mode            ;Set mode = stop
        clrf    count1          ;Clear counter
        clrf    count2          ;Clear counter
        movlw   b'00000101'     ;Set PORTA initial value
        movwf   porta           ;Write PORTA
        bsf     portb,rb7       ;Set RB7 = 1
        btfsc   portb,rb5       ;RB5 = 0 ?
        goto    $-1             ;No. Wait

start
;*************  Check switch condition  *****************


        btfsc   portb,rb3       ;Izquierda Parar   ####  Modificado
   goto    continua1            ####  Modificado
   clrf   mode               ####  Modificado

continua1                  ####  Modificado

   btfsc   portb,rb4       ;Derecha Parar      ####  Modificado
   goto   continua2            ####  Modificado
   clrf   mode
       


continua2                  ####  Modificado

   btfsc   portb,rb1       ;RB1(stop key) = ON ?
        goto    check1          ;No. Next
        clrf    mode            ;Yes. Set stop mode
        goto    drive           ;No. Jump to motor drive




check1
        btfsc   portb,rb2       ;RB2(right key) = ON ?
        goto    check2          ;No. Next
        movlw   d'1'            ;Yes. Set right mode
        movwf   mode            ;Save mode
        goto    drive           ;No. Jump to motor drive
check2
        btfsc   portb,rb0       ;RB0(left key) = ON ?
        goto    drive           ;No. Jump to motor drive
        movlw   d'2'            ;Yes. Set left mode
        movwf   mode            ;Save mode

;********************  Motor drive  *********************
drive
        movf    mode,w          ;Read mode
        bz      start           ;mode = stop
        bsf     portb,rb7       ;Set RB7 = 1
        btfsc   portb,rb5       ;RB5 = 0 ?
        goto    $-1             ;No. Wait
        movlw   d'5'            ;Set loop count(5msec)
        movwf   count1          ;Save loop count
loop    call    timer           ;Wait 1msec
        decfsz  count1,f        ;count - 1 = 0 ?
        goto    loop            ;No. Continue
        bcf     portb,rb7       ;Set RB7 = 0
        btfss   portb,rb5       ;RB5 = 1 ?
        goto    $-1             ;No. Wait
        movf    porta,w         ;Read PORTA
        sublw   b'000000101'    ;Check motor position
        bnz     drive2          ;Unmatch
        movf    mode,w          ;Read mode
        sublw   d'1'            ;Right ?
        bz      drive1          ;Yes. Right
        movlw   b'00001001'     ;No. Set Left data
        goto    drive_end       ;Jump to PORTA write
drive1
        movlw   b'00000110'     ;Set Right data
        goto    drive_end       ;Jump to PORTA write
;-------
drive2
        movf    porta,w         ;Read PORTA
        sublw   b'000000110'    ;Check motor position
        bnz     drive4          ;Unmatch
        movf    mode,w          ;Read mode
        sublw   d'1'            ;Right ?
        bz      drive3          ;Yes. Right
        movlw   b'00000101'     ;No. Set Left data
        goto    drive_end       ;Jump to PORTA write
drive3
        movlw   b'00001010'     ;Set Right data
        goto    drive_end       ;Jump to PORTA write
;-------
drive4
        movf    porta,w         ;Read PORTA
        sublw   b'000001010'    ;Check motor position
        bnz     drive6          ;Unmatch
        movf    mode,w          ;Read mode
        sublw   d'1'            ;Right ?
        bz      drive5          ;Yes. Right
        movlw   b'00000110'     ;No. Set Left data
        goto    drive_end       ;Jump to PORTA write
drive5
        movlw   b'00001001'     ;Set Right data
        goto    drive_end       ;Jump to PORTA write
;-------
drive6
        movf    porta,w         ;Read PORTA
        sublw   b'000001001'    ;Check motor position
        bnz     drive8          ;Unmatch
        movf    mode,w          ;Read mode
        sublw   d'1'            ;Right ?
        bz      drive7          ;Yes. Right
        movlw   b'00001010'     ;No. Set Left data
        goto    drive_end       ;Jump to PORTA write
drive7
        movlw   b'00000101'     ;Set Right data
        goto    drive_end       ;Jump to PORTA write
;-------
drive8
        movlw   b'00000101'     ;Compulsion setting

drive_end
        movwf   porta           ;Write PORTA
        goto    start           ;Jump to start

;*************  1msec Timer Subroutine  *****************
timer
        movlw   d'200'          ;Set loop count
        movwf   count2          ;Save loop count
tmlp    nop                     ;Time adjust
        nop                     ;Time adjust
        decfsz  count2,f        ;count - 1 = 0 ?
        goto    tmlp            ;No. Continue
        return                  ;Yes. Count end

;********************************************************
;             END of Stepper Motor controller
;********************************************************

        end
 

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Control Motor Pap
« Respuesta #1 en: 06 de Octubre de 2008, 21:44:10 »
Código: ASM
  1. btfsc   portb,rb3       ;Izquierda Parar   ####  Modificado
  2.    goto    continua1            ####  Modificado
  3.    clrf   mode               ####  Modificado
  4.  
  5. continua1                  ####  Modificado
  6.  
  7.    btfsc   portb,rb4       ;Derecha Parar      ####  Modificado
  8.    goto   continua2            ####  Modificado
  9.    clrf   mode
  10.        
  11.  
  12.  
  13. continua2                  ####  Modificado

Hola, he leido rapidamente tu correccion, y por lo que veo, solo si esta o no pulsado el fin de carrera, el programa seguira corriendo igual, pero en un caso borra MODE y en otro no...
y esto no me parece que sea lo que estas buscando....

ademas, me parece que empleando tablas para las salidas, seria mucho mas simple...


Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Poliestireno

  • PIC10
  • *
  • Mensajes: 10
Re: Control Motor Pap
« Respuesta #2 en: 07 de Octubre de 2008, 05:16:54 »
Gracias por contestar, voy a comprar los componentes y montarlo en protoboard, creo que no va a funcionar como deberia, voy a intentar desarrollarlo mejor. Voy a echarle un vistazo a lo de las tablas, a ver si en mas sencillo...


 

anything