Autor Tema: Contador Up/Down -ayuda para depurar codigo  (Leído 2874 veces)

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

Desconectado masterias

  • PIC10
  • *
  • Mensajes: 16
Contador Up/Down -ayuda para depurar codigo
« 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


Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Contador Up/Down -ayuda para depurar codigo
« Respuesta #1 en: 15 de Septiembre de 2007, 03:36:45 »
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.
« Última modificación: 15 de Septiembre de 2007, 17:05:57 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado masterias

  • PIC10
  • *
  • Mensajes: 16
Re: Contador Up/Down -ayuda para depurar codigo
« Respuesta #2 en: 15 de Septiembre de 2007, 15:11:25 »
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.






Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Contador Up/Down -ayuda para depurar codigo
« Respuesta #3 en: 15 de Septiembre de 2007, 17:04:08 »
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
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado masterias

  • PIC10
  • *
  • Mensajes: 16
Re: Contador Up/Down -ayuda para depurar codigo
« Respuesta #4 en: 17 de Septiembre de 2007, 21:58:35 »
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:


Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Contador Up/Down -ayuda para depurar codigo
« Respuesta #5 en: 18 de Septiembre de 2007, 04:17:04 »
Perfecto.

Bueno que termines lo que empieces.

El foro te da si tu le das a él.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee