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()
{
}
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.
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.
Passant
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!
Gustavo Litowski
Willem D’Haeseleer
Gustavo Litowski
Gustavo Litowski
gbarry
Passant
Passant
Willem D’Haeseleer