Forum: Mikrocontroller und Digitale Elektronik LCD Spinnt beim hochfahrren danach alles OK


von rene (Gast)


Lesenswert?

Ich habe es ein LCD 4X20 am ATMega8 mit int 8MHz laufen.

Wenn ich diesen Über Ponyprog Flashe geht die Init und die Testanzeige 
ohne Probleme sofort.

Mache ich hingehen einen Power Down reset, so ist es sehr schwer das LCD 
auch durch mehrmalige Reset drücken (4-5mal) zum leben zu erwecken.
Der Resetpegel kommt ohne Makel am µC,(laut Oszi).

Wenn es dann einmal läuft ist es voll io und macht alles was mann 
möchte.

der Mega8 ist mit SUT1=1 / SUT0=0 programmiert.

Das das LCD def. ist glaube ich weniger, da ich zwei die gleichen habe 
und beide das Verhalten aufweisen.

rene.

von Ludwig W. (lordludwig)


Lesenswert?

Ich hatte auch mal so ein ähnliches Problem, ich glaube es war ein Delay 
nach  oder im init zu kurz. Versuch mal testweise deine Delays zu 
verlängern (Datenblatt nachschaun, beim init teilweise sehr lange 
Delays!)

von rene (Gast)


Lesenswert?

Ich habe die inits alle auf 200% angehoben und es ergab keine Änderung.

Ich habe das LCD im 4 Bit Mode und eine Kleine sache im Datasheet 
gefunden.

Dies ist die vorgeschlagene INIT-Routine, die man im 4-Bit Mode fahren 
soll

Function Set 0 0 0 0 1 0 4-Bit Datenlänge einschalten (noch im 8-Bit 
Modus)

Function Set 0 0 0 0 1 0 4-Bit Datenlänge, 2-zeiliges Display, 5x7 Font
             0 0 1 0 0 0
Display ON/OFF
             0 0 0 0 0 0 Display ein, Cursor ein, Cursor blinken
             0 0 1 1 1 1
Clear Display
             0 0 0 0 0 0 Display löschen, Cursor auf 1. Spalte von 1. 
Zeile
             0 0 0 0 0 1
Entry Mode Set
             0 0 0 0 0 0 Cursor Auto-Increment
             0 0 0 1 1 0


was meine Frage ist, das erste senden des Funktion Set befehls für 4-Bit 
Mode sind nur die 4 High Nibble. dürfen die anderen auch noch gesendet 
werden, oder dürfen diese nicht gesendet werden?

Ich sende diese zZt. noch mit.

aber wie geschrieben, nach einem Reste welcher von Ponypreog kommt geht 
es.

rene

von rene (Gast)


Lesenswert?

Habe es gefunden und es Geht, es liegt nicht an den Delays, sondern an 
dem ersten senden. Dabei darf man nicht alle 8 Bit senden, sondern nur 4 
Bit.


void init_LCD()
  {
  delay(100);
  LCD_clr_rw();
  LCD_clr_rs();
  LCD_PORT = (0b00000010 & 0x0F); // set 4 Bit Mode noch im 8 Bit Mode
  pol_e();

  delay(100);
  LCD_isend(0b00101000);  // Set 4Bit im 4 Bit Mode
  delay(20);
  LCD_isend(0b00001111);  // 2|4 zeilen | dislay on | courser on | 
5x7font
  delay(20);
  LCD_isend(0b00000100);  // Auto increment Mode
  delay(20);
  LCD_isend(0b00000001);  // Clear Display
  delay(20);
  }



Dies Funktioniert Super auch nach Power Down und Hardware Reset.

Bye Rene

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Das ist nur ein Effekt, der bei Dir jetzt gerade funktioniert. Lade Dir 
mal das Datenblatt vom Displaycontroller herunter. Wenn es ein HD44780 - 
kompatibles Display ist, dann gibt es dafür eine "kurze" Init und eine 
"lange". Die Lange Init kann auch ein aufgehängtes Display wieder 
starten, wenn die Reset-Kondition vorher unklar gewesen ist. Die "kurze" 
Init funktioniert nur bei einwandfrei gestartetem Display.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.