Autor Tema: Problemas con comando PAUSE  (Leído 3566 veces)

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

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Problemas con comando PAUSE
« en: 30 de Junio de 2008, 14:23:14 »
Hola , en esta oportunidad les comento un inconveniente con el comando PAUSE.en rojo
aqui el programa.
Programado en PBP 2.46
Simulado Proteus 7.2 SP2
Compilado microcode studio 3
Defecto :el retardo no es el que marca el T1 es decir si T1=1200 =1.2 segundos y demora mas de 3 seg. :shock:


                define LCD_BITS 4
                define LCD_LINES 2
                U VAR BYTE   ;unidad modo 1
                U2 VAR BYTE  ;unidad modo 2
                U3 VAR BYTE  ;unidad modo 3
                U4 VAR BYTE  ;unidad modo 4
                D VAR BYTE  ;decena 1
                D2 VAR BYTE  ;decena 2
                D3 VAR BYTE  ;decena 3
                D4 VAR BYTE  ;decena 4
                C VAR BYTE  ;centena 1
                C2 VAR BYTE  ;centena 2
                C3 VAR BYTE  ;centena 3
                C4 VAR BYTE  ;centena 4
                UM VAR BYTE ; unidad de mil 1 9999 ms.total 10.000 ms  = 10 seg.
                UM2 VAR BYTE ; unidad de mil 2 9999 ms.total 10.000 ms  = 10 seg.
                UM3 VAR BYTE ; unidad de mil 3 9999 ms.total 10.000 ms  = 10 seg.
                UM4 VAR BYTE ; unidad de mil 4 9999 ms.total 10.000 ms  = 10 seg.
                co VAR  BYTE ;  variable selecciona  numero , unid dec cent um .
                cur VAR BYTE 'VARIABLE SELECCIONA MODO1.
                cur2 VAR BYTE 'VARIABLE SELECCIONA MODO2.
                cur3 VAR BYTE 'VARIABLE SELECCIONA MODO3.
                cur4 VAR BYTE 'VARIABLE SELECCIONA MODO4.
                ST var byte
                mode var byte
                mode2 var byte
                mode3 var byte
                t1 var word
                t2 var byte
                t3 var byte
                t4 var byte
                W0 var word
            U = 0  :  D = 0 : c = 0 : UM = 0
            co = 0 : cur = 0 :cur2 = 0:cur3 = 0 : cur4 = 0
            PAUSE 500
            lcdout $fe,1,"Melectro" , $fe,$c0 ,"06"
            PAUSE 1500
            Lcdout $fe, 1 , " Modo 1 "
            pause 1000
modo:            if portb.6 = 0 then  ; SELECCIONA MODO
            select case mode
            mode = mode + 1
            if  mode > 3 then mode = 1
           
            case 1: call curs
            case 2: call curs2
            case 3: call curs3
            end select
            endif
            goto modo
           
                             

;        ****************** MODO 1 ***************************
                   
   curs:           cur = cur + 1
                if cur > 4 then cur = 1
                if cur = 1 then call inicio_u
                if cur = 2 then call inicio_d
                if cur = 3 then call inicio_c
                if cur = 4 then call inicio_um           
                goto  curs
                return
               
INICIO_U: 
Lcdout $fe,1," Unid",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
            pause 250
            if portb.7 = 0 then call start
            if portb.6 = 0 then call curs
            IF PORTB.5 = 0 AND  cur = 1 THEN
                                     
     
            U = U + 1
            IF U > 9 THEN U = 0
            endif           
            GOTO INICIO_U     
            RETURN
           
            INICIO_D: 
Lcdout $fe,1,"  Dec",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
            pause 250
            if portb.7 = 0 then call start
            if portb.6 = 0 then call curs
            IF PORTB.5 = 0 AND  cur = 2 THEN
                             
            D = D + 1
            IF D > 9 THEN D = 0
            endif           
            GOTO INICIO_D     
            RETURN
           
            INICIO_C: 
Lcdout $fe,1,"  cen",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
            pause 250
            if portb.7 = 0 then call start
            if portb.6 = 0 then call curs
            IF PORTB.5 = 0 AND  cur = 3 THEN
                   
            C = C + 1
            IF C > 9 THEN C = 0
            endif           
            GOTO INICIO_C     
            RETURN
           
            INICIO_UM: 
Lcdout $fe,1,"Umil",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
            pause 250
            if portb.7 = 0 then call start
            if portb.6 = 0 then call curs
            IF PORTB.5 = 0 AND  cur = 4 THEN
           
                   
            Um = Um + 1
            IF Um > 9 THEN Um = 0
            endif           
            GOTO INICIO_Um     
            RETURN
           
           
start:       
            lcdout $fe,1," ",#UM,#C,#D,#U ," MS"
            pause 100

            Pulsin portb.2,0,W0               
            If W0 <> 0 Then disparo           
            goto start
                       
                     
disparo:    low portb.4   :lcdout $fe,1," ",#UM,#C,#D,#U ," MS" ,$fe,$C0," INICIO"
            T1 = (UM*1000+c*100+d*10+u)
            pause  T1

            high portb.4
            pause 100
            low portb.4 :low portb.1
            return


