Forum: Mikrocontroller und Digitale Elektronik LCD mit HD44780 läuft nicht


von dario (Gast)


Lesenswert?

Moin,

mein 2x24 LCD will nicht so wie ich will: ich habs an einem dspic30f6010 
an port D hängen. Nach dem Einschalten ist die untere der beiden Zeilen 
schwartz, es flackert kurz, danach passiert garnichts mehr, die zweite 
Zeile bleibt schwartz. Uart und A/D-Umsetzer funktionieren soweit.
Der HD44780 wird allerdings ziemlich heiss, sowie ich versuche ein 
Zeichen darzustellen. Die Timings sind eigentlich schon relativ 
"grosszügig".

Pinbelegung: PORTD - LCD
0000000110000000 - 00000 D7...... D0 E R/W RS

Code:
1
#include <stdio.h>
2
#include <p30fxxxx.h>
3
4
void init_lcd();
5
void wait(int ticks);
6
7
int main(){
8
9
//Port G - ausgang
10
TRISG=0x0;
11
PORTG=0;
12
13
//Port D - ausgang
14
TRISD=0x0;
15
PORTD=0;
16
17
//Timer 1
18
T1CONbits.TGATE=0;
19
T1CONbits.TSIDL=0;
20
T1CONbits.TCKPS=0b10; // =Tcy/64 => 1 tick = 17,8µS @ 14,343MHz
21
T1CONbits.TSYNC=0;
22
T1CONbits.TCS=0;
23
24
//Uart - für printf()
25
U1MODE &=0xFFF8; //8N1
26
U1BRG = 11; // Vorteiler für 19200 Baud@14,343 MHz
27
U1MODE |=0x8000; //Uart enable
28
U1STA |=0x0200; //tx enable
29
30
//A/D-Umsetzer
31
ADCON1bits.FORM=0;
32
ADCON1bits.SAMP=1;
33
ADCON1bits.ASAM=1;
34
ADCON1bits.SSRC=0b111;
35
36
ADCON2bits.VCFG=0b111;
37
ADCON2bits.CSCNA=0;
38
ADCON2bits.CHPS=0;
39
ADCON2bits.SMPI=0;
40
ADCON2bits.BUFM=0;
41
ADCON2bits.ALTS=0;
42
43
ADCON3bits.SAMC=0b00001;
44
ADCON3bits.ADCS=0b111111;
45
ADCON3bits.ADRC=0;
46
47
ADCHSbits.CH0NA=0;
48
ADCHSbits.CH0SA=0b0100;
49
50
ADPCFG=0b1111111111100011;
51
ADCON1bits.ADON=1;
52
53
double temp=0;
54
init_lcd(); //lcd initialisierung
55
56
while (1){
57
58
  while (!ADCON1bits.DONE);
59
  temp=(ADCBUF0/1024.0)*5.17;
60
  printf("%fV\r\n",temp);
61
}
62
63
return 0;
64
}
65
66
void wait(int ticks){
67
TMR1=0;
68
PR1=ticks;
69
T1CONbits.TON=1;
70
PORTGbits.RG9=1; //LED an
71
while (!(PR1==TMR1));
72
PORTGbits.RG9=0; //LED aus
73
IFS0bits.T1IF=0;
74
T1CONbits.TON=0;
75
TMR1=0;
76
PR1=0;
77
}
78
79
void init_lcd(){
80
wait(11240);         //600ms auf Vcc warten
81
wait(11240); 
82
wait(11240); 
83
84
PORTD=0b0000000110000000;  
85
wait(10);
86
PORTD=0b0000000110000100;  //function set
87
wait(10);
88
PORTD=0b0000000110000000;  
89
wait(280);           //5 ms warten
90
PORTD=0b0000000110000100;  //function set
91
wait(10);
92
PORTD=0b0000000110000000;
93
wait(10);          //178 µs warten
94
PORTD=0b0000000110000100;  //function set
95
wait(10);
96
PORTD=0b0000000110000000;
97
wait(5);
98
99
100
PORTD=0b0000000111000000;
101
wait(10);          //178 µs warten
102
PORTD=0b0000000111000100;  //function set
103
wait(10);
104
PORTD=0b0000000111000000;
105
wait(10);
106
107
PORTD=0b0000000001000000;
108
wait(10);          //178 µs warten
109
PORTD=0b0000000001000100;  //function set
110
wait(10);
111
PORTD=0b0000000001000000;
112
wait(10);
113
114
PORTD=0b0000000000001000;
115
wait(10);          //178 µs warten
116
PORTD=0b0000000000001100;  //function set
117
wait(10);
118
PORTD=0b0000000000001000;
119
wait(10);
120
121
PORTD=0b0000000000110000;
122
wait(10);          //178 µs warten
123
PORTD=0b0000000000110100;  //function set
124
wait(10);
125
PORTD=0b0000000000110000;
126
wait(10);
127
}

von Marvin M. (Gast)


Lesenswert?

Wenn da etwas heiß wird, dann ist an der Hardware etwas faul.
Mit etwas Glück hast Du das LCD noch nicht zerstört - Prüfe alles 
nochmal nach, da darf nichts heiß werden.

von Jochen M. (taschenbuch)


Lesenswert?

dario,

wenn der Controller heiss wird, dann ist der mit hoher Chance schon im 
Eimer. Kannst aber auch Glück haben. Das wird nichts heiss, der bleibt 
immer bei Zimmertemperatur.

Ich kapiere es auch kategorisch nicht, warum es so ein unlösbares 
DAUERPROBLEM ist diese Schei... Display einfach mal richtig 
anzuschliessen und richtig anzusteuern. Ich glaube die Anzahl der 
Threads dazu wird in Tausenden gezählt, woran liegt das eigentlich? Was 
zum Geier ist daran so dermassen kompliziert? Und warum wird das auch 
nicht besser, obwohl schon 825x detailliert auf das Thema eingegangen 
wurde? Warum wird das nicht einmal geringfügig besser?

Übrigens:
Die Ursache bei den etwa 12000 (zwölftausend) Leuten, die solche 
Probleme hier geschildert hatten, war IMMER (I_M_M_E_R):
- falsch angeschlossen
- falsch initialisiert

Also:
- Spannung im Bereich 4-5.5Volt?
- richtig gepolt?
- Kurzschlüsse?
- an die richtigen Pins angeschlossen, Nummern der Pins richtig gezählt?

Die Standarantwort auf diese Fragen lautet: Klar ist das richtig 
angeschlossen, auf jeden Fall, keine Frage, 100prozentig.
Also:
- Spannung im Bereich 4-5.5Volt?
- richtig gepolt?
- Kurzschlüsse?
- an die richtigen Pins angeschlossen, Nummern der Pins richtig gezählt?

Hast Du das sorgfältig kontrolliert, jede einzelne Leitung gemessen?
Nein, hast Du nicht! Und es macht wütend, ständig angelogen zu werden!
Also:
- Spannung im Bereich 4-5.5Volt?
- richtig gepolt?
- Kurzschlüsse?
- an die richtigen Pins angeschlossen, Nummern der Pins richtig gezählt?

Auch nun immer noch ja?
Ok, dann:
- Lötzinnpopel oder Bratzen auf den Leiterbahnen oder Chips?
- sendest Du Daten ZUM Display, hast WR aber auf lesen gesetzt, 
bekämpfen sich also die Signale auf dem Bus?
- Timing und Betriebsmodi (4/8 Bit) richtig kapiert und programmiert?
- Liegt eine korrekte (möglichst einstellbare) Kontrastspannung an.
- ist die Versorgungsspannung sauber, oder schwingt die wie Sau?

Wenn das alles richtig ist klappt das Display auf jeden Fall, ausser es 
ist bereits defekt. Merke: Diese Displays funktionieren nicht durch 
Zufall oder aus Glück, sondern durch richtiges Betreiben.

Jochen Müller

von Jörn A. (joerna)


Lesenswert?

in welchem Bereich liegt meistens die richtige Kontrastspannung?

ich habe folgendes LCD (auch HD44780 komp.) und 
http://www.pollin.de/shop/downloads/D120476D.PDF

stelle die kontrastspannung über ein poti zwischen 0-5V und bekomme auch 
schwarze felder aber keine Anzeige.

Die Fleury programme müssten doch sonst auf anhieb laufen, wenn man es 
genauso angeschlossen hat!! aber will irgendwie nicht

von Frank L. (hermastersvoice)


Lesenswert?

Taschenbuchjochen schreibt mir aus der Seele!

von gast (Gast)


Lesenswert?

Bei mir ist der Konrastpin über 220 Ohm gegen Masse.

von Jochen M. (taschenbuch)


Lesenswert?

Zum Kontrast:

Das ist eine SEHR INDIVIDUELLE Sache der Displayhersteller, und hat 
erstmal NICHTS mit dem Controller (z.B. 44780) zu tun, sondern von den 
Zeilentreibern die verbaut wurden. Softwareseitig und von der Art der 
Darstellung können Displays absolut identisch sein, aber völlig andere 
Kontrastspannungen benötigen. Dafür dient dann zum Beispiel das für 
viele Leute immer noch mysteriöse Datenblatt.

Ich habe hier zum Beispiel Sharp-Displays LM240nn, die einen 44780 
Controller  haben, aber eine negative Kontrastspannung benötigen, die 
dann lästigerweise erst umständlich erzeugt werden muss. Andere Displays 
sind nahezu baugleich, zeigen gleichviele Zeilen/Spalten, haben den 
gleichen Controller und benötigen aber eine positive Kontrastspannung.

Also:
Immer INDIVIDUELL für das JEWEILIGE DISPLAY die Infos beschaffen und 
entsprechend umsetzen. Auf jeden Fall würde ich die Kontrastspannung 
aber regelbar machen (kleiner Trimmer reicht), denn eine nur geringfügig 
optimierte Einstellung kann absolut Wunder wirken. Eine feste 
Einstellung kann niemals (niemals!!!) einen optimalen Kontrast für den 
gewünschten Blickwinkel bringen. Derjenige Depp, der werkseitig 
ernsthaft glaubt eine Festeinstellung vornehmen zu können, ist dumm, 
fehlbesetzt und anmassend, denn er kennt Betrachtungswinkel und 
Lichtverhältnisse des Anwenders nicht. Und Hellseher wird er nicht sein.

Ich wiederhole es noch einmal ausdrücklich:
Eine nur MINIMALE Änderung der Kontrastspannung kann WUNDER WIRKEN, 
daraus folgt unausweichlich, dass diese regelbar sein muss. Zumindest 
wenn man aus seinem Display das Beste herausholen möchte.

Jochen Müller

von Mike (Gast)


Lesenswert?

Wenn eine Zeile schwarz und die andere hell ist, dann ist der Kontrast 
schon mal (ungefähr) richtig eingestellt. Ansonsten kann es an so 1000 
verschiedenen Dingen liegen.

Ich würde mal die Verdrahtung überprüfen (direkt am LCD nachschauen ob 
die Versorgungsspannung am richtigen Pin ist) ansonsten das Timing 
nachmessen  und dann die Initialisierung mit der im Datenblatt 
vergleichen.

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.