PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Library für GLCD Hyundai HP12542R-DYO mit SED1565



albundy
18.10.2005, 12:39
Hallo,

da der Controller des Display's von Bascom nicht unterstützt wird, habe ich mir dafür eine Library geschrieben. (liegt im Download)

Folgende Funktionen sind im Moment vorhanden:
- Grinit (ohne Parameter) = Display initialisieren
- Grcls (ohne Parameter) = Display 128x64 Pixel löschen
- Grlocate (Spalte,Zeile) = Cursor positionieren
- Grlcd (Text,Font) = String mit entsprechendem Font ausgeben
- Grdat (Variable,Font) = Variable mit entsprechenden Font ausgeben
- Grborder (Startspalte,Startzeile,Endspalte,Endzeile) = Einen Rahmen zeichnen
- Grpicture (ohne Parameter) = Grafik 128x64 Pixel ausgeben

Die genaue Funktionsweise ist in einem Beispielprogramm demonstriert.
Die Port's können in der Lib individuell angepasst werden.
Den Reset des LCD kann man auch fest mit dem des AVR verbinden.

Diese Version ist noch nicht perfekt, aber zumindest ein Anfang, um dieses Display nutzen zu können.
Wenn jemand die Lib noch verbessern kann, würde ich mich über Resonanz freuen.

Magynhard
28.10.2005, 21:48
Ich möchte in die Controller-Programmierung etwas einsteigen und habe mir genau dieses LCD inkl. Anschlussplatine zugelegt.
Ich kann das Beispielprogramm zwar kompilieren, aber nicht anwenden lassen. Habe BASCOM-AVR dazu verwendet.

Richtig professionell einsteigen möchte ich momentan nicht unbedingt.
Zuerst einmal ein wenig herumprobieren.

Kannst Du/Jemand mir eine kleine Hilfestellung geben?

Ich habe:
-hier erwähntes LCD
-zugehörige Anschlussplatine mit LPT1-Anschluss am rechner verbunden
-lcd bekommt extern benötigte 5V über Platine von ext. Netzteil

1. Wie kann ich auf einfache Weise testen, ob ich die Anschlussplatine fehlerfrei gelötet habe/funktioniert bzw. das LCD funktioniert?

Wenn das getan ist, werden wir weitersehen.

ShadowPhoenix
28.10.2005, 22:50
Hallo!

Auch ich habe dieses Display, und möchte es mit Bascom&AVR ansteuern.
Ich freue mich sehr, dass sich jemand die Zeit genommen hat, und hoffe, dass auch ich etwas damit anfangen kann ;)

Zu den Portdefinitionen:

(Albundy's Codeausschnitt!)


.equ Data_Port = $1b ;$1b = Porta
.equ Ctrl_Port = $15 ;$15 = Portc
.equ Pin_Res = 4 ;Reset = Portc.4
.equ Pin_E = 3 ;Enable = Portc.3
.equ Pin_RW = 2 ;R/W = Portc.2
.equ Pin_A0 = 1 ;A0 = Portc.1
.equ Pin_CS1 = 0 ;Chip Select = Portc.0


Es werden hier also keine 8 Datenleitungen definiert. Wie muss ich die Leitungen dann anschließen?

Magynhard
29.10.2005, 12:50
Das Anschließen sollte doch bereits geklärt sein? Oder hast du etwa kein Parallelport-Anschlussmodul dazzugekauft?

albundy
29.10.2005, 14:03
Ich habe:
-hier erwähntes LCD
-zugehörige Anschlussplatine mit LPT1-Anschluss am rechner verbunden
-lcd bekommt extern benötigte 5V über Platine von ext. Netzteil

1. Wie kann ich auf einfache Weise testen, ob ich die Anschlussplatine fehlerfrei gelötet habe/funktioniert bzw. das LCD funktioniert?


Nur über das, im Download von Pollin, enthaltene PC Programm.

Ich habe das Flachbandkabel vom LCD entfernt und es über dünne Drähte mit einer Buchsenleise verbunden. Diese habe ich auf die LCD Platine geklebt.

ShadowPhoenix
29.10.2005, 16:18
Ein Anschlussmodul?
Nein, aber jetzt ist's klar.
Eine Frage noch:

(Ausschnitt)


.equ Data_Port = $1b ;$1b = Porta
.equ Ctrl_Port = $15 ;$15 = Portc
.equ Pin_Res = 4 ;Reset = Portc.4
.equ Pin_E = 3 ;Enable = Portc.3
.equ Pin_RW = 2 ;R/W = Portc.2
.equ Pin_A0 = 1 ;A0 = Portc.1
.equ Pin_CS1 = 0 ;Chip Select = Portc.0


Wenn 0x1b = Port A
Und 0x15 = Port C

Dann ist 0x18 = Port B
Und 0x12 = Port D

Stimmt das?
Also kann ich schreiben:

[

.equ Data_Port = $12 ;$1b = Port D
.equ Ctrl_Port = $18 ;$15 = Port B
.equ Pin_Res = 4 ;Reset = PortB.4
.equ Pin_E = 3 ;Enable = PortB.3
.equ Pin_RW = 2 ;R/W = PortB.2
.equ Pin_A0 = 1 ;A0 = PortB.1
.equ Pin_CS1 = 0 ;Chip Select = PortB.0


Stimmt das so noch?

albundy
29.10.2005, 17:52
Wenn 0x1b = Port A
Und 0x15 = Port C

Dann ist 0x18 = Port B
Und 0x12 = Port D

Stimmt das?
Also kann ich schreiben:


Ja, das stimmt so !

ShadowPhoenix
29.10.2005, 18:17
Okay super! Werde mich bei Gelegenheit ans Werk machen =)

Magynhard
29.10.2005, 21:19
Nur über das, im Download von Pollin, enthaltene PC Programm.

Ich habe das Flachbandkabel vom LCD entfernt und es über dünne Drähte mit einer Buchsenleise verbunden. Diese habe ich auf die LCD Platine geklebt.

Der Reset scheint zu funktionieren.

Aber die dort abgebildete Grafik sollte dann zugleich auf dem LCD erscheinen? Es tut sich nämlich rein gar nichts.

D.h. ich hab es wohl fehlerhaft verlötet?


Zu deiner Buchsenleiste - die ist aber nicht für den Anschluss an den PC gedacht, oder? Wird über diese dann auch gleich die Spannungsversorgung geregelt?

ShadowPhoenix
30.10.2005, 00:01
Hmm, bei mir tut sich auch nichts!

In der Library habe ich die Ports umgeändert:


.equ Data_Port = $12 ;$12 = Portd
.equ Ctrl_Port = $18 ;$18 = Portb
.equ Pin_Res = 5 ;Reset = Portb.5
.equ Pin_E = 0 ;Enable = Portb.0
.equ Pin_RW = 4 ;R/W = Portb.4
.equ Pin_A0 = 1 ;A0 = Portb.1
.equ Pin_CS1 = 2 ;Chip Select = Portb.2


(Im Kommentar steht, welcher Port das sein soll)

Die Hintergrundbeleuchtung funktioniert, habe zum Test eine Led angeschlossen, die leuchtet, wenn das Beispielprogramm 1x durchgelaufen ist. Sie leuchtet nach einigen Sekunden auf.

Stimmt das soweit?

albundy
30.10.2005, 09:49
Zu deiner Buchsenleiste - die ist aber nicht für den Anschluss an den PC gedacht, oder? Wird über diese dann auch gleich die Spannungsversorgung geregelt?

Die Buchsenleiste ist eine 1:1 Umsetzung der Anschlüsse des LCD für den AVR.
Stromversorgung erfolgt in meinem Fall vom AVR.


Die Hintergrundbeleuchtung funktioniert, habe zum Test eine Led angeschlossen, die leuchtet, wenn das Beispielprogramm 1x durchgelaufen ist. Sie leuchtet nach einigen Sekunden auf.

Stimmt das soweit?

Sprichst du von meinem Beispielprogramm ?
Ich benutze die Hintergrundbeleuchtung in dem Beispiel gar nicht.

Wenn du,
- die Lib nach deiner Änderung neu compiliert hast,
- Soft Stack und Framesize angepasst hast,
- deine beiden Ausgabeports auch im Beispiel geändert hast,
- Quarzfrequenz und Controller richtig definiert hast,
- den Pfad der Font's entsprechend angepasst hast und
- keine Schaltfehler gemacht hast,
wird es auch funktionieren.

ShadowPhoenix
30.10.2005, 17:12
Aha, da wird es interessant!


"die Lib nach deiner Änderung neu compiliert hast"

>Ich habe die sed1565.lib geöffnet, Ports umgeändert und gespeichert (Wie eine Textdatei). Reicht das nicht? Wie kompiliere ich eine Lib?



"Soft Stack und Framesize angepasst hast"

>Leider kenne ich mich damit nicht aus, was habe ich denn zu beachten?



"deine beiden Ausgabeports auch im Beispiel geändert hast"

>Jop, habe ich.



"Quarzfrequenz und Controller richtig definiert hast"

>Jop, habe ich.



"den Pfad der Font's entsprechend angepasst hast"

>Jop, habe ich.



"keine Schaltfehler gemacht hast"

>Bin am überprüfen ;)

