Forum: Compiler & IDEs LCD Initialisierung mit Fleury


von Germo (Gast)


Angehängte Dateien:

Lesenswert?

Hoi,

ich bin ein µc Neuling und versuche gerade ein LCD über meinen 
ATMega8535 (1MHz) anzusteuern, jedoch klappt das ganze nicht so wie ich 
es gern hätte =)

Mein Hauptprogramm besteht derzeit nur aus der Port Initialisierung und 
der Funktion

lcd_init (LCD_DISP_ON_CURSOR_BLINK);

Beim compilieren treten keine Fehler auf aber auf meinem Display (4x16 
Zeichen; KS0070B Controller) sind die erste und die 3. Reihe schwarz, 
die 2. und 4. nicht zu sehen.

Kontrast Kontakte habe ich an ein Poti angeschlossen, hat aber keinen 
Effekt auf das Display. Ich nehme an das ich bei der lcd.h einige 
Angaben nicht richtig eingestellt habe, könnte das vlt mal einer 
überprüfen?

Das LCD hängt an PortB (8-Bit Mode)
RS -> PortC 0
RW -> PortC 1
E  -> PortC 2

Ich habe mal die lcd.h angehängt, so wie ich sie zZ konfiguriert habe.

Vielen Dank schonmal im Vorraus =)
Gruß -Germo-

von Steffen (Gast)


Lesenswert?

setz das mal auf null:

#define LCD_CONTROLLER_KS0073 1  /**< Use 0 for HD44780 controller, 1 
for KS0073 controller */

Hast du nochmal einen Schaltplan, da du mit dem Poti eigentlich den 
Kontrast einstellen müsstest. vll. ist der Kontrast zu hoch und du 
kannst ihn durch irgendeinen Anschlußfehler nicht einstellen.

Gruß
Steffen

von Steffen (Gast)


Lesenswert?

Ah ich habe gerde gesehen das du die Pins für RS/RW/E falsch 
konfiguriert hast, die zeigen auf PortB aber du hast sie an Portc 
angeschlossen.

Also so:
#define LCD_PORT         PORTB        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      PORTC     /**< port for RS line         */
#define LCD_RS_PIN       0            /**< pin  for RS line         */
#define LCD_RW_PORT      PORTC     /**< port for RW line         */
#define LCD_RW_PIN       1            /**< pin  for RW line         */
#define LCD_E_PORT       PORTC     /**< port for Enable line     */
#define LCD_E_PIN        2            /**< pin  for Enable line     */

von Germo (Gast)


Lesenswert?

Oh ich hab gerade gesehen ich hab die falsche Datei angehängt, die Ports 
hatte ich auf PORTC geändert, bzw PORTB für die Datenleitungen.

Wieso soll ich bei dem KS Chipsatz den Wert wieder auf 0 setzen? Laut 
Datenblatt ists zumindest ein KS Chipsatz - also wenn das nun 
funktionert ... g

von Germo (Gast)


Lesenswert?

Update: Also auch mit der Einstellung:

#define LCD_CONTROLLER_KS0073 0  /**< Use 0 for HD44780 controller, 1
for KS0073 controller */

hab ich die erste und 3. Reihe schwarz. Mit dem Kontrast kann ich auch 
nicht viel machen -> 0 - 5 V regelbar aber auch keine Änderung

von Gast (Gast)


Lesenswert?

Bei mir lief die Bibliothek nur in der Optimierungsstuffe -O0. Sobald 
ich auf -OS geschaltet habe hatte ich ähnliche Probleme.

Habe nicht genau erruiert weshalb es nicht lief. Vermute das irgendeine 
Warteschleife für's Timming nicht mitspielt. Sollte jemand genaueres 
herrausfinden, wäre ich für einen kleinen Hinweis dankbar.

von Germo (Gast)


Lesenswert?

Ich habs auch mal mit verschiedenen Optimierungsstufen probiert aber 
auch da kein Erfolg.

Wenn ich mein Display mit ICCAVR initialisiere funktioniert es 
einwandfrei, also am Display liegt es auch nicht.

Ich vermute auch das mit dem Timing etwas nicht so 100%ig stimmt aber 
ich bin mir da eben nicht so ganz sicher ...

von Germo (Gast)


Lesenswert?

Hmm kann mir einer sagen was es damit auf sich hat?

#if LCD_CONTROLLER_KS0073
#if LCD_LINES==4

#define KS0073_EXTENDED_FUNCTION_REGISTER_ON  0x24   /* |0|010|0100 
4-bit mode extension-bit RE = 1 */
#define KS0073_EXTENDED_FUNCTION_REGISTER_OFF 0x20   /* |0|000|1001 4 
lines mode */
#define KS0073_4LINES_MODE                    0x09   /* |0|001|0000 
4-bit mode, extension-bit RE = 0 */


finde diesbezüglich nichts im Datenblatt des LCD

Im Datenblatt steht eh nur 1 oder 2 lines, hat mich auch schon etwas 
durcheinander gebracht, aber wie gesagt, mit icc gehts einwandfrei

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Im Datenblatt steht eh nur 1 oder 2 lines, hat mich auch schon etwas
> durcheinander gebracht, aber wie gesagt, mit icc gehts einwandfrei

Dann hast du ein falsches Datenblatt oder die vier Zeilen werden intern 
als zwei Zeilen behandelt.

> Beim compilieren treten keine Fehler auf aber auf meinem Display (4x16
> Zeichen; KS0070B Controller) sind die erste und die 3. Reihe schwarz,
> die 2. und 4. nicht zu sehen.

Das spricht dafür, dass intern die erste Zeile angesprochen wird und 
diese auf zwei sichtbare Zeilen umgebrochen ist.

Um welches LCD von welchem Hersteller handelt es sich konkret? Benutzt 
du beim ICCAVR exakt die gleichen Sourcen wie beim ??? Version ???

von Germo (Gast)


Lesenswert?

Unter ICC habe ich mir die initialisierung selber zusammen geschrieben 
mit Hilfe des Datenblattes. Da ich aber die wesentlich umfangreichere 
Bibliothek von Fleury nutzen möchte (warum das Rad 2x erfinden? g) bin 
ich auf AVR-GCC umgestiegen

LCD nutze ich folgendes:

http://www.reichelt.de/?SID=25YX7qiX8AAAIAADsFMooc05b0a0b25ab5cf84691180bf9fde913;ACTION=3;LA=4;GROUP=A5211;GROUPID=3005;ARTICLE=31656;START=0;SORT=artnr;OFFSET=16

Sollte ich da lieber ein anderes nutzen?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Fleury-Library mit dem Controller KS0073 und dein Display mit dem 
Controller KS0070B unterscheiden sich im Controllertyp. Um sicherzugehen 
muss man die Datenblätter nebeneinander vergleichen und ggf. die Fleury 
Library anpassen.

KS0070B - 
http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0070B_V0.pdf
KS0073 - 
http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0073.pdf

In deinem lcd.h stimmen die Definitionen der LCD_START_LINE1 bis 
LCD_START_LINE4 nicht mit den Daten zum "DISPLAY DATA RAM ADDRESS MAP" 
aus dem Datenblatt überein.

Es sollte so aussehen:
1
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
2
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
3
#define LCD_START_LINE3  0x10     /**< DDRAM address of first char of line 3 */
4
#define LCD_START_LINE4  0x50     /**< DDRAM address of first char of line 4 */

Desweiteren definierst du
1
#define LCD_IO_MODE      1         /**< 0: memory mapped mode, 1: IO port mode */

In diesem Modus arbeitest du IMMER mit 4-Bit-Ansteuerung, d.h. nicht wie 
von dir vorgesehen mit 8-Bit.

Um mit 8-Bit zu arbeiten müsste
1
#define LCD_IO_MODE      0         /**< 0: memory mapped mode, 1: IO port mode */

definiert werden.

Damit der memory mapped mode funktioniert, muss das LCD definiert an das 
external data memory interface eines geeigneten µC angeschlossen werden 
(ATMega8535 ist geeignet). Deine Zuordnung zu PORTB und PORTC ist zu 
überprüfen.

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.