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

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

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #15 en: 08 de Septiembre de 2022, 18:07:55 »
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!

No tomes ese ejemplo si no te sirve y comparte el que dices que has logrado ¿O tal vez no lograste?
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 #16 en: 08 de Septiembre de 2022, 19:07:34 »
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.
Bueno, en este momento no me encuentro en casa, pero resumiendo vuelvo a comentar que con el uso de uno de los timers del PIC y por desbordamiento de este, he conseguido pulsos de 100 milisegundos y a partir de estos pude conseguir el retardo de un segundo, en ese momento, la bandera se pone en "1" indicando que ha transcurrido un segundo.
Creo que hasta aquí está claro el asunto del retardo de un segundo.
Lo que no puedo lograr, es donde encajar este retardo para que el led quede prendido un segundo después de haber sido desactivado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #17 en: 08 de Septiembre de 2022, 19:13:14 »
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.
Bueno, en este momento no me encuentro en casa, pero resumiendo vuelvo a comentar que con el uso de uno de los timers del PIC y por desbordamiento de este, he conseguido pulsos de 100 milisegundos y a partir de estos pude conseguir el retardo de un segundo, en ese momento, la bandera se pone en "1" indicando que ha transcurrido un segundo.
Creo que hasta aquí está claro el asunto del retardo de un segundo.
Lo que no puedo lograr, es donde encajar este retardo para que el led quede prendido un segundo después de haber sido desactivado.

Por eso te piden ese código para encajarlo con otro más sencillo.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #18 en: 08 de Septiembre de 2022, 19:47:44 »
Reitero y me sumo a la petición de Dominus.
Por favor si eres tan amable de subir el código que comentas aquí: :?
"  que con el uso de uno de los timers del PIC y por desbordamiento de este, he conseguido pulsos de 100 milisegundos y a partir de estos pude conseguir el retardo de un segundo, en ese momento, la bandera se pone en "1" indicando que ha transcurrido un segundo. 

Luego veremos cómo activar/desactivar la salida que deseas!

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #19 en: 08 de Septiembre de 2022, 21:04:28 »
Reitero y me sumo a la petición de Dominus.
Por favor si eres tan amable de subir el código que comentas aquí: :?
"  que con el uso de uno de los timers del PIC y por desbordamiento de este, he conseguido pulsos de 100 milisegundos y a partir de estos pude conseguir el retardo de un segundo, en ese momento, la bandera se pone en "1" indicando que ha transcurrido un segundo. 

Luego veremos cómo activar/desactivar la salida que deseas!

Ok.

Aquí está el código:

Encabezado, etc. etc.


On Interrupt Goto interpt

Pulsos VAR BYTE
Segundos VAR BYTE
Bandera_seg VAR BIT

SW1 Var Bit
SW2 Var Bit
LED1 Var Bit



Main:

;En esta parte necesito hacer el retardo

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


IF SW2=0  THEN LOW LED1     ;Al presionar SW2 se apaga, pero necesito que lo haga

luego de  2 sgs
                                                 

Goto Main

 
interpt:

Disable

If PIR1.0 = 1 Then         
Pulsos=Pulsos+1   
If Pulsos = 10 Then   
Segundos = Segundos + 1   ; Incrementar los Segundos
Pulsos = 0      
EndIf
If Segundos = 2 Then
Segundos = 0      
Bandera_seg = 1    ;Tiempo completado.
EndIf         
EndIf

resume
enable

END

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #20 en: 08 de Septiembre de 2022, 22:41:56 »
Reitero y me sumo a la petición de Dominus.
Por favor si eres tan amable de subir el código que comentas aquí: :?
"  que con el uso de uno de los timers del PIC y por desbordamiento de este, he conseguido pulsos de 100 milisegundos y a partir de estos pude conseguir el retardo de un segundo, en ese momento, la bandera se pone en "1" indicando que ha transcurrido un segundo. 

Luego veremos cómo activar/desactivar la salida que deseas!

Ok.

Aquí está el código:

Encabezado, etc. etc.


On Interrupt Goto interpt

Pulsos VAR BYTE
Segundos VAR BYTE
Bandera_seg VAR BIT

SW1 Var Bit
SW2 Var Bit
LED1 Var Bit



Main:

;En esta parte necesito hacer el retardo

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


IF SW2=0  THEN LOW LED1     ;Al presionar SW2 se apaga, pero necesito que lo haga

luego de  2 sgs
                                                 

Goto Main

 
interpt:

Disable

