# Problem mit RTC - LCD

**URL:** <https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653>\
**Category:** Deutsch\
**Created:** [May 13, 2016, 12:39pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653 "2016-05-13T12:39:16Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 13, 2016, 12:39pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/1 "2016-05-13T12:39:16Z")

</div>

Ich möchte gerne versuchen, ein RTC-Modul (DS3231) zu verwenden und die Zeit auf einem LCD auszugeben. Ich verwende den Beispielcode aus der Library (ReadTest) und wollte ihn um das LCD erweitern. Das funktioniert aber nicht. Es wird nicht mal das Display gelöscht, obwohl ich im Setup lcd.clear(); eingetragen habe. Wenn ich bei einer Zeile, z.B.: lcd.print(tmHour); eingebe lcd.print("Test"); dann wird mir der Text auch ausgegeben, das LCD funktioniert also grundsätzlich. Was mache ich hier falsch?

Irgendwo habe ich gelesen, dass die Library des 1307 auch für den 3231 passen soll (edit: hier [DS1307RTC Library, For Accessing Real Time Clock (RTC) Chips](http://www.pjrc.com/teensy/td_libs_DS1307RTC.html)). Am seriellen Monitor wird jedenfalls alles so ausgegeben, wie es soll.

```cpp
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
 
    // set up the LCD's number of columns and rows: 
  lcd.begin(20, 4);
  lcd.clear();
}

void loop() {
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();

  
  lcd.setCursor(0, 0);
  lcd.print(tm.Hour);
  lcd.setCursor(2, 1);
  lcd.print(tm.Minute);
  lcd.setCursor(4, 2);
  lcd.print(tm.Second);
  lcd.setCursor(8, 3);
  lcd.print(tmYearToCalendar(tm.Year));
  
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

```

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 1:07pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/2 "2016-05-13T13:07:09Z")

</div>

Ich kenne die Library nicht und bin auch nicht sicher, ob die für das DS3231 geeignet ist.

Woher weißt du, das das LCD nicht gelöscht wird?

Warum nimmst du nicht eine passende Library?

Hier findest du dir richtige [Library](https://github.com/JChristensen/DS3232RTC)und auch entsprechende Beispiele.

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 13, 2016, 1:18pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/3 "2016-05-13T13:18:30Z")

</div>

Ich habe diese Library verwendet, weil dabei steht (siehe mein link), dass sie auch für den DS3231 geeignet ist und weil die beiden Beispielcodes für mich gepasst hatten. Mit dem seriellen Monitor funktioniert auch alles, nur das LCD nicht.

Ich nehme an, dass das LCD nicht gelöscht wird, weil noch immer in jeder Zeile das steht, was ich vorher bei einem Test des LCDs (es ist mein erster vierzeiliger Versuch gewesen) dorthin geschrieben habe. Ich habe auch die Library des DS3232RTC, wie in deinem Link, ausprobiert, da fehlt mir dann aber wieder die Library Streaming.h, um das Beispiel auszuprobieren. Ich werde mit den ganzen Libraries noch wahnsinnig....

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 1:28pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/4 "2016-05-13T13:28:58Z")

</div>

Ok, das mit deiner Lib habe ich überlesen.

Wird das LCD auch nicht gelöscht, wenn du den Arduino Spannungslos machst?

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 13, 2016, 1:31pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/5 "2016-05-13T13:31:18Z")

</div>

Nein, sobald ich USB wieder anstecke, ist die Schrift auch wieder da.  
Wenn ich in die Zeilen etwas direkt per Textstring eingebe, funktioniert dies.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 1:35pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/6 "2016-05-13T13:35:02Z")

</div>

> buffalo64:  
> Nein, sobald ich USB wieder anstecke, ist die Schrift auch wieder da.  
> Wenn ich in die Zeilen etwas direkt per Textstring eingebe, funktioniert dies.

Das ist merkwürdig.  
Was ist das für ein LCD?

Ich kenne das nur, das danach die Schrift auch weg ist.

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 13, 2016, 1:37pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/7 "2016-05-13T13:37:05Z")

</div>

Es heißt WM-C2004M, wo ich es herhabe, weiß ich leider nicht mehr.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 1:50pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/8 "2016-05-13T13:50:48Z")

</div>

> buffalo64:  
> Es heißt WM-C2004M, wo ich es herhabe, weiß ich leider nicht mehr.

Das ist wohl kompatibel (HD44780 Chip) zu den sonnst eingesetzten LCD, verhält sich aber merkwürdig.  
Dann wird auch nach einem Reset die Schrift nicht gelöscht?

Ich vermute da einen Hardware-Fehler.

---

<div class="post-metadata">

**Author:** ![Rabenauge](https://avatars.discourse-cdn.com/v4/letter/r/5daacb/32.png) [@Rabenauge](https://forum.arduino.cc/u/Rabenauge)\
**Post date:** [May 13, 2016, 1:53pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/9 "2016-05-13T13:53:32Z")

</div>

Wenn das Teil wunschgemäss Dinge ausgibt (was es ja grundsätzlich tut) ist die Hardware auch okay....

Das ist ein 20x4.  
Sicher, dass das mit der LiquidCrystal überhaupt richtig arbeitet?

Teste das, indem du deinen Text (irgendwas) mal in _jeder_ Zeile zu positionieren versuchst und schau auch, ob das an den richtigen Positionen erscheint.  
Ich hab so ein Ding nur mit I2C, kann daher nicht probieren, ob es so laufen würde.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 2:01pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/10 "2016-05-13T14:01:47Z")

</div>

> Rabenauge:  
> Das ist ein 20x4.  
> Sicher, dass das mit der LiquidCrystal überhaupt richtig arbeitet?

Da es HD44780-kompatibel "sein soll", ist das schon richtig

> Teste das, indem du deinen Text (irgendwas) mal in _jeder_ Zeile zu positionieren versuchst und schau auch, ob das an den richtigen Positionen erscheint.

Das wurde ja von dem TO getestet, wie ich es verstanden habe.  
Aber dieser Text bleibt immer im Display. 😲 Wohl auch nach einem Reset.

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 13, 2016, 4:58pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/11 "2016-05-13T16:58:38Z")

</div>

Ja, ich habe den Text richtig positionieren können. Ich hatte ganz einfach "Zeile 1" auf 0,0, "Zeile 2" auf 2,1 usw. geschrieben und es wurde auch richtig versetzt ausgegeben.

Ich verstehe nur nicht, warum 1. das Display bei clear nicht gelöscht wird und 2. die Zeit nicht angezeigt wird.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 13, 2016, 6:07pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/12 "2016-05-13T18:07:49Z")

</div>

> buffalo64:  
> Ja, ich habe den Text richtig positionieren können. Ich hatte ganz einfach "Zeile 1" auf 0,0, "Zeile 2" auf 2,1 usw. geschrieben und es wurde auch richtig versetzt ausgegeben.
> 
> Ich verstehe nur nicht, warum 1. das Display bei clear nicht gelöscht wird und 2. die Zeit nicht angezeigt wird.

Kannst du denn den erstellten Text nach einem delay mit neuem Text überschreiben?

---

<div class="post-metadata">

**Author:** ![uwefed](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uwefed/32/213736_2.png) [@uwefed](https://forum.arduino.cc/u/uwefed)\
**Post date:** [May 13, 2016, 7:01pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/13 "2016-05-13T19:01:18Z")

</div>

Versuch mal zwischen lcd.begin(20, 4); und lcd.clear(); ein delay(10) von 10mS.  
Die Initialisation braucht ca 5mS. Es gibt ein Bit, mit dem der Kontroller mitteilt, ob er beschäftigt ist oder mit der letzten Befehl fertig ist, da man aber bei Arduino Pins spart und das Display nur schreibt aber nicht liest (R/W auf Masse) kann dieses Bit nicht ausgewertet werden.  
Darum ist es besser zu warten.

Grüße Uwe

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 14, 2016, 6:38am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/14 "2016-05-14T06:38:09Z")

</div>

Ok, danke, werde ich versuchen.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 14, 2016, 10:46am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/15 "2016-05-14T10:46:09Z")

</div>

Hast du auch versucht, bestehenden Text nach einem delay(2000) direkt wieder zu überschreiben?

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 18, 2016, 5:35am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/16 "2016-05-18T05:35:46Z")

</div>

So, einen kleinen Schritt bin ich weiter, ich weiß jetzt zumindest, WO mein Problem liegt:

Nachdem das LCD mit dem LCD-Beispielprogramm alleine funktioniert, hatte ich einfach den Beispielcode des LCD in den RTC-Code kopiert, kein Erfolg, Ausgabe war nur Mist.  
Ich hatte daraufhin nur die 3 zusätzlichen Libraries als Gegenprobe in den LCD-Code kopiert, worauf dieser ebenfalls nicht mehr funktionierte (das LCD gab plötzlich verrückte Zeichen aus.

Nachdem ich dann die Libraries einzeln auskommentiert hatte, zeigte sich, dass die DS1307RTC das Problem mit dem LCD verursacht. Nur beim Test-Code, ohne LCD mit Ausgabe am seriellen Monitor, funktioniert sie jedoch problemlos.

Ich als Anfänger finde in der Library jedoch nichts, was auf einen Fehler hindeutet. Habt ihr weitere Vorschläge für mich?

```cpp
/*
 * DS1307RTC.h - library for DS1307 RTC
 * This library is intended to be uses with Arduino Time library functions
 */

#ifndef DS1307RTC_h
#define DS1307RTC_h

#include <TimeLib.h>

// library interface description
class DS1307RTC
{
  // user-accessible "public" interface
  public:
    DS1307RTC();
    static time_t get();
    static bool set(time_t t);
    static bool read(tmElements_t &tm);
    static bool write(tmElements_t &tm);
    static bool chipPresent() { return exists; }
    static unsigned char isRunning();
    static void setCalibration(char calValue);
    static char getCalibration();

  private:
    static bool exists;
    static uint8_t dec2bcd(uint8_t num);
    static uint8_t bcd2dec(uint8_t num);
};

#ifdef RTC
#undef RTC // workaround for Arduino Due, which defines "RTC"...
#endif

extern DS1307RTC RTC;

#endif

```

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 18, 2016, 6:18am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/17 "2016-05-18T06:18:30Z")