albundy
30.10.2005, 17:55
Wie kompiliere ich eine Lib?

Über "Tools" -> "LibManager"-> "sed1565.lib" -> Compile


"Soft Stack und Framesize angepasst hast"

>Leider kenne ich mich damit nicht aus, was habe ich denn zu beachten?


Über "Options" -> "Compiler" -> "Chip"
Soft Stack -> 32
Framesize -> 64

ShadowPhoenix
30.10.2005, 17:59
Super, danke für die Infos!
Morgen kaufe ich mir ein Steckbrett (Experimentierboard) und werde zunächst die Schaltung zusammenstecken ;)

ShadowPhoenix
31.10.2005, 23:28
Hallo!

Nach erneutem Aufbau mit dickerem Kupferlackdraht und Anpassen in der Software kann ich nur sagen:

Die library funktioniert einwandfrei!


Sehr gute Arbeit geleistet ;)
Der Bildaufbau erfolgt auch sehr schnell.

Auf meiner zukünftigen Website möchte ich u.a. auch über dieses GLCD schreiben. Darf ich dann einen Link mit Copyrightmeldung zu deiner library auf meine Website setzen? Oder auf deinen Thread verlinken?

Mfg,
ShadowPhoenix

EDIT:
Eine Frage noch:
Mit welchem Programm kann ich die Bild.inc editieren bzw. neue erstellen?

EDIT2:
Resonanz?
Es wäre super, wenn man in jede Funktion eine Variable einsetzen könnte,
zB:
Grborder ( w , x , y , z )

albundy
01.11.2005, 18:02
Hallo,


Auf meiner zukünftigen Website möchte ich u.a. auch über dieses GLCD schreiben. Darf ich dann einen Link mit Copyrightmeldung zu deiner library auf meine Website setzen? Oder auf deinen Thread verlinken?


Ich habe nichts dagegen.


Mit welchem Programm kann ich die Bild.inc editieren bzw. neue erstellen?


Ich habe mir dazu ein kleines Delphi Programm geschrieben, welches ein BMP in ein INC File umwandelt. Ich muss es aber noch in Form bringen, im Moment kann kein anderer etwas damit anfangen.
Wenn es fertig ist, stelle ich es hier rein.


Resonanz?
Es wäre super, wenn man in jede Funktion eine Variable einsetzen könnte,


Zu dem, was man alles noch verbessern könnte, fällt mir noch einiges ein.
Aber ich habe recht wenig Zeit, um alles umzusetzen.
Mir war erstmal wichtig, das Display in meinem Projekt nutzen zu können.

ShadowPhoenix
01.11.2005, 18:12
Okay, dann frage ich Frank noch, ob ich direkt zur Download-Sektion verlinken darf.

