TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: masterias en 15 de Septiembre de 2007, 01:18:32
-
Hola Gente.
Con las cosas que fui aprendiendo leyendo y preguntando en el foro, prepare mi programa, de contador up/down, tengo unos errores de sintaxis que no logro identificar, ya que compila pero no hace lo que deberia, o sea sumar y restar, me muestra la primera pantalla en el lcd, pero no responde a la pulsacion de ningun boton :shock: (antes con el programita minimo sumaba y restaba) cuando lo complique dejo de funcionar :( , creo que el problema esta en la rutina que deberia leer los botones, por mi poca experiencia creo que la complique mucho. La idea es que si entra una caja, al tocar el sensor uno suma y al pasar por el sensor dos sea ignorado (los dos sensores estan en linea horizontal), igual si las cajas pasan en reversa, tocan primero sensor dos, restan y son ignoradas por el sensor 1, posteo el codigo a ver si me pueden sugerir por donde estaria el error, desde ya muchas gracias y salu2.
-----------------------------------------------------------------------------------------------------------------------------------------------
cont var word
entro var bit
salio var bit
flag var bit
TRISB.5=1
TRISB.4=1
cont=00000
entro=0
salio=0
flag=0
PORTB.5=1
PORTB.4=1
read 0,cont
lcdout $FE, 1
lcdout "***contador online***"
comparador:
pause 200
if PORTB.5=1 then
goto sensor1 ; sentido de circulacion = entrada
else
goto sensor2
endif
pause 200
if PORTB.4=1 then sensor2 ; sentido de circulacion = salida
pause 200
;endif
;+++++++++++RUTINA DISPLAY LCD+++++++++++++++++++++
;for cont=1 to 65000
DISPLAY:
lcdout $FE, 1
lcdout $FE, 2
lcdout $FE, $0C
lcdout $FE, 1
lcdout "No. DE VISITANTES:"
LCDOUT $FE, $C0
lcdout #cont
pause 50
;next cont
GOTO COMPARADOR
sensor1: ;sensor de entrada
if salio=0 then cont=cont+1 and entro=1
if salio=1 then goto display
goto display
sensor2: ;sensor salida
if entro=0 then cont=cont-1 and salio=1
if entro=1 then
goto display
endif
end
-
cont var word
entro var bit
salio var bit
flag var bit
TRISB.5=1
TRISB.4=1
cont=00000
entro=0
salio=0
flag=0
PORTB.5=1
PORTB.4=1
En primera instancia no veo en tu programa que utilices flag, por lo que parece inecesario.
Si deseas llamar a una terminal con un nombre específico, lo puedes hacer:
entro var PORTB.5
salio var PORTB.4
Eso te ayudará a comprender mejor la manipulación de bits externos.
read 0,cont
lcdout $FE, 1
lcdout "***contador online***"
Ese read 0,cont pareciera que está demás, ya que esa instrucción es para leer la EEPROM que trae el µicro, y al parecer lo que haces es guardar en la EEPROM lo que tenga cont.
Lo del LCD lo puedes dejar como se acostumbra: LCDOUT $FE,1, "***contador online***"
comparador:
pause 200
if PORTB.5=1 then
goto sensor1 ; sentido de circulacion = entrada
else
goto sensor2
endif
pause 200
if PORTB.4=1 then sensor2 ; sentido de circulacion = salida
pause 200
;endif
Lee el manual del PBP (http://www.microengineeringlabs.com/resources/index.htm#Manuals) para que veas cómo se utiliza el IF/THEN
IF PORTB.5=1 THEN sensor1 Brinca a la etiqueta, no es necesario ese goto
goto sensor2 Si el de arriba fue 1 se brinca a la etiqueta sensor1; si fue 0, continua normal y se topa con que debe
endif ir a la etiqueta sensor2
;+++++++++++RUTINA DISPLAY LCD+++++++++++++++++++++
;for cont=1 to 65000
DISPLAY:
lcdout $FE, 1
lcdout $FE, 2
lcdout $FE, $0C
lcdout $FE, 1
lcdout "No. DE VISITANTES:"
LCDOUT $FE, $C0
lcdout #cont
pause 50
;next cont
GOTO COMPARADOR
Para que veas algo en el display sin forzar la vista, deberás dejar como mínimo PAUSE 100, para que se cumpla la percepción del ojo.
sensor1: ;sensor de entrada
if salio=0 then cont=cont+1 and entro=1
if salio=1 then goto display
goto display
Lo mismo aquí:
IF salio = 0 then
cont= cont+1
entro=1
ELSE
goto display
ENDIF
A casi media noche y medio dormido he encontrado eso, espero sirva.
-
Muchas gracias por tus valiosos consejos.
Voy intentar cargar hoy el prog modificado.
Entonces voy por partes:
flag lo saco, tenes razon no tiene uso, pense en usarlo y no fue asi, y se quedo :?
Si deseas llamar a una terminal con un nombre específico, lo puedes hacer:
buena idea, lo voy a hacer ya que me estoy confundiendo un poco con los nombres de puertos
Ese read 0,cont pareciera que está demás, ya que esa instrucción es para leer la EEPROM que trae el µicro, y al parecer lo que haces es guardar en la EEPROM lo que tenga cont.
no se si es la forma correcta, pero quiero guardar el valor del contador por si se corta la energia, se hace asi? sugerime la forma, por favor, aprendi otra cosa mas, en una sola linea lo del lcd con la coma y 2 instrucciones :) asi achico un poco el codigo.
Lee el manual del PBP, para que veas cómo se utiliza el IF/THEN lo voy a hcer, me tiene un poco confundido, mire algunos ejemplos por Internet e intente copiar un poco la sintaxis, ya que a veces cuando quiero usar "else"
me dice que hay un error lo mismo a veces cuando quiero hacer una comparacion compleja, pierdo un rato hasta que a veces lo resuelvo y otras no, entonces modifico mi codigo alargandolo inutilmente,
Para que veas algo en el display sin forzar la vista, deberás dejar como mínimo PAUSE 100, para que se cumpla la percepción del ojo.
tenia la duda, pero creo que vos me lo estas respondiendo... :shock: si mando un valor al lcd, y luego continuo el proceso en otro lado, el lcd no lo guarda encargandose del refresco? o si o si tengo que ponerle una pausa para que se quede en pantalla un tiempo razonable ? yo la saque para que no le saque tiempo a las comparaciones, asi que ahora la voy a incluir
Lo mismo aquí:
IF salio = 0 then
cont= cont+1
entro=1
despues de tu explicacion voy recordando mejor el concepto de if then else, estoy un poco oxidado :mrgreen: muchisimo tiempo sin programar ni la videograbadora :D
Bueno, voy a hacer las modificaciones y despues posteo el codigo modificado, luego voy a lo de un amigo a grabar el pic, mi programador se rompio, y compre otro, pero el correo no me lo entrego aun :(
Muchas gracias por tu tiempo.
Saludos.
-
Para escribir utiliza la instrucción WRITE.
Revisa este enlace, es el manual del PBP traducido por no recuero quién (alguien de este foro):
http://www.todopic.com.ar/pbp_sp.html#ndp1
Espero te sirva para tu aplicación.
Si deseas observar mejor lo desplegado en el LCD, produce una pausa de 500 (0.5seg) para que no se vea que cambia tan rápido; 100 milisegundos es el umbral del ojo, mejor darle un rango mayor.
Esta también ayuda:
http://www.microengineeringlabs.com/resources/samples.htm
-
Muchisimas Gracias Mario :-/
Tus excelentes sugerencias me solucionaron las dudas del codigo, siguiendo tus directivas corregi y depure el codigo, ademas entre a mirar el manual en español que me sugeriste, y encontre una instruccion que ya no recordaba, que me permitio eleiminar la autorrepeticion en el boton, use
while PORTB.5=0
pause 100
wend
goto display
entonces solo al soltar el boton continua con el programa, si lo tenes presionado sin soltarlo, se queda esperando :mrgreen:
-
Perfecto.
Bueno que termines lo que empieces.
El foro te da si tu le das a él.