Interfaz DS1307 RTC con PIC16f882

Estoy tratando de conectar DS1307 RTC con la MCU mencionada. Quiero hacer un temporizador de por vida que indique el tiempo que este proyecto ha funcionado en el campo y mostrar este temporizador en una pantalla LCD.

Soy nuevo en los microcontroladores, pero el uso de bibliotecas LCD e I2C ya integradas en el compilador MikroC pro para PIC espero salvarme de la programación de bajo nivel.

Ahora si entendí bien, los pasos para escribir o leer algo del RTC serían:

1) I2C_Start();
2) I2C_Write(DS1307_Address);
3) I2C_Write(Register Address);
4) I2C_Write(Data to be written);
5) I2C_Stop();

y para leer:

1) I2C_Start();
2) I2C_Write(DS1307_Address);
3) I2C_Write(Register Address);
4) I2C_Repeated_Start();
5) I2C_Write(DS1307_Address);
6) I2C_Rd();
7) I2C_Stop();

Mi problema es que, ¿cuál será DS1307_Address, si es el único dispositivo en el autobús?

Mi enfoque será configurar el BIT7 de 00h o CHbit del DS1307 bajo siempre que el dispositivo esté funcionando, y configurarlo alto justo antes de apagarlo. No quiero que el RTC cuente el tiempo del proyecto también. ¿Es factible este enfoque?

Mi esquema es el siguiente:

Las direcciones de los dispositivos I2C generalmente se dan en su hoja de datos.
Su secuencia de lectura necesita otro paso entre 3 y 4: un "Reinicio I2C".
@EugeneSh. He revisado la hoja de datos varias veces, parece que no puedo encontrarla. ¿Puede echar un vistazo, por favor: datasheets.maximintegrated.com/en/ds/DS1307.pdf
@brhans Gracias brhans, actualizaré mi pregunta y mi código.
Página 12. Leer hojas de datos es una de las habilidades más esenciales para alguien que se ocupa de la electrónica. Con la ayuda de Ctrl-F tarda como 20 segundos.
@EugeneSh. Gracias Eugene, debería haber probado Ctrl-F, recordará este consejo la próxima vez.
@brhans Parece que no hay una función Reiniciar () en la biblioteca MikroC. ¿Start() y Stop() volverán a hacer la misma función correctamente?
Hay una I2C_Repeated_Startfunción. Echa un vistazo a los ejemplos en esta página.
@EugeneSh. su diagnóstico de los 20 es bastante acertado ;-).
@EugeneSh. Solo quiero editar el séptimo bit del registro de segundos, sin alterar los segundos en él. ¿Cómo puede ser posible cuando se supone que debo escribir un byte completo cada vez como: I2C1_Wr (0x80) e I2C1_Wr (0x00)
No se puede modificar un solo bit. Necesitas leer, enmascarar, escribir. Pero puedo ver un pequeño problema aquí. Los segundos se pueden actualizar (aunque no más de una vez, pero aun así) durante esta secuencia, por lo que perderá un segundo. Si realmente no le importa el error que se acumula lentamente, puede ignorarlo.

Respuestas (1)

Según la hoja de datos , página 12:

El byte de la dirección del esclavo contiene la dirección DS1307 de 7 bits, que es 1101000, seguida del bit de dirección (R/W), que para una escritura es 0.

Entonces, la dirección que está buscando es 1101000 .