Autor Tema: "romper" instruccion PAUSE o similar  (Leído 2247 veces)

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

Desconectado Gaudizuniga

  • PIC10
  • *
  • Mensajes: 30
"romper" instruccion PAUSE o similar
« en: 26 de Mayo de 2003, 22:17:00 »
   Hola a todos nuevamente, tengo este problema y no se como solucionarlo, haber si me pueden ayudar.
   Lo que quiero hacer basicamente es "romper" la instruccion de pause cuando se cumplan ciertas caractericticas, en otras palabras lo que quiero es que el programa se detenga un tiempo determinado y que mientras ese tiempo este transcurriendo poder escribir en la eeprom del pic y comparar unos valores. Tengo entendido que con la instruccion pause no se puede, no se si se pueda con nap o sleep o pauseus, no lo se en realidad. Bueno, espero haberme explicado. Gracias

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: "romper" instruccion PAUSE o similar
« Respuesta #1 en: 27 de Mayo de 2003, 11:18:00 »
Reaalmente no entiendo lo que deseas hacer. dices que quieres detener el programa....pero que mientras está detenido siga realizando ciertos procesos.

En realidad un programa es una serie de ejecocion de procesos, asi que si los procesos se siguen ejecutando, el programa no puede estar detenido y si esta detenido no puede realizar procesos.

Creo que debes explicar algo mas claramente que deseas hacer y asi tal vez podamos ayudarte.

Nunca está de más ( como le digo a mis chicos ) coger un papel y escribir unas lineas describiendo lo que se desea hacer.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado Gaudizuniga

  • PIC10
  • *
  • Mensajes: 30
RE: "romper" instruccion PAUSE o similar
« Respuesta #2 en: 27 de Mayo de 2003, 17:23:00 »
   Es cierto, tienes razon en lo que dices, y lo entiendo perfectamente. Bueno mira, la cuestion es que estoy realizando una alarma para automovil que se activa y desactiva por medio de un codigo, al momento de poner activa la alarma, el pic me debera de dar tiempo para abandonar el carro, y asi mismo para entrar a el. Y es ahi donde radica el problema... suponiendo que la alarma ya esta activa y me disponga a entrar al vehiculo es ahi donde el pic me debe de dar tiempo para introducir el codigo, y si despues de haber transcurrido cierto tiempo  el codigo no es el correcto la alarma sonara.
   Eso es lo que estoy haciendo, por ahora ya que no puedo detener el programa asi por nomas y realizar otras tareas como introducir el codigo eh estado pensando y practicando con un ciclo, que se repita miles de veces para hacer tiempo mientras se introduce el codigo. Haber si funciona.

Desconectado isabelino

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 138
RE: "romper" instruccion PAUSE o similar
« Respuesta #3 en: 27 de Mayo de 2003, 17:58:00 »
Gaudizuniga : Lo que tienes que hacer es retardos utilizando bucles con las instrucciones FOR y NEXT, y utilizarlas en conjunto con instrucciones de interrupciones . Eso seguro funciona.

ISABELINO

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: "romper" instruccion PAUSE o similar
« Respuesta #4 en: 28 de Mayo de 2003, 08:44:00 »
Una solucion sería usar uno de los temporizadores del pic de forma que una vez pasado un tiempo genere una interrupción y que esta interrupcion te lleve a la rutina que podriamos llamar de "pausa_transcurrida".

Otro posibilidad es generar una interrupcion ciclica cada 100ms y cada vez quee se produzca dicha interrupcion incrementas o decrementas una variable que previamente habras cargado con el valor correspondiente a los segundos*10 que desees de "pausa". Una vez que dicha variable llegue a cero podras considerar que el tiempo de "pausa" ha transcurrido.

De esta forma, trabajando con interrupciones puedes realizar cualquier otro proceso simultaneameente. El intentar hacerlo a base de bucles es muy dificil ya que es casi imposible el calcular el tiempo que ha pasado. Si realizas un bucle 1000 veces pero en cda pasada del bucle no haces nada en absoluto, este lapso de tiempo será de milisegundos, sin embargo si en cada pasada escaneas un teclado, y si al escanear el teclado detectas que ha habido pulsación y ejecutas otra rutina.... bueno ya te imaginas la diferencia que puede haber entre una y otra situacion.

Espero haberte orientado.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: "romper" instruccion PAUSE o similar
« Respuesta #5 en: 28 de Mayo de 2003, 10:07:00 »
La instruccion PAUSE no solo detiene el programa por completo, sino que ademas detiene el funcionamiento de las interrupciones hasta cumplir el tiempo de PAUSE.

Una solucion que yo encontre para esto fue usar While....Wend, incrementando una variable dentro de la interrupcion, programada cada tiempo de valor exacto, por ejemplo 25 mseg.
De esta forma cada vez que cae atiendo teclado, display si es necesario (llevo un contador o uso una bandera que me dice si tengo que actualizar el display), veo estados de pines, etcetera.
Ademas incremento cada vez que cae una interrupcion la variable que estoy controlando en el Loop While ... Wend, para que cuando llegue o supere determinado valor salga del Loop.



Esto te permitira temporizar correctamente sin los problemas de PAUSE y pudiendo atender otras tareas durante la temporizacion....


Te gusto??

Je..Je..


En PBP hay que tomar atajos, a veces...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: "romper" instruccion PAUSE o similar
« Respuesta #6 en: 28 de Mayo de 2003, 16:54:00 »
La solución te la ha dado marqués y puedes hacerlo con la interrupción o con un bucle chequeando el flag del timer que uses como dice MGLSOFT. Con este método la temporización será exacta y no tendrás tiempos de demora. Después de obtener este tiempo exacto puedes conectar la alarma o activar la ignición.

Hay una tercera vía que es la vía chapucera y no ortodoxa y es meter en un bucle for .... next un pause pequeñito y que se repita muchas veces y entre medias puedes poner instrucciones de chequeo de varias cosas. Así iras haciendo el pause y podrás chequear alguna tarea. Ya te digo que esto es una chapuza de programación pero a veces sirve como atajo.

Saludos
Ricky

Desconectado Gaudizuniga

  • PIC10
  • *
  • Mensajes: 30
RE: "romper" instruccion PAUSE o similar
« Respuesta #7 en: 29 de Mayo de 2003, 01:05:00 »
Gracias por todos sus comentarios, vere cual es la opcion que mas se me facilite y sea adecuada a mi programa. Gracias!!!

AciD0

  • Visitante
RE: "romper" instruccion PAUSE o similar
« Respuesta #8 en: 24 de Junio de 2003, 23:31:00 »
a lo mejor con  este  pedaso de codigo te puedas  dar  una  idea  de lo  que  por aqui  te tratan de decir
si mandas  a llamar  a la  rutina  pausa  tendras  un segundo de  pausa  (aprox) y a la  vez  estar  leyendo  el portb.0  


PAUSA:          
 for i=1 to 100  
   pause 10
    if  portb.0=1 then rutina_x    
    endif                          
  next i
return


 

anything