Autor Tema: ¿Cómo Suspender la Ejecución de un Delay para Retornar a un Punto del Programa?  (Leído 4840 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
.
« Última modificación: 29 de Marzo de 2015, 18:09:24 por Carabobo1 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
bueno como dijeron se arregla con interrupciones, no con externas, ya que no veo que venga una señal externa, a no ser que tengas otro circuito que ingrese un 1 a un pin cuando exista tension, y tal ves lo que buscas es un timer.

Y luego me encuentro con esto:

     if(V_CALLE==1 && Delay_ms (30000) <30000 && MOTOR==0 && PLANTA==0)

El Delay se va a ejecutar, por como es C, pero no creo que devuelva ningun valor ...

Otra de las cosas es esto:

  CADAFE=0;               // Desactiva el Relé para Contactor de CADAFE (Modo Normal) 
      Delay_ms(30000);     // Espera 30 Segundos
      MOTOR=1;               // y Enciende el Motor de la Planta Eléctrica

Segun tengo entendido estas cortando la luz, esperando 30 segundos y luego dando del generador.

Usualmente funcionan distintos estos sistemas. Al cortarse la luz se activa un temporizador.. Si esta no vuelve en XX tiempo enciende el motor, vuelve a esperar un tiempito mas y procede al cambio ( usualmente es una llave con un motor el encargado de hacer esto o en el peor caso 2 contactores enclavados )

De detectarse la luz nuevamente, el motor sigue encendido por unos minutos mas, una ves que la tension de la red se encuentra "estable" no se corta mas vuelve a hacer el cambio.
« Última modificación: 25 de Marzo de 2015, 19:18:49 por KILLERJC »

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
bueno como dijeron se arregla con interrupciones, no con externas, ya que no veo que venga una señal externa, a no ser que tengas otro circuito que ingrese un 1 a un pin cuando exista tension, y tal ves lo que buscas es un timer.

Y luego me encuentro con esto:

     if(V_CALLE==1 && Delay_ms (30000) <30000 && MOTOR==0 && PLANTA==0)

El Delay se va a ejecutar, por como es C, pero no creo que devuelva ningun valor ...

Resp.- Buenas Tardes, Gracias al Compañero KILLERJC por el Comentario. La Variable "V_CALLE", es una señal de Voltaje que ingresa al PIC. La expresión:
if(V_CALLE==1 && Delay_ms (30000) <30000 && MOTOR==0 && PLANTA==0)
La coloqué en el Programa tratando de aclarar que cuando el Voltaje de la Calle esté Ausente, y luego vuelva a venir antes de que el temporizador termine su Conteo, entonces que me ponga nuevamente a CADAFE en "1" y deje de Contar, pero obviamente no funciona. Ese es el problema que tengo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Entonces interrupciones por flanco o nivel y interrupcion de un timer, todo eso haria que lo anduviera.

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
SOLUCIONADO

Afortunadamente logré Solucionar el Problema que se me estaba presentando con esta Programación. Ciertamente, Agradezco las diferentes sugerencias que me ofrecieron algunos Participantes del Foro. Sin embrago, voy hacer una Recomendación: En lo posible, es mejor NO sugerir cosas de las que Realmente NO estemos seguros que van a dar Resultados Satisfactorios, o simplemente, NO estamos del todo Claro en cómo Funcionan. Como por Ejemplo, recomendar el uso de Timers, Interrupciones o cualquier otra Función que NO ofrezca una Solución Eficiente del Problema que se está Planteando.   

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Citar
 En lo posible, es mejor NO sugerir cosas de las que Realmente NO estemos seguros que van a dar Resultados Satisfactorios, o simplemente, NO estamos del todo Claro en cómo Funcionan. Como por Ejemplo, recomendar el uso de Timers,

El uso de timer no era una sugerencia k no fuera clara, ERA LA SOLUCION, Te lo dijeron varias personas entre las k me incluyo, además los problemas a menudo suelen tener muchas soluciones y las personas k tratan de ayudarte seguro k podrían resolverlo a su manera con el consejo k te han dado, que no logres hacerlo como te indican no kiere decir que este mal el consejo.

Yo también te quiero hacer una sugerencia, en los foros se entra para encontrar ayuda no para k te resuelvan el problema, k si te lo resuelven pues muy bien, pero la gente intenta ayudar en la medida de lo posible y en lo k cree k es correcto, si no kieres escuchar ayuda y resolverlo por ti mismo, es mejor k le pagues a alguien, te lo resolverá antes y de manera correcta y evitaras calentarte la cabeza.
« Última modificación: 29 de Marzo de 2015, 15:50:13 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
SOLUCIONADO

Afortunadamente logré Solucionar el Problema que se me estaba presentando con esta Programación. Ciertamente, Agradezco las diferentes sugerencias que me ofrecieron algunos Participantes del Foro. Sin embrago, voy hacer una Recomendación: En lo posible, es mejor NO sugerir cosas de las que Realmente NO estemos seguros que van a dar Resultados Satisfactorios, o simplemente, NO estamos del todo Claro en cómo Funcionan. Como por Ejemplo, recomendar el uso de Timers, Interrupciones o cualquier otra Función que NO ofrezca una Solución Eficiente del Problema que se está Planteando.  


"Consejos vendo, que para mi no tengo", yo alucino con el PERSONAJE este.

Eres un MALEDUCADO de tres pares de cojones, aparte de que no tienes razón. Encima ni siquiera expones tu "solución", que a buen seguro debe de ser tan absurda como el problema que planteaste, lo que no entiendo es como hay gente que ha perdido su tiempo tratando de ayudarte.
« Última modificación: 29 de Marzo de 2015, 16:25:09 por planeta9999 »

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
 :D

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
 :D

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
 :D

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
 :D

Desconectado Carabobo1

  • PIC12
  • **
  • Mensajes: 51
.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Bueno o todos respondieron o no vi las respuestas rapidamente.
Espero que finalize la agresion de ambas partes.

Como te dijeron Carabobo1, el uso de interrupciones mejora completamente tu programa, hace que sea inmediata su respuesta, en resumen mas eficiente si esta bien programado ademas.

El uso de delays es una mala practica y deberia de erradicarse, aunque a veces es necesario usarlos por que no hay otra solucion o se vuelve ineficiente/sin importancia el uso de otra cosa. Pero se prefieren en casos que el programador no tenga mucha experiencia en el uso de microcontroladores.
Por que es mas facil poner una linea que diga delay y no 15 lineas e intentar explicarle como funciona una interrupcion y un modulo completo.

Si realmente deseas hacer proyectos que respondan como deseas, usa las interrupciones.
En fin, sobre el problema que se plantea yo te dije como funcionan los dispositivos comerciales, no creo estar tan fuera del tema.

Y finalmente las sugerencias es solamente eso, una sugerencia, y no una obligacion.
Me encontre con gente que le ofreces una sugerencia y no la termina haciendo/usando a pesar que resuelva sus problemas solo por que ellos no pudieron hacerlo andar ( ya que no se les dio el codigo completo). Y descartan la posiblidad inmeediatamente. Y terminan haciendo un codigo el doble o triple de extenso para lo mismo ( pero como anda lo demas esta mal? ).

No tomes una actitud demasiado infantil editando tus post (borrando lo que habias escrito + haciendo multipes respuestas), cualquiera se puede equivocar. Hacer eso no te va a hacer mas o menos inteligente, ni tampoco va a ayudar a los demas cuando tengan un problema parecido al tuyo. En fin la idea es ayudar.
« Última modificación: 29 de Marzo de 2015, 21:36:19 por KILLERJC »


 

anything