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.
Dann lass Reset des LCDs weg und häng ein RC Glied dran. Ist zwar keine perfekte Lösung, geht aber.
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?
Du musst dann bei den s/cbi (xxxPORT, xxx) den Port ändern.
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.
weiß jetzt nicht ob du genau den port meinst aber der hat doch UART? man kann schließlich daten über nen max232 schicken.
Hi, ja aber das UART liegt natuerlich auf dem einigen verwendbaren 8 Bit Port, wenn man ein Qurz am Controller hat. Gruss Tobias
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
habe den Fehler gefunden ... war Hardware ... aber trotzdem 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
Ich glaub ich habe den Fehler, ein Portpin schein kaputt zu sein. Werde morgen mal etwas umbasteln und nochmal probieren.
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.
Port C ist JTAG und kann per Fuse oder Software disabled werden (einfach mal im Forum suchen gabs shcon 100x)
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 :(?
achja mit der pollin anschlussplatine, muss man da vor oder hinter den widerständen drangehen? ich bin jetzt dahinter dran, ist das falsch?
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!
danke für die routinen, funktionieren super mit mein atmega8, und haben mir somit ne menge arbeit erspart. viel dank, mfg slater
Hallo! Kann sein das wie SeppK schon gesagt das Auslesen des Display-Rams nicht funktioniert? Hat das jemand schon mit Erfolg getestet? Hias
> 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
Hallo Ist der SED1565 kompatibel zu KS0713 ?? Gruss Juppo
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.