Forum: Mikrocontroller und Digitale Elektronik SED1520 - EA DIP122-5


von Berti (Gast)


Lesenswert?

Hallo zusammen!

Hat schon jemand das Diplay EA DIP122-5 von Lcd-Module.de zum laufen 
gebracht?
Irgendwie werd ich weder aus SED1520 Datenblatt noch aus dem lcd-module 
Datenblatt schlau wie das ganze anzusteuern ist, bzw. wann der SED Daten 
übernimme (EN Signal!?)
Wäre sehr dankbar für Hilfe und Tipps!

von norad (Gast)


Lesenswert?

@Berti

Guten Morgen!

Am Anfang hatte ich die gleichen Probleme.

Das Display benötigt für die Kontrast einstellung -4V sonst siehste da 
nix.

Die Ansteuerung ist nicht so Zeitkritisch wie bei einem normalen LCD 
aber
die Ausgabe von Zeichen ist schon etwas Aufwendiger.

Beim Initialisriern sollte der RW Pin auf VSS bzw. GND liegen damit wird
der 68MPU Modus eingestellt.

Zudem hat es zwei Display hälften die mit E1 und E2 gesteuert werden.

Um das Display zu löschen oder Zeichen darauf auszugeben musst Du dir 
eine Routine überlegen die die Umschaltung auf die zweite Displayhälfte 
ab der 61 Spalte macht.

Gruß norad

von norad (Gast)


Angehängte Dateien:

Lesenswert?

@Berti

Da der EA DIP122-5 keinen Zeichensatz hat, musst Du dir den selber 
erstellen oder Du nimmst den aus dem Anhang.

>Irgendwie werd ich weder aus SED1520 Datenblatt noch aus dem lcd-module
>Datenblatt schlau wie das ganze anzusteuern ist, bzw. wann der SED Daten
>übernimme (EN Signal!?)

Ganz einfach: Daten am Datenport Anlegen und mit der fallender Flanke
von E1 oder E2 werden die Daten übernommen.

Wenn Du E1 und E2 gleichzeitg fallen lässt, wird das Zeichen auf beiden
Displayhälften Angezeigt.
Zum LCD löschen mach ich das so ;)

Viel Spass noch beim Proggn

norad

von Berti (Gast)


Lesenswert?

Jaja.. die fallende Flanke... das wird wohl der Fehler gewesen sein!

von Berti (Gast)


Lesenswert?

Schuld war die Low Flanke an den EN Signalen und die Low Flanke für das 
Reset an /RES jetzt funktioniert alles

von Tim (Gast)


Lesenswert?

