Forum: Mikrocontroller und Digitale Elektronik LCD Programmierproblem


von K. B. (derkevin)


Angehängte Dateien:

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

von Uwe (de0508)


Lesenswert?

Dein Programm fehlt leider und das LCD hat 0x40 Zeichen?

Ist PortC aktivert?

von K. B. (derkevin)


Angehängte Dateien:

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.

von Karl H. (kbuchegg)


Lesenswert?

Mega16 und PORTC?

Hast du das JTAGEN per Fuse abgeschaltet?

von K. B. (derkevin)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Mega16 und PORTC?

Richtig. Ich verwende den ATMega16 und das Display hängt am PORTC.

Karl Heinz Buchegger schrieb:
> Hast du das JTAGEN per Fuse abgeschaltet?

Muss man das? Habe ich nicht.
Aber ich habe mit dem selben Mega16 auf einem anderen Board bereits ein 
anderes LCD ansteuern können.

von Karl H. (kbuchegg)


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.

von K. B. (derkevin)


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 */

von Karl H. (kbuchegg)


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.

von demacus (Gast)


Lesenswert?

Dein Takt passt?

Überprüf das nochmal, und die Ports musst du nicht setzen, das macht die 
Funktion lcd-init() für dich.

MfG

von Karl H. (kbuchegg)


Lesenswert?

Was ist damit
1
#define XTAL 8000000

stimmen die 8Mhz?

von K. B. (derkevin)


Lesenswert?

Okay, ich verstehe.
Aber wo könnte mein Problem sonst liegen?
Hättest du da ne Ahnung?

von K. B. (derkevin)


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?

von demacus (Gast)


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.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

K. B. schrieb:
> Meiner Meinung nach kann das nur einen Programmierfehler zur Folge
> haben.

nicht zur Folge, sondern als Ursache. Folge des Programmfehlers ist 
dann die falsche Darstellung im Display

von K. B. (derkevin)


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.

von demacus (Gast)


Lesenswert?

K. B. schrieb:
> Das LN Bit ist welches?

Sorry, das war ein Fehler. Ist im Datenblatt mit "N" benannt.

Bit 3 im Function Set.

von ... (Gast)


Lesenswert?

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

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

von spess53 (Gast)


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

von Uwe (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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

Und was soll daran Falsch sein? Für 4-bit Modus muss er ja die Pins 
D4-D7 benutzen.

von K.B. (Gast)


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?

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.