So, da bin ich wieder.
Das RTC Modul ist genau dieses hier: Arduino Projekte
Nur zur Info, ich nutze die Arduino Version 1.0.3!
Ich habe es auch genau wie dort auf der Zeichnung ist angeschlossen. Nur das ich die rechte Anschlussleiste ohne "BAT" und "SQ" nutze.
Warum ist dort DS gestrichelt? Ich habe das so verstanden, dass man das Kabel nicht notwendiger weise braucht, richtig?
So, nun zur Bibliothek und dem Sketch.
Die Bibliothek habe ich von Arduino Playground - Time
Sollte also die richtige sein. Dort habe ich auch nichts verändert.
/* TimeRTC Sketch: Ausgabe auf serieller Konsole & LC-Display
* Synchronisation mit Echtzeit-Uhr
* angeregt durch Arduino Cookbook von Michael Margolis
* http://www.buecher.de/shop/englische-buecher/arduino-cookbook/margolis-michael/products_products/detail/prod_id/28958618/(externer Link)
*
* fribbe fuer http://macherzin.net(externer Link)
*/
#include <LiquidCrystal.h> // binde LCd-Bibliothek ein
#include <Time.h> // binde Bibliothek Time ein
// Bibliothen fuer Echtzeituhr:
#include <Wire.h> // binde Wire-Bibliothek ein
#include <DS1307RTC.h> // binde Bibliothek fuer DS1307-RTC(Uhr) ein
// abhaengig von Beschaltung des LC-Displays, siehe http://macherzin.net/article38-Arduino-Ausgabe-LC-Display(externer Link)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialisieren Bibliothek und Interface-Pins
void setup()
{
Serial.begin(9600); // initialisieren serielle Kommunikation
setSyncProvider(RTC.get); // holen Zeit von RTC(Uhr)
// Nur zur Kontrolle:
if(timeStatus()!= timeSet) // wenn Status geaendert
{
Serial.println("Synchronisation fehlgeschlagen"); // bei Fehler
}
else // sonst ...
{
Serial.println("Synchronisation erfolgreich"); // alles ok
}
lcd.begin(16, 2); // Display hat 16 Zeichen x 2 Zeilen,
// Kontrolle Ende
Serial.println("macherzin.net: "); // nur so
lcd.print("macherzin.net: "); // nur so
}
void loop()
{
digitalUhrAnzeige(); // rufen Subroutine auf
delay(1000); // warten, weil unser Auge nicht so schnell ...
}
void digitalUhrAnzeige() // definieren Subroutine
{
// digitale Anzeige der Zeit
lcd.setCursor(0, 1); // positionieren LCD-Cursor, 1. Zeile, 1. Spalte
printZiffernGenulltOhnePunkt(hour()); // rufen Subroutine auf
printZiffernGenulltmitPunkt(minute()); // rufen Subroutine auf
printZiffernGenulltmitPunkt(second()); // rufen Subroutine auf
Serial.print(" "); // fuegen Freizeichen ein
lcd.print(" "); // fuegen Freizeichen ein
printZiffernGenulltOhnePunkt(day()); // rufen Subroutine auf
Serial.print(" "); // fuegen Freizeichen ein
lcd.print(" "); // fuegen Freizeichen ein
printZiffernGenulltOhnePunkt(month()); // rufen Subroutine auf
Serial.print(" "); // fuegen Freizeichen ein
Serial.println(year());; // Zeilenvorschub
// deaktiviert, kein Platz mehr auf 16er-Display:
// lcd.print(" ");
// printZiffernGenulltOhneSemikolon(year());
}
void printZiffernGenulltOhnePunkt(int zahl) // definieren Subroutine
{
// verschoenern Anzeige, indem wir ...
if(zahl < 10) // wenn kleiner als 10 ...
{
Serial.print(""); // fuehrende 0 einfuegen
lcd.print(""); // fuehrende 0 einfuegen
}
Serial.print(zahl); // Ausgabe auf serieller Konsole
lcd.print(zahl); // Ausgabe auf LCD
}
void printZiffernGenulltmitPunkt(int zahl) // definieren Subroutine
{
// verschoenern Anzeige, indem wir ...
Serial.print(":"); // trennende ":" einfuegen
lcd.print(":"); // trennende ":" einfuegen
if(zahl < 10) // wenn kleiner als 10 ...
{
Serial.print('0'); // fuehrende 0 einfuegen
lcd.print('0');
}
Serial.print(zahl); // Ausgabe auf serieller Konsole
lcd.print(zahl);
}
Dieses Sketch habe ich benutzt um die Uhrzeit ein Mal einzustellen. Dazu habe ich mir von http://www.epochconverter.com/ den Zeitstempel geholt und dann über die Konsole "T(Zeitstempel)" eingegeben.
Man sieht auch sofort das er die neue Zeit übernimmt. Ich habe danach mal das delay auf 10 Sekunden verlängert und es eine weile laufen lassen.
Exact nach 5 Minuten springt er zu einer anderen Zeit und einem anderen Datum (und das alle 5 M.).
Ich habe nun auch mal das von Cetax verwendete Sketch nutzen wollen, doch dann erscheint eine Fehlermeldung.
RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08 (wird Orange markiert)
Und darunter steht RTC was not declared in this scope
Anfangs dachte ich, es liegt evtl. an der Batterie. Das kann ich aber ausschließen, da ich sie nachgemessen habe.
Für die Übersicht in diesem Thread werde ich einen neuen erstellen, der sich mit der SD-Karte befasst.