If PIR1.0 = 1 Then         
Pulsos=Pulsos+1   
If Pulsos = 10 Then   
Segundos = Segundos + 1   ; Incrementar los Segundos
Pulsos = 0      
EndIf
If Segundos = 2 Then
Segundos = 0      
Bandera_seg = 1    ;Tiempo completado.
EndIf         
EndIf

resume
enable

END


No soy experto en basic, pero voy a intentarlo, si alguien conoce mejor el código, que me corrija cualquier cosa errónea por favor.

El código que has compartido, se está asumiendo que la interrupción genera correctamente el tiempo que deseas.


Código: QBasic/QuickBASIC
  1. Main:
  2.  
  3. PIR1.0 = 0; Apago la interrupción del temporizador
  4. Pulsos = 0
  5. Bandera_seg = 0
  6. Segundos = 0; inicializo las variables
  7. LOW LED1 ; led apagado
  8. Lazo:
  9. IF SW1 = 0 THEN; espero a que presionen SW1
  10.     HIGH LED1;
  11.     WHILE  SW2=1 EndWhile ; espero hasta que SW2 sea presionado
  12.     PIR1.0 = 1; Activo la interrupción y el temporizador empieza a funcionar
  13.     WHILE  Bandera_seg = 0 END WHILE ; espera que bandera pase a 1 lógico
  14.     LOW LED1 ; apago el led
  15.     GOTO Main; reinicio el proceso
  16. EndIf
  17. GOTO Lazo
« Última modificación: 08 de Septiembre de 2022, 22:46:15 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Conectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #21 en: 09 de Septiembre de 2022, 01:05:56 »
Mientras el programa haga solo eso y no metas tareas que no puedan suspenderse durante el retardo, usá la instrucción PAUSE y a otra cosa.

Código: Text
  1. ;En esta parte necesito hacer el retardo
  2. IF SW1=0  THEN HIGH LED1    ;Al presionar SW1 se enciende el LED
  3.  
  4. IF SW2=0  THEN
  5.     PAUSE 2000    
  6.     LOW LED1
  7. ENDIF

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #22 en: 09 de Septiembre de 2022, 07:03:32 »
El lenguaje que uso es el Basic del Pic Simulator IDE (PSI).
Estoy revisando tu código y el Basic PSI es prácticamente igual al que estas usando.
Lo que si estoy viendo es que estas usando concepto erróneos, no entiendo el motivo de contar segundos, cuando lo
normal es contar mSeg., simplemente haces una pausa de tantos miles de mSeg.
Y lo que se suele hacer, como te indique en la respuesta anterior, es simplemente cargar un contador con los mSeg. o multiplos de estos.
que quieres contar e ir decrementando, cuando el contador es igual a cero ya paso el tiempo que quieres, haces lo
que tengas que hacer y vuelves a cargar el contador con el siguiente tiempo.


Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #23 en: 09 de Septiembre de 2022, 07:50:12 »
Aquí tienes un ejemplo; cambia lo que necesites e ignora las declaraciones no compatibles, pero el código es muy parecido al de tu lenguaje.

