Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Buenas a todos, antes que nada queria felicitaros por el foro ya que ofreceis mucha ayuda a los que como yo estamos empezando en el mundo de la robotica. Este año voy a cursar segundo de bachillerato y para mi treball de recerca estoy haciendo un robot que siga la luz, que siga lineas y que evite obstaculos. Para evitar obstaculos uso un pic 16f84a y un sensor srf04. Para la placa he utilizado el diseño del tarribot. Llevo mucho tiempo buscando y leyendo pero hay una duda que no he podido solucionar:
Estoy haciendo el programa en assembler y no consigo entender como recibir la información de la distancia y hacer que los motres se paren solo si la distancia es menor que x.
Siento la parrafada y muchas gracias.
Cuando tenga terminado el robot colgare fotos y datos y el programa.
Muchas gracias por la ayuda. Durante este tiempo he estado trabajando en el robot y ahora solo me queda acabar el programa. El robot lo tengo que entregar la semana que viene y voy un poco apurado. De momento llevo esto de programa y solo me queda leer los datos(creo). Fj_Sanchez me lo as explicado muy bien pero como no se mucho de programación no me ha acabado de quedar claro. Aqui os dejo lo que llevo haber si me podeis ayudar con lo que mefalta y decirme si algo esta mal. GRacias 😀
_CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A ;
INCLUDE <P16F84A.INC>
#DEFINE Disparo PORTA,3 ; Disparo para iniciar la medida.
#DEFINE Eco PORTA,4 ; Pulso cuya anchura hay que medir.
Distancia EQU .5
PDel0 EQU 0CH
PDel1 EQU 0CH
PDe12 EQU 0CH
STATUS equ 0x3
PORTA equ 0x5
TRISA equ 0x5
PORTB equ 0x6
TRISB equ 0x6
ORG 0x00 ;marcamos a partir de que banco de memoria empezara el programa
bsf STATUS,RP0 ;Marcamos que bits seran de entrada y cuales de salida
movlw B'00000'
movwf TRISA
movlw B'11111111'
movwf TRISB
bcf STATUS,RP0
Inicio
clrf Distancia ; Inicializa el registro.
bsf Disparo ; Comienza el pulso de disparo.
call DEMORA ; Duración del pulso.
bcf Disparo ; Final del pulso de disparo.
clrf PORTB ;limpiamos I/O
bsf disparo
bcf disparo
btfsc eco
call atras_gir
call endevant ;andamos hacia adelante
goto inicio
atras_gir
call frenar
call enrrere
call DEMORA
call esquerra
call DEMORA
call endevant
; acciones
Frenar ;para los motores
bcf PORTA,0
bcf PORTA,1
bcf PORTA,2
bcf PORTA,3
esquerra ;gira sobre si mismo hacia la izquierda
bcf PORTA,1
bcf PORTA,2
bsf PORTA,0
bcf PORTA,3
enrrere
bcf PORTA,1
bcf PORTA,3
bsf PORTA,2
bsf PORTA,0
endevant
bcf PORTA,2
bcf PORTA,0
bsf PORTA,1
bsf PORTA,3
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 29/08/2009 Hs 1:59:54
; Descripcion: Delay 1000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
Requerimientos
-----------------
- Declaracion de PDel0 (registro)
- Declaracion oe PDel1 (registro)
- Declaracion de PDel2 (registro)
- 1 nivel Stack
End
que errores hay en el codigo y como puedo acabarlo?