[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