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 */ |
1 | #define LCD_RS_PIN 4 /**< pin for RS line */ |
1 | #define LCD_RW_PIN 5 /**< pin for RW line */ |
1 | #define LCD_E_PIN 6 /**< pin for Enable line */ |
PS: Steffen Z. schrieb: > das Display (wie im entsprechenden Artikel > beschrieben) an Port D angeschlossen. Welchen Artikel meinst Du? Zufällig diesen: http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Anschluss_an_den_Controller ? 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.
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?
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.