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

Narcis Garcia informatica en actiu.net
Vie Mar 24 04:50:55 EDT 2017


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 en 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
> 


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