Código: QBasic/QuickBASIC
  1. 'Pic16F628A, oscilador interno 4Mhz
  2. 'Configuración de fuses
  3. #define CONFIG = 0x3f50
  4. Define CLOCK_FREQUENCY = 4  'Oscilador a 4Mhz
  5. 'Include "_FuncionesPic16F628A.bas"
  6. 'Include "_FunctionesTmrBase.bas"
  7. 'Call _setup_oscillator(_osc_4Mhz)
  8. PCON.OSCF = 1  'Oscilador interno 4Mhz
  9. 'Inicializa Timer1 para generar una interrupción cada 1mSeg.
  10. 'Call _setup_timer1(_tmr1_internal, _tmr1_div1)  'Configura TMR1 para 4Mhz
  11. T1CON = 0  'Asigna oscilador interno para el tmr1
  12. T1CON.T1CKPS1 = 0  'Asigna el divisor
  13. T1CON.T1CKPS0 = 0
  14. 'Call _set_timer1(0xfc17)  'Carga contador TMr1 para contar 1mSeg.
  15. T1CON.TMR1ON = 0  'Para el contador del TMR1
  16. TMR1H = 0xfc  'Recarga el byte alto
  17. TMR1L = 0x17  'Recarga el byte bajo
  18. T1CON.TMR1ON = 1  'Activa el contador del TMR1
  19. PIR1.TMR1IF = 0  'Flash dosborde a cero
  20. 'Call _timer1(_on)  'Pone en marcha el Tmr1
  21. T1CON.TMR1ON = 1  'Activa el contador del TMR1
  22. 'Call _enable_interrupts(_int_timer1)  'Permite las interrupciones por desborde Tmr1
  23. PIE1.TMR1IE = 1  'Permite la interrup. TIMER1
  24. 'Call _enable_interrupts(_global)  'Permte las interrupciones globales
  25. INTCON.PEIE = 1  'Bit habilita interrupciones perifericos
  26. Enable  'INTCON.GIE habilita las interrupciones
  27. '************************************************************
  28. AllDigital
  29. DIM pulsos AS Byte
  30. DIM segundos AS Byte
  31. DIM bandera_seg AS Bit
  32.  
  33. DIM sw1 AS Bit
  34. DIM sw2 AS Bit
  35. DIM led1 AS Bit
  36. 'Contadores para generar las bases de tiempos.
  37. DIM _contador1 AS LONG
  38. DIM _contador2 AS LONG
  39. _contador1 = 0
  40. _contador2 = 0
  41.  
  42. Main:
  43.  
  44.         ';en esta parte necesito hacer el retardo
  45.  
  46.         IF sw1 = 0 AND _contador1 = 0 THEN
  47.                 High led1  ';al presionar sw1 se enciende el led
  48.                 _contador1 = 1100  'Carga contador con 1Seg.
  49.         Endif
  50.  
  51.         IF sw2 = 0 AND _contador2 = 0 THEN
  52.                 Low led1  ';al presionar sw2 se apaga, pero necesito que lo haga
  53.                 _contador2 = 2000  'Carga contador con 2Seg.
  54.         Endif
  55.  
  56. GOTO Main
  57. END                                              
  58. '****************************
  59. ON Interrupt
  60.         Save SYSTEM  'Guarda calculos intermedios y otros del sistema
  61.         'Detecta interrupción Timer1
  62.         IF PIR1.TMR1IF = 1 THEN
  63.                 'Call _set_timer1(0xfc17)  'Recarga registros TMR1 para desborde 1mSeg. y borra PIR1.TMR1IF
  64.                 T1CON.TMR1ON = 0  'Para el contador del TMR1
  65.                 TMR1H = 0xfc  'Recarga el contador byte alto
  66.                 TMR1L = 0x17  'Recarga el contador byte bajo
  67.                 T1CON.TMR1ON = 1  'Activa el contador del TMR1
  68.                 PIR1.TMR1IF = 0  'Flash dosborde a cero
  69.                 IF _contador1 > 0 THEN _contador1 = _contador1 - 1  '_contador BT
  70.                 IF _contador2 > 0 THEN _contador2 = _contador2 - 1  '_contador BT
  71.         Endif
  72. RESUME                                            
  73. '******************************
« Última modificación: 09 de Septiembre de 2022, 10:30:03 por dogflu66 »
Saludos desde Granada, España.

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #24 en: 09 de Septiembre de 2022, 12:07:04 »
Mientras el programa haga solo eso y no metas tareas que no puedan suspenderse durante el retardo, usá la instrucción PAUSE y a otra cosa.

Código: Text
  1. ;En esta parte necesito hacer el retardo
  2. IF SW1=0  THEN HIGH LED1    ;Al presionar SW1 se enciende el LED
  3.  
  4. IF SW2=0  THEN
  5.     PAUSE 2000    
  6.     LOW LED1
  7. ENDIF
Eduardo2, gracias por tu intención de ayudar, pero si te fijas en el post #12, en él menciono que no puedo usar PAUSE ni PAUSEUS, porque se el programa se queda trabado y no podrá realizar otras acciones.
Saludos!
                                             

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #25 en: 09 de Septiembre de 2022, 12:15:06 »
Aquí tienes un ejemplo; cambia lo que necesites e ignora las declaraciones no compatibles, pero el código es muy parecido al de tu lenguaje.

