[Python-es] Control de tiempo entre conmutaciones de 0 y 1

Ricardo Cárdenes ricardo.cardenes en gmail.com
Vie Mar 24 19:31:33 EDT 2017


El comportamiento que se busca (al mensaje original me remito) es repetir
ciclos de duración T0 + T1, de la siguiente manera:

  - generar un pulso (salida a 1) durante un periodo de tiempo T1, bastante
corto
  - mantener la salida a 0 durante el resto del periodo (T1 + T0)

Es obvio que el programa original no hace eso. En su lugar, hace lo que
expliqué.

Aparte de eso, tengo la impresión de que Rolando, para el uso que va a
hacer (si no recuerdo mal, trabaja en algo relacionado con
radioastronomía), va a tener unas tolerancias bastante bajas. Si obviamos
que estamos usando Python y la incertidumbre que introduce la máquina
virtual, si queremos tener un control mínimamente riguroso de los tiempos,
habría que usar, por ejemplo, el módulo signal y programar una alarma. Eso
sin hablar del sistema operativo que estemos usando: por lo general, en un
SO multitarea, la conmutación con otras tareas te puede fastidar
completamente el asunto, a menos que estés usando un SO para tiempo real, o
uno generalista extensiones RT (eg. Linux)

Saludos,
Ricardo

2017-03-23 22:50 GMT-10:00 Narcis Garcia <informatica en actiu.net>:

