LCD Display HD44780 - Nur die rechte seite Funktioniert

Gast #2460359
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?!
Angehängte Dateien:
Gast #2460392
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.
Gast #2460441
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?
Gast #2460493
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
Gast #2460513
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.
Gast #2460535
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?
Gast #2460586
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?
Gast #2460595
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?!
Gast #2460597
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.