LCD ES DIP204

Gast #573014
Lesenswert?

Hi!
Mein altes Display hat den geist aufgegeben.
Habe mir also diesen Display gekauft, soll nahezu 100% HD44780 
kompatibel sein.
Display ausgetauscht, angeschlossen wir das vorherige. Leider tut sich 
gar nichts, hitergrundbelecuhtung funtkioeniert , sonst nichts. Weißt 
jemand wieso? Kompilliere  mit gcc- compiler.
Gruß
Gast #573697
Lesenswert?

Hi!
<Mein altes Display hat den geist aufgegeben.
So, so
<Display ausgetauscht, angeschlossen wir das vorherige. Leider tut sich
<gar nichts.
Nanu, warum das denn? War das Alte eventuell garnicht def.?
Wenn du es nur mit Spannung versorgst erscheinen auch keine schwarzen 
Kästchen?
hm,
Pinbelegung anders?
Kalte Lötstellen?
<ja Kontrast ist ok.
An was merkst du das denn?
Eigentlich sind die EA DIP recht gut zu handhaben und auch recht 
zuverlässig. Schaue doch bitte nochmal genau nach.

Viel Erfolg, Uwe
Gast #573712
Lesenswert?

Die Dinger waren ja nun schon desöfteren Thema hier. Sie sind eben nicht 
vollkompatibel zum HD44780 und müssen auch anders initialisiert werden. 
Datenblatt lesen und/oder hier im Forum suchen hilft auf jeden Fall 
weiter.

bye

Frank
Gast #617475
Lesenswert?

DIP204 hat als Controller KS0073 drauf. Dieser braucht eine andere 
Initialisierung als der 44780. Auch ist die Zeilenadressierung anders.

Die Initialisierung selber ist einfacher, da das Busy-Flag sofort zur 
Verfügung steht, im Gegensatz zu 44780, wo erst mal ohne Busy-Auswertung 
initialisiert werden muß. Es steht aber alles im Datenblatt, Download 
bei EA.

So funktioniert DIP204 bei mir (SDCC 8051 Display im 8-Bit-Mode)
1
// ***********************************************************************
2
// Schreiben eines Zeichens an das LCD-Modul
3
// Übergabe: lcd_byte : Auszugebendes Zeichen/Steuerzeichen
4
//           lcd_mode : 0 - Daten
5
//                      1 - Steuerzeichen
6
// ***********************************************************************
7
void write_lcd(byte lcd_byte, bit lcd_mode) {
8
byte idata lcd_busy = 1;
9
  // Testen ob LCD-Modul noch im internen Zyklus ist
10
  LCD_RW = 1;
11
  LCD_RS = 0;
12
  LCD_DATA = 0xFF;  // Datenportlatch für Rücklesen vorbereiten  
13
  while(lcd_busy) {
14
    LCD_E1 = 1;
15
    _asm nop; nop; nop; _endasm;     // Impulsverzögerung  
16
    if (!(LCD_DATA & 0x80)) lcd_busy = 0; // BUSY-Flag abfragen
17
    LCD_E1 = 0;
18
    _asm nop; nop; nop; _endasm;     // Impulsverzögerung      
19
  }
20
  // LCD-Anzeige ist zum Empfang neuer Zeichen bereit
21
  LCD_DATA = lcd_byte; // Byte ausgeben
22
  LCD_RW = 0;
23
  if (lcd_mode) {
24
    // Steuerzeichen
25
    LCD_RS = 0;
26
    } else {
27
    // Daten
28
    LCD_RS = 1;
29
  }
30
  LCD_E1 = 1;
31
  _asm nop; nop; nop; _endasm;     // Impulsverzögerung
32
  LCD_E1 = 0;
33
} 
34

35
// ***********************************************************************
36
// Grundinitialisierung des LCD-Moduls 8-Bit Bus
37
// KS0073 EA-DIP204 4x20 Display
38
// ***********************************************************************
39
void init_lcd(void) {
40
  delay(50);                      // Wartezeit nach POWER-ON bis VCC stabil ist
41
  // Grundinitialisierung
42
  write_lcd(0x34,1);               // 0011 0100 (8Bit Bus RE=1)
43
  write_lcd(0x09,1);               // 0000 1001 (4 Zeilen Mode)
44
  write_lcd(0x30,1);               // 0011 0000 (8Bit Bus RE=0) 
45
  write_lcd(0x0C,1);               // 0000 1111 (Dipl. ein, Cursor aus, Cursor blinken aus)
46
  //write_lcd(0x0F,1);               // 0000 1111 (Dipl. ein, Cursor ein, Cursor blinken)
47
  write_lcd(0x01,1);               // 0000 0001 (Diplay löschen, Cursor auf Pos. 1)
48
  write_lcd(0x06,1);               // 0000 0110 (Autoinkrement)
49
}

Gruß
Matthias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren