Hallo an alle, bin gerade dabei an mein HD44780 Display Custom Characters zu senden. Nach dem Lesen des Datenblattes denke ich, dass ich das System verstanden habe, aber leider zeigt das Display nichts an. Es können maximal 8 Custom Characters gespeichert werden. Zum CGRAM wechselt man mit 0x40. Zum DDRAM wechselt man mit 0x80. Anschließend kann man mit 0x00 den ersten Custom Character aufrufen, sofern man mit 0x40 begonnen hat. Auf dieser Website war das auch super erklärt: http://www.8051projects.net/lcd-interfacing/lcd-custom-character.php Das Display selber funktioniert, ich kann auch normalen Text darauf ausgeben. Verkabelung passt auch. RS ist mit PD7 verkabelt. Ich finde den Fehler einfach nicht, hat jemand einen Lösungsansatz für mich? Irgendetwas muss ich übersehen. An den Thread habe ich meinen vollständigen Quellcode und einen Teil der LCD Lib angehängt. Das ganze stammt von einem Nerdkit. Dies bedeutet ich verwende einen ATMega168 als MCU. Danke schon mal für die Unterstützung.
Gast
#4146388
Nino K. schrieb: > Irgendetwas muss ich übersehen.
1 | |
2 | |
3 | |
4 | |
5 | |
Hallo Nino, macht
1 | |
automatisch auch
1 | |
Wenn nicht, dann musst Du das selber umstellen. Die home-Funktion befindet sich leider nicht im angehängten Teil deiner LCD Lib. Und
1 | |
setzt den Cursor schon auf die erste Stelle im Display. Davor die DDRAM-Adresse zu setzen ist überflüssig. Gruß John
Hi John, danke für die Rückmeldung. lcd_home() macht folgendes:
1 | |
2 | |
3 | |
4 | |
5 | |
Dann sollte es mit dem folgenden Code funktionieren? Sofern ich dich richtig verstanden habe. Ich habe das "lcd_home()" durch "lcd_set_type_data()" ersetzt. Oder muss ich noch etwas dabei beachten?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
Gast
#4146413
Ja, sollte so funktionieren.
John schrieb: > Ja, sollte so funktionieren. Und das tut es auch. Vielen vielen Dank für deine Hilfe. Habe es gerade getestet. Bin echt nicht darauf gekommen, dass ich das Laden des Custom Characters im Data Modus machen muss. Juhu.
Diese ganze Modus Umschalterei ist nicht zweckdienlich. Vor allen Dingenspiegelt es nicht das wieder, was am LCD passiert. Das LCD kennt Kommandos und anzuzeigende (oder eben in diesem Fall ins DDRAM auszugebende) Daten. Das ist alles. Das ist die ganze Unterschiedung: Das nächste ans LCD übertragene Byte, ist das vom LCD als Kommando aufzufassen oder ist das als Datenbyte aufzufassen. D.h. vernünftigerweise macht man sich 2 Ausgabefunktionen. Die eine, die ein Kommandobyte ausgibt und die andere, die ein Datenbyte ausgibt. Die beiden Funktionen unterscheiden sich nur in der Behandlung der RS Leitung. Die Home Funktion, die ja naturgemäss ein Kommando ausgibt, sieht dann so aus
1 | |
2 | |
3 | |
4 | |
und auch andere Funktionen, die dem LCD einen Befehl übermitteln, benutzten die lcd_write_command Funktion. Die lcd_write_data Funktion wird immer dann benutzt, wenn eben ein Datenbyte (also KEIN Kommando) auszugeben ist. Dann kommt man auch nicht mit diversen Modusumschaltungen durcheinander, die man eingeführt hat, obwohl es keine Notwendigkeit dafür gibt. Es ist immer klar, ob ein Kommando ans LCD zu übermitteln ist, oder ob es sich um Daten handelt.
Um den Code etwas übersichtlicher zu gestalten habe ich nun versucht anhand der Arduino Lib (LiquidCrystal) eine Funktion in meine Nerdkit LCD Lib einzubauen. Aber ich bekomme am Display immer nur ein komplett ausgefülltes Rechteck zu sehen. Was mache ich hier falsch? Anbei die neue Funktion in meiner Nerdkit LCD Lib:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Und hier der Quellcode vom Hauptprogramm:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.