alguna idea de porque el delay es diferente????

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problemas con comando PAUSE
« Respuesta #1 en: 01 de Julio de 2008, 18:30:21 »
Bueno melectro puede ser 2 cosas una que el proteus no simula a tiempo real. Si te sigue pasando en la realidad quiza tenga que ver con la suma de tu pausa, recuerda que PBP redondea no usa decimales.
« Última modificación: 01 de Julio de 2008, 18:35:56 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problemas con comando PAUSE
« Respuesta #2 en: 01 de Julio de 2008, 20:52:09 »
Si te sigue pasando en la realidad quiza tenga que ver con la suma de tu pausa, recuerda que PBP redondea no usa decimales.
Maestro navaismo, pero en línea sólo hay multiplicaciones, no habría razón para un redondeo.
Me inclinaría más a pensar en que es un error del proteus, pero también me parece difícil de creer pues en lo que he podido ver hasta ahora, cuando yo uso leds para indicar retardos la simulación hace los retardos correctamente, o bastante cerca según lo que se ve "a ojo".
Qué tal si antes del retardo, mandas al lcd el valor de T1? Para saber cuál es el valor después de la operación, si la está haciendo correctamente.
Bueno sólo es una sugerencia, para ir descartando posibles errores.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Problemas con comando PAUSE
« Respuesta #3 en: 02 de Julio de 2008, 08:08:14 »
disparo:  low portb.4   :lcdout $fe,1," ",#UM,#C,#D,#U ," MS" ,$fe,$C0," INICIO"
             T1 = (UM*1000+c*100+d*10+u)
             pause  T1
             high portb.4
             pause 100
             low portb.4 :low portb.1
             return

hola. si no estoy muy equivocado, justo antes de definir el valor de T1 muestras los valores en juego en el lcd (UM, C, D y U) con lo cual ya conoces el valor que estos tienen y también puedes deducir el valor de T1. yo probaría a convertir en comentario la línea que define el valor de T1 y aplicaría ese valor calculado en pause.. y haber que pasa.
tal como te dice navaismo los tiempos en proteus son lo que son ya que no simula en tiempo real.
y aunque solo sea por claridad, yo lo haría así: T1 = (UM*1000) + (C*100) + (D*10) + U... no sé, hay algo en tu forma de hacerlo que no me encaja pero no sé porque... no termino de verlo

un saludo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problemas con comando PAUSE
« Respuesta #4 en: 02 de Julio de 2008, 09:48:30 »
Gran xocas, es correcto que él está mandando al LCD los valores separados de UM, c d, u... pero yo decía mandar el valor de T1, a ver si se está realizando bien la operación, si T1=1200 o no... es una tontería pero es no más para descartar errores   :lol:
Buena la sugerencia de los paréntesis.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Problemas con comando PAUSE
« Respuesta #5 en: 02 de Julio de 2008, 11:16:38 »
no veo que haga uso de T1 en ninguna parte, a excepción de la subrutina disparo, y ahí le indica que tome su valor en base a una serie de operaciones. bien, el valor que 'debería' tener T1 lo sabemos porque tenemos los valores de las variables, entonces se puede hacer como tu indicas para que muestre el valor real de T1 en el lcd y salir de dudas pero personalmente creo que se termina antes poniendo ese valor a mano en pause porque el valor -o a mi se me escapa algo- ya lo sabemos.

melectro, porque no subes el archivo de proteus y te lo pruebo en mi pc? es muy probable que sea el el culpable

un saludo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problemas con comando PAUSE
« Respuesta #6 en: 02 de Julio de 2008, 11:42:24 »
Estoy de acuerdo.
Si le coloca el valor a mano como dices ya se sabría si es o no el proteus...
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Problemas con comando PAUSE
« Respuesta #7 en: 02 de Julio de 2008, 11:45:13 »
SERIA LO MEJOR QUE EL COLEGA SUBA TODO PARA  VER EN QUE SE LE PUEDE AYUDAR.

SALUDOS
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Problemas con comando PAUSE
« Respuesta #8 en: 02 de Julio de 2008, 18:46:02 »
Que tal amigos!
Melectro prueba este trozo de codigo solo sin el resto del programa:

disparo:    low portb.4   :lcdout $fe,1," ",#UM,#C,#D,#U ," MS" ,$fe,$C0," INICIO"
            T1 = (UM*1000+c*100+d*10+u)
            pause  T1
            high portb.4
            pause 100
            low portb.4 :low portb.1

con los supuestos valores que ves en la lcd para UM, C, D y U
a ver si te da el mismo error y asi poder encerrar la falla en este segmento de codigo, que es el que te da problemas  :mrgreen:
Para ver sino es un Bug del compilador ya que las variables qie estan a la derecha de la igualdad son byte y la que esta a la izquierda es word  :shock:

Saludos
« Última modificación: 02 de Julio de 2008, 18:48:19 por RALF2 »

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Problemas con comando PAUSE
« Respuesta #9 en: 03 de Julio de 2008, 06:24:14 »
el colega ralf2 tiene mucha razon has esa prueba y nos comentas
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Re: Problemas con comando PAUSE
« Respuesta #10 en: 03 de Julio de 2008, 13:27:51 »
Hola a todos y muchas gracias por sus respuestas y el interes y tiempo empleados en solucionar el tema.
Finalmente y despues de muchas horas de prueba y error este codigo funciona.

        .
.
.
...
.
doy valores diferentes a N1 a N4 y funciona.
   
disparo1:   high portb.1              ;salida a led y a beeper
             T1= (M1*N1) + (M1*N2) + (M1*N3)+ (M1*N4)
            ;T1 = (M1)
            pause T1
            low portb.1
            lcdout $fe,1,#M1,"  MS"," FIN "
            PAUSE 500
            goto modo1  :-/ :-/ :-/

 :mrgreen: :mrgreen: :mrgreen:
Para comprobarlo coloque el contador virtual (Del proteus)en la salida portb.1 y cuenta el valor especificado.


Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problemas con comando PAUSE
« Respuesta #11 en: 03 de Julio de 2008, 14:42:14 »
Felicidades Melectro, por haber resuelto el problema!  :-/
Hombre, que da una satisfacción enorme cuando después de horas de trabajo logras lo deseado!  :lol:
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web