Go Down

Topic: Arduino rebooten bei verwendung der LiquidCrystal_I2C (Read 647 times) previous topic - next topic

acidcool

Moin,

wenn ich in dem angefuegten Sketch die Libarary korrekt "vorbereite"
Code: [Select]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,20,4);         // LCD-Display instanziieren

und  in setup()

Code: [Select]

// LCD-Display Initialisieren
lcd.init();         // LCD-Display initialisieren
lcd.clear();        // LCD loeschen
lcd.backlight();    // Hintergrundbeleuchtung einschalten

lcd.setCursor(0, 0);// In die 1. Zeile wechseln
lcd.print("Systemstart");

einfuege macht der Arduino an unterschieldlichen stellen (meisten bei der abarbeitung von "Daten_senden") einen reboot.

Kann mir das leider nicht erklaeren, kann das evtl. jemand hier?


uwefed

Könnte sein, daß die Hintergrundbeleuchtung zuviel Strom zieht und deshalb die Sicherung auslöst.
Passiert es Dir wenn Du den Arduino über USB versorgst und auch über ein externes Netzteil?
Es könnte auch ein Problem mit dem RAM sein obwohl Du fleißig F() verwendest.
Versuch den Sketch auf einem Arduino MEGA.
Grüße Uwe

Rickor

ich hab ein DFRobot Mega 1280 und auch ein I2C Display dran. Ich steuere damit eine Eisenbahnanlage und seit kurzem gibt es an unterschiedlichen Stellen auch immer wieder ein plötzliches reboot. Ich habe schon Netzteil, Relais und anderes getauscht nur noch nicht das Board. Ich werde die Library mal entfernen und wieder testen. Netzteil fällt als Ursache somit erstmal raus.

Rickor

könnte dies das Problem sein?

„Notes for users with a Pollin.de interface board
http://www.pollin.de/shop/dt/NDU4OTgxOTk-/Bausaetze_Module/Bausaetze/LCD_I2C_Modul.html


They have also chosen two rather high pull-up resistors (10K) for the I2C lines. Usually two 4K7 resistors should do the job.
Please note that on a I2C bus only one device should have the pull-up resistors installed!

I hope this helps in getting your LCD working."

uwefed

Ein zu hoher Pullup-Widerstand am I2C Bus bei zu langer Leitung oder zuvielen Devices macht, daß nach einem LOW die Spannung nicht schnell genug auf HIGH für ein nachfolgendes HIGH ist. Anstatt L-H wir L-L übertragen. Der I2C - Bus funktioniert nicht. Er resetiert aber nicht den Arduino.
Grüße Uwe

jurs

#5
Sep 07, 2013, 11:41 pm Last Edit: Sep 07, 2013, 11:50 pm by jurs Reason: 1

Kann mir das leider nicht erklaeren, kann das evtl. jemand hier?


Das ist vollkommen normal für Sketche, die mehr RAM verbrauchen als der Controller an RAM eingebaut hat.

Wenn Du einen Controller mit kleinem RAM verwendest (z.B. "UNO") könntest Du auf einen Controller mit größerem RAM ("MEGA") wechseln.

Und ansonsten wird es Zeit, ein bisschen was zu lernen, wie man möglichst viele Funktionen programmiert, die nur ganz wenig RAM-Speicher brauchen. Das Sparen von RAM-Speicher würde zum Beispiel damit anfangen, dass Du alle print-Anweisungen für Textkonstanten auf das F-Makro umstellst, also statt:
lcd.print("Systemstart");
setze
lcd.print(F("Systemstart"));

Wieviel RAM an bestimmten Stellen Deines Programms tatsächlich noch frei ist, könntest Du feststellen, wenn Du diese Funktion einfügst:
Code: [Select]

int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

und den Rückgabewert an geeigneter Stelle Deines Programms gelegentlich per Serial.println ausgibst.

Go Up