mikrocontroller.net

Forum: Compiler & IDEs 4 x 20 HD44780 ansteuern


Autor: Yogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Habe mir ein LCD bei Embedit gekauft:
http://shop.embedit.de/product__250.php.

Angeschlossen an einem Atmega 32 , an Port C, 4 - Bit Modus.
angesteuert wird/soll es mit den LCD_routines die es hier auf der Seite 
gibt.
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Nun die Probleme:

WAS und WIE muss ich alles in der routines.c ändern damit dies auf 4 x 
20 zeichen läuft? Als Standart ist ja  2x16 zeichen in den routines.c 
vorgegeben.

lcd_init:
// 4Bit / 2 Zeilen / 5x7
   lcd_command(0x28);

set_cursor:
  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x10+x; break;    // 3. Zeile
    case 4: tmp=0x80+0x50+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen Zeile


Ich denke dass man diese Werte speziell für ein 4x20 LCD ändern muss, 
oder sind es andere Dinge oder sogar noch etwas?

MFG

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
normalerweise gar nichts....

Ich verwende meistens die lib von 
http://homepage.hispeed.ch/peterfleury/avr-softwar...

Autor: Yogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bist du dir ganz sicher?

Autor: Yogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ei weiteres Problem ist dass die obere linke ecke ( 1&2 Zeile bis 
Zeichen 8) die Hälfte weniger an Kontrast haben... wie kann das sein?

habe es hinbekommen dass wenn ich set_cursor (0,4) schreibe, auch an 
pos.0 in zeile 4 geschrieben wird.

das ganze habe ich so geändert:
  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0xC0+0x00+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
    case 4: tmp=0xC0+0x14+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen Zeile

die 0x80 steht für die zeilen 1 und 3 , 0xC0 für 2 und 4!

nun steht noch mein Problem mit dem Kontrast aus. Vielleicht hat das mit 
dem lcd_command damit zu tun. was auch noch komisch ist dass manchmal 
einfach zeichen beim anzeigen vergessen werden verdreht sind oder in an 
falscher position angezeigt werden.

bitte um ratschläge!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yogi schrieb:
> ei weiteres Problem ist dass die obere linke ecke ( 1&2 Zeile bis
> Zeichen 8) die Hälfte weniger an Kontrast haben... wie kann das sein?

Das kann zb sein, wenn du in einer Endlosschleife ständig das Display 
löscht und neu beschreibst.


> nun steht noch mein Problem mit dem Kontrast aus. Vielleicht hat das mit
> dem lcd_command damit zu tun. was auch noch komisch ist dass manchmal
> einfach zeichen beim anzeigen vergessen werden verdreht sind oder in an
> falscher position angezeigt werden.

Das klingt eher nach einem Timing Problem.

> bitte um ratschläge!

Nimm die Fleury Lib.
Die kann man besser anpassen und viele Leute benutzen die für alle 
möglichen, unterschiedliche Displays.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ansonsten gehen die Adressen aus dem Datenblatt des LCD hervor.
Das darf gelesen werden...

Autor: Yogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Klaus,

ich bekomm auf dem Display alles angezeit was ich möchte jedoch habe ich 
noch die genannten Fehler drin...

Datenblatt hab ich schon durchgeforstet sonst wüsste ich ja nocht die 
adressen der Zeilen.

Autor: Johannes M. (johannesm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in meiner DCF-Uhr verwende ich auch die LCD Routine aus dem Tutorial. 
Bei mir sieht die Anpassung an das 4x20 Display so aus:
switch (y)
  {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
    case 4: tmp=0x80+0x54+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen Zeile
  }
funktioniert bei mir perfekt.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, und für den Rest muß man Quelltext sehen (falls du z.B. den
Tipp bzgl. ständigem Neusschreiben beachtet hast, mal
sicherheitshalber alles Delays verzögert und alle Verbindungen
zuverlässig sind).
Ohne Quelltext wird dir niemand mehr sagen können.

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.