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)
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.
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?
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.
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.
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
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.
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
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.
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.
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.
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 :(?
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
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!
> Der code benutzt nur Ports. allerdings 7, was für den 8 ein bisschen doof ist.
Ich bin ganz neu bei AVRs aber ziehe auch einen mega8 in Betracht um so
ein Display anzusteuern. Wiso ist das mit den 7 Ports doof bei einem
Mega8?
Danke, Thindy
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
voidlcd_stringr(unsignedchar*s){//Display String from RAM
2
unsignedchari;
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?