Hola a todos... trato de hacer una rutina para que el bot haga un "mapa" del espacio circundante midiendo distancias; la idea es que haga un giro sobre si mismo y cada 15º haga una medición de distancia, osea: mide distancia, gira 15º, mide distancia, gira 15º.... eso repetido 24 veces para completar los 365º.
Para medir distancias uso un detector de obstáculos IR, lo que hago en cada medición es enviar 5 ráfagas de 20 pulsos, la primera rafaga son pulsos de 21 uS (unos 47 Khz), la siguiente le añado 1 uS... así hasta llegar a los 26 uS (38 Khz); en definitiva empiezo con frecuencias alejadas de los 38 Khz con lo que tiene poco alcance y voy acercándome a los 38 Khz, con lo que va aumentando el alcance, en el momento que detecte algo pues ya se la distancia aproximada del objeto.
Entonces son 3 bucles anidados, el primero de 24 ciclos correspondiente a los 24 giros de 15º, dentro uno de 5 ciclos que son las 5 distancias testeadas, si detecta algo sale del bucle y pasa al siguiente giro; el tercer bucle de 20 ciclos son los 20 pulsos que forman la rafaga.
Esto es lo que tengo por ahora:
movlw d'24'
movwf raf
rafaga
movlw d'5'
movwf med
medida
movlw d'20'
movwf pul
movf med,W
pulso
bsf PORTA,3 ;enciende led
addwf PCL,F
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
btfss PORTA,4 ;lee A4, aqui está el receptor IR
goto detecta ;si detecta obstáculo ir a subrrutina
bcf PORTA,3 ;apaga led
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
decfsz pul, f
goto pulso
decfsz med, f
goto medida
gira
gira_iz d'100',d'100' ;gira 15º ... esto es una macro
decfsz raf, f
goto rafaga
goto $
detecta
bcf PORTA,3 ;apaga led
;POR DETERMINAR
goto gira
Tengo varias dudas:
-Para ir aumentando la duración del pulso, lo que hago es usar el PCL, primero le añado 5, con lo que salta 5 lineas, en cada vuelta le añado 1 menos con lo que salta 4,3,2... lineas, osea en cada vuelta el pulso es 1 instrucción más largo, como uso el reloj interno a 4 Mhz, osea 1 Mips, esto es 1 uS más largo; este sistema no lo he usado nunca y no sé si es correcto... creen que esto puede funcionar?
-En realidad me gustaría hacer la medición en 10 pasos, quitando 1 uS de la parte "on" del pulso y en la siguiente vuelta quitarlo de parte "of", tal y como está ahora solo quita en la parte "on", pero no sé como hacer para que en una vuelta quite solo de un lado y en la siguiente solo del otro....
-No tengo determinado como guardar los datos una vez que un objeto es detectado, lo único que se me ocurre con mis pocos conocimientos es crear 24 variables y en cada una de ellas poner la distancia, pero seguro que hay otras formas... alguna sugerencia?
-Una vez que tenga todos los datos nosé como comparar variables en ASM... como sé cual es mayor o menor??
Como ven mis conocimientos de ASM son muy básicos y tengo grandes dudas, así que cualquier sugerencia u orientación se agradece...
Saludos.