Hallo
Habe ein Display von EA vom Typ eDIP TFT 32 bekommen. Es kann mit SIP
oder I2C angesteuert werden. Leider sind Beispiele bzw. Anwendungen
wenig im Netz zu finden. Im Datenblatt des Herstellers sind einige
Beispiel drin. Die Farbe kannn ich schon einstellen. Leider geht die
Graphikfunktion nicht bzw. zeigt nichts an.
Einen Code kann ich leider erst heute abend reinstellen.
Könnte mir jemand helfen?
Kl
Ich würde mich an EA direkt wenden. Die kennen sich gut aus. Haben mir
schon ein paar Male geholfen. Wie steuerst du dein Display an (I2C, SPI,
Uart)?
Am besten du startest über die UART mit 115200 Baud. Dann schau, ob der
MC auf SBUF reagiert. Dann kann's weiter gehen....
Bei EA auf der Webseite sind Datenblätter und ein Editorprogramm zu
finden mit dem das Teil recht leicht zu programmieren ist.
Gibt es zum Teil auch auf deutsch.
Es gibt ein Demoboard dafür mit dem der Editor gut zusammenarbeitet,
braucht man aber nicht unbedingt, über UART mit zusätzlichen USB Wandler
geht auch. Der Schaltplan fürs Demoboard gibt es auch, der gibt
nützliche Hinweise für die Beschaltung.
Hallo
mit EA habe ich auch schon mails gewechselt.
Hatte vergessen zu sagen, das ich in C arbeite.
Habe EA auch den Code geschickt mit konkreter Frage. Sollte alles gehen.
Leider machte es das nicht.
Habe es mit dem I2C Bus angesteuert. Kann alle möglichen Farben
einstellen, Infos aufrufen usw. Leider bekomme ich das im Datenblatt
genannte Stück Code mit löschen und zeichnen einer Gerade nicht zum
laufen. Die Rückgabe des ACK ist 6 und damit korrekt. Leider klappt es
nicht wie angegeben.
Hatte ja gehofft, das jemand schon was damit gemacht hat.
Kl
Hi,
ich habe dieses Display, steuere es mit einem Mega128 über SPI. Klappt
eigentlich problemlos. Mit dem in Datenblatt auf Seite 10 angegebenen
Flussdiagramm und dem C Beispiel hat es bei mir auf Anhieb funktioniert.
Wenngleich das Display nicht das erste war was ich über SPI gesteuert
habe, somit hatte ich Routinen die 1000%ig funktionieren.
Das ACK = 0x06 darf man auch nicht überbewerten, denn es heisst ja nur
dass das Paket korrekt empfangen wurde. Korrekt empmfangen wird ein
Paket aber auch mit einer falschen Syntax, nur passiert dann halt
nichts.
Was heisst du kannst die Farben einstellen? Wenn du den Strich nicht
gezeichnet bekommst, woher weist du dass die Farbe umgestellt wurde?
Je nachdem was du mit dem LCD vor hast würde ich dir noch das Eval-Board
empfehlen, oder zumindest einen PC Anschluss über USB/Uart, denn dann
kann man mit der (kostenlosen) Software von EA den 4MB Speicher des LCDs
mit Macros, Bildern, eigenen Touchtasten, fertigen Menüs etc. füllen,
das erspart dem µC viel Arbeit.
Wichtig wäre jetz erstmal dein Code.
Farbe einstellen - Farbe wird auf dem Display angezeigt. Text wird nicht
dargestellt. Habe noch ein Display vom Typ eDIP 128 mit dem klappt es
ohne Probleme. Habe es auch wie auf der Seite gemacht, in etwa der
gleich Ablauf, keinerlei Probleme. Gehe voll nach dem Datenblatt, mache
die Einstellungen genau so, auch mit den 8 oder 16 Bit. Mache alles über
I2C.
Kl - ziemlich Ratlos
Warten wir mal auf deinen Code, denn das Farbe ändern geht und Text
nicht ist schon etwas seltsam. Denn wenn ein Befehl geht dann sollten es
alle anderen auch sofern die Syntax stimmt. Aufpassen muss man natürlich
was man dem LCD für Parameter gibt. Weißen Text auf weißem Hintergrund
wird man niemals sehen.Grundsätzlich sollte ein Text nach einem Reset
weiß sein, sofern kein Power On Macro etwas daran ändert.
"DATENÜBERTRAGUNGSPROTOKOLL (SMALL PROTOKOLL)
Das Protokoll ist für alle 3 Schnittstellenarten RS-232, SPI und I²C
identisch aufgebaut. Die Datenübertragung
ist jeweils eingebettet in einen festen Rahmen mit Prüfsumme „bcc“. Das
EA eDIPTFT43-A quittiert dieses
Paket mit dem Zeichen <ACK> (=$06) bei erfolgreichem Empfang oder <NAK>
(=$15) bei fehlerhafter
Prüfsumme oder Empfangspufferüberlauf. In jedem Fall wird bei <NAK> das
komplette Paket verworfen und
muss nochmal gesendet werden.
Ein <ACK> bestätigt lediglich die korrekte Übertragung. Ein Syntax-Check
erfolgt nicht.
Hinweis: <ACK> muß eingelesen werden"
Passt die Prüfsumme?
Geradenfarbe einstellen:
ESC F G vf hf
Gerade zeichnen:
ESC D xx1 yy1 xx2 yy2 Eine Gerade von xx1,yy1 bis xx2,yy2 zeichnen
Jetzt wäre wirklich dein Code interessant statt Glaskugel schauen...
Die Koordinaten sind 16 bit Werte! Damit stimmt die Datenpaketlänge
nicht. Die ist nämlich 11 wenn man eine Gerade zeichnet. Denn die
Koordinaten müssen immer als 2 Datenpakete übertragen werden.
Sorry für den Dreifachpost.
Das erklärt auch warum du keinen Text siehst, weil du wahrscheinlich
auch da die Koordinaten und somit die Paketlänge falsch hast.
Nach Datenblatt erfolgt das zeichnen einer Gerade mit
G D xx1 yy1 xx2 yy2 (xx und yy sind 16 Bit)
Im Beispiel des Herstellers steht: (Seite 10)
ESC G D 0 0 319 239
1B 47 44 00 00 00 00 3F 01 EF 00
Wie erfolgt dabei die übertragung?
Die Zahl 319 entspricht 013F. Damit sind bei der Angabe beide Werte
vertauscht. Muss ich jetzt 8 Werte übertragen und dabei alles
vertauschen?
Ki
So wie es im Datenblatt steht. Bei den 16Bit Werten immer zuerst die
Bits 0 bis 7 und im nächsten Paket die Bits 8 bis 15.
Also einfach so:
x11 = x1
x12 = x1 >> 8
y11 = y1
y12 = y1 >> 8
x21 = x2
x22 = x2 >> 8
y21 = y2
y22 = y2 >> 8
Also für jede Koordinate die angegeben wird braucht man 4 Datenpakete.
Bei der Geraden sind es dann 8 da man 2 Koordinaten angibt, Start und
Ziel.
Etwas geht, bin aber noch unsicher. Max. Roter Rahmen mit Pixel 1. Die
Bereiche der Zahlen sind komisch geordnet bzw. muss mich erst an die
verdrehte Eingabe gewöhnen. das andere ist, die Angabe der Zahlen,
scheinbar in 0x3f, dann stimmen die Bereiche aber nicht. Gibt genug zum
testen, Wichtig dabei ist, die Anzeige kommt
Danke für deine Hilfe, werde berichten was alles geht
Ki
Hallo Flo
Flo85 schrieb:> void zeichne_rechteck(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t> y2)> {> .> .> .> i2c_write(x1);> i2c_write(x1 >> 8);> i2c_write(y1);> i2c_write(y1 >> 8);>> i2c_write(x2);> i2c_write(x2 >> 8);> i2c_write(y2);> i2c_write(y2 >> 8);> .> .> .> }
Es klappt soweit alles. Die Einstellung bzw. Angabe der Grösse ist
wirklich gewöhnungsbedürftig.
Klaus schrieb:> ESC G D 0 0 319 239> 1B 47 44 00 00 00 00 3F 01 EF 00
Wenn ich die Angaben des Herstellers nehme, dann ist bei dem Wert von
319 die volle Breite des Displays gemeint. 319 ist unterteilt in 3F und
01. Dabei ist
3F - die zweite Zahl - mögliche Angabe von 0 bis 255
01 - die erste Zahl - Angabe 01 - max 01 sonst ausserhalb des Displays
Kann die Zahlen in Hex oder Dez eingeben. Klappt das dann auch mit
deiner Berechnung? oder lieber eine Begrenzung einbauen?
Bei der Eingabe von 8 Werten und verdreht kommt man relativ schnell.
Ki durcheinander
Ob du die Zahlen in hex oder Dezimal ein gibst sollte egal sein.
Ja 319 ist das letzte Pixel da das LCD 320x240 Pixel hat und bei 0 zu
zählen begonnen wird. Also 0,0 (links oben) bis 319,239 (rechts unten).
Eine Begrenzung ist nicht zwingend notwendig, denn Werte die über den
Displayrand gehen werden sowiso nicht verarbeitet.
Habe den Funktionsaufruf so eingegeben:
Flo85 schrieb:> void zeichne_rechteck(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t> y2)> {> .> .> .> i2c_write(x1);> i2c_write(x1 >> 8);> i2c_write(y1);> i2c_write(y1 >> 8);>> i2c_write(x2);> i2c_write(x2 >> 8);> i2c_write(y2);> i2c_write(y2 >> 8);> .> .> .> }
Bei der Berechnung stimmt was nicht. Gebe ich für x1 Werte von 0 - 255
ein, wird das Rechteck (Gerade) korrekt gezeichnet. Wird ein Wert über
256 eingestellt, erfolgt keine Darstellung.
Ist das von Choose in C? Komme leider nicht klar mit deiner Rechnung.
Ki
Wenn dein X2 oder Y2 Wert keinen Sinn ergibt, dann kann das passieren.
Deswegen habe ich ein Macro, welches den Startpunkt des Rechteckes
und als X2, Y2 nur die Länge und Breite des Rechteckes angibt:
LINE_RECT(x,y,Br,Ho) Bef2_4Pos_TFT ('G','R',x,y,x+Br,y+Ho);
//Linienrechteck
habs grad getestet, und funzt.
Klaus schrieb:> Bei der Berechnung stimmt was nicht. Gebe ich für x1 Werte von 0 - 255> ein, wird das Rechteck (Gerade) korrekt gezeichnet. Wird ein Wert über> 256 eingestellt, erfolgt keine Darstellung.
Sind deine Übergabevariablen an die Funktion "unsigned"?
Hallo Flo
Hatte es so geschrieben:
Klaus schrieb:> ESC G D 0 0 319 239> 1B 47 44 00 00 00 00 3F 01 EF 00
Display Breite max von 0-319 sind 320. Die Zahl 319 setzt sich aus 3F
und 01 zusammen. Die Zahl 3F sieht eigentlich so aus 0x3F und geht von
0x00 bis 0xFF, in dez. 0-255. Setze ich die Zahl 01 so wird sofort 255
dazu addiert.
Ist der Wert unter 256 kann die x direkt ausgegeben werden.
Ist die Zahl grösser 255 muss ich doch die Zahl erst berechnen. z.B so:
Eingabe: 270
Rechnung: 270-255
Ausgabe: 15 (dez) und 01
Habe ich da einen Denkfehler?
Ki
So weit funktioniert es. Kann durch die Eingabe der 4 Werte einen Strich
darstellen. Es bleibt aber noch eine Sache die nicht funktioniert. Das
sind Werte über 255. Das ergibt eine Fehlermeldung bzw. es kommt kein
strich.