mikrocontroller.net

Forum: Compiler & IDEs LCD-Display


Autor: Haniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Danke

Autor: Fernando Heitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jan Wagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp Guth (Gast)
Datum:

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

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

Autor: Zoltan Gradwohl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Zoltan Gradwohl (Gast)
Datum:

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

Autor: Perter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_)

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind praktisch dann 2*8 Varianten, wenn ich das richtig
sehe...

Autor: Perter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Perter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im AVRfreaks forum wurde genau dieses Problem besprochen:

http://8515.avrfreaks.net/phorum/read.phpf=3&i=413...

Autor: Perter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Zoltan Gradwohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Fleury (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Zoltan Gradwohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zoltan Gradwohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da war ein Fehler oben, so sollte es heißen:

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

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zoltan Gradwohl (Gast)
Datum:

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

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zoltan Gradwohl (Gast)
Datum:

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

Gruß
Zoltan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.