Autor Tema: Time Off Delay (TOF) & Time On Delay (TON)  (Leído 7891 veces)

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

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Time Off Delay (TOF) & Time On Delay (TON)
« en: 03 de Septiembre de 2022, 00:54:40 »
Qué tal amigos.
Esperando que se encuentren lo mejor posible!
Solicito de su inmensa ayuda.
El asunto es que en Picbasic Pro  he logrado generar  unos pulsos  por medio de la interrupción,  por desbordamiento del timer en el PIC 16F628A.
He conseguido contar los pulsos llamados Ticks, para hacer segundos y luego decenas de segundos.
Pero a la hora de querer hacer unos retardos, no sé cómo implementarlos, concretamente no encuentro la manera de  hacer que un LED permanezca encendido unos segundos después de soltado el pulsador,  en otras palabras quiero implementar un monoestable Off Delay y otro On Delay  basados en los segundos generados con el Timer del PIC.
Cualquier orientación que me puedan brindar será muy bienvenida.
Saludos!

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #1 en: 03 de Septiembre de 2022, 09:33:51 »
Hola, pues teniendo la base de tiempos disponible, ya tienes el 50% hecho.
Entonces si quieres hacer un retardo a la desconexión, pues en el momento que se produce el evento, enciendes un LED, ahi debes disparar el contador por interrupción, para que cuándo desborde apagues el LED.
En caso de necesitar un retardo a la conexión, debes disparar el contador y (apagar el LED, si es que en condición inicial estaba encendido) al iniciar el evento y luego cuándo desborde, enciendes el LED.
« Última modificación: 03 de Septiembre de 2022, 09:39:05 por Robert76 »

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #2 en: 03 de Septiembre de 2022, 14:22:26 »
Hola, pues teniendo la base de tiempos disponible, ya tienes el 50% hecho.
Entonces si quieres hacer un retardo a la desconexión, pues en el momento que se produce el evento, enciendes un LED, ahi debes disparar el contador por interrupción, para que cuándo desborde apagues el LED.
En caso de necesitar un retardo a la conexión, debes disparar el contador y (apagar el LED, si es que en condición inicial estaba encendido) al iniciar el evento y luego cuándo desborde, enciendes el LED.
Robert76, gracias por responder.
Soy muy novato y un poco cabeza dura en el tema de programar microcontroladores.
Bueno te cuento que he avanzado hasta el punto que cuando han transcurrido, digamos dos segundos, entonces se activa una bandera que indica esta situación, pero de ahí no logro avanzar.
La imagen adjunta ilustra lo que voy a describir.
Tengo dos variables varbit, A y B, si estas estas dos se cumplen el led está encendido, pero cuando una de las dos no está presente el led se apaga, pero después de unos segundos.
Mi codigo está así:

A Var Bit
B Var Bit
LED Var Bit

Inicio:
IF A=0 & B=0 THEN LED=1
Bandera de dos segundos=1
ELSE
LED=0
ENDIF
GOTO Inicio
END

Pero el led no se queda encendido por 2 segundos.
No se dónde y en que términos de código iría la bandera que indica que el  led debe permanecer encendido por dos segundos.
Esto me está volviendo loco.
Algún ejemplo para guiarme por favor.
Ayuda por favor!
Saludos!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #3 en: 03 de Septiembre de 2022, 16:17:06 »
El asunto es que en Picbasic Pro  he logrado generar  unos pulsos  por medio de la interrupción,  por desbordamiento del timer en el PIC 16F628A.
He conseguido contar los pulsos llamados Ticks, para hacer segundos y luego decenas de segundos.

Este 'logro' deberías compartir su código para intentar añadirlo al otro pseudocódigo de los pulsadores e intentar que comprendas como hacer lo que deseas
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #4 en: 03 de Septiembre de 2022, 16:45:19 »
Hola, pues teniendo la base de tiempos disponible, ya tienes el 50% hecho.
Entonces si quieres hacer un retardo a la desconexión, pues en el momento que se produce el evento, enciendes un LED, ahi debes disparar el contador por interrupción, para que cuándo desborde apagues el LED.
En caso de necesitar un retardo a la conexión, debes disparar el contador y (apagar el LED, si es que en condición inicial estaba encendido) al iniciar el evento y luego cuándo desborde, enciendes el LED.
Robert76, gracias por responder.
Soy muy novato y un poco cabeza dura en el tema de programar microcontroladores.
Bueno te cuento que he avanzado hasta el punto que cuando han transcurrido, digamos dos segundos, entonces se activa una bandera que indica esta situación, pero de ahí no logro avanzar.
La imagen adjunta ilustra lo que voy a describir.
Tengo dos variables varbit, A y B, si estas estas dos se cumplen el led está encendido, pero cuando una de las dos no está presente el led se apaga, pero después de unos segundos.
Mi codigo está así:

A Var Bit
B Var Bit
LED Var Bit

Inicio:
IF A=0 & B=0 THEN LED=1
Bandera de dos segundos=1
ELSE
LED=0
ENDIF
GOTO Inicio
END

Pero el led no se queda encendido por 2 segundos.
No se dónde y en que términos de código iría la bandera que indica que el  led debe permanecer encendido por dos segundos.
Esto me está volviendo loco.
Algún ejemplo para guiarme por favor.
Ayuda por favor!
Saludos!

Yo lo haría en estados de maquina, más o menos un pseudocódigo seria así: (Disculpa que no lo escriba en Basic, ya que no recuerdo como era, pero la idea es lo importante)

Código: C
  1. estado = 0;
  2. LED = 0;
  3. while (1) //lazo principal dentro de main
  4. {
  5.      switch(estado)
  6.      {
  7.             case 0: //el primer caso, se debe esperar a que A y B estén en cero para iniciar el proceso
  8.             {
  9.                   IF A=0 & B=0
  10.                   {
  11.                        estado = 1;
  12.                   }
  13.                   break;
  14.              }
  15.             case 1: // en el segundo estado se espera que A y B estén en 1 lógico para activar LED
  16.             {
  17.                   IF A=1 & B=1
  18.                   {
  19.                        estado = 2;
  20.                        LED = 1;
  21.                   }
  22.                   break;
  23.              }
  24.              case 3:// Aquí se espera  que A ó B cambien a cero lógico para activar el retardo
  25.             {
  26.                    IF A=0 || B=0
  27.                   {
  28.                        delay(); // aquí se queda el programa en un reatrdo determiando
  29.                        estado = 4;
  30.                    }
  31.                   break;
  32.              }
  33.              default: //equivale a case 4
  34.              {
  35.                    LED = 0;
  36.                    estado = 1; //regreso al estado 1
  37.               }
  38.      }
  39. }

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #5 en: 03 de Septiembre de 2022, 17:29:36 »
DominusDRR,

Gracias por tu respuesta.
Me recomiendas que utilice  select case.
Pero, lo que no me queda claro y es lo más relevante, es cómo y donde utilizar la bandera que indica que han transcurrido los dos segundos.




Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #6 en: 03 de Septiembre de 2022, 17:39:15 »
La bandera que te indica que transcurrió el tiempo, debe estar en la rutina que es llamada cuando desborde el contador.
Ahí está el secreto.
Mejor publica el código COMPLETO. Sino estaremos especulando lo que estás haciendo.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #7 en: 03 de Septiembre de 2022, 18:14:46 »
DominusDRR,

Gracias por tu respuesta.
Me recomiendas que utilice  select case.
Pero, lo que no me queda claro y es lo más relevante, es cómo y donde utilizar la bandera que indica que han transcurrido los dos segundos.

Comparte el código que genera retardos como dice don Robert76 y de esa manera se puede explicar como utilizarlo.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #8 en: 04 de Septiembre de 2022, 07:33:06 »
Hola; a ver si esto te puede orientar:

'Este programa de ejemplo necesita un timer y usar interrupciones.
'Función para hacer parpadear un led.
ConfigPin RB0 = output
Symbol ledverde = RB0
main:

   ledverde = _dutyms0(100, 500)

goto main
end

'Controla el estado de un bit en mSeg.
'Devuelve Bit.
Function _dutyms0(_Delay_On As Long, _Delay_Off As Long) As Bit
   If _bt0call = 1 Then
      Toggle _dutyms0
      If _dutyms0 = 0 Then
         Call _bt0call(_btsetup, _Delay_Off) 'Tiempo a Off, carga CONTADOR
      Else
         Call _bt0call(_btsetup, _Delay_On) 'Tiempo a On, carga CONTADOR
      Endif
   Endif