Bei mir geht gar nix  :-(
Es werden einfach keine Pixel angezeigt! Zum Verzweifeln!!!

Habt ihr den RES auf HIGH gezogen?
(Mein RES "hängt" einfach frei)
die einzige Idee, die ich noch nicht versucht habe.


Bin für jeden Tipp dankbar!

Grüße, Tim

von norad (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Tim!

Anbei wie ich es damals Angeschlossen habe.

Ich hoffe es hilft dir weiter.

von Matthias (Gast)


Lesenswert?

RES liegt üblicher Weise auf H und kann zum RESET kurzzeitig auf L 
gezogen werden. Normalerweise wird damit die Betriebsart des SED1520 
eingestellt. Bei dauerhaften H ergibt sich die übliche Ansteuerung, wie 
von Textdisplays her bekannt ist (mit E, RW, A0)

VEE Pin 3, sollte über ein Poti eingespeist werden. Die reale 
Kontrastspannung liegt bei ca. -4V, bei -5V dürfte nicht mehr viel zu 
erkennen sein.

@Tim
Poste mal Dein Programm/Schaltung.

von Tim (Gast)


Angehängte Dateien:

Lesenswert?

Hier meine Schaltung:

JP1:  LCD Pin01...Pin09
JP2:  LCD Pin10...Pin18
JP3:  E2  E1  RW / A0
JP5:  D0...D7  GND  +5V

Grüße, Tim

von Matthias (Gast)


Lesenswert?

Erstmal fehlt Pin 3 Beschaltung: Da muß eine negative Spannung von ca. 
-4V dran, sonst siehst Du überhaupt nichts. Die -4V mußt Du falls nicht 
vorhanden, irgendwie erzeugen, dazu findest Du im Forum viele 
Möglichkeiten, braucht nicht viel Strom. Auch sollte zur optimalen 
Einstellung ein Einstellregler (Wert ca. 4.7k) dazwischen geschaltet 
werden.

Dann ist der Vorwiderstand für die Hintergrundbeleuchtung mit 1k 
wesentlich zu groß. Würde, je nach genauen Displaytyp erstmal ca. 47 Ohm 
zum probieren nehmen.

Warum die Diode in Serie zu Pin 2? Sehe keinen Sinn darin.

von Tim (Gast)


Lesenswert?

Hallo Matthias,

danke für deine schnelle Antwort!

LED-Beleuchtungs Vorwiderstand soll nur (Testboard zum Programmieren) 
die Beleuchtung testen - außerdem auch für die anderen LCD Typen 
reichen.

Die Diode ist einfach ein Verpolungsschutz bei fliegender Verdrahtung.

Und die Kontrastspannung... tja, die Kontrastspannung:
Ich habe im Datenblatt meines LCD Typs (DIP122-5LED) "automatische 
Kontrastanpassung" gelesen; Kontrastspannung hatte ich so verstanden, 
dass sie NUR für LCD Typen OHNE automatische Anpassung nötig wäre.

Werde ich jetzt sofort ausprobieren!
(Ergebniss gibt's gleich... :-)


Noch mal Danke + Grüße,
Tim

von Tim (Gast)


Lesenswert?

So, trotz richtiger Kontrastspannung geht's nicht.
Ich werde noch einmal alles von vorne prüfen!

(Ich hoffe, mein LCD ist nicht defekt)

Bis dann!

Grüße, Tim

von Berti (Gast)


Lesenswert?

Ich habe in der Codesammlung meinen Funktionierenden Quellcode 
reingestellt...

von Tim (Gast)


Lesenswert?

@Berti
welche Bibliotheken braucht's denn alle für dein Progi?
(Habe Fehler beim Compilieren)

Hast du vielleicht noch so ein Mini-Test-Prog?
Einfach "LCD Reset" und einen Bytemuster ausgeben.

Wäre ja schon froh, wenn das bei mir gehen würde...

;-)

Danke!

von Matthias (Gast)


Lesenswert?

Probiers mal so. Das Programm schreibt ein Schrachbrettmuster ober 
rechts auf das DIP-122. (Könnte sein das weitere Pixel zufällig gesetzt 
sind, da das DIP-122 keinen CLEAR-Befehl kennt, man müsste am Anfang den 
kompletten Speicher mit 0 füllen, wollte ich der Einfachheit hier 
weglassen.)
Initialisierung braucht das DIP-122 nicht, nur das Command "Display ON" 
nicht vergessen und die -4V für den Kontrast einregeln. Progr. ist für 
8051, musst es halt für AVR anpassen. Die Delays sind extrem bemessen, 
es würde mit BUSY-Flag Nutzung wesetlich schneller gehen.
1
// ********************************************************************
2
// Demoprogramm (Minimaltest)
3
// Inhalt: LCD (DIP122-5 122x32 Pixel mit 2xSED1520 Controller) ansteuern
4
// LCD-Controller: SED1520 S-MOS Sytems(2x) kompatibel
5
//                 1 (linke Displayhälfte E1)
6
//                 2 (rechte Displayhälfte E2)
7
// ********************************************************************
8
9
#include "at89c51ed2.h"   // Register des AT89C51ED2
10
11
// Hardware Definebereich
12
#define LCD_ON      P1_4
13
#define LCD_E1      P3_5
14
#define LCD_E2      P1_2
15
#define LCD_A0      P3_7
16
#define LCD_RW      P3_6
17
#define LCD_RES     P1_0
18
#define LCD_DATA    P2
19
20
// ********************************************************************
21
// Verzögerungsschleife für kurze Zeit
22
// Zeit: Wartezeit in [zeit]
23
//       1 = 20us
24
//       2 = 28us
25
//       3 = 36us u.s.w. (gilt für 11.0952MHz)
26
//     255 = ca. 2ms
27
// ********************************************************************
28
void delay_us(unsigned char zeit) {
29
unsigned char zaehler;
30
  for ( zaehler = zeit; zaehler; zaehler-- ) {
31
   _asm nop; _endasm;
32
  }
33
}
34
35
// ********************************************************************
36
// Verzögerungsschleife für lange Zeit
37
// Zeit: Wartezeit in [zeit]
38
//       1 = ca. 10ms
39
//       2 = ca. 20ms
40
//       3 = ca. 30ms u.s.w.
41
//     255 = ca. 2,5s (gilt für 11.0952MHz)
42
// ********************************************************************
43
void delay(unsigned char zeit) {
44
unsigned char zaehler;
45
  for (zaehler = zeit; zaehler; zaehler--) {
46
    delay_us(255);  // dauert ca. 2ms
47
    delay_us(255);  // dauert ca. 2ms
48
    delay_us(255);  // dauert ca. 2ms
49
    delay_us(255);  // dauert ca. 2ms
50
    delay_us(255);  // dauert ca. 2ms
51
  }
52
}
53
54
// ***********************************************************************
55
// Schreiben eines Zeichens (Steuerzeichen) das LCD-Modul
56
// Übergabe: lcd_byte : Auszugebendes Steuerzeichen
57
//           lcd_teil : 0 - linke Displayhälfte
58
//                      1 - rechte Displayhälfte
59
// ***********************************************************************
60
void write_lcd_command(unsigned char lcd_byte, unsigned char lcd_teil) {
61
unsigned char lcd_busy = 1;
62
  delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
63
  LCD_DATA = lcd_byte; // Byte ausgeben
64
  LCD_RW = 0;
65
  LCD_A0 = 0;
66
  if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
67
  delay_us(1);     // Impulsverzögerung
68
  if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
69
} 
70
71
// ***********************************************************************
72
// Schreiben eines Zeichens (Daten) das LCD-Modul
73
// Übergabe: lcd_byte : Auszugebendes Datenbyte
74
//           lcd_teil : 0 - linke Displayhälfte
75
//                      1 - rechte Displayhälfte
76
// ***********************************************************************
77
void write_lcd_data(unsigned char lcd_byte, unsigned char lcd_teil) {
78
unsigned char lcd_busy = 1;
79
  delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
80
  LCD_DATA = lcd_byte; // Byte ausgeben
81
  LCD_RW = 0;
82
  LCD_A0 = 1;
83
  if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
84
  delay_us(1);     // Impulsverzögerung
85
  if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
86
} 
87
88
// ********************************************************************
89
// Hauptprogramm
90
// ********************************************************************
91
void main (void) {
92
  delay(100);                      // Wartezeit nach POWER-ON bis VCC stabil ist ca. 100ms
93
  write_lcd_command(0xAF,0);      // 1010 1111 (Display on linke Hälfte)
94
  write_lcd_command(0xAF,1);      // 1010 1111 (Display on rechte Hälfte)
95
  write_lcd_data(0x55,0); // schreibt Schachbrettmuster auf DIP-122 oben rechts
96
  write_lcd_data(0xAA,0);
97
  write_lcd_data(0x55,0);
98
  write_lcd_data(0xAA,0);
99
  write_lcd_data(0x55,0);
100
  write_lcd_data(0xAA,0);
101
  write_lcd_data(0x55,0);
102
  write_lcd_data(0xAA,0);
103
  while(1);
104
}

von pindrei (Gast)


Angehängte Dateien:

Lesenswert?

Hi, dieser Beitrag hat mich echt weiter gebracht! Ich habe das Programm 
vom Matthias mal an einen Mega32 und das Pollin Display "DG-12232" (für 
2,95€) Angepasst, eventuell kann es ja jemanden weiterhelfen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.