Routinen für SED1565 (z.B. für 128x64 LCD Hyundai HP12542

Gast #241351
Hier ein paar Low Level Routinen um LCDs mit Controller SED1565 oder
ähnlichen anzusteuern, wie z.B. das 128x64 Hyundai HP12542R LCD von
Pollin.
Da viele Controller von Epson sehr ähnlich sind, funktioniert der Code
eventuell auch mit anderen LCD Controllern (das Pollin LCD hat nämlich
keinen SED1565, sondern irgendeinen anderen, kompatiblen)
Angehängte Dateien:
Gast
MCU = atmega8515

dürfte aber auf den anderen auch laufen, ich wollte es bald mal auf nem
atmega8 ausprobieren. Der code benutzt nur Ports. allerdings 7, was für
den 8 ein bisschen doof ist.
Gast
aber ich kann doch auch die bitmaske für D0-D7 auf zwei ports verteilen?
Ich weiß zwar nicht genau wie das geht und im moment zeigt mein lcd noch
gar nichts an aber das müsste doch gehen oder?
Gast
ne für die steuerleitungen sind ja genug ports da, für D0-D7 aber nicht,
da hattest du einfach LCDP=byte; eingesetzt. sendest also die ganzen
8bit als 1 byte and den gesamten Port. Ich dachte mir dann ich sende zu
erst die ersten 6 bits und shifte dann byte << 6 runter und sende die
dann auf nem anderen port. Dumme idee? Hat auch leider nicht geklappt.
Gast
Theoretisch geht das, aber diese ganze Schieberei kostet halt einiges an
Rechenleistung (vor allem in C). Aber funktioniern tut es.

Ich rege mich auch andauernd über den mega8 auf, warum dieses Dreckteil
keinen UART+8bit Port hat.
Ansonsten bleiben dann entweder nur der tiny2313 oder gleich ein
mega8515.
Gast
Hallo an alle
@benedikt
ich hoffe du kannst mir weiterhelfen.
Habe mal deine Ansteuerung in Assembler umgesetzt.
Um diese zu testen habe ich die routine lcd_test eingefügt. Jedoch
springt das lcd nicht in die nächste page ... bin schon fast am
verzweifeln.
Hoffe du hast Rat ... danke
Angehängte Dateien:
Gast
Solche Probleme kenne ich:
Hab vor kurzem 4 Stunden an einem OLED Display den Software Fehler
gesucht, bis ich merkte, dass ein Pin nicht richtig verlötet war.
Gast
Hallo,

ich möchte das Pollin Display an meinem Atmega16 anschließen. Das habe
ich wie auf dem Schaltplan im Anhang getan.
Die Software habe ich wie folgt geändert:

#define RW  3
#define  Reset    4
#define CS    5
#define A0    6
#define Enable  7

#define LCDP  PORTC  //Port für D0-7
#define LCDPI  PINC
#define LCDDD  DDRC

#define LCD    PORTD  //Port für Steuerleitungen
#define LCDCDD  DDRD

Dabei habe ich allerdings RW fest auf GND verdratet und nicht am AVR
angeschlossen, weil ich die Pollin Anschlussplatine benutze.

Im makefile habe ich auch MCU = atmega16 geändert.

Blöderweise will das Display nichts anzeigen. In Ordnung ist es, da ich
es über die parallele Computerschnittstelle einwandfrei mit dem
Testprogramm benutzen kann.

Mir gehen so langsam die Ideen aus. Wahrscheinlich bin ich einfach an
einer Stelle zu blöd, aber wenn ich nur wüsste, wo?
Weiß jemand, was ich falsch mache, oder hat jemand eine Idee, wo ich
noch suchen müsste.
Bei der Software gehe ich ja mal davon aus, dass die richtig ist,
außerdem bin ich nach Überprüfung auch der Meinung es müsste so sein.

Meine Leitungen habe ich auch alle einzeln durchgemessen, die stimmen
alle, und eine Verbindung zwischen zweien ist eigentlich
ausgeschlossen, da das Display bei ausgestecktem AVR, aber ansonsten
gleicher Verdrahtung einwandfrei an der parallelen Schnittstelle
läuft.

Den AVR betreibe ich übrigens mit 3MHz Quarz, habe aber von 1 bis 8
auch schon durchprobiert und auch verschiedene Pausen zwischen den
Befehlen versucht.

Ich hoffe mir kann irgendwer auf die Sprünge helfen, bin jetzt seit
einer Woche am suchen, leider ohne Erfolg.

Grüße
Martin
Angehängte Dateien:
Gast
hallo Martin,

ich stehe vor dem gleichen Problem. Habe das LCD an der Adapterplatine
angeschlossen. Von den Widerständen ausgehend habe ich Flachbandkabel
angelötet welche ich dann auf das STK500 stecken kann, das Display will
aber einfach nichts anzeigen.

Ich betreibe den Mega16 mit 14,3 MHz, vielleicht führt das dazu, dass
die Zeit, in welcher die noops ausgeführt werden, zu kurz ist.

Wenn ich etwas herausfinde melde ich mich wieder.
Gast
hallo,

es funktioniert. Liegt am Port.

Ich habe zuerst für die Datenleitungen Port C verwendet, das
funktioniert nicht. Mit Port B läuft es einwandfrei.
Gast
Hat schon mal jemand von euch versucht Daten aus dem Display-RAM zu
lesen? Kommt nur Müll zurück. Ansonsten funktioniert das Display.
Ach ja: Habe die Routinen von Benedikt verwendet.
Gast
hmmmm ich hab jetzt endlich meinen mega32 aufbau fertig krieg aber gar
kein signal auf dem display! meiner läuft mit 16mhz hab die
steuerleitungen auf PortA und die Datenleitungen auf PortB. Quarz ist
an, weiß jemand was :(?
Gast
achja mit der pollin anschlussplatine, muss man da vor oder hinter den
widerständen drangehen? ich bin jetzt dahinter dran, ist das falsch?
Persönliche Seite
Hallo,
ich verwende auch die asm routine für das pollindisplay habe aber ein 
ptoblm, ich glaube dass das display initialisiert wird aber danch geht 
irgendwie nixmehr, alle pixel sind schwarz, mega16 läuft mit 1-4Mhz habe 
alles probiert aber ich komme nicht weiter, sind euch da noch andere 
fehlerquellen bekannt?

luxx
Gast
Hallo, ich möchte das Display von Pollin (mit SED1565) an einem M32C80 
Controller von Renesas betreiben, hat jemand da software für mich um 
dieses anzusteuern?
lg kubi
Hallo Zusammen!

Die Routinen von Benedikt laufen super, allerdings habe ich noch eine 
Frage offen: Wie kann ich einen String aus einer Variablen ausgeben? Der 
auszugebene Text steht im Beispiel direkt in der Methode ala 
lcd_string_P("Test"). Wenn ich aber ein lcd_string_P(ausgabestring) 
machen möchte, dann kommt ein "error: invalid initializer" Fehler.
Hat jemand eine Idee? Ich möchte einen Wert vom ADC auf dem LCD ausgeben 
und muss daher variablen Text ausgeben können, also einen char[] 
übergeben können

Schon mal vielen Dank!
Gast
Hallo,
soweit ich weiss muß man die Speicherzelle zweimal auslesen damit man 
den richtigen Wert bekommt. (Dummyread)Das liegt wohl an den internen 
Puffern.
Der andere Punkt ist das bei dem Pollin Parallelport der Anschluß fest 
auf schreiben eingestellt ist, aber das wir SeppK wohl wissen...

Gruß Misterblues
Vielen Dank an Benedikt für die Mühe mit den Routinen.

Schlagt mich für diese Leichenschänderei, aber mich wundert, daß in den 
12 Jahren scheinbar noch niemand die Funktion lcd_stringr(unsigned char 
*s) benutzt hat. ;)

Bei mir hat sie nicht funktioniert (wurde nur unleserlicher Müll 
angezeigt), hier die Korrektur:
1
void lcd_stringr(unsigned char *s) {       //Display String from RAM
2
  unsigned char i;
3
  while (*s) {
4
    for (i=0; i<6; i++)
5
      lcd_writebyte(pgm_read_byte(&Font[*s][i]));
6
    s++;
7
  }
8
}

Der Fehler war, daß *s innerhalb der for-Schleife inkrementiert wurde. 
Vielleicht nützt es dem einen oder anderen?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.