Código: QBasic/QuickBASIC
  1. 'Pic16F628A, oscilador interno 4Mhz
  2. 'Configuración de fuses
  3. #define CONFIG = 0x3f50
  4. Define CLOCK_FREQUENCY = 4  'Oscilador a 4Mhz
  5. 'Include "_FuncionesPic16F628A.bas"
  6. 'Include "_FunctionesTmrBase.bas"
  7. 'Call _setup_oscillator(_osc_4Mhz)
  8. PCON.OSCF = 1  'Oscilador interno 4Mhz
  9. 'Inicializa Timer1 para generar una interrupción cada 1mSeg.
  10. 'Call _setup_timer1(_tmr1_internal, _tmr1_div1)  'Configura TMR1 para 4Mhz
  11. T1CON = 0  'Asigna oscilador interno para el tmr1
  12. T1CON.T1CKPS1 = 0  'Asigna el divisor
  13. T1CON.T1CKPS0 = 0
  14. 'Call _set_timer1(0xfc17)  'Carga contador TMr1 para contar 1mSeg.
  15. T1CON.TMR1ON = 0  'Para el contador del TMR1
  16. TMR1H = 0xfc  'Recarga el byte alto
  17. TMR1L = 0x17  'Recarga el byte bajo
  18. T1CON.TMR1ON = 1  'Activa el contador del TMR1
  19. PIR1.TMR1IF = 0  'Flash dosborde a cero
  20. 'Call _timer1(_on)  'Pone en marcha el Tmr1
  21. T1CON.TMR1ON = 1  'Activa el contador del TMR1
  22. 'Call _enable_interrupts(_int_timer1)  'Permite las interrupciones por desborde Tmr1
  23. PIE1.TMR1IE = 1  'Permite la interrup. TIMER1
  24. 'Call _enable_interrupts(_global)  'Permte las interrupciones globales
  25. INTCON.PEIE = 1  'Bit habilita interrupciones perifericos
  26. Enable  'INTCON.GIE habilita las interrupciones
  27. '************************************************************
  28. AllDigital
  29. DIM pulsos AS Byte
  30. DIM segundos AS Byte
  31. DIM bandera_seg AS Bit
  32.  
  33. DIM sw1 AS Bit
  34. DIM sw2 AS Bit
  35. DIM led1 AS Bit
  36. 'Contadores para generar las bases de tiempos.
  37. DIM _contador1 AS LONG
  38. DIM _contador2 AS LONG
  39. _contador1 = 0
  40. _contador2 = 0
  41.  
  42. Main:
  43.  
  44.         ';en esta parte necesito hacer el retardo
  45.  
  46.         IF sw1 = 0 AND _contador1 = 0 THEN
  47.                 High led1  ';al presionar sw1 se enciende el led
  48.                 _contador1 = 1100  'Carga contador con 1Seg.
  49.         Endif
  50.  
  51.         IF sw2 = 0 AND _contador2 = 0 THEN
  52.                 Low led1  ';al presionar sw2 se apaga, pero necesito que lo haga
  53.                 _contador2 = 2000  'Carga contador con 2Seg.
  54.         Endif
  55.  
  56. GOTO Main
  57. END                                              
  58. '****************************
  59. ON Interrupt
  60.         Save SYSTEM  'Guarda calculos intermedios y otros del sistema
  61.         'Detecta interrupción Timer1
  62.         IF PIR1.TMR1IF = 1 THEN
  63.                 'Call _set_timer1(0xfc17)  'Recarga registros TMR1 para desborde 1mSeg. y borra PIR1.TMR1IF
  64.                 T1CON.TMR1ON = 0  'Para el contador del TMR1
  65.                 TMR1H = 0xfc  'Recarga el contador byte alto
  66.                 TMR1L = 0x17  'Recarga el contador byte bajo
  67.                 T1CON.TMR1ON = 1  'Activa el contador del TMR1
  68.                 PIR1.TMR1IF = 0  'Flash dosborde a cero
  69.                 IF _contador1 > 0 THEN _contador1 = _contador1 - 1  '_contador BT
  70.                 IF _contador2 > 0 THEN _contador2 = _contador2 - 1  '_contador BT
  71.         Endif
  72. RESUME                                            
  73. '******************************
dogflu66 Muchas gracias por tu generosidad al compartir ese código, así como por tu tiempo y paciencia.
Voy a probar lo que me sugieres y cualquier novedad te comento.
Eres muy amable.
Cordial saludo!

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #26 en: 09 de Septiembre de 2022, 12:19:15 »

No soy experto en basic, pero voy a intentarlo, si alguien conoce mejor el código, que me corrija cualquier cosa errónea por favor.

El código que has compartido, se está asumiendo que la interrupción genera correctamente el tiempo que deseas.


Código: QBasic/QuickBASIC
  1. Main:
  2.  
  3. PIR1.0 = 0; Apago la interrupción del temporizador
  4. Pulsos = 0
  5. Bandera_seg = 0
  6. Segundos = 0; inicializo las variables
  7. LOW LED1 ; led apagado
  8. Lazo:
  9. IF SW1 = 0 THEN; espero a que presionen SW1
  10.     HIGH LED1;
  11.     WHILE  SW2=1 EndWhile ; espero hasta que SW2 sea presionado
  12.     PIR1.0 = 1; Activo la interrupción y el temporizador empieza a funcionar
  13.     WHILE  Bandera_seg = 0 END WHILE ; espera que bandera pase a 1 lógico
  14.     LOW LED1 ; apago el led
  15.     GOTO Main; reinicio el proceso
  16. EndIf
  17. GOTO Lazo
