Forum: Mikrocontroller und Digitale Elektronik Wie bei 4x20 Display extension Register aktivieren?


von René (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Alle

Ich habe ein alphanumerisches 4x20 Display mit KS 0073 Controller.
Dieser Controller soll fast zu 100% kompatibel zum HD44780 sein.
Um das Display jedoch im 4 Line Mode betreiben zu können muss man ja
irgendwie den extended mode aktivieren bzw. auf das extension
Register zugreifen, aber wie funktioniert das.
Momentan kann das Display nicht einmal mit sich selbst umgehen.
Wenn man diesen Text
(eins/zwei/drei/vier/fünf/sechs/sieben/acht/neun/zehn/elf/zwölf/dreizehn 
/vierzehn)
an die erste Position der ersten Zeile schreibt,
dann sollte doch das Display immer weiter schreiben bis zum Ende der 4.
Zeile. Macht es aber nicht,
manche Wörter schreibt es doppelt und andere wiederum lässt es weg. Auf
dem angehängten Bild ist die Anzeige abgebildet.

Vielleicht weiß ja irgendjemand was ich falsch gemacht habe.

Vielen Dank im Voraus

René

von Tobi (Gast)


Lesenswert?

schreibst du den text einmal auf das display oder mehrmals
hintereinander?

von René (Gast)


Lesenswert?

Hallo Tobi

Den Text schreiben wir einmal.

Ciao René

von Holger (Gast)


Lesenswert?

Hallo,
das Problem habe ich auch. Bei einem 2x16 oder 2x24 Zeichen Display
habe ich bis jetzt keine Probleme gehabt. dort kann ich jedes einzelne
Zeichen Adressieren.
Bei einem 4x20 Display haut das mit der Adressierung nicht mehr richtig
hin. Das Display schreibt dann z.B. mittig von der 1. Zeile das Gleiche
wie am Anfang von der 2. Zeile, obwohl es nur in die 2. Zeile schreiben
soll.
Muss solch ein Display vielleicht anders initialisiert werden? Wie kann
ich dem LCD z.B. mitteilen, dass es ein 4-Zeilen LCD ist?

Vielen Dank für Eure Beiträge.

Gruß, Holger

von juergen klauck (Gast)


Lesenswert?

hallo
is nicht die 1. und 3. sowie 2. und 4. die selbe??
bei meinem 4 zeiler is das so
beim start zeigt er auch zwei "schwarze streifen" in der 1. und
"3."zeile
gruss juergen

von Holger (Gast)


Lesenswert?

Ja, normalerweise sollte ein 4x20 LCD ein in der Mitte
durchgeschnittenes 2x40 LCD sein. Deshalb wundert es mich ja auch,
warum der Text von René nicht richtig abgebildet wird. Das LCD müsste
ja eigentlich vom letzten Zeichen in der 1. Zeile zum 1. Zeichen in der
3. Zeile weiterschreiben.
Aber irgendwie wird da wieder was überschrieben, oder so.


Gruß, Holger

von juergen klauck (Gast)


Lesenswert?

hallo
das etwas "unscharfe bild" sieht so aus als wenn der eeprom
durcheinander ist
solche bilder hatte ich auch schon hinbekommen "bei falscher
addressierung des eeprom zumindest" .-}

von Dirk (Gast)


Lesenswert?

HI,

welche Sprache nutzt du fuer den µC? wenn es C ist befindet sich ein
Beispiel in der Codersammlung von mir. Ich steuer das LCD per HW SPI
an. Wie steuerst du das LCD an 4Bit o. 8Bit? Zeig doch mal bitte deine
Routinen.

Mfg Dirk

von Alex (Gast)


Lesenswert?

Verwendet ihr die LCD-Bibliothek von Peter Pfleury?
Dann könnte ich euch mit drei Zeilen Code aushelfen, der das genannte
Problem behebt!
Habe mich auch mal nen halben Tag damit rumgeplagt. Allerdings kann man
sich auch einfach das Datenblatt des KS0073 nehmen und kommt auch
darauf.

Gruß, Alex

von René (Gast)


Lesenswert?

Hallo Alex,

schick mir doch mal die diese Bibliothek inkl. deiner Änderung (oder
poste sie), dann werden wir sie verwenden wenn es damit klappt.
Danke für Deine Hilfe.

rene@et-x.de

ciao rene

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Ok, ich hoffe mal, Peter Pfleury hat damit kein Problem. Geändert wurde
von mir:

- Anfügen der Zeilen
  lcd_command (0x2C);
  lcd_command (0x09);
  lcd_command (0x28);
  in der lcd_init (...)
- Einfügen der Funktion lcd_clrline (...)

Im Header-File müsst ihr Port und Pins anpassen. Ich habe das LCD im
4-Bit Modus wie hier im Tutorial dargestellt beschrieben (nur ein
anderer Port). Ich hoffe, es hilft euch weiter.

Alex

von Nico (Gast)


Lesenswert?

Hallo

wenn ich das auf dem Bild richtig erkannt habe, habe ich das gleiche
Display. Ich habe es noch nicht weiter benutzt hatte mir aber schonmal
dieses pdf , http://www.lcd-module.de/deu/pdf/doma/dip204-4.pdf ,
gezogen da ist die initialiesierung und die adressbelegung erklärt und
das sogar in deutsch vielleicht könnt ihr damit was anfangen. Mich
würde noch interressieren wo ihr das Display herhabt und was ihr dafür
bezahlt habt ich hab so um die 30 Euro dafür hingelegt.

Gruß

Nico

von René (Gast)


Lesenswert?

Hallo Nico

ja, wir haben das auch von lcd-module. Preis weiß ich leider nicht
mehr, müssten dann aber auch so um die 30 Euro gewesen sein.

Danke für Deine Hilfe, werde mir gleich mal das Datenblatt anschauen.

Ciao René

von Holger (Gast)


Lesenswert?

Hallo,

mit Euren Antworten kann man ja mal richtig was anfangen...
@Alex: Ich glaube die Befehlszeilen hatte ich auch schon in meinem
Quelltext. Hat aber nicht wirklich geklappt. In der Initialisierung die
ich hier habe wird das LCD zwischendrin als 2-Zeilen LCD initialisiert.
Muss das dann weggelassen werden und stattdessen Deine Befehlszeilen
dort hin, oder werden Deine befehle einfach hinten an die
"standart"-initialisierung rangehängt?
Das man bei dem 4-Zeilen-LCD irgendwie das RE-Bit setzen muss habe ich
fast befürchtet. Wird es einmal gesetzt und ist dann solange aktiv, bis
es wieder rückgesetzt wird?

@"rest": danke und weiter so :o)

