Forum: Mikrocontroller und Digitale Elektronik Auf LCD schreiben mit Buchstaben statt Hex-Zahl


von Johannes (Gast)


Lesenswert?

Hallo,

habe eben angefangen mir eine kleine Routine zur Ansteuerung eines
HD44780 Displays zu schreiben. Problematisch ist nur dass ich z.Z
Buchstaben als Hex Zahl auf das Display schreiben muss. Das ist mir auf
die Dauer zu umständlich. Mangels C Kenntnisse weis ich aber auch nicht
wie man die Zeichentabelle da am elegantesten unterbringt. Ich hoffe
mir kann mal jemand auf die Sprünge helfen.

Stelle mir das so write_command('hallo welt'); mäßig vor.

mfg
johannes

von Markus Kempf (Gast)


Lesenswert?

Ich hab da einen Heisen Tip für dich. Der Hexwert mit welchem jedes
Zeichen im speicher des µC abgelegt wird entspricht (in der Regel)
genau dem wert welchen Du an das Display schiken musst.
Deutlicher: Z.B. der ASCII Wert der Zeichens "K" entspicht 4B. Jedes
standart Display giebt ein "K" aus wenn mann ihm 4B schikt.
Wenn du also eine String hast musst du nur die einzelnen Zeichen
nacheinander an das Display schiken, eine umwandlung ist nicht nötig.
Sprich wenn du bissher mit deiner Routine Hexwerte übertargen hast
müsste diese genau das gleiche gute Ergebinns liefern wenn du statt der
Hexzahl ein Charakter in Hochkommas ('A') reinsetzt.
Hoffe das war einigermasen verständlich ausgedrückt ;-)

von Merle (Gast)


Lesenswert?

Diese methode funzt bei allen
Buchstaben außer--> Ä,ä / Ö,ö / Ü,ü
die muss du weiterhin als HEx Zahl
eingeben.

Gruß
Beni

von A. Arndt (Gast)


Lesenswert?

Hallo,

dann nimm einfach den Compiler FASTAVR

Befehl z.B.:

lcd " Test"

und fertig.....


Gruss
A. Arndt

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Ja ich wollte es aber schon irgendwo selber machen lcd "test" is mir
zu billig. Ich hab das jetzt soweit auch hinbekommen und es
funktioniert tatsächlich gut :)

Hab allerdings jetzt n problem wo ich mit meiner Logik einfach nicht
weiterkomme. Und zwar scheint mein Display bei der Home Adress
irgendwie  aus dem Rahmen zu fallen. Abgesehen davon dass ich den
normalen go to home position befehl nicht nutzen kann sondern die
position mit 0x80 auf  linie 1 spalte 1 setzen muss stimmt nach
lcd_clear gar nichts mehr. statt zeile 3 wird mir dann in zeile 1
geschrieben und das erste zeichen geht auch noch flöten. kann sein dass
ich mich blöd dran stelle aber irgendwie blick ichs nicht. vileicht
weis ja jemand wodrans liegt. würd mich über ne antwort freuen.

Mit freundlichen Grüßen
Johannes

von A. Arndt (Gast)


Lesenswert?

Tja,... wenn's Dir zu "billig" ist, dann tüffelele ruhig weiter...


Gruss
A. Arndt

von Johannes Raschke (Gast)


Lesenswert?

Ich will es nicht beschwören, aber ich meine, einen String legt man mit
C so an:

char mein_string[] = "Blabla";

oder so:

char *mein_string;
malloc (mein_sting, 80); /*max. Länge des Strings*/
*mein_string = "blabla";

so etwa ging das...

Diesen String, bzw. den char-Zeiger kannst Du dann an die
Ausgabe-Funktion übergeben:

print_lcd(mein_string)

die könnte dann so aussehen:

void print_lcd(char *str)
{
   for (int i=0; str[i] != 0; i++)
   {
      lcd_data(str[c]);
    }
}

wobei lcd_data ein einzelnes Zeichen ausgibt....

Viele Grüße

Johannes

von Johannes (Gast)


Lesenswert?

Hallo

die String-Ausgabe funktioniert mitlerweile hervoragend ! Was zur Zeit
überhaupt nicht funktioniert ist clear display da danach die Position
an Line 3 Spalte 1 üüüberhaupt nicht mehr stimmt. Statt dessen schreibt
er in Zeile 1 Spalte -1 ?!? Vileicht ist das ja was typisches ... ich
probier dann mal weiter.

mfg

von Sven (Gast)


Lesenswert?

Hi Johannes!

>>die String-Ausgabe funktioniert mitlerweile hervoragend ! Was zur
Zeit
überhaupt nicht funktioniert ist clear display da danach die Position
an Line 3 Spalte 1 üüüberhaupt nicht mehr stimmt. Statt dessen
schreibt
er in Zeile 1 Spalte -1

Das clear display sollte den Cursor auch in Zeile 1, Spalte 1 setzen.
Steht zumindest im Datenblatt des HD44780. Und dass das erste Zeichen
flöten geht, liegt wahrscheinlich am Timing, nach clear display muss
eine längere Pause (20ms ?, weiß nicht genau) kommen. Wenn Du das
Display nur löschen willst, ist manchmal ein definiertes Schreiben von
Leerzeichen schneller.

Sven

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.