This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
DUDA Programar DS3231 leyendo la hora de otro DS3231
#1
Hola, actualmente estoy programando los DS3231 mediante un arduino nano, tomando la hora directamente del ordenador, es decir, cuando compila el sketch toma la hora y la graba al DS3231. El problema surge cuando me pongo a comparar varios DS3231 ya programados y veo que la hora varía ligeramente. Mi conclusion, al margen de la desviacion que pueden tener los propios relojes es que no tarda siempre el mismo tiempo en compilar y subir el sketch así que una posible solución sería hacer un programador autónomo con un arduino y dos DS3231, en el que se utilizase uno como maestro y el otro como esclavo, así, siempre tendría la misma hora.

He estado buscando información acerca de como conectar juntos dos DS3231 pero no encuentro nada, supongo que no pueden ir en el mismo bus i2c porque no les puedo asignar direcciones distintas y las ordenes afectarian a los dos o generaría un caos de información en el bus asi que tendría que usar dos pines para generar otro bus nuevo, pero esto se escapa de mis conocimientos. Otra cosa que habia pensado es tener dos arduinos comunicados por serie y en uno tener el reloj maestro y el otro el reloj esclavo. No obstante igual me podeis ayudar o sugerir alguno otra opción para resolver este problema de sincronia entre relojes.

Muchas gracias.
  Responder
#2
Buenos días @victorprieto,

No debería tener ningún problema por tener más de un 3231 en el mismo bus I2C, para darle  algo de "lógica" a mi respuesta, la escribo sobre tu mensaje:

Hola, actualmente estoy programando los DS3231 mediante un arduino nano, tomando la hora directamente del ordenador, es decir, cuando compila el sketch toma la hora y la graba al DS3231. El problema surge cuando me pongo a comparar varios DS3231 ya programados y veo que la hora varía ligeramente. Mi conclusión, al margen de la desviación que pueden tener los propios relojes es que no tarda siempre el mismo tiempo en compilar y subir el sketch así que una posible solución sería hacer un programador autónomo con un arduino y dos DS3231, en el que se utilizase uno como maestro y el otro como esclavo, así, siempre tendría la misma hora.

Si deseas sincronizar varios dispositivos, deben tener un patrón común para el momento de su inicio. Pero debes separar el hardware del que llamas patrón de los que serían sincronizados con él. 
por ejemplo:
  • En local: el más económico un pulsador que inicialice sus relojes
  • En local: Otro Arduino con reloj, y que este Arduino conectado por ¿RS232? que les envíe la señal de start cuando tú quieras.
  • En remoto: Otro Arduino con reloj, y que este Arduino conectado por ¿UHF, Lora, Wifi, Bluetooh, etc..? que haga lo mismo que el anterior.
Si dejas el reloj patrón en la misma maquina que tengas el sincronizado, los posibles problemas que afecten a la segunda (variación del ciclo por cambio de temperatura, etc...) afectaran también al "patrón". Por eso lo "patrones" se deben separar/aislar de los sincronizados.


He estado buscando información acerca de como conectar juntos dos DS3231 pero no encuentro nada, supongo que no pueden ir en el mismo bus i2c porque no les puedo asignar direcciones distintas y las ordenes afectarían a los dos o generaría un caos de información en el bus asi que tendría que usar dos pines para generar otro bus nuevo, pero esto se escapa de mis conocimientos. Otra cosa que había pensado es tener dos arduinos comunicados por serie y en uno tener el reloj maestro y el otro el reloj esclavo. No obstante igual me podéis ayudar o sugerir alguno otra opción para resolver este problema de sincronía entre relojes.

El DS3121 tiene una única dirección I2C no variable, por lo que no puedes poner dos en el mismo bus sin encargarte tú de la selección de uno u otro por hardware.
No es difícil, aunque se complica un poco al no disponer el DS3231 de un "chip Select" entre sus patillas. Solo debes hacer lo siguiente:
1.- Usar un pin de salida digital del Arduino como Chip Select. Por ejemplo en alto el DS3231-A y en bajo el DS3231-B. (usa tantas líneas como sean necesarias si aumentas el numero de dispositivos; 2 líneas=4 dispositivos, etc...)
2.- Antes de las señales SDA de cada DS3231 añade una puerta AND
3.- Conecta el pin que elegiste como Chipselect directamente a la patilla libre de la puerta AND en la que está el SDA del dispositivo que se activara con el ChipSelect en alto.
4.-Conecta el pin que elegiste como ChipSelect a través de un inversor a la patilla libre de la puerta AND en la que está el SDA del dispositivo que se activará con el ChipSelect en bajo.
5.- en tu programa selecciona la señal del pin ChipSelect antes de comunicarte con el dispositivo I2C que deseas.

Respecto a tener dos Arduinos para tener el patrón de tiempos en uno, como te he comentado en el punto anterior, sería la mejor opción. Así si tienes mañana 3, 4 o 256 relojes sincronizados, todos lo harán desde un único patrón.

Documentación necesaria:
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
https://www.jameco.com/Jameco/Products/ProdDS/49146.pdf
https://www.elektronik-kompendium.de/pub...74ls04.pdf

[url=https://www.elektronik-kompendium.de/public/schaerer/FILES/74ls04.pdf][/url]

Espero haberte resultado de ayuda.
Suerte con el proyecto.
  Responder
#3
Lo primero muchísimas gracias por una respuesta más completa, voy a ir estudiando las opciones que propones y por lo menos ya tengo más claro por donde van los tiros. Seguramente la primera opción que pruebe sea la de dos arduinos conectados por rs232, uno con el reloj Maestro y otro con el reloj para programar, en el primero el arduino manda la hora por rs232 y en el segundo recibe la hora y que cuando accione un pulsador la grabe en el nuevo reloj. Os iré informando si consigo avances.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Programar Arduino utilizando Sublime-Text alegorosito 2 1,635 01-08-2015, 11:14 PM
Último mensaje: jukillo
  Programar tu propio controlador de vuelo para un multirrotor alegorosito 0 1,293 21-07-2015, 11:39 PM
Último mensaje: alegorosito
  Iteaduino Lite, otro clon barato cansi22 16 4,386 13-02-2014, 05:45 PM
Último mensaje: JotaEmme