Gruß, Holger

von Alex (Gast)


Lesenswert?

Auf ein solches Display bezogen sich meine Angaben.

von ruepel (Gast)


Lesenswert?

Falls noch nicht alles geklärt ist:
Im Internet findet man das "KS0073.pdf" Datenblatt. Das extension-
Register RE wird mit "Function Set"-Befehl gesetzt (00XX X(RE)XX); es
entspricht also Bit 2 in diesem Befehl.

mfg ruepel

von René (Gast)


Lesenswert?

Hallo Alle,

danke für eure Hilfe, jetzt läuft das Display. Die Antwort von ruepel
ist die Richtige. Mit dem Befehl kann man in den extended MOde gehen
und die entsprechenden Einstellungen vornehmen. HAt jemand von euch mal
eine Peter Fleury Datei für mich wenn man das Display im 4 Bit Mode an
einem Mega 8 an Port D betreiben will? Der Alex hat ja
freundlicherweise eine Datei angehängt, aber ich als blutiger Anfänger
weiß leider nicht was ich da alles ändern muss, und außerdem steht der
Mega 8 da irgendwie nicht drin.

Vielen Dank im Voraus

René

von Alex (Gast)


Lesenswert?

Muss er auch nicht. Musst bloß in der lcd.h den Port von PORTC auf PORTD
ändern.
Anschluß wie hier im Tutorial beschrieben.

Dann einfach lcd_init ausführen und danach kannst du per lcd_puts
beliebige Texte aufs Display schreiben. Schau dir doch einfach die
Funktionen an, der Code ist ja gut dokumentiert worden.

von René (Gast)


Lesenswert?

Hallo Alex,

danke, mein Display ist auf jeden Fall so angeschlossen wie im
Tutorial. Na dann will ich mal mein Glück versuchen.

Danke nochmal

Ciao René

von René (Gast)


Lesenswert?

@ Alex

Muss man aus der Datei wirklich nichts mehr auskommentieren?
was ist mit diesen #if #else Angaben?
Leider bin ich absoluter Beginner, sorry.
Wenn ich im Hauptprogramm lcd_init(); aufrufe, dann sagt er: error: too
few arguments to function lcd_init

Ich verzweifle....

Ciao René

von Alex (Gast)


Lesenswert?

dann übergib mal ordentlich
lcd_init (LCD_DISP_ON);

Auskommentieren musst du nichts.

too few arguments = zu wenig argumente übergeben
Hätte dir aber auch jedes Wörterbuch sagen können :-)

von René (Gast)


Lesenswert?

@ Alex

Ich habe schon gewußt was das heißt, das hat mir aber auch nicht viel
geholfen. Jetzt klappt es auf jeden Fall. Auf meinem Display steht
hello world und zwei lustige schwarze Balken sind noch da.

Vielen Dank für Deine Hilfe.

Ciao René

von René (Gast)


Lesenswert?

@ Alex noch einmal

wie kann ich denn den Wert einer Variablen ausgeben?
Wenn ich sage: lcd_putc(v1);  dann schreibt er nur einen Hyroglyphen an
eine stelle, obwohl der Wert der Variablen 3-stellig wäre.

Danke im Voraus

rene

von KoF (Gast)


Lesenswert?

hmm du soltest eine funktion benutzen, die zahlen in strings umsetzt ;-)
und dann zeichen für zeichen ausgeben

so zum beispiel



void IntToString(char str[], int value)
{
    int i, sign;

    if((sign = value) < 0 )
    {
        value = -value;
    }
    i = 0;
    do
    {
        str[i++] = value %10 + '0';
    }
    while((value /= 10) >0);
    if (sign < 0)
    {
        str[i++] = '-';
    }
    str[i] = '\0';
    reverse(str);
}
void reverse(char str[])
{
    int c, i, j;
    for(i = 0,j = strlen(str)-1; i < j; i++, j--)
    {
        c = str[i];
        str[i] = str[j];
        str[j] = c;
    }
}

von René (Gast)


Lesenswert?

Hallo KoF,

kann mir gar nicht vorstellen dass so etwas in der Peter Fleury datei
noch nicht enthalten sein soll, die ist doch super umfangreich..

Danke dafür

ciao René

von KoF (Gast)


Lesenswert?

ich weiß nicht, was dabei ist! ich habe/benutze sie nicht!
wenn sie vorhanden ist, dann nim sie, wenn nicht, nimm meine ;-)

von René (Gast)


Lesenswert?

@ Alex

soll ich die Funktion einbauen, oder kann die fleury datei so etwas?

Daanke und ciao

René

von Chris (Gast)


Lesenswert?

Hallo Leute,

vielen Dank für diesen Beitrag! Ich habe durch einmaliges Vertauschen 
der I/O-Pins den Controller auf 4x12 Zeichen umgeschaltet. Dank Euch 
konnte ich das Display wieder zurück auf 4x20 zurückschalten:

Einfach einmalig
   0x24
   0x09
   0x28
senden und schon war alles wieder gut. :-)

Gruß
Chris

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.