LCD Programmierproblem

OP #2525410
Lesenswert?

Mahlzeit!

Wiedermal habe ich ein für mich unlösbares Problem bei einem meiner 
Mikrocontroller.
Ich habe ein LCD (http://www.lcd-module.de/pdf/doma/8081a3n.pdf), 
welches ich am Board angeschlossen habe - der schwarze Balken erscheint 
auch und soweit ist alles in Ordnung.
Nur wenn ich das Display initialisieren und einen Test-String ausgeben 
will, macht es nichts - der schwarze Balken bleibt und es wird weder 
initialisiert, noch etwas ausgegeben.

Meiner Meinung nach kann das nur einen Programmierfehler zur Folge 
haben.
Ich verwende die Bibliothek von Peter Fleury - in der Header Datei habe 
ich die nötigen Lines umgeschrieben. Das heißt die 4 Datenleitungen und 
R/S, RW, E. Nur habe ich den verdacht, dass man da sonst auch vielleicht 
noch was ändern muss. Ja, die Line-Anzahl und die Breite des LCD's habe 
ich auch eingestellt. Aber ist da sonst auch noch etwas zu ändern?

Im Anhang findet ihr meinen Schaltplan und den Code der von mir bereits 
abgeänderten Header Datei.
In der C-Datei der Bibliothek habe ich soweit nichts geändert - 
angehängt habe ich sie trotzdem.
Es wäre klasse wenn sich wer den Code ansehen könnte und mir eventuell 
sagen kann ob der in Ordnung ist oder nicht.
Danke im Voraus.

MfG Kevin
Angehängte Dateien:
OP #2525428
Lesenswert?

Uwe S. schrieb:
> Dein Programm fehlt leider

Tut mir leid, ist jetzt angehängt.

Uwe S. schrieb:
> und das LCD hat 0x40 Zeichen?

Das weiß ich eben nicht - das mit der 'internal line length' habe ich 
nicht verstanden. Könntest du mich da bitte kurz aufklären?
Im Datenblatt lässt sich zu dem ja auch nichts finden.

Uwe S. schrieb:
> Ist PortC aktivert?

Ja, siehst du jetzt im Programm - ist aktiviert.
Angehängte Dateien:
#2525437
Lesenswert?

> Karl Heinz Buchegger schrieb:
>> Hast du das JTAGEN per Fuse abgeschaltet?
>
> Muss man das? Habe ich nicht.

Dann hast du schon einen Grund, warum das LCD nicht funktioniert (kann 
auch noch weitere geben, aber das ist mit Sicherheit mal einer).

Ja, muss man abschalten. Die Pins an C tun sonst nicht das was dein 
Programm sagt.

> Aber ich habe mit dem selben Mega16 auf einem anderen Board bereits ein
> anderes LCD ansteuern können.

Am Port C? Wenn JTAG nicht abgeschaltet ist, kann das am Port C nicht 
funktionieren.
OP #2525447
Lesenswert?

Karl Heinz Buchegger schrieb:
> Am Port C? Wenn JTAG nicht abgeschaltet ist, kann das am Port C nicht
> funktionieren.

Tut mir leid, ein Irrtum meinerseits.
Ich habe gerade die Fusebits mit PonyProg 'nachgelesen' - und ja, JTAGEN 
ist deaktiviert.

Und wie gesagt, ich habe auf einem anderen Board bereits mit dem selben 
Mega16 ein anderes LCD angesteuert und das hat funktioniert.
Dann habe ich nur gewisse Änderungen in der Header Datei vorgenommen. 
Wie gesagt, die Line Anzahl sowie die Anzahl der Zeichen und die Pins 
für die Datenleitungen - mehr nicht.

Aber ich weiß eben in diesem Abschnitt des Programmes nicht was ich da 
einstellen muss:
1
/** 
2
 *  @name  Definitions for Display Size 
3
 *  Change these definitions to adapt setting to your display
4
 */
5
#define LCD_LINES           1     /**< number of visible lines of the display */
6
#define LCD_DISP_LENGTH     8     /**< visibles characters per line of the display */
7
#define LCD_LINE_LENGTH  0x40     /**< internal line length of the display    */
8
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
9
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
10
#define LCD_START_LINE3  0x14     /**< DDRAM address of first char of line 3 */
11
#define LCD_START_LINE4  0x54     /**< DDRAM address of first char of line 4 */
12
#define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */
#2525493
Lesenswert?

K. B. schrieb:

> Aber ich weiß eben in diesem Abschnitt des Programmes nicht was ich da
> einstellen muss:
>
1
> /**
2
>  *  @name  Definitions for Display Size
3
>  *  Change these definitions to adapt setting to your display
4
>  */
5
> #define LCD_LINES           1     /**< number of visible lines of the display */
6
> #define LCD_DISP_LENGTH     8     /**< visibles characters per line of the display */
7
> #define LCD_LINE_LENGTH  0x40     /**< internal line length of the display    */
8
> #define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
9
> #define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
10
> #define LCD_START_LINE3  0x14     /**< DDRAM address of first char of line 3 */
11
> #define LCD_START_LINE4  0x54     /**< DDRAM address of first char of line 4 */
12
> #define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */
13
> 
14
>

Ist erst mal egal.
Dein Problem

> der schwarze Balken bleibt und es wird weder initialisiert, noch
> etwas ausgegeben.

hat damit erst mal nichts zu tun. Das LCD wird nicht initialisiert, 
damit ist es unerheblich, ob deine Zeilenlängen korrekt sind oder nicht.
OP #2525504
Lesenswert?

Karl Heinz Buchegger schrieb:
> stimmen die 8Mhz?

Ja, das stimmt - habe einen 8MHz Quarz drinnen.

Edit:
Eine andere Frage:
Wenn ich die Fusebits so setze, dass der externe Quarz verwendet werden 
soll und der Rest des Boards funktioniert dann ist doch eigentlich 
bestätigt dass der Takt vom Quarz in Ordnung ist, oder?
Sonst würde man doch kein Programm auf den Mega laden können, oder?
Gast #2525526
Lesenswert?

Also falls dein Takt passt, versuch mal LCD_LINES auf 2 zu setzen, im 
Datenblatt sieht es mir so aus als hätte das Display gern eine 1 im LN 
Bit des Funtionssets.

Falls du den Quartz nicht ausschliessen kannst benutz Testweise mal den 
internen Takt.
OP #2525545
Lesenswert?

Wegstaben Verbuchsler schrieb:
> nicht zur Folge, sondern als Ursache. Folge des Programmfehlers ist
> dann die falsche Darstellung im Display

Tut mir leid, stimmt natürlich so wie du es verfasst hast.

demacus schrieb:
> Also falls dein Takt passt, versuch mal LCD_LINES auf 2 zu setzen, im
> Datenblatt sieht es mir so aus als hätte das Display gern eine 1 im LN
> Bit des Funtionssets.

Das LN Bit ist welches?
Aber erstmal danke für den Tipp, wenn ich zu Hause bin werde ich das 
gleich versuchen.
Gast #2525562
Lesenswert?

Hi

>mal eine ganz einfache Frage, hast du mal am Kontrastregler gedreht?
>Oder ist dein Kontrast voll auf?

Kann er ja nicht. VEE über Widerstand auf GND gelegt.

Also mach dort mal ein Poti rein.

MfG Spess
Gast #2527001
Lesenswert?

demacus schrieb:
> Sorry, das war ein Fehler. Ist im Datenblatt mit "N" benannt.

Das werde ich mir am Wochenende gleich mal anschauen - danke.

... schrieb:
> mal eine ganz einfache Frage, hast du mal am Kontrastregler gedreht?
> Oder ist dein Kontrast voll auf?

Der Kontrast ist richtig eingestellt, dass habe ich bereits mit einem 
Poti probiert.

Uwe schrieb:
> Und welche Datenleitungen sind am LCD belegt für den 4-Bit modus ?
> Richtig D4-D7 und nicht D0-D3 !

Wenn du einen Blick auf meine Schaltung geworfen hättest, würdest du das 
nicht fragen ;)
Ich habe logischerweise D4-D7 verwendet.

Hat sonst noch wer eine Idee?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren