mikrocontroller.net

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


Autor: Berti (Gast)
Datum:

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

Autor: norad (Gast)
Datum:

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

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

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

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaja.. die fallende Flanke... das wird wohl der Fehler gewesen sein!

Autor: Berti (Gast)
Datum:

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

Autor: Tim (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim!

Anbei wie ich es damals Angeschlossen habe.

Ich hoffe es hilft dir weiter.

Autor: Matthias (Gast)
Datum:

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

Autor: Tim (Gast)
Datum:
Angehängte Dateien:
  • preview image for p.PNG
    p.PNG
    2,9 KB, 1125 Downloads

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

Autor: Matthias (Gast)
Datum:

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

Autor: Tim (Gast)
Datum:

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

Autor: Tim (Gast)
Datum:

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

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe in der Codesammlung meinen Funktionierenden Quellcode 
reingestellt...

Autor: Tim (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
// ********************************************************************
// Demoprogramm (Minimaltest)
// Inhalt: LCD (DIP122-5 122x32 Pixel mit 2xSED1520 Controller) ansteuern
// LCD-Controller: SED1520 S-MOS Sytems(2x) kompatibel
//                 1 (linke Displayhälfte E1)
//                 2 (rechte Displayhälfte E2)
// ********************************************************************

#include "at89c51ed2.h"   // Register des AT89C51ED2

// Hardware Definebereich
#define LCD_ON      P1_4
#define LCD_E1      P3_5
#define LCD_E2      P1_2
#define LCD_A0      P3_7
#define LCD_RW      P3_6
#define LCD_RES     P1_0
#define LCD_DATA    P2

// ********************************************************************
// Verzögerungsschleife für kurze Zeit
// Zeit: Wartezeit in [zeit]
//       1 = 20us
//       2 = 28us
//       3 = 36us u.s.w. (gilt für 11.0952MHz)
//     255 = ca. 2ms
// ********************************************************************
void delay_us(unsigned char zeit) {
unsigned char zaehler;
  for ( zaehler = zeit; zaehler; zaehler-- ) {
   _asm nop; _endasm;
  }
}

// ********************************************************************
// Verzögerungsschleife für lange Zeit
// Zeit: Wartezeit in [zeit]
//       1 = ca. 10ms
//       2 = ca. 20ms
//       3 = ca. 30ms u.s.w.
//     255 = ca. 2,5s (gilt für 11.0952MHz)
// ********************************************************************
void delay(unsigned char zeit) {
unsigned char zaehler;
  for (zaehler = zeit; zaehler; zaehler--) {
    delay_us(255);  // dauert ca. 2ms
    delay_us(255);  // dauert ca. 2ms
    delay_us(255);  // dauert ca. 2ms
    delay_us(255);  // dauert ca. 2ms
    delay_us(255);  // dauert ca. 2ms
  }
}

// ***********************************************************************
// Schreiben eines Zeichens (Steuerzeichen) das LCD-Modul
// Übergabe: lcd_byte : Auszugebendes Steuerzeichen
//           lcd_teil : 0 - linke Displayhälfte
//                      1 - rechte Displayhälfte
// ***********************************************************************
void write_lcd_command(unsigned char lcd_byte, unsigned char lcd_teil) {
unsigned char lcd_busy = 1;
  delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
  LCD_DATA = lcd_byte; // Byte ausgeben
  LCD_RW = 0;
  LCD_A0 = 0;
  if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
  delay_us(1);     // Impulsverzögerung
  if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
} 

// ***********************************************************************
// Schreiben eines Zeichens (Daten) das LCD-Modul
// Übergabe: lcd_byte : Auszugebendes Datenbyte
//           lcd_teil : 0 - linke Displayhälfte
//                      1 - rechte Displayhälfte
// ***********************************************************************
void write_lcd_data(unsigned char lcd_byte, unsigned char lcd_teil) {
unsigned char lcd_busy = 1;
  delay(2); // Wartezeit, später hier das BUSY-Flag abfragen
  LCD_DATA = lcd_byte; // Byte ausgeben
  LCD_RW = 0;
  LCD_A0 = 1;
  if (!lcd_teil) LCD_E1 = 1; else LCD_E2 = 1;
  delay_us(1);     // Impulsverzögerung
  if (!lcd_teil) LCD_E1 = 0; else LCD_E2 = 0;
} 

// ********************************************************************
// Hauptprogramm
// ********************************************************************
void main (void) {
  delay(100);                      // Wartezeit nach POWER-ON bis VCC stabil ist ca. 100ms
  write_lcd_command(0xAF,0);      // 1010 1111 (Display on linke Hälfte)
  write_lcd_command(0xAF,1);      // 1010 1111 (Display on rechte Hälfte)
  write_lcd_data(0x55,0); // schreibt Schachbrettmuster auf DIP-122 oben rechts
  write_lcd_data(0xAA,0);
  write_lcd_data(0x55,0);
  write_lcd_data(0xAA,0);
  write_lcd_data(0x55,0);
  write_lcd_data(0xAA,0);
  write_lcd_data(0x55,0);
  write_lcd_data(0xAA,0);
  while(1);
}

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

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

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.