DS1307 RTC no funciona con la biblioteca rweather

Estoy usando el DS1307 RTC junto con arduino y esta biblioteca http://rweather.github.com/arduinolibs/classDS1307RTC.html

Cuando enciendo el chip directamente desde las salidas de 5V y GND de mi arduino UNO, todo funciona bien.

Cuando enciendo el chip usando un pin digital con salida configurada en ALTO para entrada de voltaje y/o un pin digital con salida configurada en BAJO para GND, la biblioteca no puede leer la hora del RTC.

Esta misma configuración exacta funciona con la biblioteca proporcionada por adafruit http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code

Pero me gustaría usar la biblioteca rweather porque proporciona más funciones (como un acceso más fácil a la memoria RAM y una función de conveniencia de alarma), también está mucho mejor escrita y bien documentada.

El siguiente código funciona con ambas bibliotecas, pero solo falla con la biblioteca rweather cuando no se usan 5V y GND directamente. Al comenzar con 5V y luego cambiar a un pin de salida, la biblioteca puede leer la hora, por lo que parece que esto está relacionado con algún tipo de problema de inicio.

#include <Wire.h>
#include <RTC.h>
#include <SoftI2C.h>
#include <DS1307RTC.h>

void setup() 
{
    pinMode(7, OUTPUT);
    pinMode(6, OUTPUT);
    // provide power for the RTC module
    Serial.begin(9600);
    Serial.print("Setting output\n");
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    Serial.print("output Set\n");
    delay(2000);
    Serial.print("delay over\n");

    SoftI2C bus(5, 4);
    DS1307RTC controller(bus, 3);

    Serial.print(controller.isRealTime() ? "controller is realtime" : "controller is simulating");
    Serial.println();

    RTCTime theTime;
    controller.readTime(&theTime);

    Serial.print("startup time");
    Serial.println();
    Serial.print(theTime.hour);
    Serial.print(":");
    Serial.print(theTime.minute);
    Serial.print(":");
    Serial.print(theTime.second);
}

void loop() 
{

}
¿Estás colocando los pines correctos? Si está conectando la placa directamente en los encabezados de arduino, necesita los pines 3 y 2, no 6 y 7.If you set analog pin 3 (digital 17) to an OUTPUT and HIGH and analog pin 2 (digital 16) to an OUTPUT and LOW you can power the RTC directly from the pins!
@Passerby: Pero "Bajo" no es una referencia de 0V en este caso. La conexión a tierra del dispositivo puede ser de 0,3 V o superior a la conexión a tierra de la placa, y esto podría causar problemas.
@GustavoLitovsky es por eso que también probé la configuración con GND de RTC conectado directamente a GND de arduino, la biblioteca solo funciona cuando se conecta RTC 5V y GND a arduino 5V y GND directamente
@WillemD'haeseleer: pruebe varios pines de E/S juntos para obtener más corriente, y tal vez mi prueba que describí a continuación para ver si es solo un problema de inicio. ¿Has añadido condensadores de desacoplamiento?
@WillemD'haeseleer: Además, dado que se trata de un problema de hardware, sería bueno ver qué sucede exactamente en las líneas I2C. Un analizador lógico sería bueno, pero idealmente un osciloscopio lo ayudaría a ver si las comunicaciones I2C están ocurriendo y si funcionan marginalmente.
Mida el voltaje entre el pin de alimentación del RTC y el pin de tierra del RTC.
@GustavoLitovsky, la caída/flotación de voltaje se correlaciona con el consumo de corriente. 1.5mA no causará ningún cambio de voltaje apreciable en la salida del pin AVR.
@WillemD'haeseleer según las ediciones, su pregunta no es por qué no funciona en absoluto, sino "¿Por qué funciona con la Biblioteca A y no con la Biblioteca B", correcto? Con la biblioteca de Ada, puede usar las salidas digitales para alimentar el rtc, pero no con la de Rweather. Debe editar la pregunta para reflejar eso con más audacia.
@Passerby, tienes razón, he modificado mi pregunta

Respuestas (2)

Supongo que el pin arduino no puede generar suficiente corriente para el RTC. Intente usar un transistor para controlar la potencia del RTC. Use npn one, conecte el emisor a +5V del arduino, la base al pin de arduino y el colector a +5V del RTC.

El RTC usa una corriente muy, muy baja y puede ser alimentado por los pines digitales, a menos que tengan mucho consumo de corriente en otros pines. Incluso puede alimentar algunos LCD (nokia, por ejemplo) directamente desde un microcontrolador. El RTC solo necesita 1,5 mA, durante las lecturas activas, menos cuando simplemente lleva el tiempo.
@Passerby he editado mi pregunta con más información

Mi sospecha es que el dispositivo está consumiendo una corriente máxima más alta, tal vez al inicio, y esta es la razón de la falla. Hay una manera de probar esto. Simplemente conecte el dispositivo a VCC y enciéndalo. Luego, conéctelo al pin de E/S que proporciona energía, sin permitir que se rompa el riel de alimentación. A ver si eso funciona.

Otra cosa que debe intentar es conectar varias E/S juntas para intentar ver si eso puede permitirle la corriente adicional que necesita. Es posible que se necesiten algunos condensadores de desacoplamiento para estabilizar el dispositivo.

[Editar:] Originalmente no me había dado cuenta de que también estabas ejecutando el suelo desde un pin de E/S. Esto no es necesario y, como dije, hará que la referencia a tierra sea más alta que la del microcontrolador, y tal vez cause una señalización digital marginal que cause problemas.