PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafik LCD mit Touch



linux_80
19.10.2008, 23:08
Hallo miteinander,

heute mal etwas mehr Text :-)

Die letzten Tage hab ich mir mal wieder Zeit genommen etwas in Sachen Elektronik zu basteln.

Angefangen hat es damit, das ich dieses GLCD entdeckt habe:
http://www.pollin.de/shop/detail.php?pg=NQ==&a=MzU2OTc4OTk=
Nr: 120346
Auflösung: 160x80 Punkte
Controller: Sanyo LC7891
Soll kompatibel mit dem HD61830 sein.

Und wie mein Adlerauge festellen musste sieht das sehr nach Touchfolie aus, obwohl da nix in der Richtung in Beschreibung dabeistand :-k
Habs mir aber trotzdem bestellt, vor allem auch weils für den Controller anscheinend noch keinen Treiber für Bascom gibt ;-)
Datenblätter gibts ja, musste nur noch erfoschen, wie der Initialisiert werden will, um mit der Auflösung des LCD zusammenzuarbeiten.
Diese Hürde wurde auch genommen, und ein Basis-Treiber für Bascom war auch gleich zusammengehackt, um mit den gewohnten Bascom-Befehlen auf das LCD zugreifen zu können.
Die Lib ist aber noch nicht fertig, denn das LCD hat 2 Modi, einen Text- und einen Grafikmodus, aber nicht beides gleichzeitig, deshalb ist die Initsequenz jeweils etwas anders.
Für den Textmodus sind die Zeichendaten schon im Controller enthalten.
Für Text im Grafikmodus geht das wie bei einem zB. KS0108 Controller, es müssen alle Daten selber gesetzt werden um ein Zeichen darzustellen.
Dazu kommt noch, dass die Verteilung der Pixel im RAM genau andersherum angeordnet ist wie bei KS0108 oder SED-Controllern. Deswegen muss anders berechnet werden, was ich aber noch nicht gemacht habe.
Textmodus geht ja erstmal und den Rest schaffe ich auch noch :-)

Nun zum Touch, aufgebaut habe ich es wie hier:
http://www.mcselec.com/index.php?option=com_content&task=view&id=189&Itemid=57
Nur irgendwie funktiniert hier garnix, ADC-Werte wie normales Rauschen.
Heute hab ich angefangen etwas tiefer in das Touch-Dinges einzutauchen, dabei hab ich festgestellt, das der Folienleiter, keine Verbindung mit der Touchfolie hat, sehr schlecht #-o
Beim durchmessen ist mir aber aufgefallen, dass ein Anschluss doch bis nach aussen durch geht :-k
Da ich Sicherheitshalber ein 2. LCD hab, bei dem zumindest Y-Richtung ging, kam mir die Idee:
Ich hab einfach den Lötkolben aufgedreht, und den Folienleiten am Kontakt zur Scheibe festgedrückt, und schon ging das Touch, bei beiden LCDs \:D/ \:D/

Beim Touch hab ich eine Auflösung von X: 625 und Y: 425, das ist deutlich mehr als das LCD an Auflösung hat, also ausreichend.

So schauts im Moment aus:

Bilder:
http://roboter.net-con.net/images/touch/GLCD-Touch1.jpg
http://roboter.net-con.net/images/touch/GLCD-Touch2.jpg
Die XY-Werte sind direkt die ADC-Werte.

AdapterPlatine:
http://roboter.net-con.net/images/touch/Oberseite.jpg
http://roboter.net-con.net/images/touch/Unterseite.jpg

Hier noch die Daten wie die Register Initialisert werden, für Textmodus:

; Reg - Data
; 0 - $3C - b00111100 - ModeControl - character, Cursor Blink
; 1 - $75 - character pitch - Vp 8 dots, Hp 6 dots
; 2 - 26 - # of characters - 27 characters !?
; 3 - $4F - # time division - 1/80 display duty
; 4 - $07 - cursor pos - pixel line 8
; 8 - $00 - display startaddress low
; 9 - $00 - ... high
; a - $00 - cursor address low
; b - $00 - ... high

Wenn die Lib soweit fertig ist, wird die natürlich auch hier vorgestellt.

PS:
Wie ich grad sehe, ist das LCD schon nicht mehr verfügbar :-(
Vor ein paar Minuten wars noch da, hab ja den Link oben kopiert :-k

PPS:
in diesem Beitrag weiter unten gibts eine erste Grafikfähige Bascom-Lib:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=486210#486210

thewulf00
20.10.2008, 07:43
Wie ich grad sehe, ist das LCD schon nicht mehr verfügbar :-(
Vor ein paar Minuten wars noch da, hab ja den Link oben kopiert :-k

Genau das habe ich auch gerade gemerkt. :-s
Schade, dabei hätte sich das dank Deiner Arbeit gelohnt!

Dann danke ich Dir schonmal für die Bilder, damit wir überhaupt eine Vorstellung haben.
Vielleicht findest Du mal ein ähnliches, oder dieses GLCD bei einem anderen Versand?

just4fun
20.10.2008, 19:56
Sehr geil! =D>
Aber wirklich doof, dass es das nicht mehr gibt... :( Vielleicht gibt es das ja wirklich noch einmal dort. Was hatte es denn gekostet?

dremler
20.10.2008, 20:12
sags lieber nich sonst werden wir neidisch:P

linux_80
20.10.2008, 20:15
Hi,
doch was vergessen, aber wenn ich den Preis angebe ärgert man sich noch mehr ;-)

6,95€

just4fun
20.10.2008, 20:32
Wow! NEID!!
Ein echter Glücksgriff, würde ich mal sagen...

Blue72
29.10.2008, 19:28
Da hätte ich doch mal eine Frage zu ...
Das Touchpanel meines LCDs hängt über jeweils 100R am PortA.

Die Y-ADC Werte gehen von 181-861 (nutzbarer Bereich) sowie X Werte 376-612 (nutzbarer Bereich).

Ich habe versucht aus dem Beispiel der AN148 schlau zu werden (für die Berechnung), werde ich aber nicht :(
Wie berechne ich das denn richtig, das der Stift auch da einen Punkt setzt wo der Stift das TP trifft und nicht alles verschiebt und die Pixel wild verteilt ?

Gruß
Jens

linux_80
29.10.2008, 19:37
Hi,

ich hab's noch nicht ganz fertig für mein Touch, aber man muss die Koordinaten des Touch auf die des LCD umrechnen.
Also erst den Punkt an dem das LCD 0,0 hat am Touch einlesen, dann den max. Wert des LCD (zB. 128,64) am Touch einlesen, den Rest dann daraus berechnen.
;-)

mex.de
23.11.2008, 10:57
Hallo Linux_80,

hast du deine Pixelumrechnung für dein Touch schon fertig? Bei mir funktioniert das nich richtig, habe immer eine Abweichung drin je weiter ich nach rechts auf dem Display gehe :-(

linux_80
23.11.2008, 12:48
Hallo,

nein, bin noch nicht dazugekommen. Hab das zwar etwas verfeinert, aber bis jetzt zeig ich aber nur XY-Werte an.
Ob das bei mir linear ist, hab ich auch noch garnicht untersucht.

Die nächsten Tage wird das auch leider nix bei mir, ich lass es aber auf'm Schreibtisch liegen, falls mal etwas Zeit ist ;-)

mex.de
23.11.2008, 12:58
Kannst du mir vielleicht den Code für die Berechnung der x/y Kordinaten mal zukommen lassen? :-)

Blue72
23.11.2008, 13:15
... habe immer eine Abweichung drin je weiter ich nach rechts auf dem Display gehe :-(

Dann stimmt der Umrechnungsfaktor nicht (Pixel / ADC Wert)
Du musst erstmal die min/max Werte des ADC ermitteln, wo Dein LCD anfängt und wo es aufhört. Fängt es zum bsp. bei ADC Wert 70 an und hört bei 900 auf, musst Du das natürlich berücksichtigen.

Dein "Nullpunkt" zum Start Deiner Berechnung ist dementsprechend 70, Dein "Endpunkt" 900.
So hättest Du z.B. 830(ADC Wert) / 128(Pixel) = 6.48 (Faktor).
Heisst also das ein Pixel auf dem LCD dem ADC Wert 6.48 entspricht.

Ich hoffe ich hab da jetzt kein Denkfehler drin :-)

Gruß
Jens

mex.de
23.11.2008, 13:29
Hm... Ja so hatte ich mir das auch schon zusammen gebastelt aber das Resultat ist folgendes:
x,y(0,0)=0,0 Anzeige auf Display das sieht gut aus
x,y(240,128)=238,127 das ist auch aktzeptabel
x,y(0,128)=14,50 das nich ganz was ich erwartet habe
x,y(240,0)=150,34 das ist ebenfalls zu wenig

ich geh mal davon aus, dass das Touchpanel nicht linear ist oder es ist kaputt... auf jedenfall kann ich keine vernünftigen Pixel Koordinaten ermitteln. :-(

linux_80
23.11.2008, 18:28
Auf LCD-Pixel hab ich noch nicht umgerechnet, nur soweit, das ich in der Ecke ca. auf 0,0 komme, der Rest ist immer noch vom ADC.

Evtl. könntest Du uns zeigen wie Du gerechnet hast, vllt. werden da mal ein paar Kommastellen verschluckt, denn wenn der max. Punkt passt, sollten die dazwischen auch in etwa stimmen.

Es gibt/gab hier mal nen Thread, da wurde das berechnet.
... da isser ja:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=32952

mex.de
23.11.2008, 19:14
Also ich hab mich ja auch an dem Code von dieser Seite orientiert:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=32952


ich verwende lediglich einen Atmega 32 statt des 128...

ich habe sogar das gleiche Display (ledsee.com)... aber bei mir sieht es nicht so aus wie auf den Bildern im og. Beitrag... :-(

Ich glaube eher, dass das Touchpanel kaputt ist... Schön wäre auch ein Datenblatt zum Touchpanel...

Blue72
23.11.2008, 19:21
Poste doch mal Deinen Code. Ein Datenblatt zum Touch ist eigentlich unnötig, da es nur 4 Widerstände sind ;)

H I E R (http://www.mcselec.com/index.php?option=com_content&task=view&id=189&Itemid=57) sieht man die Beschaltung des AVR.

Gruß
Jens

Rage_Empire
23.11.2008, 19:29
meist funktionieren diese touch-teile mit einem 4-wire anschluss. von analog devices gibts sogar controler dafür welche über spi angesprochen werden können. das prinzip ist wie 2 variable spannungsteiler. einer für y und einer für x.

mex.de
23.11.2008, 19:30
Also der sieht genauso aus, nur mit angepassten Werten...

Blue72
23.11.2008, 19:34
Hier mal Dein Code zum mitlesen (ohne download) :-)



$regfile = "m32def.dat"
$crystal = 7372800
$hwstack = 100
$swstack = 75
$framesize = 40
Config Graphlcd = 240 * 128 , Dataport = Portb , Controlport = Portd , Ce = 2 , Cd = 1 , Wr = 4 , Rd = 3 , Reset = 0 , Fs = 5 , Mode = 6

Config Sda = Portc.1
Config Scl = Portc.0
Config Adc = Single , Prescaler = Auto


'****************** Variablen ********************************
Dim X As Word , Y As Word
Dim X2 As Single , Y2 As Single
Dim X3 As Single , Y3 As Single
Dim X4 As Byte , Y4 As Byte
Start Adc
Cursor Off
Cls


Do
Gosub Readtouch
Locate 3 , 22
Lcd Y ; " analog Y "
Locate 4 , 22
Lcd X ; " analog X "

If Y > 170 Then
Y3 = Y - 170
Y2 = Y3 / 1.89
Y4 = Y2
Else
Y4 = 0
End If

If X > 150 Then
X3 = X - 150
X2 = X3 / 1.78
X4 = X2
Else
X4 = 0
End If

Locate 5 , 1
Lcd X4 ; " X"
Locate 6 , 1
Lcd Y4 ; " Y"
Pset X4 , Y4 , 255
Loop
End

Readtouch:
Config Pina.0 = Output ' Makes port F.0 output
Config Pina.2 = Output ' Makes port F.0 output
Set Porta.0 ' Sets port F.0 High
Reset Porta.2 ' Sets port F.2 Low
Ddra.1 = 0 ' Sets port F.1 as input
Ddra.3 = 0 ' Sets port F.1 as input because we need it now as ad input
Waitms 20 ' Wait until the port is stable
Y = Getadc(3) ' Read the ad value for the y
Y = 1024 - Y ' Invert the reading

Config Pina.1 = Output ' Makes port F.1 output
Config Pina.3 = Output ' Makes port F.3 output
Reset Porta.3 ' Sets port F.3 Low
Set Porta.1 ' Sets port F.1 High
Ddra.0 = 0 ' Sets port F.0 as input
Ddra.2 = 0 ' Sets port F.2 as input because we need it now as ad input
Waitms 20 ' Wait until the port is stable
X = Getadc(2) ' Read the ad value for the x
X = 1024 - X ' Invert the reading
Return

mex.de
23.11.2008, 19:37
Ohh... Danke, ich weiß nich wie man den Code hier zum mitlesen plottet ;)
Ja Port A ist beim Atmega 32 der ADC Port... Muss ich denn JTAG ausschalten? in meinem Hauptprogramm hab ich das auch nicht gemacht und die Spannungs bzw. Strommessung funktioniert auch einwandfrei...

Wie schalte ich denn JTAG aus? Welchen Effekt hat das denn?

Blue72
23.11.2008, 19:42
Sorry, da hast Du schneller gelesen als ich editiert :D JTAG ist beim Mega32 auf dem Port C ;)
Für mich sehen Deine ADC Werte aber ziemlich klein aus :(

Sind das ausgemessene Werte ?

mex.de
23.11.2008, 19:50
Kein Problem ;)

Also da ich das selbe Display habe wie im Beispielprogramm geh ich mal davon aus, dass da was mit dem Tocuhpanel nich stimmt... Habs jetzt erstmal auf primitive weise gelöst indem ich die analogen Koordinaten genommen habe... ist nich schön aber es funktioniert erstmal... Mal sehn wann sich LEDSEE.com meldet... wenn ich Glück habe schicken sie mir ein Ersatz...

Oder hast du noch eine andere Idee? Man könnte sich auch den Aufwand machen und eine nichtlineare Gleichung aufstellen aber das is mir zu umständlich ;)

Blue72
23.11.2008, 21:39
Die Werte von digitali hast Du aber nicht übernommen.



Do
Gosub Readtouch
Locate 3 , 22
Lcd Y ; " "
Locate 4 , 22
Lcd X ; " "

If Y > 330 Then
Y3 = Y - 346
Y2 = Y3 / 2.89
Y4 = Y2
Else
Y4 = 0
End If

If X > 150 Then
X3 = X - 160
X2 = X3 / 2.78
X4 = X2
Else
X4 = 0
End If

Locate 5 , 1
Lcd X4 ; " "
Locate 6 , 1
Lcd Y4 ; " "
Pset X4 , Y4 , 255
Loop


Nochmal, hast Du die Werte des ADC ermittelt ?

linux_80
06.04.2009, 12:34
Für die, die es noch nicht gesehen haben z.Zt. gibts das LCD wieder:
http://www.pollin.de/shop/detail.php?pg=NQ==&a=MzU2OTc4OTk=

und ein Thread bei MC http://www.mikrocontroller.net/topic/133063

thewulf00
06.04.2009, 13:53
Oh danke! *gleichmalnebestellungaufsetz*

AndiR
20.04.2009, 16:51
Hallo,

ich habe mir auch vor kurzem das GLCD bestellt und als es angekommen war wollte ich es natürlich gleich mal testen.

Zuerst wollte ich überprüfen ob die Hintergrundbeleuchtung geht und habe an Pin 19 und 20 1,2 bis 3 Volt angeschlossen. Aber es tut sich einfach nichts und in dem Datenblatt habe ich leider auch noch keine hilfreichen Daten gefunden.

Deshalb wollte ich fragen, ob mir vielleicht jemand helfen kann.

Danke

AndyTrendy
20.04.2009, 17:36
Hallo

Hört sich wirklich gut an.Vielen Dank für den Tip
ich denke ich werde mir einfach ma eins bestellen bei dem Preis kann man nicht wirklich was falsch machen.

Nur zur sicherheit.
Es ist wirklich das LCD - DataVision DG-16080-11 ???
http://www.pollin.de/shop/shop.php?cf=detail.php&pg=NQ==&a=MzU2OTc4OTk=


Lg

Andy

thewulf00
20.04.2009, 17:46
Wieviele andere bei Pollin für den Preis findest Du denn noch?
Ansonsten nutze einfach den Link im ersten Post zur Sicherheit. Pollin nutzt die selbe Bestellnummer soweit ich weiß.

AndiR
20.04.2009, 18:14
kann mir denn keiner weiterhelfen???

mit wieviel Spannung muss man die Hintergrundbeleuchtung betreiben???

nestandart
20.04.2009, 18:49
kann mir denn keiner weiterhelfen???
mit wieviel Spannung muss man die Hintergrundbeleuchtung betreiben???

steht, glaube ich, in datenblatt von pollin.

linux_80
20.04.2009, 19:07
Also bei meinem LCD steht 4.2V drauf, und zieht dabei 350mA.

AndiR
20.04.2009, 19:47
Danke fuer die Antworten =))

im Datenblatt steht leider nichts genaues bzw. ich kann nichts genaues finden

also ich habe es an Pin 19 und 20 mal mit 3 volt getestet aber es geht nicht =(

kann es sein das die LED Hintergrundbeleuchtung sehr schwach leuchtet ???

entschuldigung fuer solche fragen aber ich bin anfeanger auf dem gebiet =))

linux_80
20.04.2009, 19:52
Mit 3V wird die bestimmt schwach leuchten es sollen ja 4.2V sein.

Steht auf dem weißen Teil, an dem die Anschlüsse sind, drauf ! Ein wenig schief hinschauen.

thewulf00
20.04.2009, 20:02
Also da steht nix -.-

linux_80
20.04.2009, 20:15
Bei mir schaut's so aus:
http://roboter.net-con.net/images/PollinLCD_BL.JPG

Ist bei den beiden die ich hab gleich.

nestandart
20.04.2009, 21:25
und bei mir steht "caution high voltage".
(vor 3 wochen gekauft)

thewulf00
21.04.2009, 10:36
Bei mir auch. Offensichtlich ein anderer Typ? Genau da hatte ich ja auch geschaut @linux, aber: nix.

Amazz
21.04.2009, 16:59
@nestandart: es könnte sein, dass du keine led-hintergrundbeleuchtung hast, sondern eine EL
(denk ich mir mal, da diese mit invertern betrieben werden und inverter eine hohe spannung ausgeben -> "caution high voltage")

nestandart
21.04.2009, 17:35
in DS steht doch:
"EL Drive Voltage, Vel, fEL=500HZ, 90 - 110V "
und auf der Platine sind beide Background-Beluechtungs-pins als "EL" gekennzeichnet.

und bei mir sehe ich unter display-glass keine Typische dicke weise LED-dings-bums... sonder es sieht wie eine rosa-farbene folie (ca 0,5mm dick mit zwei elektroden) aus (ähnlich wie ein flacher kondensator).

also ... jeder muss sein display selbst optisch untersuchen...
und falls man nicht sicher ist - einfach mit diodentester testen.
bei LED wird es als diode funktionieren.
bei H-Voltage - zeigt der Ohm-meter - unendlich.

thewulf00
21.04.2009, 20:52
Oh mann. Dann ist das ja voll der Fehlkauf. High-Voltage steht bei mir auch^^

nestandart
21.04.2009, 21:25
thewulf00, is doch net schlimm. Nimm ein MC34063 :)

Flash2over
21.04.2009, 23:05
Ich bekomm morgen hoffentlich auch das Display. Und ich will es an nen Atmega 32 anschließen. Jetzt komm ich nicht mit der Beschaltung zurecht. Hab ma mein Plan als pic angehängt. Geht das so wie ich denke oder hab ich nen Fehler dabei?

http://www.bilder-space.de/thumb/22.04KXYvpB972aByeLK.jpg (http://www.bilder-space.de/show.php?file=22.04KXYvpB972aByeLK.jpg)

thewulf00
22.04.2009, 09:52
Was ist ein MC34063?
Wie kann man diese EL-Hintergrundbeleuchtung aktivieren?

nestandart
22.04.2009, 16:19
thewulf00 -> http://www.datasheetarchive.com/search.php?q=MC34063
EL - einfach anschliessen.
oder gar nicht anschlissen, bei Tageslicht braucht man meistens keine Hintergrundbeleuchtung.

thewulf00
22.04.2009, 16:23
Naja, einfach anschließen ist mir schon klar, aber was muss ich denn für einen Aufwand treiben, um meine TTL-Schaltung auf 110V zu bringen?

Und wenn ich ein Display ohne Hintergrundbeleuchtung haben wollte, hätte ich nicht dieses hier genommen.

Amazz
22.04.2009, 16:50
@Flash2over: ich glaube da ist ein kleines Fehlerchen drin. An deinem Quartz die Kondis haben laut Schaltplan wohl keine Verbindung zu GND (da der Punkt auf der Kreuzung fehlt). Den Rest hab ich noch nicht angeschaut...

Flash2over
22.04.2009, 21:19
danke amazz aber da ich da eh die platine von hand draus mach (hab noch keine ätz erfahrung) is des egal fehler passiern...mir gehts eher um die 20er leiste vom display
hab da versucht auf linux_80 seinen bildern bissel zu erkennen und infos ausm datenblatt zu bekommen