Ah, dachte ich mir schon, denn zu diesem Format fand ich nicht viel.

Ok, dann lassen wir der Zeit ihren lauf ;)

albundy
01.11.2005, 20:40
Hallo,


Ah, dachte ich mir schon, denn zu diesem Format fand ich nicht viel.


Die Endung "inc" hat nichts zu sagen, die habe ich mir ausgedacht.
Für das umgerechnete "bmp" gibt es keine gebräuchliche Endung, da das Format nur auf wenige GLCD Controller zutrifft.

oe9vfj
02.11.2005, 09:20
Es wäre super, wenn man in jede Funktion eine Variable einsetzen könnte,
zB:
Grborder ( w , x , y , z )


So wie die SUBs definiert sind, lassen sich die Routinen problemlos mit Byte-Variablen aufrufen.

ShadowPhoenix
02.11.2005, 20:10
Hab ich noch gar nicht ausprobiert, jedenfalls bekam ich eine Fehlermeldung, wie ich eine Integer-Variable einsetzen wollte.
Nun gut, sind ja auch Byte-Variablen -.-

03.11.2005, 09:24
hallo albundy.
ich habe dieses display von pollin und möchte den code mal anschauen/umsetzen für mein winacr-c projekt. kannst ihn mir mal mailen, ich komme noch nicht dran.
mfg pst
mail: pebisoft@arcor.de

albundy
06.11.2005, 18:51
Hier, wie versprochen, das Tool um s/w Bitmap's in das inc Format für meine Library umzuwandeln.

ShadowPhoenix
06.11.2005, 19:44
Vielen Dank nochmals!

Peter1111
17.01.2006, 14:40
Hallo,
ich habe hier ein SED 1531 Display, es arbeitet nicht parallel, hier das Datenblatt http://www.pollin.de/shop/downloads/D120116S.ZIP
ich habe gelesen das das sed 1565 beide modi kann, kann deine lib die serielle auch, oder nur die parallele ? gibt es irgendwas zu dem SED 1530/31 zu Bascom ?
Gruß Peter

albundy
17.01.2006, 18:25
Hallo Peter,


ich habe gelesen das das sed 1565 beide modi kann, kann deine lib die serielle auch, oder nur die parallele ?

Das ist richtig, der Controller SED1565 kann beide Modi. Allerdings kommt man bei diesem Display nicht an den Controller heran, um ihn auf seriell umzustellen. Warum auch ? Wenn man Portpins sparen will, kann man den Datenport über PCF8574 mit I2C ansteuern.

Mit meiner Library geht nur parallel. Man könnte sie aber relativ einfach auf I2C Datenausgabe umschreiben.
Sorry, aber für serielle Ausgabe müsste man eine vollkommen neue Library schreiben.



gibt es irgendwas zu dem SED 1530/31 zu Bascom ?


Soweit mir bekannt ist, gibt es für diesen Controller in Bascom nichts.

EDIT: Ich war gerade mal bei Pollin auf der Seite.
Hast du das Optrex schon gekauft ? Das Hyundai gibt es doch immer noch und über die Hälfte preiswerter als das Optrex.

Andree-HB
17.01.2006, 18:44
Mit meiner Library geht nur parallel. Man könnte sie aber relativ einfach auf I2C Datenausgabe umschreiben.


DAS wäre doch mal was !

Peter1111
17.01.2006, 19:49
Hi,
das optrex habe ich schon vor 2 Jahren mal gekauft, hatte es auch mal angesteuert, als basicprogramm nach datenblatt, hab da mal par pixel gesetzt mit viel code :-) egal vergesst das Optrex ;-)

kannst du eine oder mehrere .lib schreiben zu Handydisplays ?
kosten bei neu ebay 4-12 EUR in Farbe !!!!!!!!!
wenn du die als lib hinbekommst http://www.xmail.net/martin-k/display.htm
bist du der Held,

cu Peter

albundy
17.01.2006, 21:07
@Andree-HB

DAS wäre doch mal was !
Und was habe ich davon ? Bei mir ist die Zeit knapp und somit kann ich kaum meine eigenen Vorhaben verwirklichen,

@Peter1111

kannst du eine oder mehrere .lib schreiben zu Handydisplays ?
Klar, kein Problem. Was bist du bereit, dafür auszugeben ?

Andree-HB
17.01.2006, 21:24
Und was habe ich davon ? Bei mir ist die Zeit knapp und somit kann ich kaum meine eigenen Vorhaben verwirklichen,


Hey, Du hast das überhaupt ins Spiel gebracht und gesagt, es wäre relativ einfach. Und ich zeige nur meine Begeisterung drüber - wollte damit Deine bisherige Leistung nicht schmälern.

Peter1111
17.01.2006, 21:58
hab mit mal die datenblätter angesehen, all die displays unterscheiden sich von der speicherhandhabung alle nicht so sehr (wenn man sie im grafikmodus mit fonts füttert) der textmodus ist nicht immer gleich oder gar nicht vorhanden, wäre nur die unterschiedliche initialisierung und die I2C Umsetzung.
I2C wird einfach, gibt ja schon lib dafür, aufwändig ist die farbdefinition, der wert müßte mit übergeben werden, (oder als beta zb hintergrund ist immer weiß und r g b oder schwarz für schrift)

dafür ausgeben, naja bin mit meiner firma auch ziehmlich pleite, aber bin sicher das man das gut vermarkten kann, ich kann dazu zB die leiterplatten machen, aber die probedisplays sollten schon rausspringen

cu Peter

Peter1111
18.01.2006, 08:44
eigentlich brauchst du nur den code http://www.apetech.de/article.php?artId=3&nnId=12
für bascom umzustricken

albundy
18.01.2006, 16:46
@Andree-HB


Hey, Du hast das überhaupt ins Spiel gebracht und gesagt, es wäre relativ einfach.

Okay, okay ...
Ich habe die Library mal umgestrickt. Es werden jetzt nur noch 5 Portpins benötigt.

Alles ungetestet und ohne Gewähr !!!

