Hallo,
ich habe mir ein STK500 sowie einige Controller, ein Display und einige
andere Bauteile geholt und das Display (wie im entsprechenden Artikel
beschrieben) an Port D angeschlossen.
In Assembler lässt sich das Display ansteuern, in C schaffe ich es
jedoch nicht. Es werden nur alle Stellen vollständig ausgefüllt.
Das Display ist ein Blueline EA W204B-NLW mit 4x20 Zeichen.
Ich habe es sowohl mit der LCD-Library von
http://www.wiki.elektronik-projekt.de/mikrocontroller/avr/avr-gcc-library/lcd_library
probiert als auch mit einigen Beispielen aus dem Forum. Könnte jemand
bitte nochmal ein Beispiel für diesen Displaytyp einstellen oder mir
sagen was an der geänderten Konfiguration von der oben genannten Seite
(im Anhang) falsch ist?
Außerdem wird bei den Beispielen in Assembler bei mir der Text erst in
Zeile 1, dann in Zeile 3 und erst danach in Zeile 2, dann zum Schluss in
Zeile 4 angezeigt. Was muss ich ändern, damit die Reihenfolge der Zeilen
stimmt?
Schonmal vielen Dank
Steffen
Hallo! im Anhang das entsprechende PDF.
Der eingebaute KS0073 unterscheidet sich in den Anfangsadressen
gegenueber HD44780 ein wenig.
1. Zeile $00..$13
2. Zeile $20..$33
3. Zeile $40..$53
4. Zeile $60..$73
Die Initialisierung ist auch etwas anders (siehe Seite 3 oben ).
Vllt. hilft dir das weiter.
Danke, aber wirklich geholfen hat es mir leider nicht.. Bin ein
ziemlicher Anfänger was µC-Programmierung angeht..
Was bedeutet das jetzt? Was muss ich ändern damit es funktioniert?
Als Anhang mal die Dateien, sowohl Assembler als auch vom C-Versuch.
>Danke, aber wirklich geholfen hat es mir leider nicht.. Bin ein>ziemlicher Anfänger was µC-Programmierung angeht..>Was bedeutet das jetzt?
Das Du als Anfänger nicht genügend Kenntnisse hast um die die Natur
Deines Problems zu verstehen auch wenn es Dir genannt wird.
Das einzige was dagegen hilft, ist die Grundlagen zu lernen.
Schau nochmal auf Seite 3 im Datenblatt.
Im Initialisierungsbeispiel wird das sog. RE bit gesetzt, das wird
benötigt damit das Display in den 4 Zeilenmodus gesetzt werden kann.
Ansonsten bleibt es im 2 Zeilenmodus.
Du musst nur die 3 Befehle Function Set in deine LCD_Init Routine
unterbringen an der richtigen stelle.
Hinweis: Für den 4-Bit Modus muss DL=0 sein.
Schau dir Function Set genau an und Studier die Befehlstabelle.
Okay, ich werde mir nochmal alles ganz genau ansehen und versuchen, es
diesmal zu verstehen. Wenn es läuft oder ich nochmal Hilfe brauche,
melde ich mich wieder :) Vielen Dank!
Hallo Steffen,
wo hast du den Code (C Code) her?
das habe irgenwie ergänz oder besser gesagt "gestrickt" um etwa mit
"laufenden" Text zu experimentieren, nimmt lieber ein "Normales" C Code
und verstehe es bzw. geht nach dem Tutorial
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung)
damit du näheres verstehen kannst.
Die meisten Code funktionieren auf Anhieb man muß nur paar Änderungen in
.h Datei (PORT, Pin usw.) vornehmen.
z.B. im Anhang noch ein Code, da muß man nur in "lcd-routines.h" PORT
und PIN ändern, fertig
Gruß
Martin
Hallo Martin,
woher ich den Code habe kann ich leider nicht mehr sagen, da ich zu
viele Codes ausprobiert habe um das noch rausfinden zu können.
Ich habe sowohl die Codes aus dem Tutorial als auch die im Anhang
ausprobiert, aber das einzige was geschieht ist, dass die erste und
dritte Zeile komplett ausgefüllt werden. Im Anhang ist meine geänderte
Header-Datei (die Version von deinem Beitrag). Das Display ist, wie
schonmal geschrieben, an Port D auf dem STK500 angeschlossen, dabei sind
die Anschlüsse an dem Stecker genau wie im Artikel "AVR-Tutorial: LCD"
verlötet.
Nochmal Danke und viele Grüße
Steffen
Bis jetzt hast Du es immer noch nicht geschafft das Display richtig zu
initialisierren!
Um mit Deiner ursprünglichen lcd-routines.asm anzufangen.
Diese Zeilen hier sind Schrott:
1
ldi temp1, 0b00101000 ; 4 Bot, 2 Zeilen
2
rcall lcd_command
Wie kommst Du darauf, daß etwas mit "2 Zeilen" kommentiertes so ohne
weiteres mit einem vierzeiligen Display funktionieren könnte?
Besser wäre stattdessen:
1
ldi temp1, 0b00100100
2
rcall lcd_command
3
ldi temp1, 0b00001001
4
rcall lcd_command
5
ldi temp1, 0b00100000
6
rcall lcd_command
Und warum das so ist darfst Du jetzt anhand des von Klaus geposteten
Datenblattes und insbesondere seines zweiten Posts selbst nachvollziehen
und dann die fehlenden Kommentare noch dazu schreiben.
Und wenn Du das geschafft hast, dann müsstest Du eigentlich auch wissen
was Du an der von Martin geposteten lcd-routines.c ändern müsstest(Tip:
eine Zeile durch drei neue ersetzen). Wenn Du Dir dann den ersten Post
von Klaus auch noch mal durchliest und dann Martins 'set_cursor'
Funktion auch noch entsprechend korrigierst, dann sollte es auch mit C
klappen.
Btw. für C ist die Lib von Peter Fleury mit die beste die Du finden
kannst:
http://jump.to/fleury
direkt:
http://homepage.hispeed.ch/peterfleury/lcdlibrary.zip
Und schau unbedingt in die darin enthaltene HTML-Datei!
Du müßtest in der enthaltenen lcd.h vermutlich nur folgende Zeilen
ändern
1
#define XTAL 4000000 /**< clock frequency in Hz, used to calculate delay timer */
1
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
Tip: Du hast einen KS0073.
1
#define LCD_LINES 2 /**< number of visible lines of the display */
2
#define LCD_DISP_LENGTH 16 /**< visibles characters per line of the display */
1
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
2
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
3
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
4
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
(siehe 2. Post von Klaus bzw. Datenblatt Seite 3)
1
#define LCD_PORT PORTA /**< port for the LCD lines */
Hubert G. schrieb:> Die Lib von Fleury gibt es auch ohne R/W
Ja, da hast Du Dir zwar Mühe gegeben und versucht das RW aus der Lib
raus zu operieren, aber leider nicht vollständig. Die Lib wird so nur
teilweise funktionieren, beispielsweise geht die Behandlung von '\n'
schief und das Linewrapping dürfte auch nicht mehr gehen.
Vielen, vielen Dank nochmal für eure Geduld und die guten
Tipps/Anleitungen. Ich glaube so langsam beginne ich das alles zu
verstehen..
... schrieb:> Welchen Artikel meinst Du? Zufällig diesen:> http://www.mikrocontroller.net/articles/AVR-Tutori...> ?> Dann funktioniert die Lib von Peter leider nicht so ohne weiteres :(> Die setzt voraus, daß auch der Pin 5 vom Display ('RW') mit> angeschlossen ist.
Ja, den Artikel meinte ich. Wie müsste ich den Pin denn noch anschließen
bzw. ist das überhaupt noch ohne Weiteres möglich?