Forum: Compiler & IDEs LCD-Display


von Haniel (Gast)


Lesenswert?

Hi,

kennt ihr links zu anderen guten lcd tutorials oder anderen info-seiten 
in C???

Danke

von Fernando Heitor (Gast)


Lesenswert?


von Jan Wagner (Gast)


Lesenswert?

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

von Philipp Guth (Gast)


Lesenswert?

Die hier ist super. Da gibt's auch eine LCD-Lib für den AVR-GCC.

http://www.mysunrise.ch/users/pfleury/

von Zoltan Gradwohl (Gast)


Angehängte Dateien:

Lesenswert?

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

von Zoltan Gradwohl (Gast)


Lesenswert?

Vergessen: Soll in 4-bit Mode laufen, wie unten auf Peters Homepage 
abgebildet. http://www.mysunrise.ch/users/pfleury/avr-lcd44780.html

von Perter Fleury (Gast)


Lesenswert?

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_)

von Joerg Wunsch (Gast)


Lesenswert?

Das sind praktisch dann 2*8 Varianten, wenn ich das richtig
sehe...

von Perter Fleury (Gast)


Lesenswert?

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.

von Perter Fleury (Gast)


Lesenswert?

Im AVRfreaks forum wurde genau dieses Problem besprochen:

http://8515.avrfreaks.net/phorum/read.phpf=3&i=41328&t=41319#41328

von Perter Fleury (Gast)


Lesenswert?


von Zoltan Gradwohl (Gast)


Lesenswert?

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

von Peter Fleury (Gast)


Angehängte Dateien:

Lesenswert?

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

von Zoltan Gradwohl (Gast)


Lesenswert?

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

von Zoltan Gradwohl (Gast)


Lesenswert?

Da war ein Fehler oben, so sollte es heißen:

lcd_puts( "01234567890ABCDEFGHIJKLM*;." );
liefert auf dem LCD:
EFGHIJKLM*;.ABCDE

von Peter Fleury (Gast)


Lesenswert?

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.

von Zoltan Gradwohl (Gast)


Lesenswert?

Gibt es keine andere einfache Möglichkeit mit Deinem Programm einen 
Lauftext auf so einem Display zu erzeugen?

von Peter Fleury (Gast)


Lesenswert?

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.

von Zoltan Gradwohl (Gast)


Lesenswert?

Ok, so werde ich es machen. Vielen Dank nochmal für Deine Hilfe.

Gruß
Zoltan

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
Noch kein Account? Hier anmelden.