Peter1111
18.01.2006, 21:40
http://www.mikrocontroller.net/forum/read-4-243641.html
http://www.apetech.de/article.php?artId=3&nnId=12

die in bascom anzupassen, wär interresant, bascom soll doch c irgendwie einbinden können, oder in assembler das anpassen, und einpassen können,



die pollin haben nur 5 datenanschlüsse und sind intern fest auf seriell bzw pseudo I2C geschalten,

cu Peter

Dr.Ice2000
27.01.2006, 00:53
Hallo ,

muss man denn unbedingt Bilder in der vollen Auflösung auf das Display schreiben ?

Ich würde gerne kleinere Bilder ausgeben und die vieleicht auch positionieren, so als Icons für ein Menü oder so.
Oder auch einen Zeichensatz mit 16 Pixeln höhe.

Wie kann ich denn einen eigenen Zeichensatz entwerfen ?

Gruß

Markus

albundy
27.01.2006, 20:56
Hallo Markus,


muss man denn unbedingt Bilder in der vollen Auflösung auf das Display schreiben ?

Da es einfacher ist, beschreibe ich das ganze Display. Sonst hätte man vorher die Position und die Größe festlegen müssen und das habe ich mir gespart.


Ich würde gerne kleinere Bilder ausgeben und die vieleicht auch positionieren, so als Icons für ein Menü oder so.

Mach doch eine kleine Grafik und beschreibe das Display damit.
Wenn du anschließend beim Menü die Grafik nicht überschreibst, bleibt sie erhalten, da der Text positioniert werden kann.


Oder auch einen Zeichensatz mit 16 Pixeln höhe.

Das geht mit meiner Library so nicht, da für 16 Pixel Höhe zwei Pages verwendet werden müssen. Diese müssten dann nacheinander mit der ensprechenden Zeichenbreite beschrieben werden.
Ist das gleiche Problem, wie mit kleinen Grafiken. Das war mir für meine Zwecke zu aufwändig.

Dr.Ice2000
27.01.2006, 21:22
Hi albundy,

erst einmal danke für Deine schnelle Antwort.

Womit hast Du denn die Zeichensätze erstellt, oder wie kann ich eigene Zeichensätze erstellen ??

Denn dann könnte ich ja einfach einen Zeichensatz entwerfen, mit dem ich z.B. Zahlen in doppelter Höhe ausgeben kann, muss ich halt aus 4 Zeichen zusammensetzen aber das wäre ja zumindest für Zahlen kein Problem.

Gruß Markus

albundy
28.01.2006, 13:20
... oder wie kann ich eigene Zeichensätze erstellen ??

Hier mal ein Beispiel für die Ziffer 8 mit 10x16 Pixel.

lanpc5
30.01.2006, 15:20
Hallo Albundy... (und alle anderen beteiligten)

Hab mir von Pollin auch das 128x64-GLCD kommen lassen...
Find das super, das sich schon jemand die Mühe gemacht hat, eine .lib dafür zu schreiben =D>

Nun meine Frage zu eben dieser .lib...
Ich würde mir gern den RESET und den R/W- Pin einsparen, da ich an meinem Mega16 testhalber noch ne Menge Zeug dran habe...
Würde die am Displaystecker auf meinem Board auf High, bzw. low legen...

-Braucht man die Pins unbedingt zum ansprechen des GLCD?
-wenn nein, Kann mann die zugeh. befehle aus der lib rausnehmen?
(ich kenn mich nicht so mit assembler aus... :-k )

Danke schon mal für die tolle Arbeit .

albundy
30.01.2006, 17:58
@lanpc5

Ich würde mir gern den RESET und den R/W- Pin einsparen, ...

R/W kannst du ohne Probleme fest auf GND legen.
In der Lib einfach bei den Portdefinitionen den Pin auskommentieren.

Mit RESET ist es nicht so einfach.
Ich habe ihn mit dem Controller zusammen angeschlossen, hat aber nicht immer zuverlässig funktioniert.
Besser wäre es, den RESET vom LCD zeitverzögert nach dem RESET vom Controller zu machen.

lanpc5
30.01.2006, 19:09
Danke für die schnelle Antwort...
Das LCD funzt ohne Probleme.
Nun habe ich aber Hardware-I2C mit aktiv... das liegt ja auf Portc.0 und Portc.1
Der Enable vom LCD liegt somit bei mir auf SCL und der RESET auf SDA...
Kommt sich da was in die Quere?
Wie könnte man das am besten machen?
Eine Dobbelbelegung lässt sich leider nicht vermeiden...

PS: Deine Lib ist super, spitzen Arbeit

Danke, Stefan

EDIT: Hast auch Kontrast mit in der LIB drin?
bei dem LCD kann man den doch SW-seitig einstellen, nich?
EDIT2: also die I2C Pins kann man nicht anders belegen, wenn I2C
aktiviert ist. aber ohne R/W sind ja nur noch 4 control-Pins nötig...
als nächstes werde ich das ganze mit nem I2C-Chip versuchen.

Hat schon jemand Erfahrung mit GLCDs und I2C ?

lanpc5
30.01.2006, 22:06
=D>

so... mal ein Bild von meinem LCD...
habe ein Bildchen gemalt und unten rechts läuft eine Uhr, vom Start des Controllers los, mit nem Sekundeninterrupt ... cool klappt alles ohne Probleme =P~

albundy
31.01.2006, 15:11
Der Enable vom LCD liegt somit bei mir auf SCL und der RESET auf SDA...
Kommt sich da was in die Quere?
Das geht so nicht, jedesmal wenn etwas über I2C gesendet wird, resettet das LCD.


Hast auch Kontrast mit in der LIB drin?
Nur beim Initialisieren, wird der Kontrast auf einen Mittelwert eingestellt.
Man kann ihn aber auch nachträglich ändern.


$lib "sed1565.lib"
$external Sedctrl
'Portx = Datenport LCD
Portx = &H81 '$81 = Kontrast einstellen
!Call Sedctrl
Portx = Kon 'Kon = Kontrastwert 1 - 63
!Call Sedctrl

