Velocidad impresion LCD16x2 y 7Segmentos

Buen día Estimados usuarios de la comunidad, he estado trabajando usando Arduino UNO y un GPS para tener la hora mas exacta con al menos 5 milisegundos de diferencia cuando se escribe la hora en algún dispositivo de visualización (LCD16x2 y 7Segmentos)con respecto al PPS de otro GPS, lo he logrado utilizando la librería EnableInterrupt :o

1.- Cada segundo lee la hora del GPS que esta conectado al Arduino UNO y se almacena en una variable para la hora, otra para el minuto y una mas para el segundo.

2.- Cada que se activa el PPS del GPS que esta conectado al Arduino UNO llamo a una rutina sencilla usando EnableInterrupt, esto para escribir el valor del minuto y segundo en un LCD16x2 usando la librería LiquidCrystal_I2C.

3.- Al momento de terminar el comando WRITE que se usa en el LCD16x2 activo un pulso utilizando el digitalWrite de Arduino UNO en el pin7.

4.- Utilizando el ESP32 y otro GPS verifico el tiempo que paso entre el PPS que se tiene en el ESP32 y cuando se prende el PIN7 de Arduino UNO, lo cual da como resultado entre los pulsos de 5,700 microsegundos, es decir 5.7 milisegundos, si solo escribo el segundo me da 2,500 microsegundos, si quito el WRITE y solo dejo una división entre dos números cualquiera el resultado es 30 microsegundos, es decir 0.030 milisegundos, lo cual me da una idea por demas exacta que si considera un tiempo para escritura en el LCD.

5.- Utilice la libreria TM1637 para escribir los numeros de minutos y segundos en un modulo 7Segmentos y siguiendo el mismo procedimiento usando tm1637.display(TimeDisp) me acerco a 1,050 microsegundos, es decir 1 milisegundo lo cual es por demás correcto.

Ahora bien, viene la pregunta, ¿Se puede bajar mas ese tiempo?, por decir aproximadamente 300 microsegundos en el LCD o bien en el 7Segmentos, segun leyendo las especificaciones dice que los ciclos de lectura escrituras son de al menos 20 microsegundos para algunos casos y 60 microsegundos.

¿Hay librerias llamadas de "LOW LEVEL" que utilicen menos tiempo para procesar un escrito de variable en pantalla de los tipos mencionados?.

Saludos y gracias por sus respuestas

No entiendo algo. Si sincronizas porque lo que intentas hacer es SINCRONIZAR la hora del GPS con tu hora del sistema, lo haces 1 sola vez, no a cada momento.

Y la librería de sincronización GPS sistema esta hecha.
Si te entiendo bien, porque lees esto Time GPS

En la misma librería tienes esto

Synchronization With Other Time Services
Time can synchronize its clock with another source of known time. You can use the setTime functions above, or configure Time to automatically call a function which will report the time.

timeStatus();
Returns the status of time sync. Three type of status are defined, with these names:

**timeNotSet ** Time's clock has not been set. The time & date are unknown.
**timeSet ** Time's clock has been set.
**timeNeedsSync ** Time's clock is set, but the sync has failed, so it may not be accurate.
setSyncProvider(getTimeFunction);
Configure Time to automatically called the getTimeFunction() regularly. This function should obtain the time from another service and return a time_t number, or zero if the time is not known.

setSyncInterval(seconds);
Configure how often the getTimeFunction is called.

Yo lo uso con mi RTC y con NTP.

Buenas tardes,

Gracias por la contestación, aclaro dos puntos.

1.- La sincroización del tiempo del GPS con el sistema de Arduino lo hago cada 300 segundos, es decir cada 5 minutos

2.- La sicronización es correcta y el sistema (Arduino) funciona de maravilla

3.- La impresion de la hora en el LCD es ahí donde quiero acortar el tiempo de la misma utilizando un programa "LOW LEVEL"

4.- Cada segundo que escribo la hora, minuto y segundo en la pantalla la diferencia en tiempo entre el PPS del GPS y la instrucción de escritura en la librería me da un resultado de 2,500 microsegundos, es decir 2.5 milisegundos.

5.- Es precisamente el tiempo que quiero acortar para que el delta de tiempo entre el PPS y el despliegue de la hora (HH:MM:SS) en el LCD o bien en el 7 segmentos sea menor a 1 milisegundo

Espero haya quedado claro, gracias por el apoyo

Bueno intentalo con la librería que te he indicado y compara los tiempos. Solo para probar a ver si sirve a tu objetivo.