Amazz
24.04.2009, 11:33
@Flash2over: also ich hab mir jetzt mal den rest des plans angeschaut und denke, dass es so funktionieren wird. hab mir auch gleich mal 4 stück von diesen displays bestellt (man muss zuschlagen, wenns günstig is :D) und werde es auch mal versuchen.
achja, ätzen kann ich dir empfehlen! bei mir ists genau umgekehrt, ich hab noch keine "von hand" erfahrung, ich ätz immer schon und es funktionier wunderbar! (und sieht gut aus ;) )

.:Sebastian:.
01.05.2009, 20:03
Hallo zusammen ...

Ich hab mir auch 4 von diesen 'tollen' Displays zugelegt.
Der Einfacheit halber hab ich dann mal FlashOvers Schaltung aufgebaut, und versucht ein Programm zu schreiben, mit dem ich das Display erstmal im Textmodus ans laufen bekomme.

Als Hilfen hatte ich das DS von Display und das vom LC7981 und das Zeug von http://www.frozeneskimo.com/samsunglcd/avr-lc7981-v1/

Das Ergebnis meiner Bemühungen : Das Display zeigt nichts an. Nur wenn man Kontrast ganz hochdreht sieht man es schwach flimmern.

Ich hab jetzt paar Fragen :
1. Welchen Pegel sollte der Resetanschluss vom Display haben ?
Im DS steht "L" active.
Heißt dass wenn ich das Display benutzen will muss der High sein ?

2. Die Daten, die über die 8 Datenleitungen anliegen, werden ja bei einer negativen Flanke am Enable übernommen.
Muss enable also auf low setzen, dann zu übernehmen der Daten kurz auf High und dann wieder low oder umgekehrt ?


3. Und welchen Pegel sollte Chipselect eigentlich haben ?
Im DS vom LC7981 steht CS (mit Strich drüber) = 0.
Das müsste doch heißen das CS low sein soll.

Und kann ich, wenn ich das Display so wie auf der ersten Threadseite gesagt initialisiert habe, einfach mit dem Kommando 0C ein Zeichen schreiben ?
Oder muss ich da vorher noch was anderes machen ? :-k

Hat vllt. jemand, am besten Flashover weil ich ja die selbe Schaltung hab,einen getesten Quelltext zur Hand (Sprache egal), in dem CS und Reset benutzt werden,den er mir mal zeigen könnte ?
Weil nach 2 Tagen Versuch und Fehlschlag hab ich keinen Plan mehr, was ich falsch machen könnte.
(Ihr glaubt gar nicht wie sau dämlich ich mir im Moment vorkomme.)

Falls ich das Display ans laufen bekommen sollte, würde ich mir auch die Mühe machen und eine schöne lib in C schreiben und die hier zu Verfügung stellen.

Sebastian

Flash2over
01.05.2009, 22:24
Das http://www.frozeneskimo.com/samsunglcd/avr-lc7981-v1/ kannste nehmen...

meine erste zeichnung war etwas anders als ichs im Endeffekt gemacht hab.

Pin 15 habe ich auf GND gelegt (er ist active low= active wenn gnd anliegt)
Pin 16 habe ich auf VCC gelegt (da man ihn nicht active haben will)

Damit könnteste auch die LIB von frozeneskimo benutzen. Natürlich könntest du die auch erweitern und Pin 15 und 16 am MC anschließen und die per software auf high/low legen.

Ich habe im moment leider ein anderes Projekt sonst hätte ich ne eigene LIB geschrieben mit touch etc.. Naja vll komm ich ja noch dazu wenns niemand vor mit macht^^

.:Sebastian:.
01.05.2009, 23:08
Okay ....

Das Zeug von frozeneskimo tut bei mir nämlich auch nicht. Das find ich jetzt ziemlich untoll :(
Ich bin im Moment völlig ratlos, alle Spannungen sind da wo sie hingehören.
Wenn ich mit dem Oszi messe seh ich wie z.b. RS oder enable geschaltet werden.
Auch die Datenleitungen sind alle da.
Aber das Display is und bleibt leer.
Kein Datenmüll wird angeziegt ... garnichts.

Ich glaub mein Display is im Eimer.
Oder hat noch jemand einen Vorschlag ?

Sebastian

Amazz
02.05.2009, 10:37
Ich hoff ich kann dir etwas hoffnung geben,.. ich hab mir gestern auch ne kleine platine gebastelt, sehr ähnlich der beschaltung von Flash2over, nur benutze ich die ports etwas anders, was aber grundsätzlich keine rolle spielt.
ich hatte anfangs auch kleine probleme und hatte kein oszi :-(
hab das dann mit nem multimeter so gut es ging gelöst.

es läuft jetzt auf jeden fall schonmal, ich kann im textmodus die zahl der berührten y-achse auf dem touch anzeigen.
du benutzt wahrscheinlich bascom, ich "leider" C. also kann ich dir da nich viel helfen...!?

ich hatte aber anfangs auch probleme. es hat sich dann herausgestellt, dass ich die JTAG-Fuses nicht abgeschalten hab. nachdem ich das getan hab hat es wenigstens schon etwas dargestellt.
vom zeitlichen her müsste es eigentlich keine probleme geben, denn ich habe in keiner meiner funktionen irgend eine warteschleife und es funktioniert (mit 16MHz).
um etwas anzuzeigen muss RES=1, CS=0

so, jetzt hab ich mal alles geschrieben, was mir einfiehl, hoff es hat etwas geholfen!
gruß

.:Sebastian:.
02.05.2009, 11:48
Naja also leider C is kein Problem.

Ich programmiere ja auch C. Ich hab oben nur gemeint das ich auch Bascom kann. Hab beides paralell gelernt.

Über die Jtag Fuses bin ich auch schon gestern Mittag gestolpert, is mir aber sofort aufgefallen.

Mittlerweile geh ich eigentlich schon von nem Hardware Problem aus.
Aber ich kann bei mir keinen Fehler finden.
Naja Ich mess nachher mal alle Leitungen durch, vllt ergibt sich ja was.

Sebastian

btw. bei Pin 18 steht Dis off im Datasheet. Hat den jemand irgendwo hin verbunden ?

Amazz
02.05.2009, 12:56
ich hatte diesen pin erst auf nem port(da ich dachte, dass es evtl. ein displ. on/off-pin is), aber dann is mir aufgefallen, dass er einfach dauer-high is. hab ihn jetzt einfach gekappt, hängt also in der luft.

hast en anderes display mal hingehängt?
ich hatte auch grad en kleines prob. es waren lauter streifen im bild und alles war verschoben, dann hab ich en neues displ. hingehängt und es ging wunderbar -> 4-1= nurnoch 3 displays auf vorrat :D

.:Sebastian:.
02.05.2009, 18:13
Moin Moin ...

So nach dem ich jetzt CS und Reset fest auf ihre Pegel gepackt hab, sieht das ganze so aus :
https://www.roboternetz.de/phpBB2/download.php?id=16727
Ich hoff man kanns erkennen, weil das Bild is etwas verwackelt aber ich hab keine Lust noch eins zu machen.
In der eine Ecke sieht man eine Schönen verlauf von schwarz nach grau.
Und da ich nicht davon ausgehe, dass ich einem sw-Display Graustufen beibringen kann, denke ich mal das Display is im Eimer.

Ich löte mal ein anderes an und meld mich wieder.

Sebastian

//Edit : Zweites Display selber Effekt nur diesmal über die ganze Displayfläche.
Entwerder ich mach was falsch, oder ich hab nur kaputte Displays bekommen.
Ich organisier mir am Montag mal eine Federleiste, damit ich die Displays steckbar bekomme und nicht an allen rumlöten muss. Sollten die anderen zwei genauso rumzicken gehen die an Pollin zurück.

linux_80
02.05.2009, 21:04
Ist das so, wenn das LCD nur mit Strom versorgt wird, oder schon initialisert wurde ?
Denn meins macht auch komische sachen ohne Init !

.:Sebastian:.
02.05.2009, 21:36
Ich habs .... Ich habs *freu* *tanz* .....

Ich habs tatsächlich gepackt enable und RS zu vertauschen.
Wenn ich auf als mit dem Oszi gemessen hab hab ich nur gesehen, dass es da wackelt.
Aber mehr auch nicht.
Ich hab zwar immer alles durchgeklingelt, muss das aber irgendwie durcheinander gebracht haben. Und dann noch den Wald vor lauter Bäumen nicht gesehen.

Grad eben hab ich mit dem Ohmmeter nochmal alles gecheckt.
Nach 10 min gepiepse wars gefunden. :D

Natürlich kann man mit so einem Dreher drin nicht erwarten, dass der Init geht.
Deshalb der ganze Müll aufem Display.

Danke an alle für die Tipps, es war halt mal wieder der eigene Kopf im weg.
Oder das Brett vor besagtem Denkapperat.

Sebastian

Amazz
07.05.2009, 18:07
so, dass es hier mal wieder was neues gibt, hab ich hier mal was :-)
Das Bild hab ich erst mit Photoshop bearbeitet, dann als Bitmap gespeichert und mit "Bitmap2LCD" in Code umgewandelt.
kleine funktion dazu geschrieben und nun kann mein lcd alles mögliche anzeigen.
mein touch geht leidernoch net so wies soll.

gruß

thewulf00
07.05.2009, 20:41
Hey supercool!

Bist Du das?

Amazz
08.05.2009, 11:40
ja, bin ich... wollte ja testen, wie es aussieht, wenn man normale (farb)fotos umwandelt - ob man dann noch was erkennt. ist aber garnicht so schlecht geworden, würd ich sagen.

.:Sebastian:.
08.05.2009, 14:41
Moin Moin ...

Sieht ja genial aus, muss ich nacher auch mal probieren ;)

Ich bastel grad an der selben Aufgabe.

http://sebastians-site.de/homepage/uploads/images/touch.jpg
(Erste kleine Touchexperimente)

Ich kann auch schon Bitmaps von LCD2Bitmap anzeigen, leider aber nicht frei positionieren.

Mein Ansatz ist das bild byteweise in den Display Puffer zu schreiben.
So kann ich das Bitmap aber ja leider nur byteweise sprich um 8 Pixel entlang der X-Achse positionieren. Meine bisherigen Versuche das mit bit schupsen und maskieren hinzuschieben, waren alle noch nicht wirklich so ganz das wahre.
Die Alternative wäre das Bild Pixelweise zu übertragen, aber da übertrage ich dann ja das 16fache (8*2byte statt statt einem byte für 8 Pixel) an Daten.
Sowas is hässlich und unschön vor allem ineffiezient.
Und weil ich plane die meine Lib für C sobald die fertig is und getestet is unter GPL zu veröffentlichen (zusammen mit nem Schaltplan + Platinenplänen für atmega32) , will ich da schon was ordentliches liefern.

/Edit :
So jetzt hab ichs .... war ganz einfach man musste bloß um ein paar Ecken denken.

http://sebastians-site.de/homepage/uploads/images/touch2.jpg


Sebastian

PS : Touch hat bei mir auch noch so seine Probleme, bei dem Display was ich im Moment angeschlossen hab sind die Kontakte am Folienleiter ziemlich im Eimer. Da hab ich kaum Kontakt. Vllt. kann man da mit Leitsilber was retten.

Logger
10.05.2009, 18:21
Hallo Sebastian

Bin auf der suche nach einem Anschlußplan des Display DG-16080 und bin bei euch gelandet, habe mich dann angemeldet und hoffe auf Hilfe.
Habe mir vor kurzem auch so Display mit bestellt, habe aber mit dem anschluss Probleme.
Benutze einen Atmega 644 und Bascom.
Wäre klasse wenn du die Anschluss belegung mal einstellen würdest.

Mit bestem Dank

Ralf aus Dinslaken

.:Sebastian:.
10.05.2009, 18:58
Öhm ....

Ich versteh grad die Frage nicht ganz.
Also die Belegung bekommst du übers Datasheet von Pollin.
http://www.pollin.de/shop/downloads/D120346D.PDF

Und dann hab ich einfach alles wie bei Flashover vedrahtet.
https://www.roboternetz.de/phpBB2/viewtopic.php?p=438303#438303

Und dann je nach dem ob du es brauchst kannst du CS und Reset auf feste Pegel packen.

Sebastian

Logger
10.05.2009, 20:13
Hallo

Das Datenblatt hatte ich schon und das schaltbild habe ich gesucht.

Danke Ralf

Amazz
12.05.2009, 18:54
ich hab ein kleines problem:
mein touch funktioniert zwar (ich kann also die werte, die ich auf der folie berühre darstellen) aber wenn ich nichts berühr, wird ständig irgendein wert angezeigt.

habs ungefähr so aufgebaut wie flash2over.
hat jeand ne lösung?

sebastian, wie siehts bei dir gerade aus mit deim touch?
gruß

edit: ok, habs schon gelöst, hatte eine direction falsch beschalten

.:Sebastian:.
12.05.2009, 21:04
Moin Moin

Gut wenn sichs erledigt hat.

Weil ich bekomm mein Touch vor nächster Woche nicht an den Start.
Schreib am Freitag Mathe. 4 Stunden Stochastik. *kotz*

Aber nach den LKArbeiten hab ich Zeit hier alles fertig zu machen und mit vernünftiger Doku online zu stellen.

Gruß
Sebastian

Flash2over
12.05.2009, 21:51
...da ham wir ja nächste woche Überschuss an Dokus^^ weil ich hab am Montag meine letzte ABI arbeit und wollte mich auch ans Display hängen^^

.:Sebastian:.
19.05.2009, 19:35
Moin Moin ...

Ich wollte mich mal kurz zur Lage der Lib + Doku die ich hier versprochen hab melden.

Ich hab jetzt mal alles was ich schon fertig habe mit Mercurial online geparkt.
http://sebastians-site.de/hg_repos/glcd/

Was bisher funktioniert :
Textmodus komplett inklusive scrollen.
D.h. wenn man in der letzten Zeile einen \n schreibt, werden alle anderen Zeile um 1 nach oben geschoben und man hat wieder Platz.

Im Graphikmodus:
- Das an/abschalten einzelner Pixel über die Koordinaten.

- Ausgeben von Bitmaps aus dem Flash, mit freiem positionieren.
D.h man ist nicht an das 8bit Raster vom Speicher gebunden und trotzdem muss nicht jedes Pixel einzeln übertragen werden.
Ein 35* 59 Pixel Bitmap an der Stelle 13,23 ist kein Problem.
(Allerdings ist die Funktion kompliziert wie Hölle und hat eventuell noch ein paar Macken. Hier könnt ich etwas Hilfe brauchen)

- Texte mit beliebige Fonts frei positionieren
Also wieder kein Bedarf für ein horizontales 8Pixel Raster.
Der Font wird auch im Flash gespeichert.
(Noch total verbuggt, deshalb auch noch net online aber ich Arbeite dran.)

Natürlich kann man das Display auch in beiden Modi löschen.

Die Dokumentation zum Source ist doxygen sei dank in Ansätzen vorhanden.

Sebastian

thewulf00
20.05.2009, 12:38
Weiß eigentlich inzwischen jemand, wie man die Hintergrundbeleuchtung ansteuern muss?

.:Sebastian:.
20.05.2009, 13:23
Moin thewulf00

Eine spruchreife Antwort kann ich dir da noch nicht geben,
aber soweit ich das sehe brauchts dafür einen Inverter.

Google spuckt dazu einen Thread bei mikrocontroller.net aus.
http://www.mikrocontroller.net/topic/103485#904241
http://www.mikrocontroller.net/attachment/36598/LCD-Spannung.png

Allerdings ist da von 12V die Rede. 5V Versorgung wärn mir aber lieber.

Aber genau reingelesen hab ich mich noch net.

Sebastian

Amazz
26.05.2009, 11:40
ja, du brauchst nen inverter. hab mir beim großen R einen gekauft und es funktioniert!

thewulf00
26.05.2009, 13:09
Kannst Du mal bitte die Bestellnummer, bzw. den Typ nennen?

.:Sebastian:.
26.05.2009, 14:23
Moin

Ich vermute mal er meint das Teil :

EL-INVERTER 08
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A537;GROUPID=3033;ARTICLE= 60205;START=0;SORT=artnr;OFFSET=16;

Hatte ich mir auch schon überlegt.
Allerdings wollte ich mit 5V arbeiten und nicht mit 12V.
Einfach schon weil ich die 5V sowieso für den Avr brauche.

Ich hab mich heute in der Schule mal zum Thema MC34063 eingelesen.
(Informatikunterricht ist schon was feines ;-) )
Die beiden links in meinem letzten Post gehen in die richtige Richtung, allerdings gehts in dem Thread darum das Display selbst zu versorgen und nicht die Beleuchtung.
Der IC an sich kann auch keine 100V sondern maximal 40V bei mehr hält der interne Treibertransistor net aus.
Allerdings ist im Datasheet ein Aufbau mit externem Transistor, der liegt da wenn ich mich nicht vertan hab so, dass er von der hohen Spannung nichts abbekommen sollte.
Damit sollten auch die 100V möglich sein.
Einzinstes Problem könnte die benötigte Induktivität werden, ich werde mich mal dransetzen und alles durchrechnen, sobald ich Zeit habe.

Wenn es damit nicht geht, nehm ich mir einen kleinen Printtrafo (z.B. großerR 150.12-1 der is mit 24x24x15mm net viel größer als ein gesockeltes IC) und einen ne555.
Danach noch gleichrichten und ein wenig glätten. Sollte theoretisch auch gehen.

Sebastian

PS: Die Version von meiner LCD lib die ich vorhin hochgeladen hab, hat jetzt auch Text im Grafikmodus.

BMS
29.05.2009, 16:35
Für den MC34063 gibt es ein Design-Tool welches alle Bauteilwerte berechnet.
http://www.nomad.ee/micros/mc34063a/index.shtml

Mal ne blöde Frage: der MC34063 macht doch Gleichspannung -- im Datenblatt
des Displays steht aber was mit 500Hz... D.h. die 100 Volt müssen noch an-
und abgeschaltet werden?

Hab inzwischen auch ein Display gekauft (mit EL) und überlege schon, ob man
die EL- Folie eventuell entfernen kann (ist wahrscheinlich aufgeklebt) und eine
LED-Beleuchtung dafür einsetzt.
Befürchte nur, dass die EL-Folie sehr fest aufgeklebt ist und beim Entfernen ein paar
Leiterbahnen auf der Oberseite abgerissen werden könnten :-(

Die Ansteuerung des Displays läuft (mit Anfangsschwierigkeiten) jetzt problem-
los. Das Touchpad ist in Ordnung. Inzwischen kann man damit auf dem
Display malen (Touchkoordinaten in Pixel umrechnen und Pixel aktivieren).
\:D/
Der Code ist in C++ geschrieben.

.:Sebastian:.
30.05.2009, 12:22
Moin

Zum Thema Gleichspannung :
Fällt mir auch gerade auf.
Ich hab noch nie mit EL-Folien gearbeitet.
Nach dem Tipp mit MC34063 dachte ich, dass ich Gleichspannung brauche.

Wiki sagt aber :


Die Materialien einer EL-Folie sind bei Gleichspannung isolierend und leuchten nicht. Der Betrieb von EL-Folien und -Kabeln erfordert eine möglichst sinusförmige Wechselspannung. Je nach Bauart kann die Betriebsspannung zwischen 30 und 300 Volt bei einer Frequenz zwischen 200 Hz und 4 kHz liegen.

Wenn das so is : ne555 + kleiner Trafo/Übertrager

Zum Thema Touch :
Gestern hab ich den Touch-Teil für meine Lib fertig bekommen.
Schreiben aufem Display geht auch schon und auch Buttons sind schon 'touchbar'.

Ich schreib noch ein paar Kommentare rein, mach ein paar Sachen ordentlich und dann
könnt ihr auch das Ergebnis morgen unter http://sebastians-site.de/hg_repos/glcd/ ansehen.



UPDATE:
Ich habe die Idee mit ne555 + Trafo mal mit dem Zeugs, was ich noch in der Müllto.....
Ersatzteilkiste gefunden hab umgesetzt.
Nacher mal ich mal einen Schaltplan am Pc, die Papier version ist etwas chaotisch.

Der ne555 fährt über einen TIP41 einen 12V Trafo mit 5V falschrum mit ungefähr 500hz.
Am anderen Ende kommt irgendetwas an die 100V AC raus (210V Spitze-Spitze).
Wenn ich die auf die EL-Folie gebe, beginnt die weiß zu leuchten.

Der Prototyp von der Schaltung is zwar noch ein recht großer Klotz (Trafo + Kühlkörper für den TIP) , aber er tut schon mal.
Jetzt muss ich nur mal messen was da an Strom durchgeht.


Sebastian

.:Sebastian:.
31.05.2009, 15:19
So ....
Es hat zwar etwas gedauert, aber jetzt kann ich euch Schaltplan und Bilder präsentieren.

Erst mal alles im Hellen :

http://sebastians-site.de/homepage/uploads/images/lcd/bright.jpg

Wie ihr seht sieht man nichts. Die Beleuchtung ist bei Tageslicht kaum zu erkennen.
Bei meinem ersten Test wär es mir fast nicht aufgefallen, dass sich da was ändert.

Aber wenn wir das Licht ausmachen :
http://sebastians-site.de/homepage/uploads/images/lcd/dark.jpg

http://sebastians-site.de/homepage/uploads/images/lcd/dark_close.jpg

Im dunkeln (oder in dem Fall im schattigen Keller) sieht man schon wesentlich mehr.
Das Licht ist ganz angenehmen, es blendet nicht und flimmert nicht.

Den Schaltplan dazu gibts unter : http://sebastians-site.de/homepage/uploads/images/lcd/backlight.png
Die Schaltung zieht knapp 34mA, was für den primitiven Ansatz doch eigentlich ganz Okay ist.

Viel Spaß damit
Sebastian

Hellsing
01.06.2009, 11:23
So ich möchte euch auch mal mein Grafik LCD Touch Projekt Vorstellen.
Als Display nutze ich ein 240x128 Blue Grafik LCD von Led-See.com.

Das Display ist schon länger im Einsatz ich nutze es zurzeit um den TWI Bus zu testen. Eine Menueführung ist implementiert wodurch man quasi unendlich Untermenues realisieren kann.

Als µc kam anfänglich ein Mega8 zum Einsatz welcher nach kurzer Zeit jedoch auf Mega168P und dann Mega328P geupgradet wurde zwecks Speicher. Zurzeit Plane ich eine weitere Speichererhöhung mittels einen Mega644 und externen eeprom o.ä. was ein neu Layouting des "Motherboards" zurfolge hat. Die DIP28 µC's sind schon voll belegt.

Nun aber ein paar Bilder zum anschauen :

http://img6.imageshack.us/img6/3117/bild051u.th.jpg (http://img6.imageshack.us/my.php?image=bild051u.jpg)

Das Display ordentlich abzufotografieren war ein Akt Oo

Hier Noch das Motherboard welches "Huckepack" das Display trägt

http://img3.imageshack.us/img3/6314/bild056t.th.jpg (http://img3.imageshack.us/my.php?image=bild056t.jpg)

Das Mainboard daneben gehört nicht dazu es dient als Slave bei der Bus kommunikation ;)

MFG Hellsing

skg-rob
01.06.2009, 16:11
So ich hab auch mal ne Frage:

Wie schließe ich das LCD an (i²c etc)? Wie programmiere ich es (Assembler, C etc) und bit es Bibliotheken?

mfg skg-rob

Flash2over
01.06.2009, 19:13
Also das LCD musste an nen eigenen AVR hängen.
Den kannste dann über TWI ansteuern.
Nen Schaltplan ist weiter vorne im Threath von mir gepostet.
Und wenn du dann noch weiter hier liest findest auch ne Bibliothek

skg-rob
02.06.2009, 09:13
Wir benutzen als Controller http://qfix-shop.de/cgi/websale6.cgi?Ctx={ver%2f6%2fver}{st%2f3eb%2fst}{cm d%2f0%2fcmd}{m%2fwebsale%2fm}{s%2fqfixshop%2fs}{l% 2fDeutsch%2fl}{mi%2f9-2238%2fmi}{pi%2f7-2238%2fpi}{po%2f1%2fpo}{fc%2fx%2ffc}{sid%2f33ef902 58402f9756743ccbbc6d33738%2fsid}{md5%2f5f649b1bd67 0c042638a1a9535034b46%2fmd5} Link.
Nun schreibst du das das über I²C (was jja TWI ist) geht. Jemand anders hat mir gesagt es der Touch wird über 2 Analog Signale (X und Y Koordinate, was ja Sinn macht) ausgelesen wird. Wird dann das Bild über I²C ausgegeben?

Ich werd mir mal den Schaltplan anschauen.


Danke und mfg skg-rob

Hellsing
02.06.2009, 09:37
@skg-rob

Die Reihenfolge ist ja erstmal LCD->Mega8 oder sonstwas zum ansteuern des LCD und von dort aus auf das TWI also an dein Board. Das Touchscreen und das LCD gehen nur auf den Mega8 ,Du kannst natürlich allerlei mögliche Spielereien einprogrammieren wo die Daten für ein Bild auf dem Display herkommen ,grundsätzlich würde ich es aber erstma auf den Mega8 oder 32 oder ... belassen.Für das Touch gabs damals ein super Appnote was die 4 Wire Tech. erläutert und auch Schaltungs und Ansteuerungsbeispiele bereithielt.
Ah hier isses ja :http://www.atmel.com/dyn/resources/prod_documents/doc8091.pdf

MFG Hellsing

skg-rob
02.06.2009, 09:48
Wie komme ich dann von dem Mega 8 auf das Board?
Hab leider null Ahnung.

Hellsing
02.06.2009, 09:53
Das Display wird von dem Mega8 oder wie vorne verwendet ein Mega32 angesteuert . der Mega8 oder 32 stellt aber auch gleichzeitig den TWI bereit, wodurch du auf dein Board gehen kannst.

MFG Hellsing

skg-rob
02.06.2009, 09:55
Mann bin ich blöd...
Kann ich das Display auch über das hier ansteuern?

http://qfix-shop.de/cgi/websale6.cgi?Ctx={ver%2f6%2fver}{st%2f3eb%2fst}{cm d%2f0%2fcmd}{m%2fwebsale%2fm}{s%2fqfixshop%2fs}{l% 2fDeutsch%2fl}{mi%2f9-2238%2fmi}{pi%2f6-2055%2fpi}{po%2f1%2fpo}{fc%2fx%2ffc}{sid%2f171ea7f 93d1809e8927359eb84f86728%2fsid}{md5%2fa0b7489e88f 26157a82e9835fc951615%2fmd5}

Hellsing
02.06.2009, 10:05
Hat ja im Prinzip auch einen TWI bus drinne also sollte es gehen ,musst blos wegen den PullUp Widerständen schauen wo die sind und ob sie schon eingebaut sind sonst müssen die noch dazu. Vorne im Thread gibts nen schaltplan von Flashover da wurden blos die TWI Pins des Mega32 fürs LCD benutzt (nicht so dolle) ,also muss da was umgemoddelt werden was zur folge hat wenn du die hier herausgegebenen Sources nutzen willst auch da etwas ändern musst.

MFG Hellsing

skg-rob
02.06.2009, 10:08
Dann kann ich auch gelich einen Mega 8 nehmen.
Danke, den rest werde ich dann hinkriegen.

Hellsing
02.06.2009, 10:11
Naja Mega8 ist sehr schnell Voll von den Pins und auch vom Speicher. So teuer ist ja ein Mega32 oder 644P nicht und am Ende biste froh mehr Speicher zu haben

MFG Hellsing

skg-rob
02.06.2009, 10:14
Hmm ja einen einzelnen kannich natürlich auch nehmen. Aber es geht mehr um den Aufwand: Wenn ich noch alles zusätzlich umschreiben muss großteils dann wird es zu aufwändig.

Trozdem Danke.

Hellsing
02.06.2009, 10:20
Naja vorne im Thread wurde ja ein Mega32 verwendet. Es ging beim umschreiben eher um die zurzeit benutzen TWI Pins damit du Sie für den TWI Bus nutzen kannst.

MFG Hellsing

skg-rob
02.06.2009, 10:21
Dann ist es noch besser, dann versuch ich es direkt mit dem BobbyBoard.

Hellsing
02.06.2009, 10:22
schau aber nach den PullUp Widerstanden für den TWI Bus sonst gehts nid wenn sie nicht da sind ;)

MFG Hellsing

skg-rob
02.06.2009, 10:23
Also ich kann dir sagen das das auslesen von Sonars und das Qfix display gehen. Kannst du daraus ersehen ob sie da sind?

Hellsing
02.06.2009, 10:31
Naja sinn würde es machen wenn die PullUps auf dem Mainboard sind wenn das TWI mit den anderen Sachen läuft schauts doch schonmal gut aus

MFG Hellsing

Flash2over
02.06.2009, 15:27
Also da ich selbst vor habe das Display über TWI an meinen Roboter anzuschließen, kann ich gerne sobald ich es geschaft habe schaltplan und Libary online zu stellen. Ich denke bis Ende der Woche sollte ich erste Erfolge haben. Je nach dem ob ich meine Teile schnell zugeschickt bekomme.

skg-rob
02.06.2009, 16:15
Das wäre Cool =D

Spessi
03.06.2009, 23:07
Hallo,
habe mein Display (das GLCD mit Touch von Pollin) mittlerweile auch soweit, dass ich mit dem Touchpad malen kann. Allerdings werden häufig Pixel völlig fehlplatziert, was vermutlich an dem empfindlichen Touchpad liegt.

Wollte mal nachfragen wie ihr das entprellen umgesetzt habt. Habt ihr da Tipps (theoretische Tipps reichen mir schon, will keinen Code, will ja selber noch etwas basteln ;-))? Ansonsten ist das GLCD ein super Teil, nur zu empfehlen.

Edit:
Ich sollte evtl. noch dazu sagen, dass ich den ADC bei jedem zeichnen 16x auslese und dann davon den Mittelwert erstelle und dementsprechend zeichne. Das Prellen wurde dadurch aber auch nicht vermindert

Flash2over
04.06.2009, 00:02
entprellen geht meist am bessten mit ner kleinen warteschleife nach dem Auslesen und dem nächsten auslesen. So wird theoretisch die Prellphase nicht berücksichtigt. Ich hoffe es klappt so. Bei Tastern funktioniert es.

Leider ist mein Touch kaputt und nur das Display geht. Schade

Spessi
04.06.2009, 00:16
Hallo,
hat sich schon erledigt! Habs hinbekommen.
Ich hab den alten x und y Wert gespeichert und mit den neuen verglichen. Wenn die Differenz größer als 3px ist wird der Pixel nicht gezeichnet (natürlich noch mit ein paar mehr Abfragen, da es ja sonst nicht so klappen würde ;))

Aber das Touchscreen kann man doch mit einem Bügeleisen reparieren, ist doch meist nur der Folienleiter locker, oder?

Grüße

Hellsing
04.06.2009, 08:26
Klingt gut hab noch extra zu festellung der aktuellen X und Y Position eine Mittelwertbildung eingebaut die 100 mal misst und den daraus entstehenden Mittelwert nimmt, da ich im terminal schon manchmal einige ausreiser hatte.
Was noch ein problem meines Aufbaus war , durch die Huckpack anordnung gabs eine nette Einstreuung des Quarzes vom LCD auf die leitungen des Touch , sah im Oszi lustig aus war es aber leider in der praxis nicht ^^ ein paar Kondis in der leitung schafften abhilfe :)

MFG Hellsing

Spessi
04.06.2009, 13:23
Hier mal ein Foto von meinem GLCD. Das Entprellen klappt leider noch nicht so wie ich mir das vorstell, da werden Pixel gezeichnet, wo sie eigentlich garnicht gezeichnet werden dürften (klar durch eine if-Abfrage festgelegt!). Muss ich mal gucken wo da der Hund begraben liegt.

Im Anhang das Bild.
Das Schreiben auf Touchpads ist irgendwie ungewohnt, deshalb sieht's so hingekritzelt aus. Oben in der Menüleiste läuft eine Uhr (32,786kHz Quarz an TOSC1 und TOSC2 vom Atmega32) und zusätzlich wird die Temperatur der Umgebung durch einen DS1820 angezeigt.
Auch sieht man die Streupixel um die Schrift herum und die oberhalb des Striches der die Menüleiste abtrennt, dort sollte normal kein Pixel mehr erscheinen (if(y>15) { zeichnePixel(x,y); } so ungefähr)


@ Hellsing:
ja, ich messe die ADC-Werte 16x und berechne dann den Mittelwert.


Grüße



Edit: das mit dem Anhängen klappt wohl nicht so, da mein Attachement angeblich zu groß sei (70kb). Naja, dann machen wir's eben so:
http://www.abload.de/thumb/dsc01410z4cb.jpg (http://www.abload.de/image.php?img=dsc01410z4cb.jpg)

Ceos
04.06.2009, 13:36
sieht doch schick aus, das bringt einen auf ideen ^^

lass dir doch mal die gemessenen werte am PC ausgeben (iwie ne rs232 verbindung dazufummeln) und werte die koordinaten mal grafisch aus! vielleicht hast du nen fehler in deiner pixelformel, vielleicht aber auch eine störung elektrischer natur beim schreiben an das display, da kannst du dir die bilddaten auch mal an den PC senden lassen und kontrollieren ob die normal aussehen während auf dem display wieder "kleckse" sind
extreme pixelkleckse die irgendwo rumstreunen kann man zur not sofern die rechenzeit es zulässt auch einfach mit der 8er nachbarschaft einzelne pixel ausschliessen, erst wenn ein pixel in seiner 8er umgebnug noch einen pixel hat, wird er dargestellt sonst nicht

kannst ja mal versuchen ob du nich irgendwann nen ADS7843 einsetzen kannst, spart sicher unmengen rechenzeit wenn du die cursordaten nurnoch per SPI auslesen musst und ich geh mal davon aus, dass der die positionsdaten vernünftig "entprellt" wenn das der wahre grund für deine kleckse sein sollte

Hellsing
04.06.2009, 15:34
Spessi versuch mal mehr Werte (hab sogar 200 bei mir),das ist scheinbar das Problem was ich auch hatte , andererseits existiert sowas in der Art immernoch wenn man "zuviel" rumklickt aber sehr marginal(vernachlässigbar). Benutze da zum überprüfen ein UART-> PC Diagramm Programm wo man schön den verlauf der jeweiligen X oder Y Werte nach der Zeit ablesen kann und ausreiser sofort erkennt.

MFG Hellsing

Spessi
04.06.2009, 15:44
Zuerst mal der Codeabschnitt:



unsigned char x, x_old, y, y_old, new_touch;
void glcd_touch_draw() {
uint16_t adc_x, adc_y; // garantiert immer mit den gleichen adc werten arbeiten
adc_x = glcd_touch_read_x();
adc_y = glcd_touch_read_y();

if(adc_x<13600) { /* Wenn Touchpad berührt dann */
/* x = (adc_x - adc_min_x) / ((adc_max_x-adc_min_x) / auflösung x); */
x = (adc_x - 220*16) / (((850-220)*16) / 160);
y = 80-((adc_y - 280*16) / (((770-280)*16) / 80));

if(y>15) { /* 15px Leiste oben (nicht zu bezeichnen) */
if(new_touch==1) { /* wenn stift neu aufsetzt ist alter x-wert ungültig */
glcd_plot_pixel(x,y, PIXEL_ON);
}
else { /* entprellen */
if(((x-x_old)<3) && ((x-x_old)>-3))
if(((y-y_old)<3) && ((y-y_old)>-3))
glcd_plot_pixel(x,y, PIXEL_ON);
}
}
x_old=x;
y_old=y;
glcd_touch_collision(x,y); /* Buttons abfragen */
new_touch=0;
}
else {
new_touch=1;
}
}