lanpc5
01.02.2006, 07:55
Danke Albundy

Werd das gleich mal in mein Mega16-Menü mit einflechten...
Hab da gestern mal ein wenig Zeit gehabt und eine 3-Tasten-Menü-Struktur aufgebaut...
1. seite Kontrast und Beleuchtung
2. seite zwei PWMs für Lüfter oder so
3. seite ....
und so weiter


Ach ja, und mit dem I2C... hab da mal ne Diode an den einen gemeinsamen Pin gehängt... den mit Reset fürs GLCD.
Da hat sich nur was getan, wenn ich I2C angesprochen habe, bei den LCD-Befehlen nicht...
Kann das sein, dass, wenn man Hardware I2C aktiviert, die Pins dafür dann reserviert sind???

Danke und Grüße... Stefan

albundy
01.02.2006, 20:55
Kann das sein, dass, wenn man Hardware I2C aktiviert, die Pins dafür dann reserviert sind???

Wenn ich mich nicht irre, wird Hardware-TWI nur benutzt, wenn die "i2c_twi.lbx" eingebunden wird, sonst automatisch Software-TWI.
Aber das ist ja auch egal, der Reset oder Enable an einem I2C Pin wird nicht funktionieren. Spätestens wenn ein I2C Device angesprochen wird, ist das LCD aus.

Dr.Ice2000
01.02.2006, 23:30
Hallo Albundy,

ich hatte ein wenig Zeit und hab versucht mich ein wenig schlau zu machen. Da ich von Assembler leider viel zu wenig verstehe um Deine lib modifizieren zu können, hab ich einfach den font8b modifiziert und komme so auf meine großen Zahlen.

Bei dem Font werden von Deiner lib ja jeweils 8 byte eingelesen, die 8 byte entsprechen wenn ich das richtig verstanden habe jeweils einer Spalte, aber wie ist das bei dem 5x7 font ? da liest du 6 byte ein, sehe ich das richtig, dass da jeweils nach einem Zeichen ein 00 kommt ?

Gibt es in Deiner lib eigentlich eine Einschränkung der zeichenzahl ? Könnte ich Zeichen mit ASCII Code über 127 definieren oder liest er das dann nicht mehr ein ?

Vielen Dank und nochmal danke für die tolle lib !

Markus

albundy
02.02.2006, 14:45
Hallo Markus,


... hab ich einfach den font8b modifiziert und komme so auf meine großen Zahlen.


wie meinst du das ? Wenn du ein Zeichen aus mehreren zusammensetzt, um auf eine Höhe von 16 Bit zu kommen, kannst du aber keine Variablen mehr benutzen.


da liest du 6 byte ein, sehe ich das richtig, dass da jeweils nach einem Zeichen ein 00 kommt ?


das letzte Byte ist jeweils der Abstand zum nächsten Zeichen.


Gibt es in Deiner lib eigentlich eine Einschränkung der zeichenzahl ? Könnte ich Zeichen mit ASCII Code über 127 definieren oder liest er das dann nicht mehr ein ?


Der ASCII Zeichensatz geht ja von 32 (davor sind Steuerzeichen) bis 127, die alle über die Tastatur zu erreichen sind.
Du kannst jetzt auch noch weitere Zeichen ab 128 eingeben, die werden auch in der Lib verarbeitet. Aber die kannst du in Bascom nur noch über die Tastenkombination "ALT + Zeichenwert" eingeben.
Wenn ich mich nicht irre, entspricht Zeichen 128 dann "ALT+160".

Dr.Ice2000
02.02.2006, 15:34
Hi Albundy,

das ich Zeichen definieren kann,die über 127 liegen ist schon mal sehr gut.

Ich habe folgende Problemstellung :

Ich habe eine 11 stellige Zahl, bei der aber alle Ziffern in einer eigenen Variablen liegen. Diese Zahl, die sich natürlich verändert wird an einer festen position angezeigt.
Jetzt sorge ich eigentlich nur dafür, dass je nach position in der einen Zeile der obere Teil meiner großen Zahl angezeigt wird und in der Zeile darunter dann der untere Teil.

Auf die Zeichen jenseits von 127 könnte ich ja mit den Befehlen CHR und ASC kommen oder funktioniert das mit deiner Lib nicht ?
Eigentlich müsste Deiner lib es doch egal sein, ob sie das Zeichen fest zugewieden oder in einem String bekommt.

Gruß Markus

albundy
02.02.2006, 22:27
Auf die Zeichen jenseits von 127 könnte ich ja mit den Befehlen CHR und ASC kommen oder funktioniert das mit deiner Lib nicht ?
Eigentlich müsste Deiner lib es doch egal sein, ob sie das Zeichen fest zugewieden oder in einem String bekommt.


Das ist nicht egal, da an die Library nur die Adresse des String im Speicher übergeben wird.
Wie gesagt, Variablen kannst du so nicht benutzen. Denn "Grdat" spaltet eine Variable in bis zu 5 Ziffern auf und gibt sie dann über "Grlcd" in einer Page (8 Pixel hoch) auf dem Display aus.

Dr.Ice2000
02.02.2006, 22:49
Hi Albundy,

vieleicht bin ich etwas schwer von Begriff, aber wenn ich Dein Beispielprogramm richtig gesehen habe und auch Deine Declareanweisung richtig verstehe kann ich doch mit den Befehlen:

Dim Test as String
Test = "Hallo Welt"
Call Grlocate(15 , 1)
Call Grlcd( Test , "s")

den Text auf das LCD schreiben lassen oder geht das nicht ?

Wenn ich jetzt doch sage:

Call Grlocate(15 , 1)
Call Grlcd( String1 , "s")
Call Grlocate(15 , 2)
Call Grlcd( String2 , "s")

bekomme ich 2 Buchstaben untereinander (oder halt 2 Strings)

Ich muss also nur in einer Unterroutine dafür sorgen, dass die Zeichen auch richtig positioniert werden.

