Advertisement
Makerino

RTC einstellen

Mar 27th, 2019
891
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. //zeit einfach im setup einstellen
  2.  
  3. #include "Wire.h"
  4. #define DS3231_ADDRESSE 0x68
  5.  
  6. void setup() {
  7.   Wire.begin();
  8.   Serial.begin(9800);
  9.   // aktuelle Zeit     sek min std wt tag mon jahr      (wt heißt Werktag)
  10.   einstellenDS3231zeit(00, 19, 13, 7, 10,  03,  19);
  11. }
  12. void loop() {
  13.   zeigeZeit(); // Zeit ausgeben
  14.   delay(1000); // jede Sekunde
  15. }
  16. void einstellenDS3231zeit(byte sekunde, byte minute, byte stunde, byte wochentag, byte tag, byte monat, byte jahr) {
  17.   // Datum und Uhrzeit einstellen
  18.   Wire.beginTransmission(DS3231_ADDRESSE);
  19.   Wire.write(0);
  20.   Wire.write(decToBcd(sekunde)); // Sekunden einstellen
  21.   Wire.write(decToBcd(minute)); // Minuten einstellen
  22.   Wire.write(decToBcd(stunde));
  23.   Wire.write(decToBcd(wochentag)); // 1=Sonntag ... 7=Samstag
  24.   Wire.write(decToBcd(tag));
  25.   Wire.write(decToBcd(monat));
  26.   Wire.write(decToBcd(jahr)); // 0...99
  27.   Wire.endTransmission();
  28. }
  29. void leseDS3231zeit(byte *sekunde, byte *minute,byte *stunde, byte *wochentag, byte *tag, byte *monat, byte *jahr) {
  30.   Wire.beginTransmission(DS3231_ADDRESSE);
  31.   Wire.write(0); // DS3231 Register zu 00h
  32.   Wire.endTransmission();
  33.   Wire.requestFrom(DS3231_ADDRESSE, 7); // 7 Byte Daten vom DS3231 holen
  34.   *sekunde = bcdToDec(Wire.read() & 0x7f);
  35.   *minute = bcdToDec(Wire.read());
  36.   *stunde = bcdToDec(Wire.read() & 0x3f);
  37.   *wochentag = bcdToDec(Wire.read());
  38.   *tag = bcdToDec(Wire.read());
  39.   *monat = bcdToDec(Wire.read());
  40.   *jahr = bcdToDec(Wire.read());
  41. }
  42. void zeigeZeit(){
  43. byte sekunde, minute, stunde, wochentag, tag, monat, jahr;
  44.   leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr);   // Daten vom DS3231 holen
  45.   if (tag < 10) { Serial.print("0");}
  46.   Serial.print(tag); // ausgeben T.M.J H:M:S
  47.   Serial.print(":");
  48.   if (monat < 10) { Serial.print("0");}
  49.   Serial.print(monat);
  50.   Serial.print(":20");
  51.   Serial.print(jahr);
  52.   Serial.print(" ");
  53.   if (stunde < 10) { Serial.print("0");}
  54.   Serial.print(stunde, DEC); // byte in Dezimal zur Ausgabe
  55.   Serial.print(":");
  56.   if (minute < 10) { Serial.print("0");}
  57.   Serial.print(minute, DEC);
  58.   Serial.print(":");
  59.   if (sekunde < 10) { Serial.print("0"); }
  60.   Serial.println(sekunde, DEC);
  61. }
  62. byte decToBcd(byte val) {
  63. // Dezimal Zahl zu binary coded decimal (BCD) umwandeln
  64.   return((val/10*16) + (val%10));
  65. }
  66. byte bcdToDec(byte val) {
  67. // BCD (binary coded decimal) in Dezimal Zahl umwandeln
  68.   return((val/16*10) + (val%16));
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement