mikrocontroller.net

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


Autor: dario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <stdio.h>
#include <p30fxxxx.h>

void init_lcd();
void wait(int ticks);

int main(){

//Port G - ausgang
TRISG=0x0;
PORTG=0;

//Port D - ausgang
TRISD=0x0;
PORTD=0;

//Timer 1
T1CONbits.TGATE=0;
T1CONbits.TSIDL=0;
T1CONbits.TCKPS=0b10; // =Tcy/64 => 1 tick = 17,8µS @ 14,343MHz
T1CONbits.TSYNC=0;
T1CONbits.TCS=0;

//Uart - für printf()
U1MODE &=0xFFF8; //8N1
U1BRG = 11; // Vorteiler für 19200 Baud@14,343 MHz
U1MODE |=0x8000; //Uart enable
U1STA |=0x0200; //tx enable

//A/D-Umsetzer
ADCON1bits.FORM=0;
ADCON1bits.SAMP=1;
ADCON1bits.ASAM=1;
ADCON1bits.SSRC=0b111;

ADCON2bits.VCFG=0b111;
ADCON2bits.CSCNA=0;
ADCON2bits.CHPS=0;
ADCON2bits.SMPI=0;
ADCON2bits.BUFM=0;
ADCON2bits.ALTS=0;

ADCON3bits.SAMC=0b00001;
ADCON3bits.ADCS=0b111111;
ADCON3bits.ADRC=0;

ADCHSbits.CH0NA=0;
ADCHSbits.CH0SA=0b0100;

ADPCFG=0b1111111111100011;
ADCON1bits.ADON=1;

double temp=0;
init_lcd(); //lcd initialisierung

while (1){

  while (!ADCON1bits.DONE);
  temp=(ADCBUF0/1024.0)*5.17;
  printf("%fV\r\n",temp);
}

return 0;
}

void wait(int ticks){
TMR1=0;
PR1=ticks;
T1CONbits.TON=1;
PORTGbits.RG9=1; //LED an
while (!(PR1==TMR1));
PORTGbits.RG9=0; //LED aus
IFS0bits.T1IF=0;
T1CONbits.TON=0;
TMR1=0;
PR1=0;
}

void init_lcd(){
wait(11240);         //600ms auf Vcc warten
wait(11240); 
wait(11240); 

PORTD=0b0000000110000000;  
wait(10);
PORTD=0b0000000110000100;  //function set
wait(10);
PORTD=0b0000000110000000;  
wait(280);           //5 ms warten
PORTD=0b0000000110000100;  //function set
wait(10);
PORTD=0b0000000110000000;
wait(10);          //178 µs warten
PORTD=0b0000000110000100;  //function set
wait(10);
PORTD=0b0000000110000000;
wait(5);


PORTD=0b0000000111000000;
wait(10);          //178 µs warten
PORTD=0b0000000111000100;  //function set
wait(10);
PORTD=0b0000000111000000;
wait(10);

PORTD=0b0000000001000000;
wait(10);          //178 µs warten
PORTD=0b0000000001000100;  //function set
wait(10);
PORTD=0b0000000001000000;
wait(10);

PORTD=0b0000000000001000;
wait(10);          //178 µs warten
PORTD=0b0000000000001100;  //function set
wait(10);
PORTD=0b0000000000001000;
wait(10);

PORTD=0b0000000000110000;
wait(10);          //178 µs warten
PORTD=0b0000000000110100;  //function set
wait(10);
PORTD=0b0000000000110000;
wait(10);
}


Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörn Ahrens (joerna)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank L. (hermastersvoice)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Taschenbuchjochen schreibt mir aus der Seele!

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir ist der Konrastpin über 220 Ohm gegen Masse.

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.