Durch das if(y>15) { sollte eigentlich garantiert sein, dass NIE gezeichnet wird, wenn der y-Wert kleiner als 15 ist.. dennoch werden teilweise Pixel viel weiter oben gezeichnet. Erklären kann ich mir das nicht. Vielleicht verbessert es sich, wenn ich die ADC Werte öfter einlese, aber dennoch würde ich gerne verstehen, weshalb er auf die Idee kommt plötzlich Pixel oberhalb der y=15 zu zeichnen

Edit: Wenn ich das Programm lange genug laufen lasse verschwinden teilweise sogar Pixel vom Rechteck oben (das in dem "Clr" steht)... Erklären kann ich mir das nun beim besten Willen nicht

Hier noch die plot Funktion:



void glcd_plot_pixel(unsigned int x, unsigned int y, unsigned char state) {
unsigned char pos;
if(glcd_mode==GLCD_GRAPHIC) {
glcd_moveto(x, y);
pos = x%8;
if (state == PIXEL_ON)
glcd_write(GLCD_CMD_SET_BIT, pos);
else
glcd_write(GLCD_CMD_CLEAR_BIT, pos);
}
}


Grüße

Hellsing
04.06.2009, 19:57
Ka ob das vielleicht ein Problem ist aber schau mal bei deiner Auflösungsümrechnung du schreibst da

x = (adc_x - 220*16) / (((850-220)*16) / 160);

würde mir sorgen machen wo der was zwischenspeichert wenn man Quasi als adc_x 13600 im max. annimmt und das noch mit 16 multipliziert = 217600 vielleicht läuft ja irgendwo was über?

MFG Hellsing

Spessi
04.06.2009, 21:01
Hallo, ich multipliziere doch das adc_x nicht mit 16, sondern die 220 (punkt vor strich).

Im Auslesevorgang lese ich den ADC 16 Mal aus und addiere die Ergebnisse zusammen. Pro Auslesegang hab ich max. 850. 850*16 = 13600 < 65535

Hellsing
04.06.2009, 21:57
ahjo das passiert wenn man nur halbschief draufschaut hast recht ^^

zurzeit blick ich hier noch nicht ganz durch :

else { /* entprellen */
if(((x-x_old)<3) && ((x-x_old)>-3))
if(((y-y_old)<3) && ((y-y_old)>-3))
glcd_plot_pixel(x,y, PIXEL_ON);

du sagst doch wenn die Koordinatenabweichung jeweils -3<x<3 ist dann plote , was passiert wenn du kurz unterm 15px bereich bist und dann in die Verknüpfung kommst ? würde er dann nicht auch zeichnen ? als Beispiel du bist bei y=16 dann wirkt die If(y>15) dann wenn du weiter höher gehst um 2 px jeweils würdest du doch langsam in den bereich kommen?

MFG Hellsing

Spessi
04.06.2009, 22:05
Naja, du musst ja bedenken dass ich in der komplette Funktion von oben ab mit den gleichen y-Werten arbeite.
Sprich: wenn ich bei y=16 bin, dann zeichnet er ganz normal und sobald ich höher komme filtert beim nächsten Durchlauf automatisch die if-Abfrage die ungültigen Werte raus, sprich: er zeichnet nicht mehr.

Ich werde morgen mal was anderes ausprobieren: zur Zeit messe ich den x-Wert 16x hintereinander und anschließend den y-Wert 16x hintereinander.
Ich probiere mal aus immer nacheinander zu messen, also xyxyxy....(usw.). Evtl. wird dadurch das prellen etwas mehr entschärft...

Hellsing
05.06.2009, 05:42
Ahh ja jetzt seh ich das zweite if dadrin hab gedacht das else gehört mit zur if(y>15)...

Naja das abwechselnd Messen könntest du versuchen ,habs zwar auch nicht gemacht, will es aber auch mal mit einfliessen lassen, vielleicht erhöht es ja bei mir auch noch ein weng die Genauigkeit. Hab aber jetzt noch 7 h an der FH zu tun , heute nachmittag werd ichs mal mit einbauen.


MFG Hellsing

Spessi
05.06.2009, 13:04
Hallo, hab den Fehler gefunden!

Das ganze lag daran, dass ich in der main Funktion eine While-Schleife hatte und gleichzeitig Interrupts hatte, die die Uhrzeit und Temperatur ausgeben. Dadurch wurde die While-Schleife unterbrochen und es kam zu so komischen Ergebnissen.
Das heißt ich musste in der While Funktion am Anfang ein cli(); und am Ende ein sei(); machen und schon gings.

Hellsing
05.06.2009, 18:22
na super !!
naja bei mir waren es nun aus 7h an der FH 11h geworden..., werd mich jetzt noch ein wenig an das lcd wagen um die sd card weiter zu implementieren.

MFG Hellsing

krtv_stsc
11.06.2009, 08:22
Hi!

Habe mir jetzt auch diese Display zuglegt und würde mir dafür gern ne Platine ätzen. Allerdings hat mein Touch diesen Graphit-Folienleiter, an den man nichts ranlöten kann... Deshalb würde mich mal interessieren, was für eine Buchse man da für Platinen nehmen kann. Das sah bei Hellsing auf der Platine schon gut aus, aber wo finde ich sowas, z.B. bei Reichelt?

.:Sebastian:.
11.06.2009, 12:02
Moin

Also ich hab das ganze ohne irgendwelche Spezialteile gelöst.
Ich hab so eine Pin/Stiftleiste genommen und das Plastikzeug was da unten dran ist, dünner gefeilt.
Auf der Platine gibts dann unten 4 Leiterbahnen auf die die Stifleiste aufelötet wird.
Dann kann man den Folienleiter einfach zwischen Stiftleiste und Leiterbahn einklemmen.

http://sebastians-site.de/hg_repos/glcd/doc/photos/touch/bottom.jpg

http://sebastians-site.de/hg_repos/glcd/doc/photos/touch/side.jpg

Das funktioniert ziemlich gut und hält auch einigermaßen fest zusammen.

Sebastian

thewulf00
11.06.2009, 13:07
Total genial!
Das ist ein SUPER Tipp!!

Vielen Dank!!

krtv_stsc
12.06.2009, 16:52
Das ist wirklich ne tolle und vor allem kreative Lösung :wink:
Aber auf ner geätzten Platine, die "hübsch" (so gut das für eine Platine möglich ist) aussehen soll, ist es eher doch keine Lösung...

BMS
12.06.2009, 17:52
Das Anschließen des Touchpads hab' ich anders gelöst.
Beim Ausschlachten eines alten Telefons (Tastatur als Matrix mit Folienleiter)
fand sich ein perfektes Gegenstück. Geht prima. (google-suche >telefon grün<)
Außerdem noch zwei Widerstände à 560 k-Ohm zwischen den
Analogeingängen, die eingelesen werden und +5 Volt. Sonst "malt" das
Display von selbst. :-k

Ceos
12.06.2009, 21:04
ich hab n problem mit meinem display, ich hab mir paar routinen für pixelschreiben und vektorgrafik zusammengeschustert, mein problem, was wenn 2 "drawline" zum beispiel ihre pixel im selben spaltenbyte haben .. meine idee, byte aus dem display lesen und mit dem neuen pixelbyte verodern .. idee klase, aber irgendwie bekomm cih nur mist wenn ich versuche ein byte aus dem display zu lesen ... zur schaltung, ich hab die datenleitungen über 1k auf GND gelegt, weil ich um kurzschlüsse zu vermeiden den datenport grundsätzlich auf high z lasse

.:Sebastian:.
14.06.2009, 11:59
@krtv_stsc:
Also es kommt drauf an, wenn man etwas sauberer arbeiten würde, (nicht wie ich irgenwann mitten in der Nacht) könnte ich damit Leben.
Design follows function.
Zumal ich ja noch keine (einfach irgendwo bestellbare) Alternative gefunden hab.


@BMS:
Ja klar das es von selbst matl, die ADCs in deinem AVR sind relativ empfindlich und hochohmig und in dem Moment wo das Display nicht berührt wird, hängt der quasi in der Luft.
Da bekommst du von überall her schöne Einstreuungen.
Deshalb überprüfe ich bevor ich Koordinaten auslese immer erst ob sich die X und die Y Folie überhaupt berühren.



uint8_t touch_is_pressed() {
TOUCH_DDR |= (1 << TOUCH_X1);
TOUCH_DDR |= (1 << TOUCH_Y1);
TOUCH_DDR &= ~(1 << TOUCH_X2);

TOUCH_PORT &= ~(1 << TOUCH_Y1);
TOUCH_PORT |= (1 << TOUCH_X1);


if(readADC(TOUCH_X2) < TOUCH_PRESSED_LEVEL) {
return 1;
}
else {
return 0;
}

}

Ohne Berührung liegen da am ADC so ziemlich die vollen 5V an.
Wird das Display berührt zieht die Y-Folie das mehr oder weniger auf Masse.
Jetzt muss man nur noch rumprobieren bis man einen Passenden Grenzwert hat und gut is.

@Ceos:
Lies mal im Datasheet für den lc7891 nach.
Da steht das wenn man Daten aus dem Memory lesen will, muss man erst ein dummy readout machen.
D.h. erst beim zweiten mal lesen hast du sinnvolle Daten. Der erste Readout is Müll.



uint8_t lcd_read_byte() {
uint8_t i,data;

for(i = 0; i < 2; i++) {
_delay_us(1);
lcd_rw_low();
lcd_rs_high();
LCD_DATA = 0x0D;
_delay_us(1);
lcd_en_high();

LCD_DATA_DDR = 0x00;
lcd_rs_low();
lcd_rw_high();
_delay_us(1);
data = (uint8_t) LCD_DATA_PIN;
lcd_en_low();
LCD_DATA_DDR = 0xFF;
}
return data;
}


Sebastian

Ceos
14.06.2009, 17:29
ich weis zwar nicht ob wir beide vom selben controller reden (kann ich erst morgen anchprüfen) aber das datenblatt ist VERDAMMT MAGER, danke für den tip (steht wirklich nix in der form drinne, nur die hand voll befehle und wie die bytes dargestellt werden) meld mich morgen nachmittag nochmal

... sowas lästiges aber auch, könnte ich mir nich irgendwie mit nem zwischenspeicher aushelfen ? mein gedanke geht in richtung ram zwischen controller und display

in den ram schreib ich (wesentlich schneller als mit den schlechten timings des LCD) die daten rein und über nen mux und nen takt vom controller schieb ich dann die daten parallel zum prozessor in das LCD

hat vielleicht jemand ein paar eingebungen ?

.:Sebastian:.
14.06.2009, 21:58
Moin

Also sooo mager ist das ja auch nicht, für mich hats mit ein bischen rumprobieren gereicht.
Ich red über das Datasheet : http://www.datasheetcatalog.org/datasheet/sanyo/ds_pdf_e/LC7981.pdf

Das mit dem dummy Readout steht Seite 13 in der Mitte unter 11) Reading display data.

Gruß
Sebastian

Ceos
15.06.2009, 08:31
danke für den tip, hat 95% der lesefehler beseitigt ... aber in meinem datenblatt stands trotzdem nicht (LCD12864C)... fehler sind immernoch paar kleine da und performant iss was anderes, ich werd wohl in den sauren apfel beissen und das display im RAM vorrausberechnen und dann regelmäßig komplett auf das display shcreiben

ausserdem werd ich mir per uart bzw. SPI ein protokoll basteln so von wegen #dl,1,1,20,20 für drawline usw. damit ich das display mit nem M8 austattten und über einen M32 oder direkt vom PC aus ansteuern kann und übern eeprom vielleicht ne nen einprogrammierbares menü bauen .. ich will eigentlich nur alle knöpfe und regler für lüfter, an/aus, reset am PC ersetzen, vll. noch nen kapazitiven sensor rein, dmit das display angeht sobald man mit der hand in die nähe kommt

Update:

hab meins jetzt auch zum laufen bekommen, nachdem ich meinen touch-controller gegrillt hab (vergessen die widerstände zwischen display und controller zu tun) hab ichs jetzt auch mit µC-ADC gemacht

also ich mess nur einmal den wert und bekomm kaum sprünge, wie sieht dein schaltplan aus ?

würde mich mal interessieren, hab mit dem oszi ein paar faszinierende enteckungen gemacht was kapazitives verhalten der touchfolie angeht und wie bescheiden die werte sind und wie einfach man sich abhelfen kann

alles was aus linien aufgebaut ist kann ich jetzt mit ein paar drawlineanweisungen statt pixelkoordinaten darstelen .... aber die performanz iss bescheiden weil ich direkt aus dem display-ram lese ...

krtv_stsc
17.06.2009, 16:59
also zumindest gibt es solche verbinder, ich weiß nur nicht, wo man sie kaufen kann. hier http://www.simpex.ch/fileadmin/bereiche/elektromechanisch/PDF/Leiterplattensteckverbinder/kap05_02.pdf auf der 1. seite

Amazz
05.08.2009, 20:03
so, ich melde mich auch mal wieder zum thema. hab heut mal wieder en bisschen mit dem display gearbeitet und mir nen character-generator für den grafikmodus programmiert.
aber ist es nicht möglich grafikmodus und textmodus gleichzeitig zu betreiben?
:-D ist typisch, bevor man schaut, obs einfach auch geht, programmiert man mal drauf los

linux_80
05.08.2009, 20:09
@Amazz
im Grafikmodus muss man alles selbermalen, dH. wenn Text erscheinen soll braucht man irgendwo das Bitmuster dafür.
Ist aber bei KS0108 auch so, Problem ist nur, das man die Libs zum KS0108 nicht brauchen kann, weil bei diesem LCD der Grafikspeicher im Prinzip um 90 Grad gedreht ist.

Amazz
05.08.2009, 20:24
ja das ist mir schon klar, dass ich im grafikmodus alles selber machen muss. das hab ich auch gemacht, aber ich hab mir gedacht, dass es vieleicht möglich ist, zwischen den modi zu switchen, sodass ich die characters vom textmodus anzeigen kann und zusätzlich meine eigenen pixel setzen kann

Ceos
05.08.2009, 20:34
ich hab das bei mir mit dem gemischten modus so gelöst, dass ich die bildschirmdaten im speicher erzeuge und "parallel" die ganze zeit über immer und immer wieder die daten zum display schaufle ... manchmal hat man tearing effekte aber damit kann ich leben, dafür hab ich vektorgrafik und textmodus ..m das mit dem bildern müsst ich auch mal probiern ^^

Amazz
05.08.2009, 20:53
das klingt schon mal gut, bin grad dabei noch meinen plan B auszuprobieren, wenn der auch scheitert, werd ich deine methode mal anschaun.

grund meiner frage war das langsame "auf und abbauen" meine buchstaben, da ich jeden buchstabe pixel für pixel aufbaue (was auch seinen grund hatte, da ich dadurch "transparent" schreiben kann und zusätzlich meine buchstaben pixelgenau an die stelle bekomm, die ich will)

mein plan b ist jetzt die etwas aufwendigere variante, indem ich erst vom display auslese, welche pixel gerade gesetzt sind und wenn sie in meinem schriftfeld liegen, werden sie miteinbezogen(also entweder gesetzt lassen, oder negieren..). und dann wird byteweise zum display gesendet und nicht mehr bitweise.

mal sehn obs dann schneller geht.
dank euch schonmal!

Ceos
05.08.2009, 21:39
indem ich erst vom display auslese, welche pixel gerade gesetzt sind die idee hatte ich auch, war aber zum scheitern verurteilt ... du musst mind. 2 mal lesen, bevor du gültige daten aus dem display bekommst ... das frisst unmengen zeit, die lösung im speicher zu arbeiten vermindert schonmal die zeit beim "zeichnen" der buchstaben, und wenn ich dann anschliessend immer wieder den speicherinhalt zum display schiebe hab ich sogar noch eine art multitasking ala round robin

while(1) {
input/output();
drawobject();
write_ONE_byte_to_display();
}

wenn ich nur einzelne bytes schreibe kann cih getrost die verzögerung durch das display ignorieren

alternativ kann man auch das ganze display auf einmal rüberschieben, aber dann bekommtm man ne nette verzögerung

Amazz
06.08.2009, 11:40
stimmt, man mus ja doppelt auslesen.. naja, ich denk aber dass es trotzdem noch schneller ist 3 mal was ans display zu senden (2xstatus +1xschreibbyte) als 8 mal was zu senden (jedes bit).

ich hab die funktion gestern noch net fertig bekommen, werds demnächst machen.

Ceos
07.08.2009, 08:36
als 8 mal was zu senden (jedes bit).
wie kommstn auf sowas ?
ich sende doch nicht jedes bit einzeln ... ich sende pro schleifendurchlauf ein ganzes byte ans display, dann inkrementiert sich im display der adresszeiger und ich meinen im array und im nächsten umlauf ist das nächste bit fällig, bis ich zum nächsten display komme

hab ja auch extra ONE_byte geschrieben und nicht bit oder whole_display XD

Amazz
07.08.2009, 11:27
ich glaub wir haben aneinander vorbei geredet :-)
ich meinte mit dem "ein bit" die erste variante von mir(also jedes pixel einzeln setzen). ich muss also 8 mal ans display senden, dass es 8 pixel schreibt. in der byte variante wäre es also schneller, da man ja ein komplettes byte (also eine 8-pixel information) sendet. es gibt ja den befehl "set bzw. clear pixel" oder den befehl "write data".
mein eintrag war der vergleich von der ersten und der zweiten variante von mir.

Amazz
10.08.2009, 11:39
So, ich hab nun mal die methode mit den bytes probiert (buchstaben schreiben im grafikmodus, indem man byteweise pixelsetzt) -> ist nicht erkennbar schneller. in dem fall wird wohl ceos methode die beste sein zumindest vom zeitlichen her. ich hab sie noch nicht getestet, aber das werd ich noch tun, denk ich mal.

.:Sebastian:.
16.08.2009, 13:01
Moin Moin

Also ich kann mich hier (leicht zeitverzögert durch Wacken + Urlaub) auch mal wieder zu Wort melden.

Ich arbeite bei meinem Display mit Fonts von http://www.mikrocontroller.net/topic/54860.

Ich wollte auch erst den ganzen Display inhalt im Speicher cachen und dann en block rüberscheiben.

Aber das war mir a) zu langsam (wegen jeder mini Änderung das ganze Display updaten ?) b) zu speicherintensiv und c) kann ich den Display speicher ja byteweise lesen und schreiben.

Weil ich auch 'Transparenz' haben wollte bin ich dazu über gegagen einfach die paar Bytes, die vom Text überdeckt würden, nacheinander auszulesen (d.h. immer nur eins) und dann mit dem Text zu überlagern, geht Problemlos.
Also ich hab keinen Probleme das der Text dann zeilenweise aufgebaut wird oderso.

Also Amazz wenn du ne Anregung brauchst :
http://sebastians-site.de/hg_repos/glcd/include/lc7981.c
Guck dir mal lcd_plot_bitmap() an.
So hab ich das gelöst.
Bei mir geht das eigentlich schnell genug.
Obwohl der Code etwas tricky und um die Ecke is.

mfg Sebastian

walkonshit
02.09.2009, 01:10
Hallo,

Ich habe heute auch mein Display erhalten. Leider musste ich ernüchternd feststellen, dass das Display nicht per Bascom angesteuert werden kann. Da ich bisher mit Avr-gcc somit nicht viel zu tun hatte, habe ich nun sogar das Problem, das Display selbst mit vorgefertigtem Code nicht zum laufen zu bringen. Es scheitert an der Compilierung des Codes, angepasst auf einen Atmega8.

Das Problem besteht darin, dass ich beim compilieren der main.c den Fahler bekomme, dass sowohl die Funktion lcd_init und pinguin nicht deklariert sind. Soweit so gut, also geb ich nun bei der Mfile die beiden anderen *.c-Files als C-Source an. Dann wiederum bekomm ich aber den Fehler: no target "main.elf" needed by "main.elf"

Kann mir da jmd weiterhelfen?

cmock
02.09.2009, 01:24
meine kristallkugel ist in der reinigung, ich müßt schon das makefile sehen...

walkonshit
02.09.2009, 02:09
Tschuldigung, ganz vergessen =)

cmock
02.09.2009, 10:58
bei mir (unter linux) funktioniert das makefile.

allerdings seh ich da drin keine zusätzlichen C-files, ist das wirklich das file, das du verwendest?

cm.

walkonshit
03.09.2009, 14:27
Das erste Mfile war das, bei dem es zu den fehlenden Funktionsdeklarationen kommt. Dieses hier ist dann mit den zusätzlichen c-files.

cmock
03.09.2009, 18:44
hmmm... geht bei mir, wenn ich die pfadnamen auf linux umschreibe.

ist das Makefile im selben directory wie die *.c-files? das könnt das eine problem sein.

gibt's bei den LCD-sourcen keine README oder beispiele? möglicherweise hast du in deiner main.c etwas in der art

#include "lcd_graph.h"

vergessen...

walkonshit
03.09.2009, 21:52
Ich habe grade mal versucht anhand des Datenblatts ein kleines Programm in Bascom zu schreiben, um das Display anzusteuern.
Ich habe leider grad das Display nicht zur Hand, aber würde das nach diesem Muster in der Theorie funktionieren?


$regfile "m8def.dat"
$crystal = 1000000

Config Portd = Output
Config Portb = Output




'Init

E = 1
E = 0
Rw = 0
Rs = 1
Portd = 0
Rw = 0
Rs = 0
Portd = 0b00100100

Rw = 0
Rs = 1
Portd = 0x01

Rw = 0
Rs = 0
Portd = 0b10010110

Rw = 0
Rs = 1
Portd = 0x02

Rw = 0
Rs = 0
Portd = 0x16

'(Rw = 0
Rs = 1
Portd = 0x03
')

'(Rw = 0
Rs = 1
Portd = 0x04
')


'Test ausgeben

Rw = 0
Rs = 1
Portd = 0x0c

Rw = 0
Rs = 0
Portd = 0b01010100 'T

Rw = 0
Rs = 1
Portd = 0x0c

Rw = 0
Rs = 0
Portd = 0b01100101 'e

Rw = 0
Rs = 1
Portd = 0x0c

Rw = 0
Rs = 0
Portd = 0b01110011 's

Rw = 0
Rs = 1
Portd = 0x0c

Rw = 0
Rs = 0
Portd = 0b01110100 't


End

Matthias 321
27.09.2009, 09:09
Hallo alle zusammen,
ich bin auch recht neu hier und bin mit der C-Control zugange...
(daher ATMEL noob).
Gibt es eigentlich schon eine fertige "Bauanleitung" für das Teil/die Teile?
Oder kann ich meine CC eifach weiterverwenden, da CC ja die weiterentwicklung zur AVR(stelln die nicht die 'FritzBox!' her?) ATMEL ist?!?
Ich hab näcste Woche Geburtstag und evtl. könnt ich mir so'n Teil wünschen.

PS:
Sollte ich noch erwähnen das ich mir die CC Pro182 wünschen wollte?
Zwecks Zimmersteuerung...

wrong5mile
27.10.2009, 22:11
Hallo alle zusammen,

habe mir das Display auch bei Pollin bestellt. Das DemoBild mit der Winamp-Trackanzeige war zu verlockend. Nun, 7€ ist ein Schnäppchen für den jenigen der sich damit besser auskennt.

Nun möchte ich dieses GLCD in meinem PC einbauen.

Leider ist in meinem PC keine LPT-Schnittstelle vorhanden. Diese könnte ich mit einer PCI Karte wiederherstellen.

Die Frage ist, wie schließe ich das GLCD an den Parallelport an? Ich möchte über dieses TouchPanel mein laufenden Winamp-Track anzeigen lassen. Eine Ansteuerung bzgl. Play/Pause/Next/.... über die Touchfolie wäre schön, muss aber fürs erste noch nicht vorhanden sein. Ich habe die Folie bereits durchgemessen. Mein Touch Panel schein ok zu sein. Eine Nacharbeitungen an den Kontakten ist daher nicht nötig.

Ich bin für jede sinnvolle Antwort sehr dankbar.


MfG Stefan

RobNet
13.11.2009, 15:41
Hi,

ich bin auch im Besitz eines Pollin LCD DataVision DG-16080-11, 160x80 und benutze diesen Sourcecode aus dem Dateianhang. Verdrahtet habe ich es wie im Schaltplan (Dateianhang).

Leider kann ich bisher keinen Text ausgeben. Das Display zeigt wirre Streifen oder gar nichts. Dennoch scheint es auf den Controller zu reagieren. Ich habe verschiedene (nicht wirklich sinnvolle) Tests gemacht und gelegentlich sieht man punkte oder streifen.

Ich bin mir nicht ganz sicher wie ich den Sourcecode auf den Schaltplan anpassen muss, da ich BASCOM anfänger bin.

Eine Frage noch. Ist der Quarz (Schaltplan) denn unbedingt nötig, kann ich nicht den internen Takt nehmen. Aktuell habe ich den Quarz nicht eingebaut. Ist der nötig? wenn ja welche Werte sollten der Quarz und die 2 Kondensatoren haben?

Es wäre wunderbar, wenn ich ein Beispielprogramm bekommen könnte, welches mit dem ATMEGA32, diesem Display und der Verdrahtung wie ich Sie bereits gemacht habe funktioniert, denn ich bin mir unschlüssig ob meine Displays auch wirklich OK sind.


Ich danke für Eure Hilfe!!

Gruß
Thomas

C_Classic
05.12.2009, 18:51
Hey,
ich habe das Display zwar noch nicht, wills mir aber demnächst bestellen.

Deswegen habe ich ein wenig herumgesucht und folgende Seite gefunden: http://www.frozeneskimo.com/electronics/2007/03/30/lc7981hd61830-driver-for-el-backlit-samsung-lcd/
Es müsste eigentlich er richtige Controller sein und Funktionen wie "Pixel(x,y,status)" sind doch wirklich toll. Er hat auch eine Funktion um im Grafikmodus Text zu schreiben.

Dann will ich mal hoffen, dass bei mir der Touch noch funktioniert.

MfG C_Classic

.:Sebastian:.
06.12.2009, 18:53
Moin Moin ...

Wenn du das Display noch nicht bestellt hast kann ich dir einen Tipp geben.
Bestell lieber 2 oder 3. Dann hast du, nach dem was ich selber an Erfahrungen gemacht hab und was andere so berichten sicher eins mit funktionierendem Touch dabei.
Ich hab 5 bestellt und bei 3en gehts.

Zum Thema Software kann ich dir noch einen Tipp geben.
(Es ist mir durchaus bewusst dass das jetzt wie Eigenwerbung aussieht, aber irgendwie ist mein Zeug weiter vorne im Thread untergegeangen)
Ich hab mich vor ein paar Monaten mal hingesetzt und mir da selber etwas aus den Fingern gesaugt : http://sebastians-site.de/hg_repos/
Und auch gleich eine Doku getippt.
http://sebastians-site.de/hg_repos/glcd/doc/html/lc7981_8c.html
Ich glaube auch das meine Text-Funktion etwas eleganter ist als die von froszeneskimo.
Weil da werden die Buchstaben Pixelweise übertragen, zwei byte pro Pixel, während ich 8 Pixel in 2 byte packe.
(Das wie ist im Source erklärt, hat mich fast 3 Tage Gehirnschmalz gekostet.)
Außerdem hab ich so ein paar gimicks wie automatisches Scrollen im Textmodus gebastelt.

Wär schön wenn du meine lib mal antesten könntest. Ich hatte bisher noch 0 Feedback.


Viel Spaß
Sebastian

wrong5mile
07.12.2009, 22:41
Nabend noch mal.

Leider konnte ich mit den bisherigen Beiträgen nichts anfangen.

Ich hoffe mir kann einer Schritt für Schritt dies Display erklären.

Ich habe dieses Diesplay zu Hause liegen. Ich habe Pin 1 - 20 1:1 an einen SubD 25Pol angelötet.

Ich möchte nun gerne wissen, ob ich nun zwischen der SubD 25 Pol Schnittstelle einen Controller benötige, wenn ja, gibt es fertige Module?

