Code bleibt stecken , Vermutung I2C Probleme?

Es geht um eine Temperaturregelung.

2 DS18B20 messen Temperatur und werden über OneWire ausgelesen.
Das LCD (20/4) zeigt die Temperaturen an. Der Arduino regelt je nach Temperaturen Relais.

Problem: Die Regelung fällt nach ca 1-2h immer wieder aus. (Display random Zeichen, Display aus, Display freeze). Code steht.

Immer zufällig im Code, leider keine explizite Stelle im Code.

Unsere Vermutung:

Display I2C Übertragung bekommt Probleme? (Wozu benötigt <LiquidCrystal_I2C.h> Wire.h?? → Nutze nur set.cursor, print, clear)

überläuft der RAM ?

Ohne das Programm zu sehen, und die genaue Hardware zu kennen- unmöglich zu sagen. Normal sehe ich bei dem Vorhaben nix, was enorm speicherhungrig wäre-wenn du keinen Murks programmiert hast.

Die wire.h ist die Bibliothek für I2C, wenn das Display ein I2C ist, gehts ohne die nicht (ausser, du machst die I2C-Kommunikation selber).

Ob der Speicher eng wird, kannst du der IDE beim programmieren schon grob entnehmen: da gibts beim Compilieren ne Warnung. Allerdings kann er auch so überlaufen! Das kannst du aber relativ easy rausfinden, wie, steht da: https://learn.adafruit.com/memories-of-an-arduino/measuring-free-memory Einfach ab und zu mal aufrufen, und auf die serielle Konsole schicken. Oder aufs Display...

Turbohobel:
Unsere Vermutung:

Display I2C Übertragung bekommt Probleme? (Wozu benötigt <LiquidCrystal_I2C.h> Wire.h?? → Nutze nur set.cursor, print, clear)

Wie kommst du da drauf ?

Wie lang sind die Kabel des I2C ?

Hast du Pullups für I2C drauf ?

Hast du Taster am Arduino ohne Pullups/Pulldown ?

Sketch zeigen, wurde ja schon geschrieben. Und den Aufbau und Schaltbild zeigen.

Relais, I2C und LCDs machen immer wieder Probleme. Relais sind da immer wieder eine gute Fehlerquelle

Meine Glaskugel sagt: Stack Überlauf Heap Fragmentierung Array Index Überlauf In die Wiese zeigende Pointer

Die I2C Vermutung dient nur dazu um uns und auch Turbohobel vom eigentlichen Problem abzulenken.

Dazu passt auch: Und da weder Schaltplan noch Code gezeigt werden gehe ich nicht davon aus, dass da ein echtes Interesse besteht, dass der Fehler gefunden wird. Zumindest jetzt noch nicht. Wir sind noch in der "Heulen und Zähne knirschen Phase"

Turbohobel: i2C Leitungen sind keine 20cm lang.

Das kann ohne Pullups schon zu lang sein, hängt sehr stark von der Umgebung ab.

Warum beantwortest du nicht alle Fragen ?

Gehe ich richtig in der Annahme, dass das eine Carnot Maschine ist?
Mit Heißgasabtauung?

Ich vermisse da eine klare Ablaufsteuerung!
In Form von klar ausformulierten Schrittketten/EndlichenAutomaten.
Aus meiner Sicht, müssen die ganzen delay() da weg!
ALLE!
Damit wird auch TimerOne überflüssig?!!

Siehe dazu (z.B.): Dieses

// Reihenfolge geändert
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_FRAM_SPI.h>
#include <OneWire.h>            // OneWire-Bibliothek einbinden DS18B20 (Bus)
#include <DallasTemperature.h>  // DS18B20-Bibliothek einbinden
#include <TimerOne.h>
Adafruit_FRAM_SPI fram = Adafruit_FRAM_SPI(FRAM_SCK, FRAM_MISO, FRAM_MOSI, FRAM_CS);

Warum nutzt du nicht Hardware SPI?

Dann scheinen da noch einige Dinge als Variablen definiert zu sein, was eigentlich Konstanten sind.

    while(StoerungKomp==1){

lcd.setCursor(6,1);
    lcd.print(“STOERUNG”);
    lcd.setCursor(0,2);
    lcd.print(“Kompressor Uebertemp”);
    lcd.setCursor(6,3);
    lcd.print(TempKondensator);
    lcd.setCursor(12,3);
    lcd.print(“C”);
    }

Eine Endlosschleife, welche nie verlassen wird.
Das Display ist quasi blind, es wird zu schnell und zu oft bedient.

So, sorry sehr viel Code.

Mache den Code doch bitte als Anhang rein... So ist mir das "zusammenklauben" zu mühselig und zu fehlerträchtig.

Ich sehe da 2 Interrupt Routinen, aber keine einzige Verriegelung. Mir fehlen da einige "volatile" und "atomic"

Turbohobel: So, sorry sehr viel Code.

Bin davon ausgegangen das auf dem LCD Board Pull-Ups mit drauf sind?! (Selbst wenn keine drauf sind wieso sollte denn immer nach 1-2h das Problem auftreten?)

Ich komme dadrauf , durch lesen im Netz.

Taster ohne Pull Ups sind nicht drauf.

Warum setzt du nicht den kompletten Sketch in Code-Tags, du bist so schön angefangen. Das Pullups drauf sind, da kann man nicht von ausgehen. Es gibt da unterschiedliche.

Ohne Pullups ist der Bus sehr empfindlich gegenüber Störungen von aussen.

Ja, jetzt ist es viel schöner zu lesen!

Was ist EAN?

Und warum schreibst du die Watt und Minuten, so komisch kompliziert ins Fram?