Vieleicht habe ich auch einen Denkfehler, denn wie gesagt Assembler ist nun wirklich nicht meine Stärke.

Danke nochmal

Markus

albundy
03.02.2006, 17:03
Hi Markus,


Test = "Hallo Welt"
Call Grlocate(15 , 1)
Call Grlcd( Test , "s")
den Text auf das LCD schreiben lassen oder geht das nicht ?


Ja klar, das funktioniert. Ist doch aber sehr umständlich.

Ich habe da etwas besseres ! :mrgreen:
Eine erweiterte Library. In der kannst du dir Zeichen im Format 12x16 definieren.
Das Anzeigen in der Grösse funktioniert dann auch mit Variablen.

Dr.Ice2000
03.02.2006, 17:07
Klasse !!!

Danke ! Werd ich gleich mal testen !!

Gruß Markus

Dr.Ice2000
03.02.2006, 17:46
Hi Albundy !

Nochmal vielen Dank !! Das funktioniert wirklich super !!
Ich bin ja vieleicht ein bischen nervig, aber ich möchte halt versuchen Deine lib auch zu verstehen und hoffe ich falle Dir nicht allzusehr auf die Nerven.

Wenn ich das richtig verstanden habe machst Du folgendes :

[Grlcd]
$EXTERNAL _Ctrl

...
ldi r22,8 hier lädst Du die Zeichenbreite ins Register 22
rjmp Grlcd50 und hier springst Du die Ausgaberoutine an
...

hab ich das richtig verstanden, dass die Ausgaberoutine dann soviele bytes einliest wie ins Register r22 geschrieben werden ?

Die lib ist echt klasse und ich find Deine Hilfe wirklich genial !

Gruß Markus

BlaueLed
07.02.2006, 23:00
@Albundy:

hi, habe mir das ganze aufgebaut und es funktioniert wunderbar. habe aber noch ne frage an Dich :

Gibt es ne Möglichkeit, das geladene Bild zu drehen ? Also das man nur eine Bild.inc benötigt und das Bild dann per Code zu drehen.

mfg Kay

albundy
08.02.2006, 17:53
@Kay

Mal abgesehen vom Format (128x64 Pixel), wie soll das funktionieren ?

In der Inc-Datei sind die Bytes der Grafik in der Reihenfolge gespeichert, wie sie auf dem Display ausgegeben werden.
Das sind genau 128 Bytes auf 8 Zeilen (jede Zeile ist 8 Bit hoch)

Sieh dir mal das Beispiel mit der 8 an (Seite 2) und drehe diese 8 um 90 Grad. Dann stimmen alle Bytes nicht mehr.

Das Drehen funktioniert nur, wenn die Daten pixelweise ausgegeben werden.
Aber der SED1565-Controller kann keine Pixel ausgeben, sondern immer nur Bytes.

BlaueLed
08.02.2006, 18:53
@albundy

danke für die Antwort. dann bleibt mir nix anderes übrig als mehrere Bilder im Programm einzufügen.

mfg Kay

albundy
08.02.2006, 23:14
Bei kleineren Symbolen ist es platzsparender diese in den Font16 einzubauen. (auf Millimeterpapier zeichnen und Bytes aufschreiben)
Ein Muster für die Anordnung der Bytes findest du auch in dem Beispiel der 8 auf Seite 2.
Das funktioniert auch jeweils mit einem vielfachen von 12 (Zeichenbreite) oder 16 (Zeichenhöhe).
Es ist zwar ein höherer Aufwand, aber man spart eine eine ganze Menge Speicherplatz. (1 Bild = 1024 Byte , Symbol 36x32 Pixel = 144 Byte)

BlaueLed
09.02.2006, 12:16
ich hätte noch ne andere Frage an Dich:

haste davon mal was mitbekommen ?
http://www.mikrocontroller.net/forum/read-4-243641.html#new

Es gibt auch für Bascom einen Code:
http://www.xmail.net/martin-k/code/LS202-RGB.bas
Bei diesem Code, werden aber nur Balken angezeigt

meine Frage ist, denkste es wäre ein vertretbarer Aufwand, auf diesem Display mit Bascom auch Text und Bild darzustellen ?

mfg Kay

albundy
09.02.2006, 20:30
@Kay


haste davon mal was mitbekommen ?
Wie soll ich das verstehen ? ... mitbekommen ...


meine Frage ist, denkste es wäre ein vertretbarer Aufwand, auf diesem Display mit Bascom auch Text und Bild darzustellen ?

keine Ahnung ! Ich habe leider keinen Sponsor, der mir die Hardware zum Testen bereitstellt.

BlaueLed
09.02.2006, 20:52
sorry, hab mich falsch ausgedrückt. ich wollte fragen, ob du diesen link kennst und auch schon mit diesem Display vielleicht gearbeitet hast.

mfg Kay

astro9481
11.02.2006, 18:14
Hallo,
Ich habe heute auch mal das Display angeschlosen, bekomme es auch ans laufen, aber das problem ist das das die lionien teilweise verschoben sind und das die Buchstaben nicht OK sind.
Versuche mal zu erklären was ich meine

EDIT: Hat nicht geklappt wie ichs eigentlich vor hatte, deshalb jetzt ein Bild

also noch eine zeile drüber. Also über der normalen acht sind noch Pixel die da nicht hingehören.
Werde gleich mal ein foto machen.
Die Linien der Rahmen sind auch verschoben.
Was kann das denn sein, habe es schon mehrmals kontrolliert das lle Pins richtig sind.
Hoffe ihr könnt mir helfen

CIao Marco

albundy
11.02.2006, 18:55
Hallo Marco,

Die Anschlüsse stimmen, sonst würdest du gar nichts sehen.

Es kann sein, dass deine Drähte zu lang sind ?
Das kann man auf dem Foto nicht sehen.
Bei mir sind es max. 10cm vom Display zum Controller.

