Hey Leute, Habe heute endlich das Display bekommen, verschaltet und getestet. Da kam dieses Problem auf: Erstes Bild im Anhang Wie man sieht, ist die rechte seite weiß. Was mir aber aufgefallen ist, ist das der Cursor hinter dem weiß blinkt. Also das sieht man durch das Weiß hindurch irgendwie xD Ist das Teil kaputt(was sehr, sehr schade wäre, weil ich dann wie 2 wochen auf ein neues warten muss oO), oder hab ich da was Falsch gemacht? Und jetzt seht euch mal das zweite Bild im Anhang an. Das sieht echt nicht gut aus und lässt mich vermuten, das das Display kaputt ist. Aber wieso sollte man sowas denn hinbekommen?!
Tut mir leid, das sollte der erste Anhang werden ;D
Hi Hast du mal ein Datenblatt? MfG Spess
Hast Du das LCD auch für zweizeiligen Betrieb initialisiert? Das ändert die interne Zuordnung der Displayadressen und könnte genau so aussehen - hintere Hälfte des LCD nicht initialisiert und auch nicht beschreibbar.
spess53 schrieb: > Hi > > Hast du mal ein Datenblatt? Kennste Google? Der HD44780 ist ein Standard und das Datenblatt kannste garantiert 10.000 mal per Google DIREKT als PDF runterladen. Grüße Michelle EDIT: Ein Klick auf HD44780 hier im Text bringt Dich auch zum Datenblatt
Hi
>Kennste Google?
Vom Hörensagen. Und den HD44780 vielleicht länger wie du. Allerdings
hatte ich mehr an das Datenblatt vom Display gedacht.
MfG Spess
>Ist das Teil kaputt(was sehr, sehr schade wäre,
Es sieht ganz danach aus.
Klaus2m5 schrieb: > Hast Du das LCD auch für zweizeiligen Betrieb initialisiert? Hab schon alle Befehle die das tun könnten ausprobiert. Ich meine, wenn das wirklich kaputt sein sollte, wie sollte man das hinbekommen?!
Du musst im Command-Mode 0x28 (4bit) oder 0x38 (8bit) senden. Display-RAM Adressen: 1-zeilig: 00 01 02 03 04 05 06 07 40 41 42 43 44 45 46 47 2-zeilig: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F Merkst Du was?
Hab ich gemacht, hat aber nix gebracht:/
>Ich meine, wenn >das wirklich kaputt sein sollte, wie sollte man das hinbekommen? Spannung zu hoch oder mal kurz verpolt angeschlossen.
Poste bitte mal den Code für die LCD-Initialisierung.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | #define LCDDataPort PORTB
|
5 | #define LCDDataDDR DDRB
|
6 | #define ControlPort PORTD
|
7 | #define ControlDDR DDRD
|
8 | #define Enable 5
|
9 | #define ReadWrite 7
|
10 | #define BiPolar 2
|
11 | |
12 | void PeekABoo(void); |
13 | void SendCommand(unsigned char command); |
14 | void SendCharacter(unsigned char character); |
15 | void LCDIsBusy(void); |
16 | |
17 | int main(void){ |
18 | |
19 | ControlDDR |= 1<<Enable | 1<<ReadWrite | 1<<BiPolar; |
20 | _delay_ms(15); |
21 | |
22 | SendCommand(0b00000001); |
23 | _delay_ms(20); |
24 | |
25 | SendCommand(0x38); |
26 | _delay_ms(20); |
27 | SendCommand(0b00001111); |
28 | _delay_ms(20); |
29 | |
30 | |
31 | SendCharacter(0x4c); |
32 | SendCharacter(0x69); |
33 | SendCharacter(0x65); |
34 | SendCharacter(0x73); |
35 | SendCharacter(0x73); |
36 | SendCharacter(0x20); |
37 | SendCharacter(0x4a); |
38 | SendCharacter(0x65); |
39 | SendCharacter(0x6d); |
40 | SendCharacter(0x61); |
41 | SendCharacter(0x69); |
42 | |
43 | |
44 | while (1) |
45 | {
|
46 | |
47 | |
48 | }
|
49 | |
50 | }
|
51 | |
52 | void LCDIsBusy(){ |
53 | |
54 | LCDDataDDR = 0; |
55 | ControlPort |= 1<<ReadWrite; |
56 | ControlPort &= ~ 1<<BiPolar; |
57 | |
58 | while(LCDDataPort >= 0x80){ |
59 | |
60 | PeekABoo(); |
61 | |
62 | }
|
63 | |
64 | LCDDataDDR = 0xFF; |
65 | |
66 | }
|
67 | void PeekABoo(){ |
68 | |
69 | ControlPort |= 1<<Enable; |
70 | asm volatile ("nop"); |
71 | asm volatile ("nop"); |
72 | ControlPort &= ~1<<Enable; |
73 | |
74 | }
|
75 | void SendCommand(unsigned char command){ |
76 | |
77 | LCDIsBusy(); |
78 | LCDDataPort = command; |
79 | ControlPort &= ~ (1<<ReadWrite|1<<BiPolar); |
80 | PeekABoo(); |
81 | LCDDataPort = 0; |
82 | |
83 | }
|
84 | void SendCharacter(unsigned char character){ |
85 | |
86 | LCDIsBusy(); |
87 | LCDDataPort = character; |
88 | ControlPort &= ~ (1<<ReadWrite); |
89 | ControlPort |= 1<<BiPolar; |
90 | PeekABoo(); |
91 | LCDDataPort = 0; |
92 | |
93 | }
|
hier mal der ganze code ;D
Bitte das 0x38 dreimal wiederholen, danach erst das Display clearen (0b00000001), natürlich immer mit einem Delay hintendran. Wenn das nicht hilft, das 0x38 in einer Endlosschleife senden und die LCD-Pins messen, also ob Data = 0x38, RS und RW = 0 ist.
Sry wegen doppelpost, aber: Wenn 0x38 weglasse, muss ich den Kontrast höher machen, damit die schrift zu lesen ist. Die rechte seite, sieht dann so aus, als hätte ich wenig kontrast drin, also weniger weiß. Fortschritt oder nicht?
Kann es Kaputt sein, weil ich zu heiß gelötet habe oder so? Weil die Pins musste ich ja selbst hinlöten
Sieht so aus als ob es den "Segment Driver" zerschossen hätte (der ist für die Segmente der 2. Hälfte zuständig). Passiert was wenn du auf dem Epoxid-Klecks hinter der 2. Hälfte drückst oder wird er heiß? Ist auf der Rückseite ein Lötzinnklecks gelandet?
Hm, kann sein das beim Löten etwas schief gelaufen ist:/ Naja. Aber wie kann es sein, das ein LCD Display auf Reichelt und Conrad bis zu 16 Euro Kostet und bei ebay(Neu) nur 4 euro?!
Wenn ich mir die Lötstellen anschaue, könnte vielleicht schon sauberes verlöten helfen.
Hi >Kann es Kaputt sein, weil ich zu heiß gelötet habe oder so? Weil die >Pins musste ich ja selbst hinlöten Sehr unwahrscheinlich. Aber weshalb hast du so eine kastrierte Initialisierung? Mach es doch einfach mal so wie im Datenblatt. > while(LCDDataPort >= 0x80){ > PeekABoo(); Das passt nicht. E auf H Einlesen E auf L MfG Spess
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.