www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4x20 LCD


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist "par usleep"?

...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ein paar µs sleep", ein paar NOPs oder sowas...warten halt.

Klaus.

Autor: toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void usleep(unsigned int count)
{
  while (count)
    {
      count--;
    }
  if(WdtGlobalIAP) feedWatchDog();
}

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...das hatte ich vermisst :)

Klaus.

Autor: toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich es ja auch wohl denken.
Soll ja auch nur zum illustrieren sein.

Autor: Klaus (Gast)
Datum:

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

Klaus.

Autor: toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach halt sowas wie:

#define putchar lcdWrite

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.