DS1307 RTC funktioniert nicht mit der Wetterbibliothek

Ich verwende die DS1307 RTC zusammen mit Arduino und dieser Bibliothek http://rweather.github.com/arduinolibs/classDS1307RTC.html

Wenn ich den Chip direkt von den 5V- und GND-Ausgängen meines Arduino UNO mit Strom versorge, funktioniert alles gut.

Wenn ich den Chip mit einem digitalen Pin mit auf HIGH gesetztem Ausgang für den Spannungseingang und/oder einem digitalen Pin mit auf LOW gesetztem Ausgang für GND versorge, kann die Bibliothek die Zeit nicht von der RTC lesen.

Genau diese Konfiguration funktioniert mit der von adafruit bereitgestellten Bibliothek http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code

Aber ich würde gerne die rweather-Bibliothek verwenden, weil sie mehr Funktionen bietet (wie einen einfacheren Zugriff auf den RAM und eine Alarm-Komfortfunktion), außerdem viel besser geschrieben und gut dokumentiert ist.

Der folgende Code funktioniert mit beiden Bibliotheken, schlägt jedoch nur mit der rweather-Bibliothek fehl, wenn 5V und GND nicht direkt verwendet werden. Wenn Sie mit 5 V beginnen und dann auf einen Ausgangspin umschalten, kann die Bibliothek die Uhrzeit lesen, sodass dies anscheinend mit einem Startproblem zusammenhängt.

#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() 
{

}
Setzen Sie die richtigen Pins? Wenn Sie das Board direkt in die Arduino-Header einstecken, benötigen Sie die Pins 3 und 2, nicht 6 und 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: Aber "Low" ist in diesem Fall keine 0-V-Referenz. Die Erdung des Geräts kann 0,3 V oder höher als die Platinenmasse sein, was zu Problemen führen kann.
@GustavoLitovsky, deshalb habe ich das Setup auch getestet, wobei der GND des RTC direkt mit dem GND des Arduino verbunden ist. Die Bibliothek funktioniert nur, wenn sowohl RTC 5V als auch GND direkt mit dem Arduino 5V und GND verbunden sind
@WillemD'haeseleer: Probieren Sie mehrere E / A-Pins zusammen aus, um mehr Strom zu erhalten, und vielleicht meinen Test, den ich unten beschrieben habe, um festzustellen, ob es sich nur um ein Startproblem handelt. Hast du Entkopplungskondensatoren eingebaut?
@WillemD'haeseleer: Da dies ein Hardwareproblem ist, wäre es außerdem schön zu sehen, was genau in den I2C-Leitungen vor sich geht. Ein Logikanalysator wäre gut, aber idealerweise hilft Ihnen ein Oszilloskop zu sehen, ob I2C-Kommunikation stattfindet und ob sie nur geringfügig funktioniert.
Messen Sie die Spannung zwischen dem Stromanschluss der RTC und dem Erdungsanschluss der RTC.
@GustavoLitovsky Der Spannungsabfall / Floating korreliert mit der Stromaufnahme. 1,5 mA verursachen keine nennenswerte Spannungsänderung am AVR-Pin-Ausgang.
@WillemD'haeseleer Basierend auf den Änderungen lautet Ihre Frage nicht, warum es überhaupt nicht funktioniert, sondern "Warum funktioniert es mit Bibliothek A und nicht mit Bibliothek B", richtig? Mit der Bibliothek von Ada können Sie die digitalen Ausgänge verwenden, um die Echtzeituhr mit Strom zu versorgen, aber nicht mit der von Rweather? Sie sollten die Frage bearbeiten, um dies mutiger widerzuspiegeln.
@Passerby, du hast Recht, ich habe meine Frage geändert

Antworten (2)

Ich denke, der Arduino-Pin kann nicht genug Strom für die RTC liefern. Versuchen Sie, einen Transistor zu verwenden, um die Leistung für die RTC zu steuern. Verwenden Sie npn one, verbinden Sie den Emitter mit + 5 V des Arduino, die Basis mit dem Arduino-Pin und den Kollektor mit + 5 V des RTC.

Die RTC verbraucht sehr, sehr wenig Strom und kann von den digitalen Pins mit Strom versorgt werden, es sei denn, sie ziehen viel Strom von anderen Pins. Sie können sogar einige LCDs (z. B. von Nokia) direkt von einem Mikrocontroller aus mit Strom versorgen. Die RTC benötigt beim aktiven Lesen nur 1,5 mA, weniger beim einfachen Halten der Zeit.
@Passerby Ich habe meine Frage mit mehr Informationen bearbeitet

Mein Verdacht ist, dass das Gerät einen höheren Spitzenstrom zieht, vielleicht beim Start, und dies der Grund für den Ausfall ist. Es gibt eine Möglichkeit, dies zu testen. Schließen Sie das Gerät einfach an VCC an und starten Sie es. Schließen Sie es dann an den I/O-Pin an, der Strom liefert, ohne dass die Stromschiene kratert. Sehen Sie, ob das funktioniert.

Eine andere Sache, die Sie versuchen sollten, ist, mehrere I/Os miteinander zu verbinden, um zu sehen, ob Ihnen das den zusätzlichen Strom ermöglicht, den es benötigt. Einige Entkopplungskondensatoren könnten erforderlich sein, um das Gerät zu stabilisieren.

[Bearbeiten:] Ich hatte ursprünglich nicht bemerkt, dass Sie auch den Boden von einem E / A-Pin aus führten. Dies ist nicht erforderlich, und wie gesagt, es wird die Massereferenz höher als die des Mikrocontrollers machen und möglicherweise eine marginale digitale Signalisierung verursachen, die Probleme verursachen wird.