[/quote]
DominusDRR Agradezco mucho tu ayuda desinteresada.
También voy a probar tu código y si tengo alguna inquietud, te estaré comunicando.
Cordialmente,
Okapi

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #27 en: 09 de Septiembre de 2022, 12:58:01 »

No soy experto en basic, pero voy a intentarlo, si alguien conoce mejor el código, que me corrija cualquier cosa errónea por favor.

El código que has compartido, se está asumiendo que la interrupción genera correctamente el tiempo que deseas.


Código: QBasic/QuickBASIC
  1. Main:
  2.  
  3. PIR1.0 = 0; Apago la interrupción del temporizador
  4. Pulsos = 0
  5. Bandera_seg = 0
  6. Segundos = 0; inicializo las variables
  7. LOW LED1 ; led apagado
  8. Lazo:
  9. IF SW1 = 0 THEN; espero a que presionen SW1
  10.     HIGH LED1;
  11.     WHILE  SW2=1 EndWhile ; espero hasta que SW2 sea presionado
  12.     PIR1.0 = 1; Activo la interrupción y el temporizador empieza a funcionar
  13.     WHILE  Bandera_seg = 0 END WHILE ; espera que bandera pase a 1 lógico
  14.     LOW LED1 ; apago el led
  15.     GOTO Main; reinicio el proceso
  16. EndIf
  17. GOTO Lazo
DominusDRR Agradezco mucho tu ayuda desinteresada.
También voy a probar tu código y si tengo alguna inquietud, te estaré comunicando.
Cordialmente,
Okapi
[/quote]

Este también te va a dar problemas porque se queda en lazos infinitos esperando el pulsador o la bandera. (Instrucciones While)

Deberías pensar en multitareas con procesos cooperativoss, y para tu caso no es necesario utilizar interrupciones, solamente un temporizador siempre activo para obtener su valor y generar retardos.
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 #28 en: 09 de Septiembre de 2022, 15:13:09 »
 

No soy experto en basic, pero voy a intentarlo, si alguien conoce mejor el código, que me corrija cualquier cosa errónea por favor.

El código que has compartido, se está asumiendo que la interrupción genera correctamente el tiempo que deseas.


Código: QBasic/QuickBASIC
  1. Main:
  2.  
  3. PIR1.0 = 0; Apago la interrupción del temporizador
  4. Pulsos = 0
  5. Bandera_seg = 0
  6. Segundos = 0; inicializo las variables
  7. LOW LED1 ; led apagado
  8. Lazo:
  9. IF SW1 = 0 THEN; espero a que presionen SW1
  10.     HIGH LED1;
  11.     WHILE  SW2=1 EndWhile ; espero hasta que SW2 sea presionado
  12.     PIR1.0 = 1; Activo la interrupción y el temporizador empieza a funcionar
  13.     WHILE  Bandera_seg = 0 END WHILE ; espera que bandera pase a 1 lógico
  14.     LOW LED1 ; apago el led
  15.     GOTO Main; reinicio el proceso
  16. EndIf
  17. GOTO Lazo
DominusDRR Agradezco mucho tu ayuda desinteresada.
También voy a probar tu código y si tengo alguna inquietud, te estaré comunicando.
Cordialmente,
Okapi
[/quote]

No tengo una tarjeta ahora mismo para probarlo, pero el módulo de simulación que tiene el compilador indica que si.
Para ser más correctos, se puede ver que un ciclo para el pin RB0 es de 2040uSeg. que dividido entre dos es igual a 1020uSeg. que más o menos son 1mSeg.
Por supuesto se puede ajustar para que sea más exacto pero en general no es necesario.

 
« Última modificación: 09 de Septiembre de 2022, 19:08:43 por dogflu66 »
Saludos desde Granada, España.

Desconectado okapi

  • PIC12
  • **
  • Mensajes: 53
Re:Time Off Delay (TOF) & Time On Delay (TON)
« Respuesta #29 en: 09 de Septiembre de 2022, 19:09:07 »

Este también te va a dar problemas porque se queda en lazos infinitos esperando el pulsador o la bandera. (Instrucciones While)

Deberías pensar en multitareas con procesos cooperativoss, y para tu caso no es necesario utilizar interrupciones, solamente un temporizador siempre activo para obtener su valor y generar retardos.

Si, amigo eso también pensé, al ver los While.
Por favor podrías ser más especifico con lo del temporizador siempre activo?
De ser posible un pequeño ejemplo que me guíe sería muy gentil de tu parte.
Saludos!