Autor Tema: Donde puede ir este tema....???  (Leído 1845 veces)

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

Desconectado Kardia

  • PIC10
  • *
  • Mensajes: 5
Donde puede ir este tema....???
« en: 12 de Diciembre de 2008, 23:08:32 »
Primeramente soy nuevo en el foro  :), inicio mi primer tema para encontrar los errores que estoy cometiendo, ya que uno no nace aprendiendo de la noche a la mañana  :lol: :lol:
Les explico en que consiste lo que quiero implementar; pero antes yo siempre empiezo por una previa simulacion de cualquier diagrama antes de implementarlo. Pues consta de un brazo robotico de 2 grados; ya se que hay muchos por la red (5 a 6 grados) pero muy pocos trabajan con el lenguaje ASM, es por ello que quiero empezar yo con este diseño; me defiendo en el ASM, pero mi problema ahora es que no he trabajado mucho con los LCD; un LCD por que??? en si solo para poder visualizar una serie de mensajes que seran activados por unos pulsadores que permiten girar los motores paso a paso.
Empeze primeramente con el programa en MPLAB para el giro de los motores  8) 8) pero cuando empeze a insertar el codigo del LCD no me cuadra donde tiene que ir  :shock: :shock: y veo que estoy cometiendo errores muy altos y no se en donde????
Citar
he aqui mi codigo, porsiaca no uso las rutinas retardos.inc ni otra que conosca, esta rutina es la que mayormente usan algunos.

LIST       P=16F84A
INCLUDE    <P16F84A.inc>
RADIX      HEX

STATUS       EQU 03h ; REGISTRO ESTADO
PORTA       EQU 05h ; PUERTO A
PORTB       EQU 06h ; PUERTO B
OPTION_REG    EQU 81h ; REGISTRO DE INTERRUPCION
INTCON       EQU 0bh
TRISA       EQU 85h ; REGISTRO CONFIGURACION PUERTO A
TRISB       EQU 86h ; REGISTRO CONFIGURACION PUERTO B
CONTA       EQU 0X0D   ;Damos el nombre de CONTA a dir. 0Dh(USO GENERAL)
CONTB       EQU 0X0E   ;Damos el nombre de CONTB a dir. 0Eh(USO GENERAL)
CONTC       EQU 0X0F   ;Damos el nombre de CONTC a dir. 0Fh(USO GENERAL)

         ORG 00h ; INDICA AL COMPILADOR DONDE COMIENZA EL PROGRAMA
         GOTO INICIO ; VA A SUBRUTINA INICIO
         ORG 04h

INICIO
         BSF STATUS,5
         MOVLW B'11111' ; CARGA '11111' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF TRISA ; CARGA 'W' EN EL PUERTO A
         MOVLW B'00000000' ; CARGA '00000000' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF TRISB ; CARGA 'W' EN EL PUERTO B
         MOVLW B'00000111' ; CARGA '00000111' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF OPTION_REG ; CONFIGURAMOS TMR0 COMO CONTADOR DESCENDENTE
         BCF STATUS,5 ; VUELVE A 0
         CLRF PORTA
         CLRF PORTB

GIRO
         BTFSC PORTA,0 ; EN ESTE PUERTO DA EL GIRO A LA IZQUIERDA
         GOTO GIRO1
         GOTO IZQUIERDA
GIRO1
         BTFSC PORTA,1 ; EN ESTE PUERTO DA EL GIRO A LA DERECHA
         GOTO GIRO2
         GOTO DERECHA
GIRO2
         BTFSC PORTA,2 ; EN ESTE PUERTO ABRE
         GOTO GIRO3
         GOTO ABRE
GIRO3
         BTFSC PORTA,3 ; EN ESTE PUERTO CIERRA
         GOTO GIRO
         GOTO CIERRA
DERECHA
         MOVLW B'00001100' ; PRIMER PASO.
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00000110' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00000011' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00001001' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT

IZQUIERDA
         MOVLW B'00001001' ; PRIMER PASO
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00000011' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00000110' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00001100' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT

CIERRA
         MOVLW B'11000000' ; PRIMER PASO.
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'01100000' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00110000' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'10010000' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT

ABRE
         MOVLW B'10010000' ; PRIMER PASO
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00110000' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'01100000' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'11000000' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT

TIEMPO
         movwf   PORTB            ;sacamos los pasos por el PORTb
         call    Retardo_100ms      ;realizamos el llamado para el retardo
         return                  ;retorno de donde fue llamado

Retardo_100ms                     ;retardo de 100 milisegundos
         movlw   d'1000'            ;OJO d100=100mlsegundos  cambio otros valores como ejemplo d50=50mlsegundos
         goto   Retardos_ms

Retardos_ms
         movwf   CONTB         

R1ms_BucleExterno
         movlw   d'249'         
         movwf   CONTA         

R1ms_BucleInterno
         nop            
         decfsz   CONTA,F         
         goto   R1ms_BucleInterno   
         decfsz   CONTB,F         
         goto   R1ms_BucleExterno    
         return
                                   END

Ahora como empiezo e inserto el codigo del LCD??? y que entradas tomo para la visualizacion del mismo????

Salu2 y gracias  :-/ :-/ :-/

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Donde puede ir este tema....???
« Respuesta #1 en: 12 de Diciembre de 2008, 23:43:46 »
Hola:

Podrias insertar los mensajes en los puntos que te menciono por ejemplo:


         ORG 00h ; INDICA AL COMPILADOR DONDE COMIENZA EL PROGRAMA
         GOTO INICIO ; VA A SUBRUTINA INICIO
         ORG 04h

INICIO
         BSF STATUS,5
         MOVLW B'11111' ; CARGA '11111' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF TRISA ; CARGA 'W' EN EL PUERTO A
         MOVLW B'00000000' ; CARGA '00000000' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF TRISB ; CARGA 'W' EN EL PUERTO B
         MOVLW B'00000111' ; CARGA '00000111' EN EL REGISTRO DE TRABAJO 'W'
         MOVWF OPTION_REG ; CONFIGURAMOS TMR0 COMO CONTADOR DESCENDENTE
         BCF STATUS,5 ; VUELVE A 0
         CLRF PORTA
         CLRF PORTB

;**** AQUI INSERTA UNA LLAMADA A LA INICIALIZACIÓN DEL LCD


GIRO
         BTFSC PORTA,0 ; EN ESTE PUERTO DA EL GIRO A LA IZQUIERDA
         GOTO GIRO1
         GOTO IZQUIERDA
GIRO1
         BTFSC PORTA,1 ; EN ESTE PUERTO DA EL GIRO A LA DERECHA
         GOTO GIRO2
         GOTO DERECHA
GIRO2
         BTFSC PORTA,2 ; EN ESTE PUERTO ABRE
         GOTO GIRO3
         GOTO ABRE
GIRO3
         BTFSC PORTA,3 ; EN ESTE PUERTO CIERRA
         GOTO GIRO
         GOTO CIERRA
DERECHA

;****** AQUI COLOCA EL MENSAJE DESEADO PARA ESTE CASO EN EL LCD

         MOVLW B'00001100' ; PRIMER PASO.
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00000110' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00000011' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00001001' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT

IZQUIERDA

;****** AQUI COLOCA EL MENSAJE DESEADO PARA ESTE CASO EN EL LCD

         MOVLW B'00001001' ; PRIMER PASO
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00000011' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00000110' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00001100' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT

CIERRA

;****** AQUI COLOCA EL MENSAJE DESEADO PARA ESTE CASO EN EL LCD

         MOVLW B'11000000' ; PRIMER PASO.
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'01100000' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'00110000' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'10010000' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT

ABRE

;****** AQUI COLOCA EL MENSAJE DESEADO PARA ESTE CASO EN EL LCD

         MOVLW B'10010000' ; PRIMER PASO
         MOVWF PORTB
         CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
         MOVLW B'00110000' ; SEGUNDO PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'01100000' ; TERCER PASO
         MOVWF PORTB
         CALL TIEMPO
         MOVLW B'11000000' ; CUARTO PASO
         MOVWF PORTB
         CALL TIEMPO
         GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT

TIEMPO
         movwf   PORTB            ;sacamos los pasos por el PORTb
         call    Retardo_100ms      ;realizamos el llamado para el retardo
         return                  ;retorno de donde fue llamado

Retardo_100ms                     ;retardo de 100 milisegundos
         movlw   d'1000'            ;OJO d100=100mlsegundos  cambio otros valores como ejemplo d50=50mlsegundos
         goto   Retardos_ms

Retardos_ms
         movwf   CONTB         

R1ms_BucleExterno
         movlw   d'249'         
         movwf   CONTA         

R1ms_BucleInterno
         nop            
         decfsz   CONTA,F         
         goto   R1ms_BucleInterno   
         decfsz   CONTB,F         
         goto   R1ms_BucleExterno    
         return
                                   END

Tambien inserta los retardos antirebote para los pulsadores al entrar a cada subrutina.

Javicho.

Desconectado Kardia

  • PIC10
  • *
  • Mensajes: 5
Obtener salidas en LCD LM016L
« Respuesta #2 en: 15 de Diciembre de 2008, 11:23:07 »
Revisando bien las rutinas que tengo encontre mi otro error en la configuracion del mismo, en realidad lo que quiero obtener en el LCD es un mensaje por cada boton de entrada (RA0...RA3), por ejemplo: presiono el bton RA0 por lo tanto obtengo un mensaje GIRO DERECHA. y asi sucesivamente. Ademas de la configuracion de los pines del LCD (PInes del 1 al 5).
Veo que no me deje entender bien en mi anterior post.

Salu2

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Donde puede ir este tema....???
« Respuesta #3 en: 15 de Diciembre de 2008, 12:21:48 »
Por eso te puse en tu programa con asterisco **** donde debes colocar tus mensajes para el LCD, algo asi:

movlw   'D'
call        Enviar_al_LCD
movlw   'E'
call        Enviar_al_LCD
movlw   'R'
call        Enviar_al_LCD
movlw   'E'
call        Enviar_al_LCD
movlw   'C'
call        Enviar_al_LCD
movlw   'H'
call        Enviar_al_LCD
movlw   'A'
call        Enviar_al_LCD

Donde "Enviar_al_LCD" es una subrutina que se encarga de gestionar la comunicación con el LCD y enviarle el dato que se desea mostrar en el mismo.

Javicho.


 

anything