2te LCD Zeile bleibt aus!

Gast #1021238
Hallo

Habe schon gesucht aber nichts passendes gefunden.

Mein Problem ist das ich bei meinem 2x16 Display nicht die zweite Zeile 
aktiviert bekomme. Bei einem Assambler Projekt funktionierten beide 
Zeilen.
Habe mal die lcd.c angehangen.

Vielleicht findet ja Jemand den Fehler.

(ATMEGA8 und C)

Vielen Dank
elomt
Angehängte Dateien:
Schreib mal das Display hintereinanderweg Zeichen für Zeichen voll und 
laß dir gleichzeitig am Displayanfang die Position anzeigen. Und notiere 
den Offset, wenn das erste Zeichen in der zweiten Zeile erscheint.
Dieser Offset ist hier: case 2: tmp=0x80+0x40+x; break; einzutragen. 
Nämlich da, wo die 0x40 steht. Alternativ mal den Cursor auf Zeile 3 
oder 4 setzen. Und ggfs. die Offsets auch dort anpassen, falls das erste 
Zeichen bei set_cursor(0, Zeile); nicht am Zeilenanfang steht.

Leider ist es so, daß manche Displays eine merkwürdige Adreßzuordnung 
haben. Die Offsetwerte in dieser Funktion muß ich auch regelmäßig 
anpassen.

1
void set_cursor(uint8_t x, uint8_t y)
2
{
3
  uint8_t tmp;
4

5
  switch (y) {
6
    case 1: tmp=0x80+0x00+x; break;
7
    case 2: tmp=0x80+0x40+x; break;
8
    case 3: tmp=0x80+0x10+x; break;
9
    case 4: tmp=0x80+0x50+x; break;
10
  
11
  }
12
  lcd_command(tmp);
13
}

Gruß
Jadeclaw.
@Holger: Macht er doch.
1
  lcd_command(0x30);  // 3 mal 0x30 ins Steuerregister schreiben
2
  _delay_ms(10);
3
  lcd_enable();
4
  _delay_ms(10);
5
  lcd_enable();
Das lcd_command(0x30); schreibt die 0x30 das erste mal in den Port und 
danach ins Display. die zwei nachfolgenden lcd_enable(); schreiben die 
0x30 noch zweimal ins Display. Da die 0x30 noch im Port stehen, reicht 
es, die Enable-Leitung zweimal zu toggeln. Im 4-Bit-Modus geht das 
natürlich nicht so einfach, an den übertragenen Werten ist aber zu 
erkennen, hier wird im 8-Bit-Modus gearbeitet.

@elomt: Prozessortakt an den vorgesehenen Stellen eingetragen? #define 
F_CPU, Makefile oder Projekteinstellungen, falls GCC im AVRStudio. 
Danach stimmen auch die Delay-Zeiten. Wobei - Manche Displays sind aber 
auch echte Schlaftabletten...

Gruß
Jadeclaw.
Gast
>@Holger: Macht er doch.

Ich weiß.

>  lcd_command(0x30);  // 3 mal 0x30 ins Steuerregister schreiben
>  _delay_ms(10);
>  lcd_enable();
>  _delay_ms(10);
>  lcd_enable();

Wenn er statt dem unübersichtlichen Kram da oben
dreimal lcd_command(0x30); geschrieben hätte,
würde ihm hinter dem letzten lcd_enable();
auch kein kurzes delay fehlen ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.