ich habe die realtimeclock ds3232,
leider bekomme ich die nicht ans laufen bzw die uhrzeit nicht gestellt.
ich habs über setserial mit der eingabe year,month,day,hour,minute,second, über den serialmonitor versucht. angezeigt wird aber leider 00:27:36 31.12.2095
magictrips:
ich habe die realtimeclock ds3232,
leider bekomme ich die nicht ans laufen bzw die uhrzeit nicht gestellt.
Woran scheitert es denn?
magictrips:
ich habs über setserial mit der eingabe year,month,day,hour,minute,second, über den serialmonitor versucht. angezeigt wird aber leider 00:27:36 31.12.2095
Tatsächlich über den seriellen Monitor gesendet hast Du aber hoffentlich schon so etwas wie:
2015,4,21,8,35,0,
Oder?
Ich habe mal kurz in das Datenblatt der DS3231 geschaut: Der Chip scheint ja dasselbe Interface (I2C), dieselbe Busadresse (0x68) und rein in Bezug auf die Uhrzeit auch dieselben Registeradressen wie die DS1307 und die DS3231 zu verwenden. Dann sollten doch auch andere Libraries funktionieren, die einfach nur die einfachen Zeitfunktionen ansteuern.
Vor wenigen Tagen habe ich in diesem Beitrag einen Beispielsketch im Dateianhang gepostet, bei dem keine speziellen Libraries verwendet werden müssen und nur die reine Uhrenfunktion der Maxim Uhrenchips über RTC angesteuert werden. Ich sehe jetzt nicht, warum der Sketch nicht auch mit der DS3232 funktionieren sollte. Einfach den in der ZIP-Datei enthaltenen Ordner im Arduino-Sketchordner entpacken, keine zusätzliche Installation von Libraries notwendig. Kannst Du ja ggf. mal ausprobieren, wenn Du mit der setserial-Funktion der von Dir derzeit verwendeten Library überhaupt nicht klarkommst.
magictrips:
also wenn ich den sketch von der seite verwende bekomme ich über den seriellen monitor folgende ausgabe:
Scanning...
I2C device found at address 0x57 !
I2C device found at address 0x68 !
done
OK, also die Uhr is richtig angeschlossen und sie funktioniert insoweit, dass sie auf I2C-Requests reagiert.
Gerade nochmal ins Datenblatt geschaut, die DS3232 scheint zwei zusätzliche Control- und Statusregister zu haben, die den richtigen Inhalt haben müssen, damit die Uhr läuft. Ich habe mal versucht, einen Diagnosesketch zu machen.
Teste mal die Ausgabe auf Serial mit diesem Code:
#include <Wire.h> // include Wire library for I2C devices
#define RTC_I2C_ADDRESS 0x68 // // I2C adress of DS1307 and DS3231 RTC
void setup() {
Serial.begin(9600);
Wire.begin();
delay(10); // small delay to stabilize I2C bus voltage
Wire.beginTransmission(RTC_I2C_ADDRESS);
Wire.write(0);
if (Wire.endTransmission()==0) Serial.println("RTC OK");
else Serial.println("RTC ERROR");
Serial.println("Contents of Special-Purpose Registers:");
Wire.beginTransmission(RTC_I2C_ADDRESS);
Wire.write(0xE);
Wire.endTransmission();
Wire.requestFrom(RTC_I2C_ADDRESS, 2);
byte Reg0xE=Wire.read();
byte Reg0xF=Wire.read();
Serial.print("Register 0xE: ");
for (int i=7;i>=0;i--) Serial.print(bitRead(Reg0xE,i));
Serial.println();
Serial.print("Register 0xF: ");
for (int i=7;i>=0;i--) Serial.print(bitRead(Reg0xF,i));
Serial.println();
}
void loop() {
}
Eventuell kann man am Zustand der Register etwas sehen, dass vielleicht das "Oscillator Stop Flag" immer noch gesetzt ist, obwohl es Deine DS3232-Library eigentlich löschen sollte.
Nein, das gefällt mir überhaupt nicht, wenn bei der binären Darstellung von 8 Bits eine unterschiedliche Stellenanzahl dargestellt wird, je nachdem, wieviele führende Nullen bei der Ausgabe unterdrückt werden.
8 Bits = 8 Stellen in der Anzeige, das gefällt mir!
wenn Du wissen möchtest was jurs gemacht hat, schau bitte in das Datenblatt http://datasheets.maximintegrated.com/en/ds/DS3232.pdf
auf Seite 11, hier siehst Du das jurs die Register 0x0E und 0x0F ausgelesen hat und dessen Bedeutung der Bits.
Dein OSF Flag ist gelöscht. Kannst Du denn im Sekunden Takt eine Zeit auslesen mit laufender Sekunde?
Wenn das auch nicht klappt, stimmt die Spannungsversorgung?
Ist die RTC Batterie gepuffert oder hast Du den nackten IC?
magictrips:
ich hab zwar keine ahnung, was das bedeutet, aber das is bei rausgekommen:
RTC OK
Contents of Special-Purpose Registers:
Register 0xE: 00011100
Register 0xF: 00001000
Was die Registerinhalte bedeuten, steht im Datenblatt des DS3232 drin.
Soweit ich das sehe, sollte alles OK sein: Die Register befinden sich weitgehend in dem Zustand, den sie nach einem Power-On Reset haben sollten und der Oscillator sollte auch schwingen.
Vielleicht kannst Du diese Sketch mit etwas Inhalt in der loop()-Funktion laufen lassen:
#include <Wire.h> // include Wire library for I2C devices
#define RTC_I2C_ADDRESS 0x68 // // I2C adress of DS1307 and DS3231 RTC
void setup() {
Serial.begin(9600);
Wire.begin();
delay(10); // small delay to stabilize I2C bus voltage
Wire.beginTransmission(RTC_I2C_ADDRESS);
Wire.write(0);
if (Wire.endTransmission()==0) Serial.println("RTC OK");
else Serial.println("RTC ERROR");
Serial.println("Contents of Special-Purpose Registers:");
Wire.beginTransmission(RTC_I2C_ADDRESS);
Wire.write(0xE);
Wire.endTransmission();
Wire.requestFrom(RTC_I2C_ADDRESS, 2);
// A few of these need masks because certain bits are control bits
byte Reg0xE=Wire.read();
byte Reg0xF=Wire.read();
Serial.print("Register 0xE: ");
for (int i=7;i>=0;i--) Serial.print(bitRead(Reg0xE,i));
Serial.println();
Serial.print("Register 0xF: ");
for (int i=7;i>=0;i--) Serial.print(bitRead(Reg0xF,i));
Serial.println();
}
void loop() {
Wire.beginTransmission(RTC_I2C_ADDRESS);
Wire.write(0x0);
Wire.endTransmission();
Wire.requestFrom(RTC_I2C_ADDRESS, 1);
byte second=Wire.read();
for (int i=7;i>=0;i--) Serial.print(bitRead(second,i));
Serial.println();
delay(1000);
}
Dabei wird nur der Sekundenzähler ausgelesen und einmal pro Sekunde als BCD Binärwert aktualisiert.
Wenn die Sekunden laufen, sollten sich zwei aufeinanderfolgende Zeilen immer etwas unterscheiden.
Was gibt der Sketch bei Dir aus? Immer dasselbe? Oder in jeder Zeile was anderes?
die uhr hat mit 1-2 sketch funktioniert, also die sekuden wurden hochgezählt usw
aber die uhrzeit, datum usw waren falsch...und ich konnte sie mit deinem und dem anderen sketch nicht stellen.....
dann vermute ich entweder immer noch einen Schreibfehler oder wenn Du die IDE nutzt zur Eingabe, dann steht unten rechts nicht "sowohl NL als auch CR" vor der Baudrate. Wenn das fehlt, fehlt dem Befehl der Abschluss oder so ähnlich.
RTC OK
Contents of Special-Purpose Registers:
Register 0xE: 00011100
Register 0xF: 00001000
00000011
00000100
00000101
00000110
00000111
00001000
Also alles bestens.
magictrips:
vielleicht hab ich mich auch falsch ausgedrückt ?
die uhr hat mit 1-2 sketch funktioniert, also die sekuden wurden hochgezählt usw
aber die uhrzeit, datum usw waren falsch...und ich konnte sie mit deinem und dem anderen sketch nicht stellen.....
Wahrscheinlich. Dass die Zeit läuft und hochzählt, habe ich jetzt eben zum ersten mal gelesen.
Wenn Du "nur" die Uhr nicht stellen kannst, kommt hauptsächlich ein Bedienungsfehler in Frage.
Schau mal in Deinem Seriellen Monitor nach rechts unten und dort links neben der Baudrate, was steht da als zu sendendes Zeilenende:
Kein Zeilenende
Neue Zeile (NL)
Zeilenumbruch (CR)
Sowohl NL als auch CR
Stelle das mal auf "Sowohl NL als auch CR" und teste die Zeiteinstellung nochmal!