mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD 2X16 zweite Zeile nicht beschreibbar


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe ein Display mit einem S6A0070 als Treiber. Habe mal ie 
Datenblätter verglichen, eigentlich gleicht er dem HD44780.
Nun habe ich das Problem, dass ich die Zweite Zeile des Displays nicht 
beschreiben kann. Sie ist zwar aktiv (wenn man am Kontrast rumspielt, 
wird sie genau wie die erste Zeile dunkel) aber ich kann weder den 
Cursor hinsetzen (0xC0) noch kann ich über die erte Zeile hinaus auf die 
zweite schreiben.
Ich vermute, dass was mit der Initialisierung faul ist (4-Bit 
Interface).
Ich habe mal die Init aus dem Datenblatt und die aus dem Datenblatt des 
HD44780 probiert und alles lässt sich einstellen (Curser blinken usw. 
auch kann ich Zeichen rübersenden. Ich mal mal die Init angehangen. Mit 
den Zeiten war ich ziemlich großzügig, weil im Datenblat was von 
Mindestzeiten stand und ich mir nicht sicher war, weil's ja nicht läuft, 
wie's soll.
Kann mir einer weiterhelfen?

Danke, Alex

int toggle_LCD_E(void) {

LCD_PORT |= (1<<LCD_E);
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
LCD_PORT &= ~(1<<LCD_E);

return(0);
}

int lcd_putnibble(unsigned char nibble, unsigned char rs) {

 register unsigned char reg;
 reg = nibble << 4;
 if(rs == 1) {
  reg |= (1<<LCD_RS);
 }
 else {
  reg &= ~(1<<LCD_RS);
 }

 LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|
 (1<<LCD_RS));
 LCD_PORT |= reg;

 toggle_LCD_E();

 return(0);
}

int lcd_putc(unsigned char byte, unsigned char rs) {

 register unsigned char reg_high, reg_low;

 reg_high = byte & 0xF0;
 reg_low  = byte << 4;

 if(rs == 1) {

  reg_low  |= (1<<LCD_RS);
  reg_high |= (1<<LCD_RS);
 }
 else {
  reg_low  &= ~(1<<LCD_RS);
  reg_high &= ~(1<<LCD_RS);
 }

 LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|
 (1<<LCD_RS));
 LCD_PORT |= reg_high;

 toggle_LCD_E();

 LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|
 (1<<LCD_RS));
 LCD_PORT |= reg_low;
 toggle_LCD_E();

 return(0);
}

int lcd_init(void) {

int i;

LCD_PORT |= 
(1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|(1<<LCD_DISP)|(1<<LC 
D_RS)|(1<<LCD_E);
LCD_DDR  |= 
(1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|(1<<LCD_DISP)|(1<<LC 
D_RS);
LCD_DDR  |= (1<<LCD_E);

mswait(20);


for (i=0;i<3;i++) {

 lcd_putnibble(0x03,0);
 mswait(10);
}

lcd_putnibble(0x02,0);
mswait(10);
lcd_putc(0x28,0);
mswait(10);
lcd_putc(0x0F,0);
mswait(10);
lcd_putc(0x01,0);
mswait(10);
lcd_putc(0x06,0);

return(0);
}

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du mal versucht den kompletten Speicher des LCDs vollzuschreiben
? Eventuell passen ja sehr viel mehr Zeichen in die 1. Zeile als du 
denkst. Schau Dir noch mal das Memory-Mapping an, ob beide Controller in 
dieser Richtung gleich sind!

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe grade mal im Datenblatt gestöbert 
(http://www.displaytech-us.com/pdf/application/Char...) 
Danach wird bei einem Power-On eventuell standard-mäßig ein 1-Zeilen 
Display eingestellt (s. 28). Die initialisierung für 4-Bit & 2-Zeilen 
ist auf Seite 32.  Schau mal im ersten Block "Function Set"

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

genau das mache ich ja in meine lcd_init, nur dass ich nor dreimal 
vorher als 8-bit initialisiere und dann erst als 4-Bit, das steht so 
beim HD44780 im Datenblatt und sollte auch keine Probleme machen. 
Ansonsten ist die Initialisierung gleich. Schau mal in den Quellcode 
oben, da schreibe ich eine 0x28, das heißt 4-Bit, zwei Zeilen.

Gruß, Alex

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.