Besteht die Möglichkeit, Winamp so anzuzeigen, oder war es von Pollin ein reines Lockangebot?

walkonshit
17.12.2009, 16:41
Hallo Sebastian,

also ich habe deine Files gerade mal runtergeladen und finde keine Makefile darunter. Also habe ich kurzer Hand eine andere heran gezogen und angepasst. Naja okay jedenfalls glaub ich das, denn ich bekomme beim kompilieren leider einen Fehler á la "No rule to make target needed by `main.elf`. Also habe ich das ganze doch noch nicht verstanden.

Ich währe dir sehr dankbar wenn du mich dort beratschlagen kannst.

MfG walkonshit

.:Sebastian:.
17.12.2009, 19:20
Moin Moin ....

Ja das fällt mir auch gerade auf.
Irgendwie hab ich mein Makefile verschlampt.
Ich benutze hier eclipse, das genriert automatisch welche, aber die bringen dich net weiter.

Das makefile was du da hast ist ganz schön kompliziert.
Ich denke das geht auch einfacher.
Ich setzt mich morgen mal hin und stricke was schönes.
Früher geht es leider nicht.

Sebastian

walkonshit
17.12.2009, 19:42
Okay ja das ist kein Problem, allerdings bin ich grad seit Stunden auf Fehlersuche, aber sie gehen mir einfach nicht aus!^^ Meine SRC-Paths waren falsch, aber nun erhalte ich vom Linker einen Fehler, der mir sagt, es gäbe eine "undefind reference to lcd_clear".

Wirst du daraus schlau?

walkonshit

.:Sebastian:.
18.12.2009, 10:39
Moin Moin

Ja soweit bin ich auch gerade.
Das tolle is mit dem automatischen Makefiles von eclipse gehts irgendwie.
Ich hab heut Mittag ein paar Stunden Zeit.

Also ich kann nur soviel sagen, dass die Funktion definiert ist, und auch die Deklarationen alle zu passen scheinen.
Also muss der linker da irgendwas vergurken.
(Aber was im eclipse irgendwie geht ... strange)

Update :
Ich bin einen Schritt weiter :
Ich deklariere mehrere (kurze) Funktionen die man extern benutzen kann und die auch intern in meiner Lib benutzt werden als inline.
Kostet zwar Speicher bringt aber ziemlich viel speed.
Eigentlich dachte das der Compiler die internen aufrufe inlined und alles was aus main.c c als normalen Funktionsaufruf handelt, weil er da ja keinen code zum inlinen hat (zumindest sah es so aus).

Allerdings stolpert mit dem anderen Makefile der Linker an der Stelle. (Macht ja auch irgendwie Sinn)

Mal sehen wie man das lösen könnte.

Sebastian

walkonshit
18.12.2009, 11:23
Naja dann ist es ja gut, dass ich mich gemeldet habe, damit du jetzt weißt was Sache ist.

Mal am Rande: Hast du für eclipse ein spezielles Plugin für AVR?

Edit: Ich habe jetzt mal in der lc7981.h das inline vor lcd_clear weggemacht, und siehe da der Fehler ist behoben. Allerdings erhalte ich immer noch einen Error Code 2. Das wird aber vermutlich daran liegen, dass der verfügbare Speicher des M8 überlaufen würde.

MfG Marcel

.:Sebastian:.
18.12.2009, 11:48
Zu A vr und Eclipse :
http://www.mikrocontroller.net/articles/AVR_Eclipse
Lief hier unter fedora quasi out of the box.

Zum Thema Inline :
Ich hab mich jetzt zum inline/extern/static und alle möglichen Kombinationen mal gründlich eingelesen.
Im laufe des Mittags wer ich eine neue Version soweit fertig haben, dass ich sie mit static inlines läuft und sich sogar linke lässt.

Ich mach dann hier Meldung.

Was deinen M8 angeht solltest du etwas abspecken. Ich hab das ganze auf einem atmega32 rennen.
Z.B den font 12x16_horizontal_LSB_1.h und lcd_plot_text weglassen.
Oder die writing_demo() funktion + Touch.

Sebastian

PS: Danke fürs testen.

///Update 1 :
Ich hab den Code umgeschrieben und lade jetzt die angepasste Version hoch.
Da ich DSL mit Licht hab, kann das etwas dauern.

walkonshit
18.12.2009, 12:05
gerne doch =). Ich bin Wiedereinsteiger in dieser Materie und in diesem Zusammenhang will ich mich von Bascom abwenden und auf C umsteigen, da wir das zur Zeit auch im Studium lernen. Daher biete ich dir hier auch meine Hilfe an, falls du irgendwann mal ein größeres Projekt planst, denn zu Zweit steigt meist die Motivation.

Edit: Habe grade mein Lehrbuch durchstöbert, und habe herraus gefunden, dass deine inline- Funktionen keinen Effekt haben dürften. Laut C-Standart darf ein Compiler selbst entscheiden, ob eine Funktion inline ist oder nicht. Inline Funktion selber müssen aber in einer Quelldatei deklariert und definiert werden. Also wird das eclipse vermutlich selbstständig kaschieren.

MfG Marcel

.:Sebastian:.
18.12.2009, 12:24
So upload is fertig.

Die neue Version sollte jetzt problemlos laufen.

Sebastian

walkonshit
18.12.2009, 13:47
nochmal eine andere Frage: Wie rum muss man den Data-Bus verbinden?
laut dem Schema hier im Thread weiter vorne geht PORTD7 auf LCD_Pin7 also DB0 (nachgemessen am LC7981). Was ist nun richtig? PORTD0 -> DB0
oder PORTD0->DB7

Update: Habe es jetzt geschafft das Display anzuschließen an nem M8, bekomme aber nur Wirrwarr in der linken obere Ecke angezeigt. Ich habe den Text "Hallo" um geändert in "Test" und siehe da, anderes Wirrwarr wieder in der selben Ecke. Ich habe grade die Leitungen noch ma auf Fehlanschluss überprüft aber nichts gefunden. =(

MfG Marcel

.:Sebastian:.
18.12.2009, 16:28
Moin

Also die ganzen interessanten Pins kannst du bei mir in der lc7981.h ändern.
Normaleiweiße hab ich :

RS auf PA4
RW auf PA2
EN auf PA0

Daten geb ich über PD0-7 aus die mit DB0-7 1:1 verbunden werden.

CS und Res vom Display hängen auf festen Pegeln.

Sebastian

walkonshit
18.12.2009, 17:07
Ja genau PortA existiert beim Atmega8 ja nicht, weshalb ich das auch alles bereits anpassen musste. Aber die Art des Problems weist doch auf ein Fehler der von dir genannten Pins hin, oder? Denn ich habe lediglich eine abweichende Beschaltung bei der Stromversorgung des eigentlichen LCD.

Marcel

.:Sebastian:.
18.12.2009, 18:21
Ich hatte selber mal ähnliche Probleme, da waren Datenleitungen verdreht.
D.h. wenn du mal im Thread weiter vorne liest hatte ich auch einmal RS und RW getauscht, sowas passiert schnell.
Vor allem kann man das mit Multimeter nur schwer finden.
Ich war schon drauf und dran mir einen Logic-Analyzer zu leihen.

Und wenn die Reihenfolge der Leitungen zu passen scheint würd ich mal die Pins zählen.
Weil ich lag auch schon mal 1 Pin daneben.


Ich denke Software Probleme kann ich ausschließen.
(Nach Murphys Law recht sich diese Aussage noch.)


Sebastian

walkonshit
18.12.2009, 19:26
Wo du grade Murphy erwähnst...Ich habe grade alle Leitungen sowohl auf Brücken als auch auf falsche Verdrahtung geachtet. Nichts... Ich habe vom IC-Sockel bis zum (!!) LC7981 Chip gemessen um selbst das auszuschließen. ich bin echt am Verzweifeln. Ich häng mal anbei ein Bild meiner Anzeige an.
Ich verwende die 8x8 font.

http://img8.imageshack.us/img8/6238/18122009146.th.jpg (http://img8.imageshack.us/i/18122009146.jpg/)

Edit: AHHH wie geil^^ Murphy hatte recht: Es ist dein Code. Du rufst in der main.c die Funktion lcd_plot_text(5,5,"Hello",16,16,font_8x8) auf. Aber richtig muss es heißen: lcd_plot_text(5,5,"Hello",8,8,font_8x8). Klar, dass er bei falscher Bitmapgröße was anderes ausm Ärmel zaubert.

Ich hoffe ich konnte helfen.

.:Sebastian:.
19.12.2009, 13:54
Moin Moin ...

Ne ich bau zwar viel Murks, aber da geht wohl auf deine Kappe.

Meine main.c :


lcd_plot_text(5,5,"Hello",16,16,font_12x16);
lcd_plot_pgmtext(50,22,PSTR("World"),16,16,font_12x16);


Du hast wahrscheinlich den Font getauscht, ohne die Größe anzupassen. ;-)
Das das nicht get ist klar.
Siehe Doku (http://sebastians-site.de/hg_repos/glcd/doc/html/lc7981_8c.html#a71a77094675e2850e8a4b442fb6a366e)

Sebastian

walkonshit
19.12.2009, 17:39
Ja okay entschuldigung, ich wollte dich nicht diskreditieren. Aber in der ersten Version, die du hochgeladen hattest wurde "Hello" mit dem 8x8 Font genauso aufgerufen. Das habe ich schlichtweg so übernommen, da ich es bisher auch nicht verstanden habe, wieso beim 12x16 Font die Größe 16x16 sein sollte^^.
Andere Frage am Rande: Funktioniert bei dir die Funktion lcd_plot_bitmap mit convertierten bitmapbildern? Bei mir entstehen dabei immer drei Teile wovon die beiden äußeren gespiegelt werden.

Vielen Dank für deine Arbeit *daumen hoch*

MfG Marcel

.:Sebastian:.
19.12.2009, 18:09
Moin Moin

Wie hast du die Bitmap konvertiert ?
Weil bei mir gehts Problemlos.

(Ich benutze Image2Code, googel mal danach)

Was die Fonts angeht :
Den 8x8 Font hab ich in keiner hochgeladen Version verwendet, kannst ja gerne mal das hg repo pullen und zwei Versionen zurück gehen.
Das mit 16x16 is schnell erklärt.
Die Fonst hab ich nicht selber erstellt. Wer das 12x16 Bezieht sich auf die Größe der Buchstaben.
Allerdings sind da noch 2pixel Luft auf beiden Seiten mit im Speicher.
Wenn man jetzt 12x16 sagt, dann passen die offsets bei einigen Buchstaben nicht.

Sebastian

walkonshit
19.12.2009, 18:39
ich habe das mit einmal mit dem GrafikConverter http://www.mikrocontroller.net/topic/92623
versucht.
Und mit dem Programm bmp2c, bei beiden selbstes Erscheinungsbild.

Bezüglich Fonts: Ja okay dass muss man eben wissen^^.

MfG Marcel

.:Sebastian:.
22.12.2009, 23:37
Moin Moin

Sorry ich war ein paar Tage beschäftigt.
(Abiturvorbereitung, Freundin, Warhammer/DSA Gruppe und Lan-Party ... real live halt)

Also wenn es sind drei Teile und die beiden äußeren gespiegelt ?
Das is strange.
Passen die Maße und deine Angaben im Progamm ?
Is das Bild an der richtigen Position ? (Vllt. mal mit plot die ecken markieren)
Weil für mich hört sich das an, als würde ein Offset nicht passen.

Probier mal die Größen 1px kleiner anzugeben als sie sind.
Es kann nämlich sein dass ich bei 0 anfange zu zählen. So C-Array mässig.
(Und habs vergessen mir dran zu schreiben)

Mal gucken ob ich morgen 2min Zeit hab meine Hardware zu suchen und zu testen.
Das Problem is halt echt das nie jemand außer mir was damit gemacht hat und dass ich keine Zeit hatte alles ordentlich zu dokumentieren. :-s
mfg
Sebastian

walkonshit
23.12.2009, 09:30
Guten Tag,

ist doch kein Problem =).

Jap, das ist wirklich komisch, aber man erkennt eigentlich was als Bild angezeigt wird. Die Maße und so weiter stimmen, auch habe ich ein wenig an den Abmaßen gespielt, aber das machte alles nur noch schlimmer.

Aber mit dem Programm Image2Code funktioniert es perfekt. Allerdings nur wenn man die Einstellung Nr.3 nimmt. Das Phänomen, was bei den anderen Programmen auftrat, kann man reproduzieren, indem man bei Image2Code die Abtastmethode 1 wählt.

Das mit der fehlenden Dokumentation ist jedenfalls für mich nicht weiter schlimm, dein Code ist gutstrukturiert und ich habe mich mittlerweile eingelesen.

So aber jetzt wünsche ich dir, und allen Mitlesenden ein frohes und besinnliches Fest und einen guten Rutsch, bis ins nächste Jahr,

MfG Marcel

Maroni666
19.01.2010, 16:35
Hallo zusammen vielleicht ist dieses Thema noch nicht Tod,

ich habe ein Problem mit meinem Touch und zwar benutze ich einen Atmega8. Habe ein schnell Testprogramm für mein Touch draufgespielt.

Wenn ich allerdings versuche mein Touch zu kalibrieren passiert nichts.

Nur wenn ich gleichzeitig (bei upper left) links oben und unten drücke
springt er weiter.
Bei (lower right) kann ich dann oben und unten rechts gleichzeitig
drücken und er geht weiter.
Dann bricht er ab mit der Meldung Try again.

Kann mir vielleicht jemand von Euch sagen was ich falsch mache bzw. was
ich noch versuchen kann oder kann es sein das mein Touch wirklich
hinüber ist.

Schon mal vielen Dank

Gruß

Maroni

terrordaddy
23.01.2010, 12:39
Hi alle,

ich würde mir gerne einen Aquarien-Computer bauen und würde gerne dieses Display verwenden. Ich bin noch so ziemlich am Anfang mit meinen AVR-Kenntnissen, habe aber auch schon Displays mit Bascom angesteuert.

Nun ergeben sich für mich einige Fragen:
1. Habt ihr das Display auch mit Bascom zum laufen bekommen?
2. Gibts da vielleicht irgendwo ne LIB?
3. Funktioniert das Display mit Bascom auch im Grafik-Modus (Bilder & Text)?
4. Kann mir jemand etwas Hilfestellung dazu geben?

Grüsse

linux_80
15.02.2010, 10:29
Hallo,
ich hab eine erste brauchbare Version einer Bascom-Lib gebaut.
Unterstützt, Text und Grafikmodus.
Im Grafikmodus aber erstmal nur Pixel setzen, keine Zeichen oder Bilder usw. Ausgeben.

Im Anhang ist die Lib, ein TestProgramm, und wie das am LCD aussieht.

linux_80
16.02.2010, 12:04
Hallo,

heute gibts schon ein update, die Lib kann jetzt auch Zeichen schreiben.
Den Font gibts hier:
http://www.mikrocontroller.net/topic/156831#1599473

Andy_90
02.03.2010, 11:38
Hallo Liebe user,

ich habe seit sonntag das display auch erfolgreich in Betrieb.
Touch funktioniert auch.
Jetzt habe ich hier gesehen, dass einige schon Grafiken von Bitmap2LCD auf dem Display anzeigen.
Ich arbeite mit Bascom und das noch nicht sehr lange.
Nun ist meine Frage, ob bereits jemand mit bascom grafiken angezeigt hat und wenn ja, ob er mir vielleicht etwas unter die arme greifen kann oder eventuell ein codebeispiel schicken.

Grüße
Andy

Matthias 321
08.03.2010, 14:02
Hey,
ich hab ein anderes interesantes LCD gefunden:
320 x 240 Touch-LCD bei Pollin (http://www.pollin.de/shop/dt/MjU0OTc4OTk-/Bauelemente/Aktiv/Displays/LCD_Modul_LCD_TG322450.html)
Das ist für einen Euro mehr viel mehr LCD! Aber ist warscheinlich auch schwieriger zu programmieren nehm ich an, oder wie seht ihr das?

da_miez
24.03.2010, 19:26
hmm, jetzt hatte ich ein display bei dem touch gut funktioniert hat und beim einbaun ins gehäuse hab ichs mit dem lötkolben berührt und gedöbert... sehr sehr ärgerlich. naja, heute dafür gleich fünf bestellt :)

C_Classic
29.03.2010, 15:31
So,
habe mir jetzt 3 Stück bestellt und hoffe mal, dass ich welche mit funktionierendem Touch erwische. Wenn ich dann ganz großes Glück habe, erwisch ich vielleicht eins mit LED Hintergrundbeleuchtung...
Ich erzähl euch dann meine Erfahrungen, wenn ichs hab. :)


Hey,
ich hab ein anderes interesantes LCD gefunden:
320 x 240 Touch-LCD bei Pollin (http://www.pollin.de/shop/dt/MjU0OTc4OTk-/Bauelemente/Aktiv/Displays/LCD_Modul_LCD_TG322450.html)
Das ist für einen Euro mehr viel mehr LCD! Aber ist warscheinlich auch schwieriger zu programmieren nehm ich an, oder wie seht ihr das?
Das Display an sich ist zwar besser aber:
- es kommt ohne Controller
- Es hat keine Hintergrundbeleuchtung
Und somit kann man noch keine Aussage über den Code treffen. (oder?)

@Sebastion:
Deine Lib sieht wirklich toll aus! Werde es dann mit der als erstes probieren. Danke! :)

MfG C_Classic

C_Classic
29.03.2010, 19:00
Hallo,
ich habe jetzt mal versucht den Code von Sebastian zu kompilieren, jedoch bekommen ich folgende Fehlermeldung:

Fatal error: can't create bin/include/adc.o: No such file or directory
Nur verstehe ich nicht ganz, was jetzt fehlt. Ich hoffe ihr könnt mir helfen.

Dann noch eine Frage an Sebastian: Mit welchem Programm hast du die Bitmap konvertiert?

MfG,
C_Classic

Hier mal das ganze Compiler-output:

-------- begin --------
avr-gcc (GCC) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.


Compiling C: main.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./bin/main.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/main.o.d main.c -o bin/main.o
In file included from main.c:11:
include/lc7981.h:72: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:85: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:87: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:97: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:134: Warnung: Funktionsdeklaration ist kein Prototyp
In file included from main.c:16:
include/touch.h:25: Warnung: Funktionsdeklaration ist kein Prototyp
include/touch.h:27: Warnung: Funktionsdeklaration ist kein Prototyp
include/touch.h:28: Warnung: Funktionsdeklaration ist kein Prototyp
In file included from main.c:18:
writing_demo.h:16: Warnung: Funktionsdeklaration ist kein Prototyp
main.c:23: Warnung: Funktionsdeklaration ist kein Prototyp

Compiling C: writing_demo.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./bin/writing_demo.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/writing_demo.o.d writing_demo.c -o bin/writing_demo.o
In file included from writing_demo.h:12,
from writing_demo.c:9:
include/lc7981.h:72: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:85: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:87: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:97: Warnung: Funktionsdeklaration ist kein Prototyp
include/lc7981.h:134: Warnung: Funktionsdeklaration ist kein Prototyp
In file included from writing_demo.h:14,
from writing_demo.c:9:
include/touch.h:25: Warnung: Funktionsdeklaration ist kein Prototyp
include/touch.h:27: Warnung: Funktionsdeklaration ist kein Prototyp
include/touch.h:28: Warnung: Funktionsdeklaration ist kein Prototyp
In file included from writing_demo.c:9:
writing_demo.h:16: Warnung: Funktionsdeklaration ist kein Prototyp
writing_demo.c:13: Warnung: Funktionsdeklaration ist kein Prototyp

Compiling C: include/adc.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./bin/include/adc.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/adc.o.d include/adc.c -o bin/include/adc.o
Assembler messages:
Fatal error: can't create bin/include/adc.o: No such file or directory
make: *** [bin/include/adc.o] Fehler 1

.:Sebastian:.
29.03.2010, 19:07
Moin Moin

"Can't create" sollte heißen, dass er die Datei nicht erstellen kann.
Da fehlt dem Compiler der Ordner include im Ordner bin.

Was die vielen Warnings sollen weiß ich grade auch nicht, die sollten eigentlich nicht auftauchen.

Ich checks mal hier.

///Update1 : Ich hab das makefile gefixt. Sollte jetzt tun.
Aber die Warnings sind imme rnoch da, da kann ich mich auch erst in ein paar Tagen drum kümmern.


Sebastian

C_Classic
29.03.2010, 19:30
Danke! Das heißt, dass dass Erstellen des Ordners include in bin den Fehler beheben sollte?

Mit welchem Programm konvertierst du denn die Bitmaps?

Dann auch noch mal danke fürs Erstellen und online stellen deiner Lib. =D>

MfG,
C_Classic

EDIT: Hab grad deine ANtwort gelesen. Werd's dann morgen mal probieren.

.:Sebastian:.
30.03.2010, 14:01
Moin Moin

Ich benutze Image2Code um die Bitmaps zu konvertieren.
Welche Einstellung man braucht hat walkonshit irgendwo weiter oben geschrieben.
Ich selbst müsste es grade wieder ausprobieren (is fast 1 Jahr her dass ich das letzte mal was mit dem Display gemacht hab).

Die Warnings hab ich mittlerweile gefixt, die kamen daher dass ich von C++ gewöhnt bin einen Prototyp mit z.b. void func(); zu deklarieren, richtig wäre aber in C void func(void).
Da allerdings in Eclipse die default Einstellung für warnings ziemlich lasch ist, werden die immer unterdrückt.
Deshalb hab ich das wohl einfach verpennt.
Ist jetzt auf gefixt.

Für alle die hg benutzen und das repo von meinem Webspace nicht pullen können.
Da arbeite ich gerade dran. Irgendwie hab ich da ein paar Sachen verfummelt.

Gruß
Sebastian

oOZe
31.03.2010, 09:14
Hallo Sebastian

Ich versuche gerade deinen (übrigens prima funktionierenden) Code für einen 644er anzupassen.
Probleme macht mir das Init, ich bekomm nur Pixelgemüse... hast Du irgendwelche Timinginfos für den lc7981 ? ich habe im Datenblatt nichts gefunden.

Gruß

.:Sebastian:.
31.03.2010, 11:56
Moin Moin

Also in dem DS was ich hatte gabs Timing infos.
http://www.datasheetcatalog.com/datasheets_pdf/L/C/7/9/LC7981.shtml
Ab Seite 3.

Der Pixelsalat könnte höchstens daher kommen, dass aus irgendeinem Grund nach dem Init kein clear an den Controller gesendet wird.

Weil nach dem Init wird soweit ich das weiß jeder Müll gezeichnet der noch im Speicher vom Display is.

Gruß
Sebastian

oOZe
31.03.2010, 14:25
Prima, das hat gefehlt! Ich hatte tatsächlich irgendeine Spar-Version von Datenblättchen :)

Danke dafür!

C_Classic
08.04.2010, 14:53
Hey,
hab jetzt heute meine Displays bekommen! Bei einem funktioniert schon mal der Touch - bei den 2 Anderen weiß ichs noch nicht.
Mein Problem ist jetzt, dass ich sobald deine Lib (mit Beispielprogramm) auf dem Controller ist, nichts mehr funktioniert. Mit "nichts mehr" meine ich, dass ich nicht mal eine LED schalten kann, selbst wenn der Befehl vor dem init liegt. (Die LED leuchtet auch bei egal welcher Polung nicht.)
Ich benutze einen Atmega32 und diesen Schaltplan: https://www.roboternetz.de/phpBB2/download.php?id=17948
Ich habe folgende Änderungen in der lc7981.h vorgenommen:

#define LCD_CTRL PORTC //!< Port used for control signals
#define LCD_CRTL_DDR DDRC //!< Data-Direction-Register for the control signals
#define LCD_RS PC5 //!< Register-Select Pin of the Display
#define LCD_RW PC4 //!< Read-Write-select Pin
#define LCD_EN PC3 //!< Strobe Pin



#define LCD_DATA PORTD //!< Port used for data
#define LCD_DATA_PIN PIND //!< Port used for reading the data
#define LCD_DATA_DDR DDRD //!< Data-Direction-Register for data

Wisst ihr wo der Fehler liegt?

MfG C_Classic

.:Sebastian:.
08.04.2010, 15:05
Naja also an den anderen Ports sollte es eigentlich nicht liegen, dass dir dein Controller auf die Schnauze fällt,
Wo hast du eigentlich die Led angeschlossen und wie sieht dein restlicher sourcecode aus ?
(Also die Änderung an meinem Zeug für die LED)

Und läuft der ATmega überhaupt ? Also läuft er ohne meine Source an ?
(Z.b. mit einem LED-Blink Testpreogramm)

Was mir auch grade noch auffällt, ist das der Schaltplan nicht zu meiner Lib passt.
Da hängen nämlich Pins, CS und RS, am AVR die ich immer auf festen Pegeln habe.
D.h. die auch noch zu steuern hab ich in der Lib nicht vorgesehen.

mfg
Sebastian

C_Classic
08.04.2010, 15:10
Ich habe alles von dir heruntergeladen und nur das eben geschriebene verändert.
Der Code der main.c sieht jetzt so aus (wegen der LED):


/*
* main.c
*
* Created on: 01.05.2009
* Author: sebastian
*/

#include <avr/io.h>
#include <stdlib.h>

#include "include/lc7981.h"
#include "include/adc.h"
#include "button.h"
#include "12x16_horizontal_LSB_1.h"
//#include "8x8_horizontal_LSB_1.h"
#include "include/touch.h"

#include "writing_demo.h"




int main() {

DDRA = 0xff;
PORTA=0xff;

lcd_init(LCD_GRAPHIC);


lcd_plot_text(5,5,"Hello",16,16,font_12x16);
lcd_plot_pgmtext(50,22,PSTR("World"),16,16,font_12x16);


while(!touch_is_pressed());

writing_demo();

return 0;

}

Auf jeden Fall nochmal Danke für deine Bemühungen, Sebastian!

EDIT: Oh oh - hatte den Touchscreen vergessen... mal sehen
EDIT2: Touchscreencode auskommentieren bringt auch nix. Bin übrigens unter Linux. Muss ich da das Makefile anpassen?

.:Sebastian:.
08.04.2010, 15:16
Moin

Also das sollte eigentlich keine Probleme machen.
Ich würde auf ein anderes Problem tippen.

Irgendwas hardwareseitiges.
Läuft der Controller mit anderen Programmen ?

mfg
Sebastian

PS: Wie gesagt mit der Verdrahtung wie im Schaltplan tut meine Lib sowieso nicht.

C_Classic
08.04.2010, 15:18
Was heißt tut sowieso nicht??? Muss man nicht einfach die Ports anpassen?
Und ja: der Controller läuft mit anderen Programmen.
EDIT: Welchen Schaltplan nutzt du?

.:Sebastian:.
08.04.2010, 16:23
Was mir auch grade noch auffällt, ist das der Schaltplan nicht zu meiner Lib passt.
Da hängen nämlich Pins, CS und RS, am AVR die ich immer auf festen Pegeln habe.
D.h. die auch noch zu steuern hab ich in der Lib nicht vorgesehen.


Ich hatte leider noch keine Zeit meinen Plan digital ab zu zeichnen und werde auch die nächsten paar Tage keine haben.

Wie gesagt ich wüsste nicht wo in meinem Code der Fehler liegen sollte.
Wenn es gar nicht anders geht solltest du vllt. auf einen anderen Code umschwenken.


Sebastian

C_Classic
08.04.2010, 17:05
Sorry für die vielen Fragen...
Aber auf welchen Pegeln liegen CS und RS und welche Pins am Display sind jetzt:
LCD_RS (Register-Select Pin of the Display) --> ich dachte RS wär fest?
LCD_EN (Strobe Pin)

C_Classic

.:Sebastian:.
08.04.2010, 17:38
Moin Moin

Also CS is chip select und sollte low active sein, d.h. der muss auf GND.
RES also Reset (und nicht RS war mein Fehler) is auch low active muss dann auf Vcc.

Siehe DS vom Display http://www.pollin.de/shop/downloads/D120346D.PDF

Das sollte aber nix daran ändern dass dein ATMega nicht will.

Sebastian

Flash2over
08.04.2010, 18:18
Hi,

Also da ich der Zeichner der Schaltplans bin meld ich mich auch ma zu wort^^:

Pin 15 habe ich auf GND gelegt (er ist active low= active wenn gnd anliegt)
Pin 16 habe ich auf VCC gelegt (da man ihn nicht active haben will)

So funktioniert es garantiert.

Ich hatte mir ne andere LIB rausgesucht....link dazu is glaub in meinem beitrag auf der dritten seite. Versuchs ma mit der LIB dann kannste wenigstens nen Defekt vom Controller ausschließen.

C_Classic
08.04.2010, 21:45
Die hatte ich glaubauch schonmal. Jedenfalls funktioniert ein Code jetzt soweit, dass der Controller noch lebt. (glaub modifizierte Version von Sebastians)
Auf dem Disp jedoch mal weiß mal Schwarz, Streifen oder garkein init (bild wie ohne uC).

Morgen mal weiter Fehler suchen.

Hat jemand einen Schaltplam mit Lib, die ohne irgendwelche Anpassungen zusammen funktionieren (Touch egal).

Danke,
C_Classic

C_Classic
10.04.2010, 15:41
Hab jetzt mal deinen Code, Sebastian, auf nen Mega8 gespielt. Dort läuft er mal soweit, nur leider wird das Display auch hier nicht initialisiert.
Hast du die Datenleitungen gekreuzt, also DB0 --> PB7, DB1 --> PB6 etc.?

Die Einstellungen müssten so richtig sein, oder?:

#define LCD_CTRL PORTD //!< Port used for control signals
#define LCD_CRTL_DDR DDRD //!< Data-Direction-Register for the control signals
#define LCD_RS PD2 //!< Register-Select Pin of the Display
#define LCD_RW PD1 //!< Read-Write-select Pin
#define LCD_EN PD0 //!< Strobe Pin



#define LCD_DATA PORTB //!< Port used for data
#define LCD_DATA_PIN PINB //!< Port used for reading the data
#define LCD_DATA_DDR DDRB //!< Data-Direction-Register for data

Display AtMega
==========
RS 4 - PD2
RW 5 - PD1
E 6 - PD0

Die Datenleitungen sind 1:1 mit PortB verbunden.
CS auf GND und RES auf VCC

Danke,
C_Classic

PS: Soll ich mal ein Foto anhängen, wie das Display aussieht?
Und übrigens, bei mit funktionieren alle 3 Touchscreens! \:D/ ...jetzt fehlt nur noch das Display selbst.

PPS: Pin 7 ist doch DB0, oder?
Hab jetzt mal LEDs an die dataports gehängt und gesehen, dass der 1. (also PB0) normalerweise high ist und bei datenübertragung auf low schaltet, bei allen Anderen ist es umgekehrt. Passt das so?


ARRRG: ich ahb mich an einen Satz von mir erinnert, der mir vor beginn dieses Projekts durch den Kopf ging: "Wetten, das Projekt funktioniert am Ende wieder wegen diesem sch**** Steckbrett nicht!" und wies aussieht hatte ich recht. Ich hab mal die Kabel direkt an den Atmega geklemmt und siehe da, jetzt tut sich was. Zwar noch kein Bild oder ähnliches aber es macht was. Ich werd das ganze jetzt mal aufn Board LÖTEN und dann weitersehen... (aber nach welchem Schaltplan?)


===> ES LÄUFT!!! Danke für deine Lib, Sebastian, läuft super! Es lag wirklich an diesem verdammtem Steckbrett (Conrad)... naja...
Ich brauche also keinen Schaltplan mehr. Nochmals Danke an Alle, die mir geholfen haben.

C_Classic
10.04.2010, 19:09
Jetzt hab ich doch noch eine Frage: welche Anschlüsse der Touchfolie sind welche X/Y-Anschlüsse bzw. wie kann ich es rausfinden?

MfG
C_Classic

PS: Gibt es eine Möglichkeit den Touchscreen in deiner Lib zu kalibrieren? Bei mir ist das ganz versetzt und mal zeichnet er zu weit unten, mal zu weit oben.
Hast du irgendwelche Widerstände an den Pins?

PPS: Müssten 150 Ohm sein, oder?
Und noch was: Beim zeichnen von Bitmaps werden die bei mir in die Länge gezogen.(sind die Pixel rechteckig?) Ebenso kann ich keine 160x80 Bitmaps Zeichnen. Hast du ne Idee, woran das liegt? Problem gelöst: einfach width und height um 1 runtersetzen.
Ach und noch was: Bei dem 8x8 Zeichnensatz gibt es Fehler (Striche Punkte über dem Zeichen) bei r und - vlt. auch bei mehr.

.:Sebastian:.
12.04.2010, 13:45
Moin Moin




ARRRG: ich ahb mich an einen Satz von mir erinnert, der mir vor beginn dieses Projekts durch den Kopf ging: "Wetten, das Projekt funktioniert am Ende wieder wegen diesem sch**** Steckbrett nicht!" und wies aussieht hatte ich recht. (aber nach welchem Schaltplan?)




Ich würde auf ein anderes Problem tippen.
Irgendwas hardwareseitiges.


Alle weiteren Kommentare verkneif ich mir jetzt mal.

Zu Thema Fonts :
Kann sein die sind nicht von mir.

Zum Thema Touch :
Die Anschlussbelegung verrät dir dein Ohmmeter.
Die 150 Ohm könnten stimmen.
Der toucht-teil gehört auch garnicht zur lib sondern ist nur als 'proof of concept'
mit dabei, also weder dokumentiert noch ausreichend getestet.

Kalibrieren geht über Zeile 54 und 83 in der touch.c.
Lass dir einfach mal die normalen ADC werte anzeigen und, dann such dir das Minimum und Maximum raus und rechnes in Koordinaten um. (Mittelstufenmathematik)


//Update :
Ich hab mal die neuste Version von lib und doku hochgeladen.
Es hat sich fast nix verändert, außer ein paar Kleinigkeiten und der Lizenz.
Alle künftigen Versionen werden unter MPL statt GPL stehen.
Warum könnt ihr auf meiner Seite nachlesen.
http://sebastians-site.de/homepage/elektronik/avr-library-for-lc7981.html

mfg
Sebastian

Astrobär
15.04.2010, 07:10
Problem: Viel Text mit kleinem Zeichensatz darstellen

Hallo Sebastian und andere Displayprogrammierer

danke an alle hier im Forum, mit Eurer Hilfe habe ich auch mein Display
zum Laufen gebracht. Ich einen Atmega32 und Libs in C von Sebastian, die schön flott arbeiteten.

Folgendes fehlt noch zum letzten Glück: Ich möchte gerne viel Text
komprimiert auf dem GLCD ausgeben und einen 5x7 Zeichensatz verwenden.
Ich habe dazu je einen Lösungsansatz für den Textmodus und den
Grafikmodus, jeder natürlich jeder mit einem Problem, was sonst:

1) Textmodus + interner Zeichensatz, schön klein, spart Speicherplatz
Das funktioniert allerdings nur mir 20 Zeichen pro Zeile statt 26
möglichen und ist mir nicht dicht genug. Bei 26 Zeichen gibt es irgendwo
in der Mitte jeder Zeile Pixel die nicht angesprochen werden. Das
gleiche Problem wurde hier im Forum schon einmal mit Foto nachgefragt.
Man muss also die horizontal pitch und number of characters entsprechend
Datenblatt anpassen. Die Erklärung ist sicher, dass mit einer Hp von 8
und einer Pixelanzahl von 160 pro Zeile eben nur 20 Zeichen glatt
aufgehen. Sonst müsste man den LC7981 irgendwie überlisten, wie weiß ich
leider nicht.
So funktioniert es im Textmodus:

lcd_write_command(0x01,0x77); //Hp=8 stellt die pitch-Werte ein
lcd_write_command(0x02,20 - 1); //Anzahl Zeichen pro Zeile (minus 1)


Frage 1: hat jemand einen Tip, wie ich auch 26 Zeichen pro Zeile im
Textmodus fehlerfrei darstellen kann, 160/7 =26,6 das geht nicht auf!!
Textmodus so einstellen, aber das gibt besagte Fehler:

lcd_write_command(0x01,0x75); //Hp=6
lcd_write_command(0x02,26 - 1); //Anzahl Zeichen pro Zeile (minus 1)


2) Grafikmodus + selbst erstellter Zeichensatz 5x7
Das würde ja funktionieren, aber ich habe keinen freien
Zeichensatzgenerator und die verfügbaren Zeichensätze sind anders
kodiert als ich es brauche, nämlich SB last!!

Frage 2: Kann jemand einen Zeichensatzgenerator oder einen Zeichensatz
empfehlen?

Gruß Tom_W

.:Sebastian:.
15.04.2010, 17:19
Moin Moin

Also spontan hätte ich gesagt du kannst mal da nachsehen.
http://www.mikrocontroller.net/topic/54860#1291943

Aber da gibts nur 5x8 und 4x6 Fonts.

Sonst wüsste ich jetzt spontan nix.

Gruß
Sebastian

Astrobär
15.04.2010, 19:07
Hi Sebastian,
danke für Deinen schnellen und spontanen Tip mit den Zeichensätzen. Genau die hatte ich dann heute auch noch entdeckt und die kleineren versucht einzubinden. Leider bis jetzt nur Zeichensalat auf dem Display. Die Zeichen müssen, um mit deiner routine richtig dargestellt zu werden, liegen und quasi nach links gekippt sein, richtig?

Post mal meine wesentlichen Anpassungen zum Drüberschauen:

FontDatei:
const uint8_t font_5x8[] PROGMEM = {....

Im Programm:
extern const uint8_t font_5x8[] PROGMEM;
lcd_plot_text_P(10,45,PSTR("einfach!!!"),5,8,font_5x8);

Habe mich noch nicht mit deiner Anzeigeroutine für die Zeichensätze beschäftigt. Die Zeichenhöhe und Breite sind ja im Befehl von entscheidender Bedeutung. Ist doch richtig, dass sie immer gleich oder größer dem Zeichen sein sollen. Mit verschiedenen Werten gibt's bei mir auch nur Salat:-( Komme gerade nicht weiter.


Hast du eine Lösung zum Fehler im Textmodus - in deiner Routine sind ja auch 26 zeichen eingestellt, geht bei mir nicht?

Grüße, Tom.

Astrobär
15.04.2010, 19:09
Hi Sebastian,
danke für Deinen schnellen und spontanen Tip mit den Zeichensätzen. Genau die hatte ich dann heute auch noch entdeckt und die kleineren versucht einzubinden. Leider bis jetzt nur Zeichensalat auf dem Display. Die Zeichen müssen, um mit deiner routine richtig dargestellt zu werden, liegen und quasi nach links gekippt sein, richtig?

Post mal meine wesentlichen Anpassungen zum Drüberschauen:

FontDatei:
const uint8_t font_5x8[] PROGMEM = {....

Im Programm:
extern const uint8_t font_5x8[] PROGMEM;
lcd_plot_text_P(10,45,PSTR("einfach!!!"),5,8,font_5x8);

Habe mich noch nicht mit deiner Anzeigeroutine für die Zeichensätze beschäftigt. Die Zeichenhöhe und Breite sind ja im Befehl von entscheidender Bedeutung. Ist doch richtig, dass sie immer gleich oder größer dem Zeichen sein sollen. Mit verschiedenen Werten gibt's bei mir auch nur Salat:-( Komme gerade nicht weiter.


Hast du eine Lösung zum Fehler im Textmodus - in deiner Routine sind ja auch 26 zeichen eingestellt, geht bei mir nicht?

Grüße, Tom.

.:Sebastian:.
16.04.2010, 11:32
Moin Moin



Die Zeichen müssen, um mit deiner routine richtig dargestellt zu werden, liegen und quasi nach links gekippt sein, richtig?


Äh nein ?
Also im Prinzip ist es ganz einfach :
Ich hab einen großen Haufen Speicher, da liegen die Buchstaben drin.
Im Fall von 5x8 sollten sie so angeordnet sein :
Die ersten 5bit sind die erste Zeile vom ersten Zeichen, die zweiten 5 die Zweite Zeile ... nach 8 Zeilen kommt die erste Zeile vom zweiten Zeichen.
Die Zeilen sind so aufgebaut da ich sie 1:1 ans Display schicken kann.
Sprich das least significant bit (LSB) ist das erste bit.
Da kommt daher weil der jedes byte im Speicher sind ja 8 Pixel in einer Zeile.
Wenn wir die jetzt von links nach rechts durchgehen kommt zuerst das LSB und dann am Ende das MSB.
Siehe Datasheet für den lc7981 Tabelle auf Seite 15

Da is für mich nix mit kippen erkennbar.
Außer du hältst dein Display falschrum.




Die Zeichenhöhe und Breite sind ja im Befehl von entscheidender Bedeutung. Ist doch richtig, dass sie immer gleich oder größer dem Zeichen sein sollen.


Und das ist totaler Käse.
Da die Größe benutzt wir um die entsprechenden bits im Speicher zu finden,
sollte sie vllt. passen ?
Siehe meine Erklärung oben.
Wenn du da ein bit daneben liegst stimmen alle Offsets nimmer.
Pixelsalat.
Für 5x8 wäre der richtige Aufruf :
lcd_plot_text_P(10,45,PSTR("einfach!!!"),4,7,font_5x8);
Wir zählen nämlich von 0 an.
Siehe die Notizen zu lcd_plot_btimap in der Dokumentation.


Es kann sein das dein 5x8 font so gepackt worden ist,
dass ein zeichen 8 x 8 bit benutzt (sprich 3 bit überlänge).


Das Problem im Textmodus kann ich grade, mangels Hardware, irgendwie nicht nach vollziehen.
Müsste ich mir nacher mal einen Testaufbau zusammen löten und anchschauen,
außer jemand hat ein Photo. (Und irgendwo einen ATmega32 ausbauen.)
Weil soweit ich weiß ging der Textmodus bei mir relativ problemlos, kann aber sein dass ich da irgendwelche Seiteneffekte einfach ignoriert habe.

Gruß
Sebastian

Astrobär
16.04.2010, 16:56
Hallo Sebastian,
herzlichen Danke für die schnelle Antwort. Habe mich heute einige Stunden mit den Problemen herumgeschlagen und ein paar Fotos gemacht, die ich hoffentlich gleich anhängen kann. Habe mich quasi empirisch dem Problem etwas genähert und ein paar Ausgaben mit unterschiedlichen Zeichensätzen gemacht und auch den Fehler im Textmodus fotografiert.


Foto 3: Bei deinem original verwendeten Zeichensatz gibt es leider auch Darstellungsfehler z.B. bei "h" und "r" - wie übrignes bei 4x6 -siehe unten- auch.
lcd_plot_text_P(0,30,PSTR("Feler bei"),8,8,font_8x8);
lcd_plot_text_P(20,40,PSTR("hhhhhrrrrr"),8,8,font_8x8);
Also da passt entweder der Zeichensatz nicht zur Ausgaberoutine oder die Ausgaberoutine verdreht etwas?

Foto 1 und 2 stellen zum Testen eine Tabelle dar mit dem Text "E3". Damit teste ich verschiedene x,y-Werte für den Textausgabebefehl im Grafikmodus:

lcd_plot_text_P(test*20-80,lauf*10-30,PSTR("E3"),x,y,font_5x8);

Die erste Zeile beginnt bei y=4, erste Spalte bei x=4, dann immer durchlaufend bis 10. Man kann erkennen bei welchen Werten der Text korekt dargestellt wird.
Foto 1: Der Zeichensatz 5x8 lässt sich mit 8,8 richtig darstellen.
Foto 2: Der Zeichensatz 4x6 stellt zwar "E3" zwei mal richtig dar, hat aber immer Fehler z.b. bei "r" und "h" wie bei deinem 8x8 :-(((

Selbst wen man endlich die Zeichen richtig darstellen kann, sind 8 Pixel Breite für einen 5 Pixel breiten Zeichensatz zu viel des Guten. Leider wird bei diesen winzigen Zeichensätzen immer Platz verschwendet und die Zeichen nicht so eng zusammengerückt wie es möglich wäre. Der 4x6 Zeichensatz ist aufgrund der Darstellungsfehler momentan unbrauchbar für mich - oder ich muss vielleicht die Buchstaben einzeln editieren ;-| Ich möchte gerne viel infos auf wenig Raum darstellen, Ziel ist nicht
erreicht.


Letztes Foto - Fehler im Textmodus:

Wie beschrieben, hier Fehler in der Mitte des LCD, Pixel werden nicht angesprochen.

Ich wollte zu allen aderen Problemen auch fragen, was macht eigentlich "lcd_write_text_P(const char *txt)"?

Danke schin einmal für deine Hilfe:-)

Gruß Tom.

.:Sebastian:.
16.04.2010, 22:13
Moin Moin ....

Tja also zu der Geschichte im Textmodus bin ich spotan ratlos.
Zumal ich hier nichts reproduzieren kann.

Fürl cd_write_text_P(const char *txt) sei an die Doku verwiesen.
http://www.sebastians-site.de/hg_repos/glcd/doc/html/lc7981_8c.html#a30251238a49999658455fdb0233757fb
Textausgabe im Textmodus mit scrollen, wie in einem Unix terminal.

Die Darstellungsfehler bei den Fonts hab ich so auch noch nicht gesehen.
Das die alle so viel Platz mitbringen kommt daher, dass man sich normalerweise nicht wie ich die Mühe mit dem freien positionieren macht.
Vllt. sollte ich mal eigene Fonts erzeugen/ein tool dazu schreiben.
Wird aber sicher nix draus vor 2011.
Es kann aber auch sein das meine Textausgabe irgendwie verbuggt ist.
Ich wüsste aber nicht wo.

Sieht so aus als wäre ich mal wieder an dem Punkt wo ich dir empfehlen würde auf eine andere Lib zu setzen.

Gruß
Sebastian

Astrobär
16.04.2010, 22:58
Hallo Sebastian,
so schnell wollte ich nicht aufgeben. Das muss doch zu machen sein. Bin von Anfang an eigentlich begeistert gewesen von deiner Lib und habe mich nach einigem Rumprobieren dafür entschieden. Die Touchscreenroutinen arbeiten zuverlässig und die Grafik ist schnell, ich kann Bitmaps selbst erstellen und flott ausgeben. Es wäre nur schön, wenn du die Dinge irgendwie nachvollziehen könntest, die bei mir passieren, es sollte doch nicht an irgendeinem dummen Bug bei mir liegen?

Der Textmodus arbeitet mit 20 Zeichen pro Zeile korrekt (Probeweise Colums mal auf 20 gesetzt, hp auf 8, das klappt). Der Fehler im Textmodus auf meinem Bild wurden auch schon mal bei mikrocontroller.net im Forum gepostet und jemand anders hat auch geschrieben, dass er es nur mit 20Z/Zeile hinbekommt. Auch die Lib für Bascom, die jemand in Assembler geschrieben hat, verwendet 20Z/ Zeile. Beim Testen heute hat sich, durch irgendeinen Umstand, den ich leider nicht nachvollziehen kann, die Ausgabe im Textmodus so verändert, dass in der Bildschirmmitte alles richtig war, der Text am Zeilenende jedoch gefehlt hat, Gott weiß warum, ich hatte eigentlich nur im Grafikmodus rumgespielt. Es muss also irgendwie gehen, nur wie? Der eingebaute Zeichensatz gefällt mir eigentlich am besten, wenn ich die Wahl hätte, würde ich den nehmen.

Wenn ich das Datenblatt richtig verstanden habe, setzt der Controller im Textmodus den Cursor automatisch um horizontal pitch weiter. Dann müsste man evtl. dort den Gedanken ansetzen, damit richtig positioniert wird? Oder sollte man im Diplayspeicher an eine andere Stelle schreiben, damit der Text richtig erschreint? Oder liegt irgend ein anderer dummer Fehler nur bei mir vor, wenn die Fehler bei dir nicht auftauchen?

Was sagen denn andere, die die Lib von dir benutzen, bei denen alles o.k. oder reizen sie die Möglichkeiten nicht aus?

Gut Nacht, Tom.

Eigo
20.04.2010, 19:28
Guten Tag zusammen,
ich habe ein Problem mit dem Display!

Ich betreibe das Display (noch) im Charaktermodus weil ich zunächst erstmal einfach testen wollte wie es so funktioniert und es funktioniert gut auch das Touchscreen arbeitet gut ABER ich kann einfach ums verrecken nicht in die Zeilen unterhalb von 7! Siehe Foto!

(Normalerweise soll genau so weiter geschrieben werden 8,9,10)

http://www.mikrocontroller.net/attachment/74733/DG16080.png

Ich verstehe es nicht. Oberhalb der 8 Zeile kann ich wunderbar springen sowohl horizontal als auch vertikal. Ein zweites Display habe ich auch schon getestet, das selbe Verhalten!

So initialisiere ich das Display:



void GLCD_Init_C(void)
{
GLCD_RES=0;
Delay10KTCYx(1);
GLCD_RES=1;

GLCD_writecom(0x00); // Mode Con
GLCD_writedata(0x3C); // Character Mode, Cursor blink

GLCD_writecom(0x01); // Character Pitch
GLCD_writedata(0x77); // 8x8 Chars

GLCD_writecom(0x02); // Number of Characters
GLCD_writedata(19); // 19 Zeichen <--->

GLCD_writecom(0x03); // Set Duty
GLCD_writedata(0x4F); // 80-1

GLCD_writecom(0x04); // Cursor Position
GLCD_writedata(0x07); // Line 1

GLCD_writecom(0x08); // Start Adresse Low
GLCD_writedata(0x00); // 0

GLCD_writecom(0x09); // Start Adresse High
GLCD_writedata(0x00); // 0

GLCD_writecom(0x0A); // Cursor lower adress
GLCD_writedata(0x00); // 1

GLCD_writecom(0x0B); // Cursor upper adress
GLCD_writedata(0x00); // 1
}



So stelle ich die Adresse ein:



void GLCD_SetAdress(unsigned char x, unsigned char y)
{
unsigned short adress;
adress=y*20+x;
GLCD_writecom(0x0A); // write adress low
GLCD_writedata(adress&255);
GLCD_writecom(0x0B); // write adress high
GLCD_writedata(adress/256);
}


Die Routinen zum Schreiben auf dem Display:



void GLCD_writedata(unsigned char info)
{
GLCD_RS=0;
GLCD_write(info);
}

void GLCD_writecom(unsigned char info)
{
GLCD_Busy();
GLCD_RS=1;
GLCD_write(info);
}

void GLCD_write(unsigned char info)
{
GLCD_RW=0;
GLCD_Data=info;
Delay10TCYx(1);
GLCD_Enable();
}

void GLCD_Busy(void)
{
GLCD_RW=1;
GLCD_RS=1;
GLCD_Enable();
TRISD=0x80;
while(LATDbits.LATD7){}
TRISD=0x00;
}

void GLCD_Enable(void)
{
GLCD_E=1;
Delay10TCYx(1);
GLCD_E=0;
}


Ich hoffe sehr, dass mir irgendwer von euch helfen kann ich verstehe es einfach nicht..

LG Nico

C_Classic
24.04.2010, 13:53
Hey,
ich hab mal auf der Lib von Sebatian aufbauend eine Funktionsbibliothek geschrieben, um einfache Steuerelemente zu realisieren.

Man kann mit der Lib momentan Buttons, Checkboxes und Slider (Vertikal) erstellen. Eine Progressbar mach ich demnächst noch.

Ebenso beinhaltet die Lib Funktionen zum zeichnen von Vierecken, Kreisen und Linien.

Ich denke die Befehle erklären sich größtenteils von selbst, nur:
RefreshCheck und RefreshSlider müssen immer wieder aufgerufen werden (interrupt?), damit sich der Status der Checkbox bzw. des Sliders beim Berühren ändert.
Der Wert einer Checkbox kann aus der Variable Checked[id] gelesen werden. Der Slider muss mit GetSlider(id) gelesen und mit SetSlider(id,val) gesetzt werden. Der gültige Bereich ist von 0-100

Ein Button wird mit GetButtonPressed(id) abgefragt.

Der Rest funktioniert eigentlich wies im Headerfile steht. Create zum Erstellen Delete zum Löschen etc.


Wenn jemand diese Lib testet wäre ich über Rückmeldungen dankbar.

MfG C_Classic

.:Sebastian:.
24.04.2010, 19:52
Moin Moin

So jetzt bin ich wieder zurück aus dem Angelurlaub.

C_Classic:
Ich würde deine Lib gerne testen doch mir fehlt die Hartware.
Sobald ich wieder Zeit habe wert ich mal was frickeln.


Was mir auffällt ist das du relativ viel über lcd_plot_pixel machst.
Das is an sich kein Problem nur ist es inperformant (in oder im ?) ohne Gande.
Du weißt das du für JEDES Pixel 2 byte an das Display schickst ?
Es wäre eventuell geschickter wenn du direkt den Display speicher lesen + schreiben würdest. (1Byte lesen, Pixel die zur Linie gehören setzen, Byte wieder schreiben)
Eine horizontale Linie mit 8 Pixel Länge lässt sich so im günstigsten Fall mit 4byte (2 lesen + 2 schreiben) realisieren.
Im Moment verschickst du dafür 16 Byte (2 pro Pixel) sprich du könntest das um Faktor 4 beschleunigen.
(Weil ein paar bitshifts im AVR sind schneller als die Kommunikation mit dem Display)

Aber ich werde mir deine lib demnächst mal ansehen, kann sogar sein dass ich sie in meinem nächsten Projekt verbaue.

mfg
Sebastian

PS: Ich würd mal noch meinen Name + E-mail Adresse in den Sourcen hinzufügen.
Und vllt. eine Lizenz (z.b. MPL , BSD oder zur not auch GPL) damit die Leute die es verwenden wollen das auch dürfen.

C_Classic
24.04.2010, 21:35
Die Sache mit dem PlotPixel ist so, weil ich nicht genau weiß, wie es anderst geht. Da müsste ich mich erstmal einarbeiten.
Zu der Sache mit den Lizenzen: Ich denke da wär die MPL gut, darunter steht ja auch der Rest der Lib.

MfG
C_Classic

.:Sebastian:.
26.04.2010, 15:59
Moin Moin

Also ich hab den ganzen Morgen Und Mittag damit meine Display-Testplatine nach einem Jahr in der Karbbelkiste ohne Controller wieder zu beleben.
Nach dem ich das Display tauschen musste weil der Folienleiter vom Touchteil rissig und wackelkontaktig war scheint jetzt alles wieder zu gehen (nur is auf dem Display die Touchfolie anderes herum drauf als auf den vorher).

Jedenfalls kann ich bestätigen das deine Lib tut.


Gruß
Sebastian

Astrobär
27.04.2010, 08:46
Hallo hier im Forum,

@Alle: Habe immer noch das Problem, dass ich keinen engen Text (viel Infos auf wenig Raum) darstellen kann. Gibt es jemanden, der 26 Zeichen pro Zeile (fehlerfrei) darstellen kann, dann sagt mir bitte wie!!!

@ Sebastian: Du bist vom Angeln zurück und baust eine Testplatine, das lässt hoffen. Evtl. kannst du ja meine Probleme (siehe Bilder oben) 1) im Textmodus mit 26 Zeichen pro Zeile das Problem in der Mitte des LCDs 2) im Grafikmodus z.B. mit deinem Zeichensatz 8x8 bei den Buchstaben „h“ und „r“ nachvollziehen und hast evtl. eine Lösung dafür.
Manchmal beschleicht mich die Idee, dass ich eine unfertige Version deiner Lib benutze – neulich fand ich auf einer deiner Seiten eine andere Version ohne Touchkalibrierung – die zwar etwas bereinigt aussah, die ich allerdings nicht zum Laufen bekommen habe (könnte ein Timing Problem sein).

@C_classic: Danke für die „functions“. Habe sie mal kurz eingebunden und es lief soweit. Einen slider finde ich sehr interessant. Abfrage und Verschieben habe ich auf Anhieb nicht hinbekommen – evtl. ist ein kleines Demoprogramm ganz schönJ Ein sehr gute Linienfunktion gab es ja schon bei Sebestian.

@Alle: Ich bin ein bildlicher Mensch und habe deshalb für mich ein kleines Zeichensatz-Tool programmiert. Wer will kann es hier downloaden. Es ist zum privaten gebrauch, erfüllt den Zweck für den ich es entwickelt habe und ist auf keinen Fall perfekt. Man kann damit GLCD-Zeichensätze (maximal 8x8) erkunden und auf die eigenen Bedürfnisse anpassen. Im linken Fenster muss man etwas markieren, dann kann man die Zeichen einzeln anzeigen lassen, rotieren, spiegeln, verschieben und als neuen Quelltext im rechten Fenster erstellen lassen. Ich gehe nicht den Weg, dass man MSB und horizontal/ vertikal oder was auch immer einstellen muss, sondern jedes Zeichen wird entsprechend der Anzahl von Manipulationen verschoben/ rotiert/ gespiegelt und dann als Hex-Code gespeichert. Man kann auch in den Festern rechts und links Markieren und Einfügen oder Editieren, so dass man jederzeit auch mal eine Ausgabe von rechts nach links verschieben kann, markieren und anzeigen. Es ergeben sich bei geschickter Handhabung recht vielfältige Arbeitsmethoden.
Ich wollte zuerst noch TrueType Fonts einladen lassen, mache das aber z.Zt. mit GLCD Fontcreator 1.0.1 von http://www.pocketmt.com/ (Export nach Basic, dann in mein Programm einladen und weiter beareiten). Eine Weiterentwicklung plane ich nicht.

.:Sebastian:.
27.04.2010, 12:17
Manchmal beschleicht mich die Idee, dass ich eine unfertige Version deiner Lib benutze

Kann durchaus sein, die neuste Version ist 0.6 beta.
Die Version steht über der Lizenz in der lc7891.c oder der lc7891.h.


neulich fand ich auf einer deiner Seiten eine andere Version ohne Touchkalibrierung – die zwar etwas bereinigt aussah, die ich allerdings nicht zum Laufen bekommen habe (könnte ein Timing Problem sein).

Das kann allerdings überhaupt nicht sein.
Erstens ich hatte nie eine Touch Kalibrierung.
Die mitgelieferte touch.c enthält Durchschnittswerte von 2 Displays.
Die habe ich gemessen, als ADC Werte und dann mit Papier, Bleistift und meinem fx991-ES die Umrechnungsfunktionen ADC wert in Koordinate aufgestellt.
Die soll auch nur so pi mal Daumen passen, als prove of concept.
Zweitens wenn ich alle Änderungen der letzten paar Monate durchgehe, waren es zu 90% Dokusachen und 1-2 Zeilen Code.

Sicher das du meine Lib erwischt hast ?
http://sebastians-site.de/homepage/elektronik/avr-library-for-lc7981.html


Ein sehr gute Linienfunktion gab es ja schon bei Sebestian.

Jetzt bin ich vollkommen verwirrt.
Weil keine Version meiner lib hatte bis jetzt eine Linienfunktion.
Für die Version 0.7 ist einen geplant (seit gestern auch funktionsfähig) aber da 0.7 noch nicht fertig is hat davon noch nichts mein NAS verlassen.

Ist das jetzt meine lib die du benutzt oder nicht ?

Sebastian

//Edit1 :
Die komischen Pixelfehler bei einigen Buchstaben kann ich mittlerweile bestätigen.
Ich weiß nur nicht woher die kommen.

//Edit2:
Ich glaube meine Fontroutine kann in derzeitiger Form gar nicht so funktionieren wie ich es gerne hätte.
An sich müsste ich die lcd_plot_char neu schreiben.
Und die Fonts an sich anders im Flash organisieren.
Der Plan is das man dann diese Quasi-standart als Array abgelegte Fonts nutzen kann.
Ich melde mich wenn das fertig ist (irgendwann nächste Woche).

Astrobär
27.04.2010, 17:44
Hi Sebastian,
jetzt habe ich also deine richtige Lib V0.6:-)

Meine andere Version ist auch deine Lib, die offenbar jemand erweitert hat, eine Versionsnummer steht nicht drin. Da ich am Anfang so einiges zum Display gesammelt habe, kann ich nicht mehr sagen, woher ich das habe. Die Linienfunktion sieht ganz so aus wie die aus der Lib von Benedikt (mikrocontroller.net) line + bresenham_line sinnvoll ergänzt. Eine touchkalibrierung ist in writingdemo eingearbeitet, die Werte werden im Eeprom gespeichert, die Überprüfung, ob kalibriert ist, erfolgt recht simpel, mit der Abfrage eines Klicks in einem Buttonbereich.

Mit der Lib von Benedikt habe ich jetzt endlich eine Textdarstellung von 26 Zeichen pro Zeile hinbekommen. Allerdings ist diese Lib zunächst auf einen Zeichensatz beschränkt, wobei du das variabel gestaltet hast. Selbst bei Zeichensätzen, die nur 3 Byte pro Zeichen haben und nur 5 Bit tief sind, lassen sich die Abstände zwischen den Zeichen nicht so klein wie möglich wählen. Mit schmalen Zeichensätzen von 3 Pixeln Breite + 1 Leerpixel müsste man ja 160/4 = 40 Zeichen pro Zeile darstellen können.

Wie sieht es mit dem Textmodus aus, kannst du mit internem Zeichensatz 26/ Zeile fehlerfrei darstellen?

Grüße Tom.

.:Sebastian:.
11.05.2010, 16:50
Moin Moin ...

Ich war mal wieder für ein paar Tage abgetaucht.

Zunächst einmal die gute Nachricht.
Mein Rewrite der Fontfunktionen geht ganz gut voran.
Ich hab einen neuen Code zum anzeigen von Bitmaps, der jetzt byteweise statt bitweise durch die Bitmaps iteriert.
Der ist erstens schneller und zweiten in jeden Fall kompatibel mit dem was gängige Konverter ausspucken.
Nur leider läuft er noch nicht auf Avr, sondern nur in meiner schnell zusammengehackten Display Simulation am PC.

Die nächste schlechte Nachricht ist, dass ich im Moment einfach nicht dazu komme da mit so viel Zeitaufwand weiter zu arbeiten, wie nötig wäre.
Und weil meinen bisherige Version aus genau diesem Grund so viele kleine Bugs hat, werde ich versuchen dieses mal etwas gründlicher zu arbeiten.

Was das Problem dem Textmodus angeht, bin ich leider noch nicht wirklich weiter gekommen.
Allerdings äußert sich das Problem bei mir komplett anders.
Anstatt fehlerder Pixel bekomme ich einen dicken schwarzen Balken am rechten Bildrand.

//Edit1: Ich glaub ich habs.
Is zwar aus der Kategorie dirty hack, aber es scheint zu funktionieren.
Und zwar kommt der schwarze Balken daher das der Controller die überzählen Pixel am ende der Zeile nicht ansteuert.
Aber im Graphicmodus kann ich die ausschalten.
Also mit folgendem Code und meiner aktuellen lib geht es bei mir :


lcd_init(LCD_GRAPHIC); //erstmal alle Pixel aus.
lcd_init(LCD_TEXT); // Texmodus
lcd_write_text("12345678901234567890123456"); ///Tada !


Nur um vor zu beugen :
Mein Display wird so initialisiert :


if(mode == LCD_TEXT) {

lcd_mode = LCD_TEXT;

lcd_write_command(0x00,0x3C);
lcd_write_command(0x01,0x75);
lcd_write_command(0x02,LCD_TEXT_COLUMNS -1);
lcd_write_command(0x03,0x4F);
lcd_write_command(0x04,0x07);
lcd_write_command(0x08,0x00);
lcd_write_command(0x09,0x00);
lcd_write_command(0x0A,0x00);
lcd_write_command(0x0B,0x00);

}
else {

lcd_mode = LCD_GRAPHIC;

lcd_write_command(0x00,0x32);
lcd_write_command(0x01,0x07);
lcd_write_command(0x02,(LCD_GRAPHIC_WIDTH / 8)-1);
lcd_write_command(0x03,0x4F);
lcd_write_command(0x08,0x00);
lcd_write_command(0x09,0x00);
lcd_write_command(0x0A,0x00);
lcd_write_command(0x0B,0x00);
}

Bitte vorher wirklich checken, ob das auch wirklich so in der lib steht oder ob das wieder eine andere ist. (In meiner stand NIE etwas anderes, das kann ich garantieren.)
Wär schön wenn jemand das mal jemand testen könnte.


Und für alle die auf die neue Version meiner Lib warten :
Sie wird definitiv kommen, nur wann kann ich nicht sagen. (In 1-2 Monate vllt.)
Ich brauche meine Lib nämlich selbst für ein Projekt, aber bevor ich soweit bin, muss ich erst ein paar andere Dinge fertig bekommen.
Put first things first wie is auf Englisch so schön heißt.

Gruß
Sebastian

C_Classic
11.05.2010, 17:34
Noch ne Frage zu meiner Lib: Ich hab da immer, wenn ich nur 8-Bit Zahlen speichere, den Typ char verwendet. Jedoch gibts da Probleme. (Wegen binärer 0 am Ende?)
Deshalb: Welchen Datentyp, der nur 1 Byte Speicher belegt, kann ich als Array verwenden?

.:Sebastian:.
11.05.2010, 23:24
Moin Moin

Also ich benutze immer uint8_t.
Das ist eigentlich auch nur ein unsigned char.
Allerdings verhält es sich genauso wie ich es von einem 8bit Integer erwartet.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ganzzahlige_.28Integer.29_Datentypen

Weil der ANSI Standard legt nicht fest ob der normaler char signed oder unsigned ist, kann ja sein dass das schon dein Problem war. Oder ein Teil davon.
(siehe http://www.wachtler.de/ck/8_4_Grunddatentypen.html 4.8.1)


Was meint du eigentlich mit binärer 0 ? 0x00 oder einfach 0 wie in 101010.

Ich würde die die Typen aus der stdint.h ans Herz legen.
Weil erstens kann man mit der Bezeichnung uint8_t mehr anfangen als mit unsigned char (Buchstaben ohne Vorzeichen :D ) und zweitens tippts sich schneller.

mfg
Sebastian

C_Classic
15.05.2010, 21:16
Wahrscheinlich heißts nicht binäre Null (hatte den Namen im Kopf... kp wieso), ich meine damit das \0 am Ende von nem Char-Array. Aber danke, uint8_t hatte ich davor schon mal, hatte es aber wegen Fehler wieder geändert. Die Fehler kamen daher, dass ich die Datei nicht includet hatte.

Jetzt ist da leider wieder ein Fehler, und zwar im Text-Modus. Wenn ich Text damit ausgebe, sind beim 14. Zeichen die ersten 2 Pixel 3 (oder 4) Pixel weiter links als der Rest. (Die 2 ersten Pixel sind an der richtigen stelle) Wenn ich dann das letzte Zeichen der Zeile schreibe, erscheint in der Lücke plötzlich ein teil des letzten Zeichens, obwohl dieses richtig ebenfalls am Ende der Zeile steht. Das wiederholt sich in jeder Zeile erneut.
Irgendwelche Ideen, woran das liegt?

C_Classic
29.05.2010, 16:22
Hab jetzt mal meine Lib nochn bissl erweitert und verbessert... zwar immernoch plot_pixel, aber jetzt gibts immerhin schonmal Progressbars. ich arbeite momentan nicht mehr daran, werde mich aber irgendwann mal hinsetzen und ne TextBox machen.

.:Sebastian:.
26.06.2010, 21:27
Moin Moin

Ich wollte mich nochmal melden (nicht das jemand denkt meine Tastatur wäre kaputt).
Es gibt Fortschritte.
Leider noch nichts releasebares.
Aber ich weiß woher die komischen Striche beim Text plotten kamen und ich konnte sie beseitigen.
Ich hab dafür die ganze bitmap plotting Geschichte neu geschrieben, der code ist seeehr viel schneller und übersichtlicher.

Mal ein wenig Hintergrund :
Vllt. erinnert ihr euch ja wie komisch schief die 12x16 Zeichen waren.
Das war ein Darstellungsfehler.
Meine lib hat beim Plotten immer ein byte früh angefangen. Sprich beim B wurde ein Rest vom A mit geplottet.
Bei den 8x8 Fonts gab das immer krasse Fehler.
12x16 Fonts waren deshalb immer nur schief.

So jetzt kommt die Krux :
Bei den LSB fonts die ich habe und die 2 Bytes breit sind, ist die Reihenfolge der Bits zwar richtig herum aber die Bytes sind falschrum.
Sprich bei einem L ist das | im zweiten und das _ im ersten Byte.
Früher hat sich das durch das falsche auslesen ausgeglichen und der Buchstabe war schief.
Da das jetzt gefixt ist, tun die Fonts nicht mehr.

Also werde ich jetzt mal versuchen eigene Fonts zu packen.
(Am besten ein tool dafür schreiben.)

Ich lehne mich mal aus dem Fenster und sage, das ich alles bis nächstes WE im Griff habe.
Ich will diesen Punkt endlich von meiner Todoliste haben.

//EDIT :
Yehaaaa !
Ich habs ! \:D/ \:D/ \:D/ \:D/
Also die Fonts waren falsch zusammen gepackt.
Siehe : http://www.mikrocontroller.net/topic/54860#1288497
Einfach mal die neuste Version gezogen, reinkopiert und passt !
Jetzt kann ich noch die Doku updaten ein paar Kleinigkeiten schöner schreiben und dann gibts ein UPDATE.

@C_Classics :
Dann kannst du dein Youtube Video nochmal ohne Pixelfehler machen sieht ja dämlich aus so.

Gruß
Sebastian

.:Sebastian:.
27.06.2010, 17:49
Moin Moin

So nach kurzer Nacht und Mittagsschicht gibts nun das ultimative Update.

Gefixt wurden :

Fonts
Bitmapausagbe


Neu dazu gekommen sind :

lcd_write_byte(uint16_t pos,uint8_t byte)
lcd_read_byte(uint16_t pos)


damit es Leute die direkt mit dem LCD speicher spielen wollen einfacher haben.

Wie immer mit hg clone http://www.sebastians-site.de/hg_repos/glcd/
oder einfach manuell herunterladen.

C_Classics oder sonstwer ....
Bitte einmal updaten und testen.

Gruß
Sebastian

C_Classic
30.09.2010, 20:56
Hallo!
Sorry, dass ich mich jetzt erst melde, aber ich hab deine Antwort irgendwie "verpasst".

Danke für den Fix mit den Fonts. Funktioniert jetzt einwandfrei.
Bitmapausgabe klappt auch.

Mal sehen, ob ich mit dem Speicher noch spielen werde ;)


Jetzt hab ich aber noch eine Frage zur MPL:
Ich habe deine Lib nach C++ portiert und ein mehr doer weniger komplettes UI dazu geschrieben.
Du kannst also z.B. folgenden Code verwenden:

ui::Button Btn1(x,y,width,height,Caption);
while (1) {
if (Btn1.pressed()) foo();
}
Die Funktionen(also Klassen) momentan sind:
Buttons
PictureButtons
Progressbars
Slider (Vertikal)
CheckBox
Label
Geplant: Slider (Horizontal)
Geplant: Text-Input

Wie auch immer. Wenn ich diesen Code veröffentliche, muss dieser dann auch unter der MPL stehen, weil der Display-Treiber darunter steht? Könntest du mit bitte ganz kurz sagen, was mit der MPL erlaubt ist. Also wie stehts mit kommerziellem Einsatz? (den will ich erlauben) Muss der Source auch bei kommerziellen Projekten mitgegeben werden und was ist der Unterschied zur LGPL?

Ich werde, wenn ich diese Lizenssache fertig hab die C++ Lib und meine Funktionen + Beispiele hochladen. Wenn du sie für würdig befindest kannst sie dann gern auf deine Homepage hochladen. ;)

MfG,
C_Classic

PS: Hast du den Fehler im Text-Modus gefixt? Da wurde bei mir immer ein Teil in der Mitte abgeschnitten und rechts am Bildschirm dann angezeigt. Werde es morgen mal testen.

Ach und noch was: Ich werde wahrscheinlich ein neues Video machen, wenn ich mit dem Projekt mit dem UI fertig bin. Und dann mit gefixten Fonts :)

PPS: Beim Bitmap-Konvertieren ist die Vierte(ganz rechts) die richtige. Bei den weiteren Auswahlmöglichkeiten drunter muss man immer das erste nehmen. Dann noch "invertieren" und "C Array Writer" auswählen und fertig. (Nur ums mal wieder zu schreiben, weil ich den alten Beitrag dazu nicht mehr finden konnte) :D

.:Sebastian:.
30.09.2010, 22:21
Moin Moin ...

Also zum Thema MPL : http://de.wikipedia.org/wiki/Mozilla_Public_License


Grundsätzlich müssen geänderte oder kopierte Quelltextdateien weiterhin unter der MPL bleiben, dürfen jedoch zusammen mit proprietärem Code für ein Programm verwendet werden.

D.h. wenn du meine lib nur benutzt und deine Klassen quasi nur auf meine Funktionen zurückgreifen steht dir die Lizens frei. (auch komerziell)
Wenn du allerdings an meinen Originaldateien was änderst steht die Änderung unter MPL.

Was mir im Moment allerdings selber nicht mehr ganz klar ist, wie der Fall zu handhaben ist , wenn du Quelltextteile von mir 1:1 übernimmst.
Ich würde sagen dann zählt auch wieder das Änderungen an dem übernommen Code MPL sein sollten und der Rest auch wieder frei. (Ich prüfe das aber nochmal genau nach.)
Weil im Englischen reden die von Modulen anstatt Dateien.

Das du den Source bei kommerziellen Projekten mit zu geben ist, nach meiner Auffassung nicht zwingend notwendig.
Allerdings bin ich kein Rechtsverdreh.....Rechtsversteher.

Ließ die Lizenz und mach dir selber ein Bild.

Zum Thema Textmodus :
Ich hab da glaube ich irgendetwas gedreht, müsste ich mal nachsehen.
Allerdings komme ich mal wieder erst nächste Woche dazu da aktiv zu werden.

Gruß
Sebastian

C_Classic
01.10.2010, 16:21
Hallo,
hab jetzt die Grundstruktur fertig und veröffentliche es nun unter der MPL. Die grundliegenden Grafik-Funktionen (DrawSquare, Line, ...) müssen noch überarbeitet werden, da diese noch mit PlotPixel arbieten und somit seeeeehhhhhr langsam sind.

Ich habe diese Bibliothek auf meinen Entwicklungsboard (:arrow: Youtube (http://www.youtube.com/watch?v=HRuNeVdNExo)) mit einem Mega32 und Mega644 getestet. Mit allem drum und dran ist die Lib + n bissl Beispielcode schon größer als die 32 KB des Mega32. O:)

Wenn jemand mein Board nachbauen möchte, kann ich dem den Schaltplan gerne noch hier posten. (Muss ihn aber erst noch zeichnen). Einfach ne Antwort in den Thread hier.

:arrow: Hinweis an alle Tester: Meine Pin-Konfiguration ist anders als die von Sebastian! Also erst anpassen. :arrowl:

Wenn ihr wollt, kann ich ne Dokumentation schreiben. Oder kommt ihr mit den Header-Files klar?

Der Anhang "ui_lcd05.zip" ist die Bibliothek und der LCD-Treiber in C++.
In der Datei "CAVDA-OS.zip" (CAVDA-OS ist mein Projektname, könnt ja mal raten wofür es steht. Ich weiß es grad gar nimmer :D) findet ihr mein komplettes Beispiel-Projekt mit Makefile (für Mega644). Jedoch sind in diesem Projekt noch weit mehr Funktionen implementiert und es wird mehr Hardware erfordert. (Das Dev-Board halt).

Wenn jemand Zeit findet, würde ich mich über ein paar Rückmeldungen freuen. Und wenn jemand ganz viel Zeit hat, könnte er die Grafikfunktionen in graphic.cpp überarbeiten.

Somit viel Spaß!

MfG,
C_Classic

PS: Wie müssen die Fonts aufgebaut sein? Ich würde gerne eine noch kleinere Font schreiben. Oder gibt es sogar einen Konverter?

PPS: Und schon sind mir ein paar Fehler aufgefallen. Werde die korrigierte Version demnächst hochladen.

Und noch was: Der Fehler im Text-Mode existiert immer noch.

.:Sebastian:.
05.10.2010, 14:55
Moin

Also alles was ich am Textmodus gefixt hab steht da https://www.roboternetz.de/phpBB2/viewtopic.php?p=501409#501409

Aber das Problem das ein Teil abgeschnitten wird kann ich hier nicht reproduzieren.
Gibt's eigentlich verschiedene Versionen vom Display, z.B. mit verschiedenem Speicher ?
Weil hier scheint alles zu passen. Ein Testcode wäre ganz nett.

Allerdings komm ich jetzt zu nix, weil den ganzen Tag 30km von Zuhause weg an der Uni sitze.
Also die nächsten zwei Woche, is Sense. Danach ... hmmm keine Ahnung.
Allerdings nehme ich patches gerne an.
Die würd ich ungetestet einpflegen.

Gruß
Sebastian

C_Classic
22.10.2010, 20:11
Hi,

mal wieder ne Frage:
Wie schwer ist es deine Lib auf den Hochkantmodus umzustellen bzw. ist es überhaupt möglich? Oder geht das vom Speicher her überhaupt nicht?

MfG
C_Classic

.:Sebastian:.
23.10.2010, 16:25
Moin

Nun ... ja ...
Es sollte an sich kein großer Aufwand sein.
Zumal man fast nichts umstellen müsste, wenn man ein paar Abstriche macht.

Du kannst ja einfach hochkant zeichnen.
Ob du jetzt eine X-Achse von links nach rechts oder von oben nach unten hast ist reine Definitionssache. (Name sind Schall und Rauch.)
D.h. man müsste für eine vertikale Linie anstatt von 10,5 nach 50,5 einfach von 5,10 nach 5,50 malen.
Dafür muss man am Grafikcode ja nichts ändern.


Einzigster Knackpunkt sind die Fonts und die Bitmaps.

Bitmaps :
Die kann man auch einfach gedreht abspeichern.
Sprich vorm konvertieren im Grafikprogramm entsprechend drehen.

Oder du schreibt meine Bitmaproutine um (dafür musst du dich halt entsprechend ins den Controller vom Display einlesen um zu wissen welches Bit wo hin muss).
Dann kannst du die selben Bitmaps in beiden Modi anzeigen.
Dafür fällt mir ad hoc kein performanter weg ein, die dann beim Ausgeben in den Displayspeicher zu drehen.
Was gehen könnte wäre Pixelweise zu Plotten (nicht wie im Moment Byteweise). Das wäre grob geschätzt um Faktor 8-10 langsamer.
Immer 8 Pixel in einer Zeile sind 1Byte im Displayspeicher.
Das kann man leider nicht Umstellen.

Allergrößtes Problem sind die Fonts.
Allerdings wenn du gedrehte Bitmaps hast (entweder Routine umgeschrieben oder gedreht im Grafikprogramm) musst du nur umstellen, dass die einzelnen Buchstaben in Y Richtung anstatt in X Richtung versetzt werden.
Siehe lcd_plot_text().

Also in Kurz :
Möglichkeit 1 :
Einfach gedrehte Bitmaps benutzen, beim Zeichnen X und Y tauschen.
Perfomant, schnell umgestellt.
Während dem Betrieb das Bild drehen nur möglich, wenn man alle Bitmaps 2 mal hat.

Möglichkeit 2 :
Bitmaps selber drehen.
Beim Zeichnen auch nur X und Y tauschen.
Langsam, eventuell der Overkill für den Controller, vermutlich ziemlich komplexer Code.
Großer Implementierungsaufwand (zumal ich dir nicht aktiv helfen werden kann).
Aber drehen im Laufenden Betrieb mit nur einem Satz Bitmaps möglich.

Ich wäre für Möglichkeit 1.

Aber wie gesagt ich würde mich an deiner Stelle mal in die Lowlevel-Funktionen des LC7981 einlesen, dann sollte sich dir die Problematik von alleine erschließen.

Gruß
Sebastian

C_Classic
23.10.2010, 18:02
Danke.

Das mit den Bitmaps ist kein Problem, die kann ich drehen. Und ich brauch auch keinen wechsel von Hochkant nach Landscape.

Doch wie genau sind denn die Fonts aufgebaut und wie kann ich die drehen? Oder gibts da nur die Möglichkeit den Code anzupassen?

MfG
C_Classic

.:Sebastian:.
23.10.2010, 18:12
Moin

Also ... die Fonts wirst du dir selber neu erzeugen müssen.

Für einen 16*12 Font wäre der Aufbau wie folgt :
In einem Buchstaben sind die ersten 2 Bytes im Font (die ersten 16bit halt) sind die erste Zeile.
Die nächsten 2Byte sind die nächste Zeile usw.
D.h. ein Buchstabe besteht aus 24 Byte.
Genau wie bei einem Bitmap auch.

Jetzt brauch man für ASCII 256 Buchstaben.
Die werden einfach hintereinander geschrieben.
Also die ersten 24 Bytes sind für den ASCII-Wert 0 die nächsten für den ASCII-Wert 2 und so weiter bis 255.

Eigentlich hast du 256 Bitmaps hintereinander geklatscht.
Da musst du dann aber auch leere Bitmaps einfügen für nicht druckbare ASCII-Zeichen.

D.h. Im einfachsten Fall machst du dir für alle Zeichen die du brauchst gedrehte Buchstabengrafiken.
Dann konvertierst du die alle und schreibst sie hintereinander mit ein paar leeren Bitmaps zwischen drin (so dass sie an der richtigen Stelle liegen.)

Du kannst aber auch versuchen ein Tool zu schreiben was dir die schon vorhandenen Fonts dreht.
Ist nicht ganz einfach sollte aber machbar sein.

Gruß
Sebastian

C_Classic
15.11.2010, 18:14
Hallo,

gibt mal wieder neues von meiner Lib. Es gibt nun 2 neue Controls: Ein Text-Eingabefeld und eine Quertz-Tastatur(50px hoch, 160px breit; y-offset einstellbar).
Desweiteren gibt es ein paar Buxfixes - wobei bestimmt noch ein paar Neue dazugekommen sind. Die Geschwindigkeitsoptimierung habe ich noch nicht gemacht - habe ich jedoch demnächst vor, was dank den write/read_byte Befehlen einfacher geworden ist.

Ich kopiere auch gleich mal das Makefile und einen Beispielsource für Tastatur und Textbox mit rein. Die Bibliothek muss in ./include/

Das Hochkant-Projekt habe ich erstmal zurückgestellt.

Somit viel Spaß beim Testen. (Denkt dran evtl. die Ports in der lcd.h zu ändern)

Im Anhang auch noch 2 Bilder des Beispiels.
MfG
C_Classic

PS: Da is noch ein Fehler im Beispielskript: Zeile 67 muss von char text[2]; auf char text[2]="-"; geändert werden

C_Classic
21.11.2010, 15:51
Hi,

habe jetzt auch H-Slider implementiert!

Hier mal eine Übersicht der Features:
Zeichenfunktionen (DrawFunctions)
Gefülltes Rechteck
Rechteck
Horiz. Linie
Vertik. Linie
freie Linie (langsamer)
Kreis
User-Interface(ui)
Buttons
Bild-Buttons
Check-Boxen
Labels
Horiz. Slider
Vertik. Slider
Fortschrittsanzeige (Balken)
Textbox
Tastatur (QWERTZ)

TODO-LIST:
Verbesserung von DrawHorizontalLine (Ist zur Zeit seeeehhhhhr langsam)
Nummern-Tastatur

Was würdet ihr davon halten, wenn ich einen RN-WIKI-Eintrag zum LCD bzw. der Lib erstelle? Und soll ich die Lib dann in die WIKI oder bei SourceForge hochladen?

MfG
C_Classic

Flash2over
13.12.2010, 19:08
Hui,
Lange hab ich keine Zeit gehabt mich mit meinem Hobby zu beschäftigen. Interessant was aus diesem Projekt hier geworden ist.


Ich werde gleich mal alles testen!

Ich fände es super wenn du nen Wiki Eintrag machst. Dafür ist er ja da. Am bessten mit Schaltplan und funktionen der Lib.

Gruß
Thomas

C_Classic
15.12.2010, 17:30
OK - werd ich machen! Wo soll ich den Code hosten. Gibt es da eine Möglichkeit, das in der Wiki zu machen oder soll ich SourceForge nehmen?

Flash2over
15.12.2010, 18:10
Hmm gute frage. Wenns nicht im wiki geht nimm halt sourceforge!

C_Classic
18.12.2010, 16:13
So,
hab jetzt mal den Wiki-Eintrag gemacht. Ist zwar wahrscheinlich noch net ganz fertig.
Würde mich aber trotzdem mal freuen, wenn ihr mal drüberschauen könntet und am besten auch gleich die Lib probiert.
Hier ist der Link: http://www.rn-wissen.de/index.php/DG16080_GLCD

Auf der Projektseite (SourceForge - Link im Wiki) findet ihr jetzt auch Beispielcode für alle Elemente.

MfG
C_Classic