el 01-27-2016 09:23 AM
Hola de nuevo Roberto,
ya he solucionado el tema del timer asincrono, ya está andando, pero vuelvo a tener problemas con el puerto serie. Me hace bien la lectra del serial hasta que llega más o menos a la muestra 1200aprox, y empiezan a dar valores erroneos. Tiene alguna idea de que puede estar pasando?
el 01-27-2016 10:26 AM
No tengo ideas. Podrías averiguar si la lectura está al paso de la transmisión visualizando la cola en el puerto con GetInQLen cada vez que lees: a ver si estamos llenando el buffer así que alguna lectura se pierde
el 01-27-2016 10:31 AM
He bajado la velocidad a 9600 y va perfecto, asi que imagino que tendre que ¿sincronizar la velocidad del puerto con la del timer?
el 01-28-2016 02:44 AM
Bueno, de alguna manera ambos procesos debe ir juntos: si el timer es lento el buffer del puerto se va llenando y algun dato puede perderse.
Idealmente deberías tener el timer un poquito mas rápido del Arduino para no perder ningun dato y no ir llenando la cola en el tiempo. Alternativamente puedes leer más mensajes en cada ejecución del timer: en este caso pon cuidado con el tiempo de timeout para no bloquear el sistema (SetComTime).
el 01-28-2016 06:47 AM
Buenos días Roberto,
He comprobado el tiempo que tarda Arduino en mandarme los datos por el serial, y he obtenido los siuientes resultados:
Ahora la cuestión es, que la recepción de datos la he logrado poner en un Timer Asíncrono, pero la máxima velocidad a la que no tengo problemas es, como ya te dije, 57600.
Mi pregunta es. ¿Para poder adquirir datos a mayor velocidad he de cambiar la resolución del Timer? Es decir, cambiar su resolución y ponerla un poco más rápido que el tiempo de envío de datos. Ahora mismo lo que estoy haciendo es usar GetAsyncTimerResolution para obtener la resolución.
Muchas gracias.
el 01-28-2016 10:59 AM
Bueno, puesto así creo que es necesario un cambio de estructura. En efecto si vas a 57600 estas recibiendo una muestra cada 2 millisegundos, esto es: el sistema va ¡muy rápido!
Creo que la transmisión se daña a velicdad superiores porque el timer no puede bajar debajo de 1 mseg como resolución, así que practicamente aunque corra continuamente no puede seguir el Arduino procesando una muestra para cada ejecución.
Podrías intentar pasar al multithreading, con un thread separado que siempre corra en un loop procesando continuamente la transmisión, dejando libre el thread principal para ocuparse del la UI. Igualmente, debes simplificar mucho este thread para que corra mas rápido posible procesando todos los mensajes.
el 02-02-2016 03:24 AM
OK¡¡ Intentare con multithreading a ver si fnciona mejor ¡¡
Gracias ¡¡
el 02-03-2016 04:44 AM
Hola Roberto,
efectivamente he creado un hilo nuevo para la adquisicion de los datos y va bastante mejor. Ahora toca ver como operar con multithrading.
Muchas gracias,
Saludos
el 02-03-2016 05:22 AM
Me alegro que las cosa vayan solucionandose.
Suerte con tu proyecto