arduinohumty:
3.- La impresion de la hora en el LCD es ahí donde quiero acortar el tiempo de la misma utilizando un programa "LOW LEVEL"

4.- Cada segundo que escribo la hora, minuto y segundo en la pantalla la diferencia en tiempo entre el PPS del GPS y la instrucción de escritura en la librería me da un resultado de 2,500 microsegundos, es decir 2.5 milisegundos.

5.- Es precisamente el tiempo que quiero acortar para que el delta de tiempo entre el PPS y el despliegue de la hora (HH:MM:SS) en el LCD o bien en el 7 segmentos sea menor a 1 milisegundo

"Low level" me suena a ensamblador. Si no tienes idea ni siquiera como y para qué son las instrucciones (máquina) de un AVR, entonces descarta esa idea.

Lo más viable sería tomar el código de las librerías y ver si hay algo que se pueda cambiar para mejorar los tiempos de ejecución. Advertido: si eres un principiante en Arduino (y sobre todo en AVR), de lo más seguro quedarás abrumado; y muy posiblemente aumente el consumo de memoria RAM.

Entiendo yo que por mucho que queramos optimizar el código, incluso utilizando ensamblador, los tiempos para enviar datos i2c (pantalla) son los que son. Si quieres más rapidez deberías utilizar una pantalla con conexión más rápida, pero no alcanzo a entender por qué rzón te es tan crítico mostrar en pantalla la hora con tal premura (no creo que el ojo humano aprecie esos 2,5 milisegundos).

Buenas tardes Estimados,

Gracias por sus comentarios todos son bienvenidos, quiero hacerlo porque hasta donde se hay limites pero no he llegado a esos según la literatura, esto es un hobby y como tal siempre va a ocurrir eso, "porque quieres llegar a ese lugar", esto es de retos y al menos considero que el foro tiene gente que se pone retos, yo soy de los que se ponen retos, no soy experto en Arduino pero al menos he trabajado armando una estación meteorológica, he grabado durante un año datos meteorológicos, me he quedado sorprendido de los dispositivos ESP32 y ESP8266 para prender desde un led hasta una estación meteorológica y como podemos compartir los datos por internet, que usé la librerias, lo acepto (no es un pecado) pero nuevamente pregunto, quien no quiere avanzar mas?, pregunte si alguien sabe "LOW LEVEL" y si en su experiencia cree se pueda lograr lo que comento.

Libreria TM1637, escribo el valor usando el comando DISPLAY y tarda 1 milisegundo, la hoja de especificación del TM1637 dice que el tiempo de respuesta es de 0.1 milisegundos, entonces porque no poder hacerlo, es decir, la libreria tiene una limitación y esta bien que tenga un milisegundo, yo acudí en apoyo de si conocen alguna libreria o bien, instrucciones que se acerquen a ese valor de 0.1 milisegundos que marca la hoja de especificación.

Saludos

Buen día Estimados,

Tengo a bien informar que me he encontrado la siguiente librería (SevenSegmentTM1637.h), dentro de los ejemplo viene uno que trae un "LOW LEVEL", lo he cargado a mi programa y resulta que lo que antes marcaba con un Delta T de 1,000 microsegundos ahora marca 274 microsegundos :o , es todo una maravilla esto, aquí voy a dejar este proyecto (total solo quería bajarlo de 1,000), les recomiendo ampliamente esta librería, por otro lado, en la búsqueda de esta disminución me encontrado con algunos datos interesantes:

1.- Una suma, multiplicación y división tarda entre 25 y 35 microsegundos
2.- Una llamada a la librería (TIME) de arduino para lectura de hora y segundo del sistema tarda aproximadamente 1,200 microsegundos, a ver si entendí, la lectura tarda 1,200 y la escritura 274, na, estas mal, dirían los demás, pero no es así, cada que llega dato del GPS (que no es lo mismo que el PPS) le doy también valor a una variable global de minuto y segundo, el tiempo de 274 es cuando llega el pulso del GPS y despliego la información que es el tiempo mas cercano a tiempo actual.
3.- Radio de onda corta con sintonización de 10 Mhz (NIST Hora) tarda en llegar 10 milisegundos (lugar donde me localizo), al cambio de hora en Arduino genero una señal a un buzzer que grabo junto con el de la indicación del radio, ambos tonos son revisados encontrando el Delta de tiempo confirmando lo anterior (lo de los 10 milisegundos).

Explicado todo esto pido a los Administradores que cierren este tópico.

Saludos a la comunidad y me reitero a sus ordenes