www.mikrocontroller.net

Forum: Compiler & IDEs 4X20 LCD SPINNT


Autor: Andrea S. (Gast)
Datum:

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Display?
Welche Bibliothek hast du verwendet?

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

Autor: Andrea S. (Gast)
Datum:

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

Autor: Sascha (Gast)
Datum:

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

Autor: Andrea S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt sieht's so aus:

++--------------------+
||A                   |
||        C           |
||B                   |
||        D           |
++--------------------+

Irgendwie auch nicht besser...

Autor: Mike (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Andrea S. (Gast)
Datum:

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

Autor: Sascha (Gast)
Datum:

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

Autor: Andrea S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, Das hat leider nichts verändert.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei meinem Display sind die Startadressen wie folgt:

#define LINE1 0x00
#define LINE2 0x40
#define LINE3 0x10
#define LINE4 0x50

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mal die Bezeichnung des Displaycontrollers heraus finden?

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

Autor: Andrea S. (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt wird mit einiges klar :-)

Da bist du nicht die einzige mit dem Problem, habe in einem anderen
Thread bereits eine Lösung gepostet:

http://www.mikrocontroller.net/forum/read-1-119278.html#new

Alex

Autor: Andrea S. (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir leid, jetzt muss ich auch passen.

Autor: mastercpp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 */
[...]

Autor: Andrea S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So funktioniert's. Danke an alle.

Autor: Daniel H. (Gast)
Datum:

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

Autor: Daniel H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt die *.h und die *.c auf das Display EA DIP 204-6
angepasst. Ich hoffe P. Fleury hat nichts dagegen, oder?
thx nochmal
Daniel

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.