</div>

Und wird der Text weiterhin angezeigt, den du zuvor nicht löschen konntest?

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 18, 2016, 7:23am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/18 "2016-05-18T07:23:28Z")

</div>

Ja, zum Teil. Wenn ich in alle vier Zeilen was reinschreibe und dann wieder den RTC-Code hochlade:

Wenn ich nur das Setup mit delay und clear stehen lasse, bleibt der Text stehen, wie er ist.  
Wenn ich in die Zeilen die Uhrzeit schreiben möchte, bleibt er ebenfalls stehen und wird teilweise mit Blödsinn überschrieben.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 18, 2016, 3:09pm UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/19 "2016-05-18T15:09:47Z")

</div>

Dann ist es offensichtlich ein Problem der von dir verwendeten RTC-Library.

Du solltest den Aufbau des Sketches neu vornehmen und als erstes das LCD sauber zum Laufen bringen.  
Da gibt es doch in der Library ein Demo-Sketch der das Display schon im Setup beschreibt.

Hier kannst du doch Zeile für Zeile durchtesten und jeweils neu beschreiben.

Beispiel:

```cpp
#include <LiquidCrystal.h> 
 
// initialize the library with the numbers of the interface pins 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

void setup() {
   // set up the LCD's number of columns and rows: 
   lcd.begin(20, 4); 
   // Print a message to the LCD. 
   lcd.setCursor(0, 1);
   lcd.print("Zeile 1, mein Text!"); 
   lcd.setCursor(0, 2);
   lcd.print("Zeile 2, mein Text!"); 
   lcd.setCursor(0, 3);
   lcd.print("Zeile 3, mein Text!"); 
   lcd.setCursor(0, 4);
   lcd.print("Zeile 4, mein Text!"); 
}

```

Bei den einzelnen Tests nimmst du jeweils einen anderen Text.  
Sollte das so nicht funktionieren, kannst du es evtl. mit einer anderen LCD-Library versuchen.  
[LCD-Library](https://github.com/arduino/Arduino/tree/master/libraries)  
Dazu aber die vorhandene Library entfernen.

Wenn das funktioniert, kannst du die Erweiterung um die RTC vornehmen. Dazu nimmst du die Library, die ich im Post #1 verlinkt habe. Hier verwendest du die "TimeRCT.ino". Lass das mit der "DS1307RTC.h"!

Da kannst du in der Ausgabezeile direkt unter die "Serial-Ausgabe" die "lcd-Ausgabe" schreiben.

Beispiel:

```cpp
Serial.print(hour());
lcd.print(hour());

```

Das sollte so funktionieren. Genau so auch bei den anderen Ausgaben.

Natürlich muss der komplette RTC-Sketch zuvor eingebaut sein.  
Die vorhanden RTC-Library brauchst du erst mal nicht entfernen, da diese einen anderen Namen trägt.

Bei evtl. Problemen einfach wieder melden.

---

<div class="post-metadata">

**Author:** ![buffalo64](https://avatars.discourse-cdn.com/v4/letter/b/ec9cab/32.png) [@buffalo64](https://forum.arduino.cc/u/buffalo64)\
**Post date:** [May 19, 2016, 6:21am UTC](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653/20 "2016-05-19T06:21:23Z")

</div>

Danke.

Am LCD liegt es definitiv nicht. Jedesmal, wenn ich wieder verzweifle und einen LCD-Code zum Testen lade, funktioniert dieser problemlos.  
Ich habe die letzten Tage (gefühlt) alle Beispiele in Verbindung von RTC und LCD ausprobiert, die ich im Netz finden konnte, immer wurde mir Mist angezeigt.

Ich werde jetzt natürlich versuchen, nach deiner Anleitung Schritt für Schritt vorzugehen.

So, vor dem Antworten hat sich wieder das übliche Problem eingestellt:

Der LCD-Code funktioniert, sobald ich lediglich die neu heruntergeladene (und die IDE auch neu gestartet habe) Library DS3232RTC-master mittels #include einbinde, zeigt das Display nur mehr Mist an. Wie gesagt, nichts anderes gemacht, außer die Library eingebunden.

Wenn ich die Library auskommentiere und neu hochlade, funktioniert wieder alles so, wie es soll.

```cpp
#include <LiquidCrystal.h>
#include <DS3232RTC.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  
    lcd.begin(20, 4);

    lcd.print("Initialisierung");
    delay(1000);
    
}

void loop() {

  lcd.clear();
  delay(500);

  lcd.setCursor(0,0);
  lcd.print("Zeile 1.....");
  delay(500);

  lcd.setCursor(2,1);
  lcd.print("Zeile 2.....");
  delay(500);

  lcd.setCursor(4,2);
  lcd.print("Zeile 3.....");
  delay(500);

  lcd.setCursor(6,3);
  lcd.print("Zeile 4.....");
  delay(500);

}

```

[Next page](https://forum.arduino.cc/t/problem-mit-rtc-lcd/385653.md?page=2)