> Para un comportamiento regular, es decir, que imprima el mismo número de
> ceros y unos por el mismo tiempo, no debería imprimir por cada bucle
> sinó por cada tiempo detectado del reloj. Con ello ya andaría sincronizado.
>
>
> El 24/03/17 a les 00:07, Ricardo Cárdenes ha escrit:
> > El programa duerme durante 0.01 segundo e imprime (en rápida sucesión) 0
> > 1 0 1. Y repite esa secuencia durante 10 segundos. No parece ser lo que
> > Rolando quiere hacer.
> >
> > Y da igual que estés leyendo el reloj hardware, -que depende de muchos
> > factores, como el sistema operativo, pero no tiene por qué,- el resto
> > del programa añade retrasos que posiblemente no sean deseables en una
> > aplicación como esta.
> >
> > 2017-03-22 21:39 GMT-10:00 Narcis Garcia <informatica en actiu.net
> > <mailto:informatica en actiu.net>>:
> >
> >     No entiendo el porqué el primer código fuente propuesto no debe
> >     funcionar, ya que se supone que la lectura de tiempo es del reloj de
> >     hardware.
> >
> >
> >     El 23/03/17 a les 03:05, Ricardo Cárdenes ha escrit:
> >     > Hola Rolando,
> >     >
> >     > Creo que es lo mejor para lo que estás haciendo. Si lo quieres
> hacer
> >     > programable, busca algún microcontrolador. Un simple Arduino te
> basta
> >     > para una tarea como esta.
> >     >
> >     > 2017-03-22 5:42 GMT-10:00 Rolando Paz <flxpaz en gmail.com <mailto:
> flxpaz en gmail.com>
> >     > <mailto:flxpaz en gmail.com <mailto:flxpaz en gmail.com>>>:
> >     >
> >     >     Hola a todos.
> >     >
> >     >     En efecto Ricardo lo que necesito hacer es controlar los
> tiempos T0
> >     >     y T1.
> >     >
> >     >     La acción para pruebas fue imprimir los valores 0 y 1, sin
> embargo,
> >     >     de acuerdo al hardware que estoy programando, estos valores 0
> y 1
> >     >     los debo ajustar dentro de un registro de software que
> habilita o
> >     >     deshabilita la generación de una señal senoidal.
> >     >
> >     >     Sin embargo, luego de buscar varias formas de hacerlo con
> software,
> >     >     creo que lo más facil sera hacerlo con hardware. Con algun
> generador
> >     >     de señales :)
> >     >
> >     >
> >     >
> >     >
> >     >     El 21 de marzo de 2017, 22:30, Ricardo Cárdenes
> >     >     <ricardo.cardenes en gmail.com
> >     <mailto:ricardo.cardenes en gmail.com>
> >     <mailto:ricardo.cardenes en gmail.com <mailto:ricardo.cardenes@
> gmail.com>>>
> >     >     escribió:
> >     >
> >     >         Según la presentación del problema, es un ciclo de:
> "imprimir
> >     >         0", "esperar T0 segundos", "imprimir 1", "esperar T1
> segundos"
> >     >
> >     >         2017-03-21 10:07 GMT-10:00 Carlos Zuniga <
> carlos.zun en gmail.com <mailto:carlos.zun en gmail.com>
> >     >         <mailto:carlos.zun en gmail.com <mailto:carlos.zun en gmail.com
> >>>:
> >     >
> >     >             2017-03-20 23:05 GMT-05:00 Rolando Paz <
> flxpaz en gmail.com <mailto:flxpaz en gmail.com>
> >     >             <mailto:flxpaz en gmail.com <mailto:flxpaz en gmail.com>>>:
> >     >             > Hola a todos de nuevo...
> >     >             >
> >     >             > Ahora regreso con un pequeño código:
> >     >             >
> >     >             > import time
> >     >             >
> >     >             > start_time = time.time()
> >     >             > #tiempo total en segundos, como ejemplo 10.
> >     >             > tiempo_total = 10
> >     >             > #numero de conmutaciones generadas, como ejemplo 4.
> >     >             > conmutaciones = 4
> >     >             > for offset in range(tiempo_total):
> >     >             >     while (time.time() - start_time) < offset:
> >     >             >         time.sleep(0.01)
> >     >             >         #lo siguiente realiza una conmutacion entre
> >     0 y 1.
> >     >             >         count = 0
> >     >             >         for i in range(conmutaciones):
> >     >             >             count = (count + 1) % 2
> >     >             >              print count
> >     >             >
> >     >             > Lo que hace este código es conmutar entre 0 y 1,
> tantas
> >     >             veces como se defina
> >     >             > en "conmutaciones", durante el tiempo establecido en
> >     >             "tiempo_total".
> >     >             >
> >     >             > La salida es la siguiente.
> >     >             >
> >     >             > 0
> >     >             > 1
> >     >             > 0
> >     >             > 1
> >     >             >
> >     >             > Estoy tratando de entender cómo usar este código para
> >     >             controlar los tiempos
> >     >             > que se definen en la imagen adjunta, es decir:
> >     >             >
> >     >             > T1 = tiempo durante el cual la conmutacion es 1
> >     >             > T0 = tiempo durante el cual la conmutacion es 0
> >     >             > Tiempo Total = tiempo total de las conmutaciones
> >     >             >
> >     >             > Agradecería cualquier comentario sobre como poder
> >     >             controlar los tiempos
> >     >             > anteriores.
> >     >             >
> >     >
> >     >             Tu intención es que espere un tiempo tras cada print
> >     de 0 o
> >     >             1? o que
> >     >             imprima 0/1 4 veces y luego esperar?
> >     >
> >     >                 import time
> >     >                 from itertools import cycle
> >     >                 conmutador = cycle((0,1))
> >     >
> >     >                 tiempo_total = 10
> >     >                 conmutaciones = 4
> >     >
> >     >                 start = time.time()
> >     >                 end = start + tiempo_total
> >     >                 time_per_pulse = tiempo_total / conmutaciones
> >     >                 while end > time.time():
> >     >                     pulse_start = time.time()
> >     >                     print(next(conmutador))
> >     >                     pulse_end = time.time()
> >     >                     time.sleep(time_per_pulse - (pulse_end -
> >     pulse_start))
> >     >
> >     >
> >     >             Ahora, time.sleep no es exacto, el tiempo va a ser
> >     >             normalmente mayor
> >     >             al que especificas, depende del sistema. También hay
> >     >             threading.Event.wait que puede ser más exacto.
> >     >
> >     >
> >     >             Saludos
> >     >             _______________________________________________
> >     >             Python-es mailing list
> >     >             Python-es en python.org <mailto:Python-es en python.org>
> >     <mailto:Python-es en python.org <mailto:Python-es en python.org>>
> >     >             https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>
> >     >             <https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>>
> >     >
> >     >
> >     >
> >     >         _______________________________________________
> >     >         Python-es mailing list
> >     >         Python-es en python.org <mailto:Python-es en python.org>
> >     <mailto:Python-es en python.org <mailto:Python-es en python.org>>
> >     >         https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>
> >     >         <https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>>
> >     >
> >     >
> >     >
> >     >     _______________________________________________
> >     >     Python-es mailing list
> >     >     Python-es en python.org <mailto:Python-es en python.org>
> >     <mailto:Python-es en python.org <mailto:Python-es en python.org>>
> >     >     https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>
> >     >     <https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>>
> >     >
> >     >
> >     >
> >     >
> >     > _______________________________________________
> >     > Python-es mailing list
> >     > Python-es en python.org <mailto:Python-es en python.org>
> >     > https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>
> >     >
> >     _______________________________________________
> >     Python-es mailing list
> >     Python-es en python.org <mailto:Python-es en python.org>
> >     https://mail.python.org/mailman/listinfo/python-es
> >     <https://mail.python.org/mailman/listinfo/python-es>
> >
> >
> >
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > https://mail.python.org/mailman/listinfo/python-es
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170324/36dc068e/attachment.html>


Más información sobre la lista de distribución Python-es