fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Robot evita obstaculos

7 Respuestas
2 Usuarios
0 Reactions
2,241 Visitas
alpha44
Respuestas: 5
Topic starter
(@alpha44)
Active Member
Registrado: hace 15 años

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.

Responder
6 respuestas
alpha44
Respuestas: 5
Topic starter
(@alpha44)
Active Member
Registrado: hace 15 años

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

Responder
alpha44
Respuestas: 5
Topic starter
(@alpha44)
Active Member
Registrado: hace 15 años

que errores hay en el codigo y como puedo acabarlo?

Responder
Página 2 / 2
Compartir: