Autor Tema: Instrucción WAITMS  (Leído 2031 veces)

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

Desconectado deyhek

  • PIC10
  • *
  • Mensajes: 12
Instrucción WAITMS
« en: 08 de Agosto de 2010, 10:40:12 »
Hola gente!
Estoy dando mis primeros pasos en programación en Basic y me surgió un problema, cuya resolución seguro es muy sencilla pero realmente no saco dónde está.
La idea del programita es prender un led durante 1 segundo y luego pasa lo mismo con un segundo led. Después quería hacer titilar a los leds y jugar un poco con ésto y así ir avanzando.
Para ello la idea era utilizar la instrucción WAITMS.
El tema es que una vez compilado (F9) con el PSI, abro el panel de leds y cuando corro el programa veo que el 1er led enciende pero la corrida se clava allí…!  :shock:
Ahora, traté de encontrar algo respecto de esta instrucción en el foro, pero extrañamente no encuentro nada, por lo que recurro a uds a ver si puedo sacarme la duda.

AllDigital

TRISA = %11111111
TRISB = %00000000

loop:
   PORTB.0 = 1
   WaitMs 1000
   PORTB.0 = 0
   PORTB.1 = 1
   WaitMs 1000
   PORTB.1 = 0
Goto loop

Otra duda que me surgió es que el led que se enciende (y queda así) lo hace no cuando se ejecuta la instrucción PORTB.0 = 1 sinó cuando se ejecuta la siguiente, es decir, WaitMs 1000, lo cual me resultó medio raro.

Muchas gracias por la ayuda…

Saludos,
Héctor.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Instrucción WAITMS
« Respuesta #1 en: 08 de Agosto de 2010, 11:40:11 »
Probé tu programa y funciona correctamente. El problema es que la simulación no corre en tiempo real, por lo tanto para ejecutar 1seg en el programa tal vez le lleve al simulador varios minutos, por eso es no ves que los leds cambien de estado.(Observa el cuadro de texto donde dice "Real Time Duration", ahí para que en el simulador hayan pasado 1000ms debe decir 1000000us más algunos us por el resto de las instrucciones que se ejecutan antes de entrar al ciclo de espera). Así que a esperar a que el simulador llegue a ese valor.
Prueba colocando WAITMS 1 en vez de WAITMS 1000, si quieres ver más rápidamente el cambio de los leds. Sino te toca esperar el tiempo que el simulador tarde en ejecutar el delay de 1 segundo.

Con respecto a que el led se enciende cuando ejecuta WAITMS 1000, esto no es así. El contador de programa se para sobre la siguiente instrucción a ejecutar y no en la que ya ejecutó. Si te fijas donde dice Next Instruction y ejecutas paso a paso el código, vas a ver lo que te comento
« Última modificación: 08 de Agosto de 2010, 11:52:54 por pablomanieri »

Desconectado deyhek

  • PIC10
  • *
  • Mensajes: 12
Re: Instrucción WAITMS
« Respuesta #2 en: 08 de Agosto de 2010, 13:11:25 »
Ok Pablo.
Voy a ver ambas cosas y te comento.
Muchas gracias por la data!

Saludos,
Héctor.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Instrucción WAITMS
« Respuesta #3 en: 09 de Agosto de 2010, 03:57:44 »
Hola deyhek:

Con la siguiente instruccion en el PSi se acelera los tiempos  de simulacion, pero esta solo sirve para simulacion en el programa real debes anularla y dejarlo como comentario ya que su funcionalidad es esa no tener en cuenta los waits de tu programa:

Define SIMULATION_WAITMS_VALUE = 1  'Ignora los valores de Waitms. Solo habilitado para simulador.

Fer.
Todos los días se aprende algo nuevo.

Desconectado deyhek

  • PIC10
  • *
  • Mensajes: 12
Re: Instrucción WAITMS
« Respuesta #4 en: 12 de Agosto de 2010, 16:15:01 »
Hola Pablo y Fer.
Ahí anduve haciendo alguna corrección al programita y salió andando perfectamente.
Claro, los tiempos de ejecución eran bajos (así lo había seteado yo para ver la evolución del programa) así que si no aumentaba la velocidad de simulación nunca iba a ver parpadear ningún led!  :lol:
Tema solucionado.
Ahora voy a ávanzar con otros programitas para tomarle la mano.

Me parece muy práctico el PSI  :) , me gusta las herramientas que proporciona.

Muchísimas gracias a todos...!

Un abrazo,
Héctor.


 

anything