astro9481
11.02.2006, 19:18
also bei mir können es schon so 20-25cm sein.
Daran kann das schon liegen?
Aber wenn ich das doch mit der beiligenden Platine am Parallelport anshcliße kann das kabel doch auch 2m oder so lang sein

albundy
11.02.2006, 21:45
also bei mir können es schon so 20-25cm sein.
Daran kann das schon liegen?


Ist nur eine Vermutung, aber das könnte schon zu lang sein.


Aber wenn ich das doch mit der beiligenden Platine am Parallelport anshcliße kann das kabel doch auch 2m oder so lang sein

Das ist auch etwas ganz anderes. Dort ist das Kabel geschirmt und der Schirm ist mit der Masse vom Computer verbunden.
Mit frei liegenden Drähten würde das über 2m auch nicht funktionieren.

astro9481
11.02.2006, 22:41
Ja dann werde ich das morgen mal testen. Danke schonmal für den Tip.

Gibts eigentlich auch ne möglichkeit das Display zu invertieren?
Mit dem Kontrast werde ich mirgen nochmal rumspielen.

Ciao Marco

albundy
12.02.2006, 15:49
Gibts eigentlich auch ne möglichkeit das Display zu invertieren?

ist die gleiche Vorgehensweise, wie beim Kontrast.
Den Befehl dafür hab ich jetzt nicht im Kopf, steht aber im Datenblatt.

astro9481
12.02.2006, 19:12
So, die Drähte sind gekürzt,
allerdings immer noch das gleiche Problem.
Echt komisch.
Werde es morgen nochmal wie duz machen und die Dräte driekt an das Display löten.
Habe es jetzt noch so, das ich die Drähte an der Ansteuerplatzine für den Parallelport abgreife, allerdings vor den Widerständen usw.
Aber vielleicht liegts ja da dran!

Ciao Marco

akrausgrill
22.06.2006, 00:43
Hallo,
ich habe ein ähnliches Problem wie Marco.
Mein µC ist ein 16MHz atmega128 und ich versuche damit ein HP12542R-DYO anzusteuern, habe bisher ein paar Routinen zur Ansteuerung und einen Charactergenerator in Assembler geschrieben und das funzt auch eigentlich ganz gut, bis auf eine Ausnahme: wenn 0x7f oder 0xff gesendet wird, bekomme ich zwischen dem 0x7f und dem folgenden Zeichen ein
scheinbar willkürliches Bitmuster (meistens 0xff). Ich habe alle mir sinnvoll erscheinenden Reihenfolgen für die Steuerleitungen getestet,sieht aus als wäre das völlig egal, solange die Daten anliegen und dann eine negative Flanke von EN kommt. ??? Auch Delays von einem NOP bis zig µS zeigen keine Wirkung. Laut Datenblatt muß das Teil ja auch ohne jegliche Verzögerung auskommen. (mit einem Testprog. auf dem PC tritt dieses Phänomem nur sehr selten auf.)
Hat jemand etwas ähnliches beobachtet und eine Lösung gefunden?

Gruß Achim

albundy
22.06.2006, 17:59
Hallo Achim,

ich fürchte, du musst dein Problem schon etwas genauer beschreiben.


... einen Charactergenerator in Assembler geschrieben und das funzt auch eigentlich ganz gut, bis auf eine Ausnahme: wenn 0x7f oder 0xff gesendet wird, bekomme ich zwischen dem 0x7f und dem folgenden Zeichen ein
scheinbar willkürliches Bitmuster (meistens 0xff).

Mit dieser Beschreibung kann ich nichts anfangen.
Etwas Quellcode wäre auch sehr hilfreich.

akrausgrill
23.06.2006, 02:49
Hallo albundy,
erst mal Danke für die schnelle Antwort.
Mit unten stehender Routine lassen sich mit und ohne delay
alle Bitmuster problemlos ausgeben bis auf 0x7f bzw. 0xff völlig unabhängig von dem Programmteil welches die Zeichen erzeugt.

folgender Code erzeugt das Phänomen:
ldi r16,0x7f
call dtaout
ldi r16, beliebiger Wert
call dtaout
loop:rjmp loop

dtaout: ;send r16 to display as databyte
sbi porte,d_dta ;set A0 pin high (cmd)
; call delay
cbi porte,d_ncs ;set /CS pin low
; call delay
sbi porte,d_en ;enable pin high
; call delay
out portb,r16 ;send data
; call delay
cbi porte,d_en ;enable pin liw
; call delay
sbi porte,d_ncs ;set /CS pin high
ret
;Display Initialisierungsfolge wird übertragen wie Daten nur halt mit A0 low
init: .db 0x40,0xA0,0xA3,0xC0,0x2F,0x20,0xAC,0x81,0x20,0xA4, 0xAF,0xA6
Ich hoffe Du kannst damit etwas mehr anfangen. Übrigen habe ich auch mit
einem zweiten Display getestet mit gleichem Resultat.
Möglicherweise ist auch einfach nur mein Verbindunskabel zu lang, ca. 40cm Flachbandkabel (IDE) .

Gruß

Achim

albundy
23.06.2006, 17:20
Hallo Achim,


sbi porte,d_en ;enable pin high
; call delay
out portb,r16 ;send data
; call delay
cbi porte,d_en ;enable pin liw


laut Datenblatt müssen die Daten min. 30ns anliegen, bevor EN von High auf Low geht. Ich würde "out portb,r16" als erstes in "dtaout:" ausführen lassen, dann kannst du die delay's weglassen.

Aber das ist sicher nicht die Ursache.


... bis auf 0x7f bzw. 0xff völlig unabhängig von dem Programmteil welches die Zeichen erzeugt.


Ich denke nicht, das es mit den Bytes $7F bzw. $FF zusammenhängt, da es sonst auch mit Kombinationen wie $7E oder $FE Probleme geben müsste.
Bei einem Flachbandkabel von 40cm Länge würde ich schon eher die Ursache suchen. Zumal das Übersprechen bei dieser Länge doch schon erheblich sein dürfte. Liegt eventuell die Ader für EN im Kabel neben einer Datenader ?

