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
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 ;-)
Diese methode funzt bei allen Buchstaben außer--> Ä,ä / Ö,ö / Ü,ü die muss du weiterhin als HEx Zahl eingeben. Gruß Beni
Hallo, dann nimm einfach den Compiler FASTAVR Befehl z.B.: lcd " Test" und fertig..... Gruss A. Arndt
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
Tja,... wenn's Dir zu "billig" ist, dann tüffelele ruhig weiter... Gruss A. Arndt
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.