Wie bei 4x20 Display extension Register aktivieren?

Gast #120165
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é
Angehängte Dateien:
Gast #120168
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
Gast #120170
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
Gast #120171
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" .-}
Gast #120172
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
Gast #120173
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
Gast #120175
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
Angehängte Dateien:
Gast #120176
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
Gast #120177
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é
Gast #120178
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
Gast #120180
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
Gast #120181
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é
Gast #120182
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.
Gast #120184
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é
Gast #120186
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é
Gast #120187
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
Gast #120188
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;
    }
}
Gast #660303
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren