mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Ansteuerung mit ATmega16


Autor: Wowako (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte ein 1*16 LCD-Display, mit Controller HD44780 im 4Bit-Mode 
ansteuern. Im Prinzip klappt es. Ich muss aber die Ausgabe nach jeweils 
8 Zeichen umschalten, damit die zweite Displayhälfte beschrieben werden 
kann. Hier der Auszug der Testsoftware:
int main(void)
{
  lcd_init();
  lcd_string("12345678");    // Ausgabe der ersten 8 Zeichen
  lcd_setcursor( 0, 2 );     // Umsetzen des Cursors
  lcd_string("abcdefg");     // Beschreiben der rechten Displayhälfte
 .
 .
 .
}

Meine Frage: Kennt jemand eine elegante Lösung, wie ich die Umsetzung 
nach den ersten 8 Zeichen umgehen kann und einen längeren Text (bis 16 
Zeichen) an einem Stück einschreiben kann?
Es wäre nett, wenn mir hier jemand weiterhelfen würde.
Besten Dank im Voraus.

Wowako

Autor: Andreas W. (geier99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wowako schrieb:
> Meine Frage: Kennt jemand eine elegante Lösung, wie ich die Umsetzung
> nach den ersten 8 Zeichen umgehen kann und einen längeren Text (bis 16
> Zeichen) an einem Stück einschreiben kann?
 int main(void)
{
   lcd_init();
   lcd_string("12345678abcdefg");    // Ausgabe der ersten x Zeichen
.....

Autor: Wowako (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

danke, genau da liegt ja der Hund begraben.
Wenn ich die Zeile in
"lcd_string("12345678abcdefg");"
ändere wir nur "12345678" angezeigt. Die restlichen rechten 8 Stellen 
sind blank.

Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int lcd_putchar(char c, FILE *unused){
  static bool nl_seen;

  if (c == '\r')  //set cursor to second line  {
      dogm_gotoxy(0, 1);
  }
  else if (nl_seen && c != '\n')  {
  /*
  * First character after newline, clear display and home cursor.
  */
    
  dogm_clear();
  dogm_gotoxy(0,0);

  nl_seen = false;
  }

  if (c == '\n'){
      nl_seen = true;
  }
  else if (c != '\r')  {
      dogm_putc(c);
  }

  return 0;
}

Ich habe das mit Steuerzeichen gelöst. Danach wurde diese Funktion auf 
printf() gelinkt.
  //linking stdout to EA DOGM162L-A Display
  static FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
  stdout = &lcd_str;  //Standardausgabe auf obigen Stream setzen
Den String kann man dan mit printf("1. Linie\n2. Linie\r") ausgeben.

Autor: Wowako (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich werde es mal ausprobieren.
Aber was ist die Ursache für dieses Verhalten?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt LCDs 1*16, die intern als 2*8 verschaltet sind.

Dann brauchst Du eine LCD-Lib, die die Zeichen mitzählt und einen 
Zeilenumbruch macht, z.B.:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...


Peter

Autor: Wowako (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

deine Erklärung mit der internen Verschaltung ist richtig.

Nur mit:

" Dann brauchst Du eine LCD-Lib, die die Zeichen mitzählt und einen
Zeilenumbruch macht, z.B.:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...;

kann ich leider nicht viel Anfangen. Wäre es möglich mir hier genauere 
Infos zu geben?

Herzlichen Dank

Wowako

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wowako schrieb:
> kann ich leider nicht viel Anfangen. Wäre es möglich mir hier genauere
> Infos zu geben?

Unten in dem Beitrag sind 2 Links zum Downloaden, der 1. ist für 
verschiedene LCDs.
Und dann definieren:
#define LCD_2X8       // some 1x16 are wired as 2x8


Peter

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.