Forum: Mikrocontroller und Digitale Elektronik 4x20 LCD


von Florian (Gast)


Lesenswert?

Hallo

Ich will ein 4x20 LCD ansteuern (KS0073). Im großen und ganzen klappt
es auch. Nur eine Merkwürdigkeit bleibt. Wenn ich nach einem CLS
Zeichen schreibe, werden einige davon in der 2. Zeile wiederholt und
der Cursor (blinken und sichtbar aktiviert) blinkt dann in beiden
Zeilen synchron. So sieht es aus:

Hello my new world_
 world_

Der Underscore soll der Cursor sein.

Da mache ich doch bestimmt was bei der Initialisierung falsch (2
Zeilen-Modus ist an) Nur was fehlt?

Außerdem scheint die Speicheradressierung nicht mit dem Datenblatt (und
anderen Angaben bei anderen LCDs) übereinzustimmen. Aber das schiebe ich
vorerst noch auf das obige Phänomen.

von Hannes L. (hannes)


Lesenswert?

Das Löschen dauert bei vielen LCDs recht lange, vielleicht schreibst du
nur zu früh?

...

von toto (Gast)


Lesenswert?

Der lcd-controller ist bei mir etwas langsammer als der controller den
ihn steuert.
D.h. ich mache par usleep.


void lcdWrite(short dat)
{
  while((lcdRead(0)>>7)&1){} // wait until LCD is ready

  RS=(dat>>9)&1; // get RS bit
  RW=OFF;        // set RW bit


  if(WdtLcdIAP) feedWatchDog();
  usleep(WAITTIME_WRITE);
  if(WdtLcdIAP) feedWatchDog();

  if (ENABLE_NR==1) E=ON;
  else  E2=ON;
  DATA=(char)dat;

  E=OFF;  E2=OFF;
  RS=OFF;
  RW=OFF;
  return;
}

von Klaus (Gast)


Lesenswert?

...und bis heute auch keine lösung gefunden, leider. als wenn die
adressangaben im datenblatt falsch sind, sobald ich über "20"
rausgehe, kommt murks...aber naja: trial and error :)

Klaus.

von Hannes L. (hannes)


Lesenswert?

Was ist "par usleep"?

...

von Klaus (Gast)


Lesenswert?

"ein paar µs sleep", ein paar NOPs oder sowas...warten halt.

Klaus.

von toto (Gast)


Lesenswert?

void usleep(unsigned int count)
{
  while (count)
    {
      count--;
    }
  if(WdtGlobalIAP) feedWatchDog();
}

von Klaus (Gast)


Lesenswert?

...das hatte ich vermisst :)

Klaus.

von toto (Gast)


Lesenswert?

Man kann sich es ja auch wohl denken.
Soll ja auch nur zum illustrieren sein.

von Klaus (Gast)


Lesenswert?

Nicht zwingend, wenn man "Hello World!" in ein LCD schreiben
will...nach größeren projekten durchaus, sicherlich.

Klaus.

von toto (Gast)


Lesenswert?

Mach halt sowas wie:

#define putchar lcdWrite

von Florian (Gast)


Lesenswert?

@Klaus:
was heißt trial and error?

Soll das heißen, das das LCD kaputt ist oder nichts taugt? Kann ja
nicht sein, daß ich jetzt ein anderes nehmen soll. Hat ja nebenbei auch
Geld gekostet.

Wenn nur die Adresse falsch wäre, könnte ich damit leben. Aber wieso
dieses doppelte schreiben?

von Florian (Gast)


Lesenswert?

@alle

Noch mehr warten kann ich schon gar nicht mehr. Habe überall wo es nur
geht delays drin und bringt nichts. Schreiben und Befehle (Cursor an
usw.) tut er ja auch wunderbar im Prinzip.

von Markus (Gast)


Lesenswert?

Hallo,

tut mir leid ich habe erst jetzt reingeschaut. Ich hatte letzten Monat
das gleiche Problem. Da stimmt was mit der Initialisierung nicht. Hier
im Forum gibt es schon einen Beitrag dazu. Such mal nach 4x20 glaube
ich. Dort findest Du dann auch die neuen.lib dateien für C.

Ich hoffe ich hab Dir helfen können.

Grüsse Markus

von Florian (Gast)


Lesenswert?

Tata!!!

Habe über den Tellerrand geschautund was tolles gefunden:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=10766 Der 2. Beitrag
klärts. Man muß per function set das RE Bit setzen und dann ein
extended function set. Jetzt stimmt alles - auch der Adressbereich!

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.