Gast
#39960
Hi, kennt ihr links zu anderen guten lcd tutorials oder anderen info-seiten in C??? Danke
|
Anzeige
|
LCD-Display
Gast
#39960
Hi, kennt ihr links zu anderen guten lcd tutorials oder anderen info-seiten in C??? Danke
Gast
#39961
Schau dir diesen Beitrag an http://www.mikrocontroller.net/forum/read-1-27973.html
Gast
#39962
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
Gast
#39963
Die hier ist super. Da gibt's auch eine LCD-Lib für den AVR-GCC. http://www.mysunrise.ch/users/pfleury/
Gast
#39964
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
Gast
#39965
Vergessen: Soll in 4-bit Mode laufen, wie unten auf Peters Homepage abgebildet. http://www.mysunrise.ch/users/pfleury/avr-lcd44780.html
Gast
#39966
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_)
Gast
#39967
Das sind praktisch dann 2*8 Varianten, wenn ich das richtig sehe...
Gast
#39968
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.
Gast
#39969
Im AVRfreaks forum wurde genau dieses Problem besprochen: http://8515.avrfreaks.net/phorum/read.phpf=3&i=41328&t=41319#41328
Gast
#39970
Und hier der richtige Link: http://8515.avrfreaks.net/phorum/read.php?f=3&i=41328&t=41319#41328
Gast
#39971
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
Gast
#39972
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
Gast
#39973
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
Gast
#39974
Da war ein Fehler oben, so sollte es heißen: lcd_puts( "01234567890ABCDEFGHIJKLM*;." ); liefert auf dem LCD: EFGHIJKLM*;.ABCDE
Gast
#39975
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.
Gast
#39976
Gibt es keine andere einfache Möglichkeit mit Deinem Programm einen Lauftext auf so einem Display zu erzeugen?
Gast
#39977
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.
Gast
#39978
Ok, so werde ich es machen. Vielen Dank nochmal für Deine Hilfe. Gruß Zoltan Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|