Hi, kennt ihr links zu anderen guten lcd tutorials oder anderen info-seiten in C??? Danke
http://www.hut.fi/~jwagner/electr/dc-rx/firmware/ und dort MSP430-fw-lcd.c, MSP430-fw-lcd.h Das meiste steht in http://home.iae.nl/users/pouweha/lcd/lcd.shtml drin. Übrigens, vorsichtig sein mit dem Anschliessen. Pin 1 ist nicht unbedingt der mit dem roten Streifen am Kabel... Für grafische LCD's such mal www.google.com nach T6963C
Die hier ist super. Da gibt's auch eine LCD-Lib für den AVR-GCC. http://www.mysunrise.ch/users/pfleury/
Hallo ich habe mir auch gerade die LCD Library von Peter Fleury heruntergeladen. Nachdem ich alle Dateien (siehe Anhang) für meinen Atmega8 (8MHz) angepasst habe lief das LCD auch auf anhieb. Aber leider werden nur die ersten 8 Zeichen von dem 16x1 Display benutzt, und das Scrollen funktioniert auch nicht. Was ich geändert habe waren: #define LCD_LINES 1 /* visible lines */ -->auf 1 #define LCD_IO_MODE 1 /* 0: memory mapped mode, 1: IO port mode */ --> auf 1 #define LCD_PORT PORTB /* all lcd pins must be on SAME port */ --> auf PORTB natürlich auch so verkabelt #elif defined(_AVR_AT90S4414_) || defined(_AVR_AT90S8515_) || defined(_AVR_ATmega64_) || \ defined(_AVR_ATmega8515_)|| defined(_AVR_ATmega103_) || defined(_AVR__ATmega128_) || \ defined(_AVR_ATmega161_) || defined(_AVR_ATmega162_) || defined(_AVR_ATmega8_) --> hinzugefügt: || defined(_AVR_ATmega8_) im makefile #--- default mcu type MCU = atmega8 Ich würde mich über jeden Vorschlag freuen Gruß Zoltan
Vergessen: Soll in 4-bit Mode laufen, wie unten auf Peters Homepage abgebildet. http://www.mysunrise.ch/users/pfleury/avr-lcd44780.html
Ich gibt offenbar einige 1*16 LCD Varianten, wo die Zuordung der Character Positions auf dem Display und die interne Memory Adresse nicht linear ist: Ich vermute bei deinem Display könnte die Addressierung wie folgt sein: DDRAM addresses 00h..07h + 40h..47h Siehe auch: http://home.iae.nl/users/pouweha/lcd/lcd.shtml -> 2.3.1. 1-line displays Bitte studiere das Datenblatt deines LCD. Deine Zeile braucht es nicht: --> hinzugefügt: || defined(_AVR_ATmega8_)
Diese Vermutung habe ich auch. Wenn man einen langen String auf dieses LCD ausgibt, würde man sehen wie die Zeichen dargestellt werden lcd_puts("1234567890ABCDEF ... abcd"); <- 40 unterschiedliche Zeichen.
Im AVRfreaks forum wurde genau dieses Problem besprochen: http://8515.avrfreaks.net/phorum/read.phpf=3&i=41328&t=41319#41328
Hallo, vielen Dank erstmals für die Hilfe. Jetzt kann ich auch die restlichen 8 Zeichen ansprechen. Nun habe ich aber das Problem, dass ich vortlaufende Texte immer in zwei Zeilen aufteilen muss, und die Funktion LCD_MOVE_DISP_LEFT z.B. kann ich auch nicht verwenden, denn der schiebt ja beide imaginären Zeilen weiter, und das Ergibt ein Durcheinander auf dem Display: lcd_puts("Line1234\n"); lcd_puts("Line5678"); ergibt ja Line1234Line5678 und mit lcd_command(LCD_MOVE_DISP_LEFT)...; ine1234 ine5678 ne1234 ne5678 e1234 e5678 1234 5678 ... wie erwartet. Kann man diese (eigentlich zwei Zeilen) aber nicht ineinander fließen lassen: Line1234Line5678 ine1234Line5678 ne1234Line5678 e1234Line5678 1234Line5678 Gruß Zoltan
Ich habe jetzt meine LCD library so erweitert, dass der auszugebende Text automatisch auf die zwei imaginären Zeilen aufgeteilt wird, siehe Anhang: d.h. lcd_puts("1234567890") sollte in Display-Position 1..10 ausgegeben werden. Dazu muss das Display als 2*8 Zeichen definieren mit wrap bei Zeilen-Ende: #define LCD_LINES 2 /* visible lines */ #define LCD_DISP_LENGTH 8 /* visibles characters */ #define LCD_WRAP_LINES 1 /* 1: wrap at en of line */ Probier es mal mit deinem Display aus! Gruss Peter
Hallo Peter, Jetzt hängt er automatisch die "zweite Zeile" an die "erste". aber wenn ich ein längeres Wort habe als meine 16 möglichen, dann erscheint, z.B. der 17(*;.) Zeichen wieder an der ersten stelle und überschreibt diese: lcd_puts( "01234567890ABCDEFGHIJKLM*;." ); liefert auf dem LCD: *;.34567890ABCDE Bie LCD_MOVE_DISP_LEFT sieht es wieder so aus wie oben beschrieben. Gruß Zoltan
Da war ein Fehler oben, so sollte es heißen: lcd_puts( "01234567890ABCDEFGHIJKLM*;." ); liefert auf dem LCD: EFGHIJKLM*;.ABCDE
Ja das 17.Zeichen erscheint wieder an 1. Stelle auf dem Dispaly, das ist ein Feature meiner Library. Die Move-Funktion macht für dieses Display keinen Sinn, weil die beiden imaginären Zeilen einzelen geschoben werden.
Gibt es keine andere einfache Möglichkeit mit Deinem Programm einen Lauftext auf so einem Display zu erzeugen?
Die Funktion lcd_command(LCD_MOVE_DISP_LEFT) benutzt eine Schiebefunktion des LCD-Controller, d.h. das Schieben des Texts wird vom LCD-Controller vorgenommen und nicht von meiner Library. Dein Display verhält sich wie ein 2*8 Zeichen Display. Einen Lauftext über die ganze Zeilenlänge lässt sich bei diesem speziellen Displaytyp nur software-mässig machen.
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.