Autor Tema: Robot Rastreador de Lineas con PIC16F84A (Ayuda)  (Leído 1724 veces)

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

Desconectado CrakerNano

  • PIC10
  • *
  • Mensajes: 3
    • Trastejant
Robot Rastreador de Lineas con PIC16F84A (Ayuda)
« en: 06 de Marzo de 2012, 15:56:23 »
Hola.

Lo primero de todo-ya que es mi primer mensaje- enhorabuena por la comunidad que formáis y por todos los contenidos que en ella hay, espero poder participar activamente ahora que formo parte.

Os comento un poco.. estoy montando un robot que siga una linea negra sobre un fondo blanco. Y me estoy dando muchos cabezazos con la programación hasta ahora.

Los motores son CC y se controlan con un L293D conectado al PORTA del PIC.
Las entradas son sensores CNY70 conectados al PORTB,por ahora he decidido poner 6 y van del RB2 al RB7.
(Adjunto una captura del montaje)

El codigo que llevo programado hasta ahora es el siguiente:

list p=16f628a
include p16f628a.inc
org 0x00 ; Vector de Reset
goto INICIO


;******************************
;** Configuracion de Puertos **
;******************************
INICIO movlw 0x07 ; Se desactivan los comparadores analogicos
movwf CMCON ;

bsf STATUS,RP0 ; Cambio al banco 1
clrf TRISA ; Puerto A como salida
movlw 0xFF ; Puerto B como entradas
movwf TRISB ;
bcf STATUS,RP0 ; Cambio al banco 0


LIMPIA_PUERTOS
clrf PORTA ; Limpiar Puerto A
clrf PORTB ; Limpiar Puerto B

PRINCIPAL


   call COMPROBAR_SENSORES

goto PRINCIPAL

COMPROBAR_SENSORES

   btfsc PORTB,2
   goto $+3
   call ANTIRREBOTES
   goto Avanzar
   
   btfsc PORTB,3
   goto $+3
   call ANTIRREBOTES
   goto Avanzar
   
   btfsc PORTB,4
   goto $+3
   call ANTIRREBOTES
   goto Derecha

   btfsc PORTB,5
   goto $+3
   call ANTIRREBOTES
   call Izquierda

   btfsc PORTB,6
   goto $+3
   call ANTIRREBOTES
   call Retroceder

   btfsc PORTB,7
   goto $+3
   call ANTIRREBOTES
   call Parar

goto COMPROBAR_SENSORES



;Control de los motores.

Avanzar: ;

   BSF PORTA,0 ; activamos los enable
   BSF PORTA,1 ; activamos el in1
   BSF PORTA,3 ; activamos el in3

   BCF PORTA,2 ; desactivamos el in2
   BCF PORTA,4 ; desactivamos el in4
   
goto Avanzar;   

Derecha: ;
   BSF PORTA,0 ; activamos los enable
   BSF PORTA,1 ; activamos el in1
   BSF PORTA,4 ; activamos el in4

   BCF PORTA,2 ; desactivamos el in2
   BCF PORTA,3 ; desactivamos el in3

goto Derecha
   
Izquierda: ;
   BSF PORTA,0 ; activamos los enable
   BSF PORTA,2 ; activamos el in2
   BSF PORTA,3 ; activamos el in4

   BCF PORTA,1 ; desactivamos el in1
   BCF PORTA,4 ; desactivamos el in3

goto Izquierda
   
Retroceder:   ;

   BSF PORTA,0 ; activamos los enable
   BSF PORTA,2 ; activamos el in2
   BSF PORTA,4 ; activamos el in4

   BCF PORTA,1 ; desactivamos el in1
   BCF PORTA,3 ; desactivamos el in3

goto Retroceder;
   
Parar: ;

   BCF PORTA,0 ; Paramos los enables
goto Parar   ;

ANTIRREBOTES
   btfss PORTB,2
   goto ANTIRREBOTES
   btfss PORTB,3
   goto ANTIRREBOTES
   btfss PORTB,4
   goto ANTIRREBOTES
   btfss PORTB,5
   goto ANTIRREBOTES
   btfss PORTB,6
   goto ANTIRREBOTES
   btfss PORTB,7
   goto ANTIRREBOTES
   return


END

El problema que no se como resolver es el siguiente. Si elimino los "goto_____" de Avanzar,Retroceder...etc, los motores no actúan ( supongo que el puslo es demasiado corto) y con ello puesto, nunca salen de ahi. por lo que cambia la trayectoria una vez y después ignora futuras lecturas de los sensores porque esta atrapado en el bucle.

La solución que se me ha ocurrido es sacar un cable de cada sensor para que ademas de llegar a su correspondiente puerto también active la interrupción de RB0. De tal forma que hiciese los siguiente:

*Un sensor lee una linea y hay que cambiar la trayectoria->Pone el RBx a 1, el PIC activa las salidas correspondientes y permanece en ese bucle.
*Otro sensor lee la linea y hay que volver a cambiar la trayectoria -> pone RBx a 1 y RB0 a 1-A ->se produce una interrupción, se sale del bucle en el que estaba y desde ahí se controla a que bucle meterse ahora.
Y así indefinidamente.

Esto es lo que se me a ocurrido, pero me parece que es un método chapucero, y estaría muy agradecido si alguien pudiese darme otra idea o decirme como se haría.

Muchas gracias por adelantado.

Desconectado CrakerNano

  • PIC10
  • *
  • Mensajes: 3
    • Trastejant
Re: Robot Rastreador de Lineas con PIC16F84A (Ayuda)
« Respuesta #1 en: 06 de Marzo de 2012, 16:15:56 »
En el esquema, lo que ahora son pulsadores serán las salidas de los CNY70

Desconectado CrakerNano

  • PIC10
  • *
  • Mensajes: 3
    • Trastejant
Re: Robot Rastreador de Lineas con PIC16F84A (Ayuda)
« Respuesta #2 en: 07 de Marzo de 2012, 14:20:16 »
Ya esta solucionado, solo había que cambiar los goto de Avanzar,Retroceder..etc por return

Desconectado jhoancarlos

  • PIC10
  • *
  • Mensajes: 2
Re: Robot Rastreador de Lineas con PIC16F84A (Ayuda)
« Respuesta #3 en: 09 de Abril de 2012, 21:31:47 »
hermano, tu programa esta muy desordenado, disculpa pero es verdad..... yo tratare de hacertelo y te doy respuesta la proxima semana... de todos modos puedes usar de depurador de proteus y ahi ves paso por paso lo que va haciendo el programa....