LCD-Display

Gast #39964
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
Angehängte Dateien:
Gast #39966
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_)
Gast #39968
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.
Gast #39971
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
Gast #39972
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
Angehängte Dateien:
Gast #39973
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
Gast #39975
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.
Gast #39977
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren