4X20 LCD SPINNT

Gast #178372
Lesenswert?

Guten Tag.

Ich habe ein 4x20er LCD-Display an einen ATmega32 angeschlossen, um ihn
im 4-Bit-I/O-Modus zu betreiben.
Die lcd.h habe ich wie folgt angepasst:
#define XTAL 4000000
#define LCD_LINES           4
#define LCD_DISP_LENGTH    20
#define LCD_LINE_LENGTH  0x13
#define LCD_START_LINE1  0x00
#define LCD_START_LINE2  0x20
#define LCD_START_LINE3  0x40
#define LCD_START_LINE4  0x60
#define LCD_WRAP_LINES      0
#define LCD_IO_MODE      1
#define LCD_PORT         PORTA

Wenn ich nun folgende Befehle ausführe:
#include"lcd.h"
int main(void)
{ lcd_init(LCD_DISP_ON_CURSOR_BLINK);
  lcd_gotoxy(0,0);
  lcd_puts("A");
  lcd_gotoxy(0,1);
  lcd_puts("B");
  lcd_gotoxy(0,2);
  lcd_puts("C");
  lcd_gotoxy(0,3);
  lcd_puts("D");
  while(1); }
erscheint auf dem Display nur:
++--------------------+
||A                   |
||                    |
||C                   |
||                    |
++--------------------+

Was ist da los?
Liegt es an der Library?
Oder an meinen Defines?
Oder an was ganz anderem?
Gast #178374
Lesenswert?

> Welches Display?

"EA DIP204-4" von Reichelt

> Welche Bibliothek hast du verwendet?

Die von Peter Fleury

> Schreibt das Display nur 'A' und 'C' in die erste und dritte
Zeile
oder wo ist das Problem? :-)

Genau das ist das Problem.
Eigendlich sollte die Ausgabe so aussehen:
++--------------------+
||A                   |
||B                   |
||C                   |
||D                   |
++--------------------+
Gast #178375
Lesenswert?

Hi,

versuch es mal damit. Beachte die LCD_START_LINE von Zeile 2 und 4!

#define LCD_START_LINE1  0x00     /* DDRAM address of first char of
line 1 */
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of
line 2 */
#define LCD_START_LINE3  0x14     /**< DDRAM address of first char of
line 3 */
#define LCD_START_LINE4  0x54     /**< DDRAM address of first char of
line 4 */

Mfg Sascha
Gast #178377
Lesenswert?

Dann bleibt dir wohl nichts anderes übrig, als die lcd_init (...)
verstehen zu lernen und anhand deines Datenblattes anzupassen ...

Es gibt zwar viele Display-Controller, die sich HDD...-kompatibel
nennen, doch irgendwie hat doch jeder seine Macke.
Gast #178378
Lesenswert?

Hallo Andrea,

hattest du dir schon die Mühe gemacht, dir die Startadressen aus dem
Datenblatt zu suchen?
Ich habe mal mit einem 4*20 Display von Reichelt gearbeitet. Dort waren
die Startadressen der Zeilen:

#define LCD_START_LINE1  0x00
#define LCD_START_LINE2  0x40
#define LCD_START_LINE3  0x10
#define LCD_START_LINE4  0x50

Im Zweifel aber immer ins eigene Datenblatt schauen, ist doch nicht so
schwierig :-)
Gast #178379
Lesenswert?

> hattest du dir schon die Mühe gemacht, dir die Startadressen aus dem
> Datenblatt zu suchen?
> Ich habe mal mit einem 4*20 Display von Reichelt gearbeitet. Dort
waren
> die Startadressen der Zeilen:

> #define LCD_START_LINE1  0x00
> #define LCD_START_LINE2  0x40
> #define LCD_START_LINE3  0x10
> #define LCD_START_LINE4  0x50

> Im Zweifel aber immer ins eigene Datenblatt schauen, ist doch nicht
so
> schwierig :-)

Ich habe ins Datenblatt geschaut. Ich hab's mir sogar 10 mal
durgelesen, weil ich den Eindruck hatte, etwas vergessen zu haben.
Im Datenblatt stehen bei mir aber die Startadressen, die in meinem
ersten Beitrag zu sehen sind. Wenn du willst kann ich ein Beweisphoto
posten.
Deine Startadressen sind scheinbar auch nicht korrekt, da die Ausgabe
jetzt noch ein Stück verwirrender aussieht:
++--------------------+
||A               C   |
||    C               |
||B               D   |
||    D               |
++--------------------+
Scheinbar habe ich jetzt auch zwer Cursor: Jeweils einer hinter jedem
D.
Gast #178380
Lesenswert?

Vielleicht liegts ja daran?

#define LCD_LINE_LENGTH  0x13     /**< internal line length of the
display    */


bei mir steht:
#define LCD_LINE_LENGTH  0x40     /**< internal line length of the
display    */


Ist auch ein 20*4

mfg sascha
Gast #178384
Lesenswert?

> Kannst du mal die Bezeichnung des Displaycontrollers heraus finden?

Laut Datenblatt ist es ein KS0073, der angeblich "NAHEZU 100% HD44780
KOMPATIBEL" ist

> Schon mal mit dem Parameter LCD_WRAP_LINES rumgespielt, also mal auf
1
> gesetzt?

Ja, der ändert aber auch nichts.
Gast #178386
Lesenswert?

@Alex:
Ich habe mal deine modifizierte Version der Library ausprobiert, und da
seh ich auf dem Display das folgende:
++--------------------+
||A                   |
||        }}}}}}}}}}}}|
||C                   |
||        }}}}}}}}}}}}|
++--------------------+
Womit wir wieder am Anfang wären, mit dem Unterschied, dass jetzt
geschweifte Klammern aufgetaucht sind.
So langsam aber sicher verzweifle ich...
Gast #178388
Lesenswert?

Öffne lcd.c, gehe in die Funktion lcd_init(uint8_t) (ganz am Ende der
Datei) und verschiebe die drei von Alex eingefügten Befehle, die sich
ganz am Ende der Funkton befinden direkt hinter das #endif.
Das sieht dann so aus:

[...]
    /* reset LCD */
    delay(16000);                           /* wait 16ms after power-on
    */
    lcd_write(LCD_FUNCTION_8BIT_1LINE,0);   /* function set: 8bit
interface */
    delay(4992);                            /* wait 5ms
    */
    lcd_write(LCD_FUNCTION_8BIT_1LINE,0);   /* function set: 8bit
interface */
    delay(64);                              /* wait 64us
    */
    lcd_write(LCD_FUNCTION_8BIT_1LINE,0);   /* function set: 8bit
interface */
    delay(64);                              /* wait 64us
    */
#endif
    lcd_command (0x2C);
    lcd_command (0x09);
    lcd_command (0x28);

    lcd_command(LCD_FUNCTION_DEFAULT);      /* function set: display
lines  */
    lcd_command(LCD_DISP_OFF);              /* display off
    */
    lcd_clrscr();                           /* display clear
    */
    lcd_command(LCD_MODE_DEFAULT);          /* set entry mode
    */
    lcd_command(dispAttr);                  /* display/cursor control
    */

}/* lcd_init */
[...]
Gast #178390
Lesenswert?

Die Änderungen funktionieren super, aber ich nutze jetzt das EA DIP
204-6 - das hat noch eine Statuszeile wo man vordefinierte Symbole
anzeigen kann.
Hat jemand eine Idee, wie ich diese Symbole nutzen kann?

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