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
Dein Programm fehlt leider und das LCD hat 0x40 Zeichen? Ist PortC aktivert?
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.
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.
> 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.
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 */ |
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.
Dein Takt passt? Überprüf das nochmal, und die Ports musst du nicht setzen, das macht die Funktion lcd-init() für dich. MfG
Okay, ich verstehe. Aber wo könnte mein Problem sonst liegen? Hättest du da ne Ahnung?
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?
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.
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
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.
K. B. schrieb: > Das LN Bit ist welches? Sorry, das war ein Fehler. Ist im Datenblatt mit "N" benannt. Bit 3 im Function Set.
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?
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
Und welche Datenleitungen sind am LCD belegt für den 4-Bit modus ? Richtig D4-D7 und nicht D0-D3 !
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.