akrausgrill
23.06.2006, 17:52
Hallo albundy,
es war wirklich das Kabel, eigentlich logisch bei 16 MHz Taktfrequenz.
Ich habe heute mittag mal das Kabel auf 5 cm gekürzt und wie durch
ein Wunder waren die unerwünschten Bitmuster verschwunden.
Nochmal ganz herzlichen Dank.

freshi
05.11.2006, 16:57
Hallo.

Hat schonmal jemand versucht die Displaydaten zu lesen um auf Pixelebene zu arbeiten? Ich bekomme es nicht hin (AVR-Assembler-Beginner).

Ich habe Albundys LIB als Basis genommen und wollte zum Test mal den Display-Inhalt invertieren. Teilweise gelingt das auch, aber pro Display-Spalte immer nur bei ein paar (meist aufeinanderfolgenden) Bits. Pro Display-Speicher-Seite dann aber auch unterschiedlich viele (mal 3, mal 4, 5). So habe ich ein hübsches Streifenmuster :-s (siehe Anhang)


Habe das Kabel schon auf 6cm gekürzt um Übersprechen auszuschliessen.

Hier ist der Code


;----------------------------------------Modifizierte Kopie Von Seddata
[sedread]
$external Seddelay , Sedkonst
Sedread:
ldi r18,$00
Out Data_port , R18 ; Pull -ups Aus
Out Data_direction , R18 ; Datenport Auf Eingabe

ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_rw) ;High for Reset + A0 + RW
Out Ctrl_port , R18
rCall Seddelay
ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_E+2^Pin_rw) ;High for Reset + A0 + E + RW
Out Ctrl_port , R18
rCall Seddelay
ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_CS1+2^Pin_rw) ;High for Reset + A0 + CS1 + RW
Out Ctrl_port , R18
rcall Seddelay

in r24,data_port_in ;Datenport nach R24 lesen
ldi r18,$ff ;Datenport wieder auf Ausgabe
Out Data_direction , R18
ret
[end]
;----------------------------------------Modifizierte Kopie Von Grcls
[grinv]
$external Sedctrl , Seddata , Sedread , Sedkonst
Grinv:
clr r24 ;Arbeitsregister
clr r25 ;Seiten-Register
clr r26 ;Spalten-Register
Grinv10:
mov r24,r25 ;Seite ins Arbeitsregister
ori r24,$B0 ;SET-PAGE-Befehl dazu (oberes Nibble, unteres = Seite 0-7)
Out Data_port , R24
rcall Sedctrl
ldi r24,$10 ;SET-COLUMN-Befehl (Hi-Nibble der Spalte im unteren 4 Bits)
Out Data_port , R24
rcall Sedctrl
clr r24 ;2. Teil der Spaltenadresse (Lo-Nibble), hier auch 0
Out Data_port , R24
rcall Sedctrl

ldi r24,$e0 ;Read-Modify-Write-Befehl
Out Data_port , R24
rcall Sedctrl

Grinv20:
rcall Sedread ;Daten nach R24 lesen
com r24 ;Daten invertieren

Out Data_port , R24
rcall Seddata ;Daten zurueckschreiben

inc r26 ;naechste Spalte
cpi r26,128 ;schon bei 128, Dann Seite fertig!
brne grinv20 ;sonst weiter machen

ldi r24,$ee ;Ende Read-Modify-Write-Befehl (um SET-COLUMN aufrufen zu können)
Out Data_port , R24
rcall Sedctrl

clr r26 ;wieder bei Spalte 0 anfangen
inc r25 ;naechste Seite
cpi r25,8 ;schon bei 8, Dann komplett fertig!
brne grinv10 ;sonst weiter machen
ret
[end]


Hab ich irgendwo ein Timingproblem mit den Displaydaten?

Ich wäre für etwas Hilfe wirklich dankbar.

albundy
05.11.2006, 18:25
Hallo,

der Ablauf beim lesen muss ein anderer sein.


ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_rw) ;High for Reset + A0 + RW
Out Ctrl_port , R18
rCall Seddelay
ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_E+2^Pin_rw) ;High for Reset + A0 + E + RW
Out Ctrl_port , R18
rCall Seddelay

in r24,data_port_in ;Dummyread lt. Datenblatt
in r24,data_port_in ;Datenport nach R24 lesen

ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_CS1+2^Pin_rw) ;High for Reset + A0 + CS1 + RW
Out Ctrl_port , R18
rcall Seddelay

;hier zu lesen ist sinnlos, da CS1 jetzt High ist.

freshi
07.11.2006, 08:37
Danke Albundy!

Manchmal braucht's nur einen kleinen Hinweis!
..OK, manchmal würde es auch reichen, wenn ich das Datenblatt ordentlich lesen würde! ;-)

Der entscheidende Tipp ist der Dummy-Read. Allerdings nicht mit 2x IN ... sondern 2x Read ans Display senden (also RES, A0, E, RW auf high).
Ausserdem darf vor dem IN keine Pause sein, weil die Daten wohl nicht lange genug anliegen. So hat's bei mir gestern nach kurzem ausprobieren geklappt.
Werde mich am WE mal daran machen ein paar einfache Grafik-Routinen zu basteln.

pickelrobert
18.07.2007, 01:17
Hallo.

Lange ist's her mit dem letzten Eintrag. Habe trotzdem 3 Fragen.

1.Muß die Quarzfrequenz auch in der lib angepasst werden ?
2.Wozu wird R/W definiert ? Wird im Code doch garnicht verwendet.
3.Wo ist das Tool zum Konvertieren der s/w Bitmaps hin ?

Danke und Gruß

MPL
11.11.2010, 16:49
Hallo,

hab mal ne frage. Womit werden die Fonts erstellt? und wofür is der 2te Parameter bei Grdat()

Declare Sub Grdat(byval Variable As String , Byval Stelle As Byte , Byval Font As String) 'Stelle = Ausgabedigits 1-5

kann ich eigene Symbole malen und in einer Font hinterlegen? z.b. anstelle der #(raute) ein eigenes Symbol?