Forum: Mikrocontroller und Digitale Elektronik LCD Display HD44780 - Nur die rechte seite Funktioniert


von RenX (Gast)


Angehängte Dateien:

Lesenswert?

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?!

von RenX (Gast)


Angehängte Dateien:

Lesenswert?

Tut mir leid, das sollte der erste Anhang werden ;D

von spess53 (Gast)


Lesenswert?

Hi

Hast du mal ein Datenblatt?

MfG Spess

von Klaus2m5 (Gast)


Lesenswert?

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.

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>Ist das Teil kaputt(was sehr, sehr schade wäre,

Es sieht ganz danach aus.

von RenX (Gast)


Lesenswert?

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?!

von Klaus2m5 (Gast)


Lesenswert?

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?

von RenX (Gast)


Lesenswert?

Hab ich gemacht, hat aber nix gebracht:/

von holger (Gast)


Lesenswert?

>Ich meine, wenn
>das wirklich kaputt sein sollte, wie sollte man das hinbekommen?

Spannung zu hoch oder mal kurz verpolt angeschlossen.

von Klaus2m5 (Gast)


Lesenswert?

Poste bitte mal den Code für die LCD-Initialisierung.

von RenX (Gast)


Lesenswert?

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

von Klaus2m5 (Gast)


Lesenswert?

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.

von RenX (Gast)


Lesenswert?

Hab ich gemacht. Und alles stimmt

von RenX (Gast)


Lesenswert?

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?

von Klaus2m5 (Gast)


Lesenswert?

Dann wirds wohl doch hin sein.

von RenX (Gast)


Lesenswert?

Kann es Kaputt sein, weil ich zu heiß gelötet habe oder so? Weil die 
Pins musste ich ja selbst hinlöten

von Mike (Gast)


Lesenswert?

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?

von RenX (Gast)


Lesenswert?

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?!

von Xray (Gast)


Lesenswert?

Wenn ich mir die Lötstellen anschaue, könnte vielleicht schon sauberes 
verlöten helfen.

von spess53 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.