Tengo un chip RTC DS1307 que quiero conectar con varios maestros. Uno, un chip ATMega, solo necesitará extraer datos de tiempo del chip y el otro (probablemente solo un ATTiny) estará allí únicamente con el propósito de recibir actualizaciones de tiempo inalámbricas y actualizar el tiempo en el RTC. Me doy cuenta de que podría incorporar esta funcionalidad de actualización inalámbrica al chip ATMega, pero estoy tratando de trabajar en una placa RTC modular que, en lo que respecta a ATMega, es exactamente igual que cualquier otro RTC similar como el DS1307 o el DS3231 (Chronodot).
La pregunta es, ¿puedo conectarlo todo a las mismas dos líneas de bus i2c y comunicarme con el RTC desde AMBOS chips? Si es así, ¿debo hacer algo para asegurarme de que ambos no lo intenten al mismo tiempo? Supongo que, dado que i2c ya admite múltiples dispositivos esclavos , esto generalmente debería manejarse por mí. Pero, en general, esto debería funcionar. Estoy de acuerdo con que ATMega intente obtener la hora y tenga que esperar si se actualiza el RTC. Lo cual sería raro de todos modos, tal vez cada hora como máximo.
¿Pensamientos?
Estás en lo correcto. Multimaster debe ser manejado por usted. Descripción i2c Multi-Master . Lo principal para un sistema multimaestro adecuado es que comprende la lógica de arbitraje y puede saber cuándo el sistema está ocupado. El primero es más difícil que el segundo. Para saber cuándo el sistema está ocupado, cada maestro múltiple debe poder verificar una condición de inicio y esperar una condición de parada antes de intentar usar el bus. La lógica de arbitraje es para situaciones en las que ambos maestros pueden intentar hacerse cargo del bus al mismo tiempo.
Pero hay otras formas de hacerlo, fuera del estándar i2c. Puede usar un pin adicional para cada uno de los maestros y hacer un estándar de señal de ocupado simple.
Compruebe si el pin Ocupado está activado.
Si está desactivado, establezca una variable de estado en Activado y el pin Ocupado en Activado, luego hable con el rtc. Cuando haya terminado, configure la variable y el pin en Apagado.
Si está Activado, verifique si la variable de estado está Activada (¿"Yo" configuré la variable de estado en Activado?). Si no, repita hasta que el pin ocupado esté desactivado.
Super gato