Ich habe eine RS485 Kommunikation zwischen zwei Arduino Uno's, die Kommunikation Funktionierte bis anhin Perfekt und ohne Unterbrüche.
Nun wollte ich als "nice to have" ein 20x4 LCD Screen an den Empfänger hängen.
Nun habe ich das Problem, das sich der Arduino manchmal aufhängt (Displaybeleuchtung löscht aus, werte werden nicht mehr verändert, sind aber noch sichtbar)
Das Display muss schnell viele Informationen Anzeigen was ich wie Folgt löse:
Ich behaupte mal, das ist viel zu schnell
hintereinander. Wie hast du das Display angeschlossen? I2C ?
Wie lang sind die Leitungen? was könnte in der
Nähe elektromagnetisch stören ?
Das Display ist über I2C angeschlossen, es sind die langen Standart Jumper-Kabel (ca. 20cm)
Können zu lange kabel dazu führen dass sich der arduino aufhängt?
Die Länge von 20 cm ist noch unkritisch, wenn du Pullup-Widerstände (4,7 k gegen +5Volt) verbaut hast und keine großen Störquellen in der Nähe hast.
Wackelkontakte am Steckkontakt sind auch sehr kritisch.
Hallo,
für mich sieht das aus, als wenn es einfach zum Speicher/ZeilenÜberlauf im Display kommt.
Es wird doch alles hintereinander geschrieben.
Gruß und Spaß
Andreas
Empfehle ich auch. Ohne das F-Makro werden die Textinhalte ins Ram kopiert. Dort kommt es bei umfangreichen Projekten leicht zu Speicherüberläufen, die zu seltsamen, schlecht nachvollziehbaren Abstürzen und Fehlfunktionen führen. Leider fehlt der komplette Sketch um mehr sagen zu können.
Was wird nach dem Compilieren des Sketch als Speicherauslastung angezeigt?
einen Fehler :s
array must be initialized with a brace-enclosed initializer :s
Deklaration:
int lcd_not_aus_1=0;
int lcd_not_aus_2=0;
int lcd_kontaktliste=0;
int lcd_ueberlast=0;
int lcd_schlaffseil=0;
int lcd_links=0;
int lcd_kontaktliste_oben=0;
int lcd_schnell_bne=0;
int lcd_schnell_last=0;
int lcd_alarm =0;
int lcd_hacken=0;
int lcd_befehl = 0;
int lcd_sonderbetrieb=0;
int lcd_vakum =0;
int lcd_button_p =0;
schnibli:
Hmm kann ich sonst noch irgendwie den Arduino entlasten mit dem Display?
Bestimmt. Du zeigst ja nur den Tropfen, der das Fass bzw den Speicher zum überlaufen bringt. Außer F-Macro kann man da nicht viel machen.
Im restlichen Programm sind bestimmt auch noch einige Optimierungen möglich. Da du es geheim hältst, können wir dir da keine Hinweise geben.
Und auch ist noch interessant, wie hoch dein Speicherverbrauch (Ram) nach der Kompilierung ist.
Daraus kann man auch erkennen, ob das schon an der Grenze ist.
Das F-Makro kannst du sicher auch bei der RS485-Übertragung anwenden.
Frage:
Wie hast du es herausgefunden, dass es tatsächlich am Speicherüberlauf liegt ?