End Function

Esta función permite el parpadeo de un led, se le suministra el tiempo a on y el tiempo a off en mSeg.
_dutyms0 es una variable de 1bit y devuelve el estado de la función.

_bt0call es una variable de un bit que se asocia a la variable contador que se suele estar en las interrupciones, si contador es mayor a 0 entonces _bt0call = 0 y si es igual a 0 _bt0call = 1.
Call _bt0call(_btsetup, _delay_off) lo que hace es recargar el valor del contador que se decrementa (en el caso del ejemplo) con el valor _delay_off o _delay_on en mSeg. e iguala _bt0call = 0.
La función Call _bt0call(_btsetup, _delay) la cambias por tu código.

No he puesto más código porque no es el mismo lenguaje, solo tienes que adaptar la idea de la función a tu código.
« Última modificación: 04 de Septiembre de 2022, 07:38:35 por dogflu66 »
Saludos desde Granada, España.

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #9 en: 08 de Septiembre de 2022, 15:04:51 »
Agradecimientos a todos los que respondieron, por su tiempo y paciencia.
La animación adjunta ilustra con precisión lo que necesito hacer.
Ojalá alguien pudiera dar una luz sobre este tema en Picbasic Pro, ya que el resto de lenguajes los desconozco totalmente.
Gracias
Saludos!

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #10 en: 08 de Septiembre de 2022, 15:08:26 »
Se entiende a la perfección lo que buscas.
Pero sube el código que estás usando, sino cuesta avanzar.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #11 en: 08 de Septiembre de 2022, 16:49:32 »
Agradecimientos a todos los que respondieron, por su tiempo y paciencia.
La animación adjunta ilustra con precisión lo que necesito hacer.
Ojalá alguien pudiera dar una luz sobre este tema en Picbasic Pro, ya que el resto de lenguajes los desconozco totalmente.
Gracias
Saludos!

Si tomas el ejemplo de dogflu66, ya tendrías tu temporizador ONOFF.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #12 en: 08 de Septiembre de 2022, 18:02:40 »
Se entiende a la perfección lo que buscas.
Pero sube el código que estás usando, sino cuesta avanzar.

Buenas tardes.
Aquí está:
 
SW1 Var Bit
SW2 Var Bit
LED1 Var Bit

Inicio:

IF SW1=0  THEN HIGH LED1    ;Al presionar SW1 se enciende el LED


IF SW2=0  THEN LOW LED       ;Al presionar SW2 se apaga, pero necesito que lo haga luego de 2
                                              ;segundos. No puedo usar PAUSE ni PAUSEUS, porque se el
                                              ;programa se queda trabado y no podrá realizar otras acciones.
GOTO Inicio
END

Saludos!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #13 en: 08 de Septiembre de 2022, 18:04:37 »
Se entiende a la perfección lo que buscas.
Pero sube el código que estás usando, sino cuesta avanzar.

Buenas tardes.
Aquí está:
 
SW1 Var Bit
SW2 Var Bit
LED1 Var Bit

Inicio:

IF SW1=0  THEN HIGH LED1    ;Al presionar SW1 se enciende el LED


IF SW2=0  THEN LOW LED       ;Al presionar SW2 se apaga, pero necesito que lo haga luego de 2
                                              ;segundos. No puedo usar PAUSE ni PAUSEUS, porque se el
                                              ;programa se queda trabado y no podrá realizar otras acciones.
GOTO Inicio
END

Saludos!

Hombre, lo que te piden es el código que has logrado generar retardos.

Citar
]He conseguido contar los pulsos llamados Ticks, para hacer segundos y luego decenas de segundos.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #14 en: 08 de Septiembre de 2022, 18:05:53 »
Agradecimientos a todos los que respondieron, por su tiempo y paciencia.
La animación adjunta ilustra con precisión lo que necesito hacer.
Ojalá alguien pudiera dar una luz sobre este tema en Picbasic Pro, ya que el resto de lenguajes los desconozco totalmente.
Gracias
Saludos!

Si tomas el ejemplo de dogflu66, ya tendrías tu temporizador ONOFF.

Lo que sucede es que no entiendo ese lenguaje de programación.
Por favor, puedes decirme qué lenguaje es ? porque Picbasic Pro no es, verdad?
Saludos!


 

anything