Duda sobre DS1307....

Buenas tardes amigos... hoy vengo con una consulta de la cual san google se queda corto por lo visto-...

tengo un solo modulo DS1307 .. y queria usarlo para conectarlo a 2 arduinos a la vez para ambos sepan la hora que es...

el modulo es el siguiente:

si notan estoy usando P1 y el P2 porque yo supongo que debe ser lo mismo solo que uno para un arduino y el otro para el segund arduino (eso creo).. mi logica me dice eso, en fin... si pruebo el ds1307 conectado a un solo arduino sea en el P1 o P2 pues funciona perfectamente... pero como dije deseo usar el P2 para que lo use otro arduino y pues cuando hago los 2 a la vez.. se vuelve loco y se resetea la hora o no marca nada...

la consulta es... alguien sabe para que se usa el P1 y P2? es posible usarlo con 2 arduino a la vez? alguna ayudita :3 (aclaro que los puertos sda,scl,grn y vcc estan correctamente conectados de ambos lados P1 -P2)

Porque no intentas enlazar via comunicación I2C a las dos placas arduino. En la placa Maestro conectas el RTC y a la placa esclavo le mandas los datos de la hora.

Como seria eso brot? ya que por serial lo tengo ocupado mandando otro dato

bueno... por lo que veo no sera tan facil por i2c... ya que por ejemplo uso 2 arduino UNO... uno tiene el rtc y el segundo no, pero entre ellos se pasan datos distintos e importantes por serial... sim embargo el arduino 1 siempre va a concoer la hora y en el arduino 2 quisiera que al pulsar el boton se conociera la hora... con lo cual el codigo para el arduino 2 es:

que vendria siendo el maestro:

#include <Wire.h>                // Incluimos la librería de comunicación I2C
void setup()                   // Secuencia de configuración, solo se ejecuta una vez
{
Wire.begin();              // Iniciamos la comunicación I2C, en el maestro la dirección no es obligatoria
Serial.begin(9600);       // Iniciamos la comunicación por el puerto serie para mostrar los datos
}
void loop()              // Secuencia en bucle, se repite una y otra vez
{
Wire.requestFrom(1, 12);  // Manda una petición al esclavo numero 1 de 12 bytes
while(Wire.available())  // Mientras tengamos datos en el buffer seguimos leyendo
{
char Datos = Wire.read(); // Leemos un byte y lo pasamos a una variable de tipo char
Serial.print(Datos);     // Lo mostramos en el puerto serie (esto es un bucle donde van llegando uno por uno cada carácter y se van imprimiendo por el serial)
}
delay(1500);        // Esperamos 1,5 segundos para que sea posible ver las respuestas
Serial.println();  // Imprimimos una nueva linea, sino la respuestas van a ir pegadas
}

y en el arduino 1 que es el que tiene el rtc estaria el codigo:

#include <Wire.h>

#include <RTC.h>

RTC rtc(DST_ON);
String hora;

void setup()
{
Wire.begin(1);                                // Nos añadimos al bus como esclavo, con la dirección 1
Wire.onRequest(requestEvent); // Registro de eventos
}
void loop()
{
delay(100);                    // retraso de 100 mili-segundos
}
void requestEvent()      // Función que se ejecuta cuando recibe una petición desde el maestro
{
 Data d = rtc.getData();
 Wire.write(data.c_str(d.toString("Y-m-d H:i:s")));}

basicamente no esta funcionando lo de leer la hora del rtc, ya que noto que estoy definiendo el arduino 1 como esclavo al 2 y siento que pierde la funcionalidad de leer del RTC y enviar la hora...

alguna ayuda?

recuerda que en I2C puedes cambiar el maestro y esclavo pudiendo ser en un determinado momento el primer arduino el maestro y el segundo el esclavo y en otro determinado momento lo contrario.

mike_117:
recuerda que en I2C puedes cambiar el maestro y esclavo pudiendo ser en un determinado momento el primer arduino el maestro y el segundo el esclavo y en otro determinado momento lo contrario.

Esa parte no me la sabía, tengo poco experimentando con el tema ¿tienes algún link para curiosear?

hectorx2x:
Como seria eso brot? ya que por serial lo tengo ocupado mandando otro dato

Eso no es problema, ya que cada dispositivo que conectes a I2C lo puedes leer con la dirección que incorporan. La ventaja es que para la comunicación entre arduinos tu puedes asignar una dirección simple como por ejemplo un solo dígito, así puedes interactuar con los dispositivos que quieras, sin afectar "lo que platiquen los dos arduinos"

Claro Aqui te dejo uno que vale la pena dedicarle unos cuantos minutos.

Comunicación por i2c entre arduinos

Y otro de la búsqueda que hice en google para que puedas ver las opciones que salen, algunos han expirementado el mismo problema que tú pero con diferentes sensores o fines para proyectos, en el foro hay antecedentes de esto, también puedes echarle un ojo si gustas.

Comunicacón entre arduinos por I2C