www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2te LCD Zeile bleibt aus!


Autor: elomt (Gast)
Datum:
Angehängte Dateien:

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

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

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

void set_cursor(uint8_t x, uint8_t y)
{
  uint8_t tmp;

  switch (y) {
    case 1: tmp=0x80+0x00+x; break;
    case 2: tmp=0x80+0x40+x; break;
    case 3: tmp=0x80+0x10+x; break;
    case 4: tmp=0x80+0x50+x; break;
  
  }
  lcd_command(tmp);
}

Gruß
Jadeclaw.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lcd_command(0x30);    // 3 mal 0x30 ins Steuerregister schreiben

Warum tust du nicht einfach das was da als Kommentar steht?

Autor: elomt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Habe den Fehler endlich gefunden.

Die Pausen zwischen den Befehlen waren zu kurtz.


Trozdem Vielen Dank
elomt

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger: Macht er doch.
  lcd_command(0x30);  // 3 mal 0x30 ins Steuerregister schreiben
  _delay_ms(10);
  lcd_enable();
  _delay_ms(10);
  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.

Autor: holger (Gast)
Datum:

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

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.