Hola a todos, he estado buscando por el foro (en Español e Inglés) si alguien antes se ha encontrado con mi problema y no he hallado solución.
Lo que necesito es sincronizar Arduino con un servidor NTP -hasta sería fácil de hacer- y mostrar la hora con una precisión de milisegundos, ya que tengo que comparar tiempos de respuesta en peticiones cliente-servidor.
He echado un vistazo a la librería Time.h y, aunque mis conocimientos de programación no son muy amplios, he llegado a la conclusión de que no soporta milisegundos en la precisión de la hora.
Si hay alguien que sabe cómo solucionar mi problema, le estaría muy agradecido si me da una pista para resolverlo.
jjpd00:
Has echado un vistazo a la librería TimerOne?
Quizás con ella te puedas construir un reloj en milisegundos como pretendes.
Saludos
No se si me servirá. Le echaré un vistazo, pero en realidad yo no quiero construirme un reloj en milisegundos, sino recuperar la hora de un servidor NTP con precisión de milisegundos.
Mira, buscando para ese hilo precisamente encontre un hilo en inglés (arduino) y el tema iba desde GPS hasta conexiones por RF o el viejo sistema LORAN.
Usando NTP tienes un retraso de 10 mseg por paquete recibido de modo que esa sería tu posible sincronización con internet pública.
No se cómo pero con condiciones ideales que supongo de una red local podrías mejorarlo.
Yo usaría un GPS para sincronizarlos.
Deberías conseguir precisiones (con la cantidad de satélites adecuada) 1 mseg usando la salida externa del gps de 1pps con lo cual estarías en el mseg o menos.
No lo he hecho y creo que Go_zalo tiene mas experiencia en este tema.
Muchas gracias por la información surbyte, la cuestión es que estoy utilizando un prototipo para un Proyecto Fin de Grado que se conecta a mi red a través del módulo WIFI Roving Networks RN171 de Seeed Studio, por lo que estoy limitado en este aspecto.
Pero lo que puedo decirte es esto basado en el sentido común:
Me parece IMPOSIBLE que puedas sincronizar dos máquinas a nivel de milisegundo porque intercambias datos, y porque cualquier intercambio de datos toma al menos mililsegundos en completarse, y por lo tanto eso no permite que alcances tu resultado. Aun los protocolos que tratan de medir cuanto tiempo toma transferir la información y luego envian esa información (tomando en cuenta esa demora) son algo mejor que el promedio pero no son lo sufientemente buenos porque no todos las transferencias toman el mismo tiempo simplemente haz un ping continuo a un punto en internet y verás como varía en cada caso. Si eso varía como vas a lograr que tu rutina corrija esos tiempos?
En definitiva, no hay que bajar los brazos pero si establecer que puedes lograr.
Para mi puedes conseguir precisión de 10 mseg garantizada. Y esta mas que bien o no?