Hallo Freunde der Elektronik, derzeit spiele ich gerade frisch mit dem FT800 Grafikcontroller herum. Das Testen von Display-Lists mit Primitives funktioniert inzwischen schon. Mit dem EVE Screen Designer habe ich einige Versuche gemacht, was Wigets angeht. Der Editor liefert beim Export entsprechende Binärfiles, die man irgendwohin kopieren muss. Und genau da liegt das Problem. Ich habe den Output mal in den Commandbuffer ab 0x108000 kopiert (meine ich), dabei entstehen aber nur Streifen. Ich wäre dankbar für einige Tipps, die ich aus den Programming Guides von FTDI so noch nicht herauslesen konnte. Ich progge in ASM auf einem Xmega32E5. Schöne Grüße, Knut
FT_RAM_CMD, also 0x108000 ist zunächst mal der Anfang des FIFO Puffers für den Kommando Co-Prozessor. Den kann man benutzen, um die Display-Liste erstellen zu lassen. Da einmal was reinzuwerfen wird bestenfalls für eine statische Anzeige taugen. So wie auch die meisten der Arduino Beispiele funktionieren, einmal rein schreiben und dann nichts mehr machen. Nach dem rein kopieren muss man dem Co-Prozessor aber auch noch mitteilen, dass er was zu tun hat. Mit dem Screen Editor habe ich aber bisher nur rumgespielt um mal was auszuprobieren, gib doch mal eine Config als Beispiel und schreib mal bitte, für welches Target Du überhaupt exportierst. Und welches TFT benutzt Du?
Ich nutze ein fertiges Board von Riverdi mit 320 x 240 Pixel. Config schicke ich gleich nach. Ich möchte eigenlich nur ein Widget, sagen wir eine Uhr oder ein Messinstrument anzeigen (interne Konfig), bekomme als DL aber nur die Primitives und den Hintergrund, im Command Buffer halt Streifen... Oder muss ich die Commands zusätzlich zu einer schon bestehenden Displaylist senden? Ich habe gelesen, die Displaylist lässt sich in die Commands einbetten.
Da die Widgets auf dem Co-Prozessor basieren müsste man die wohl über cmd_append() mit in die Liste einbauen. Da fand ich es von vornherein einfacher, dem Co-Prozessor das Erzeugen der kompletten Liste zu überlassen. Man muss dann sowieso die Liste ständig neu erstellen. Buttons werden ja nicht automatisch als gedrückt angezeigt, die Uhr verstellt sich nicht, der Progress-Bar ändert sich nicht und die Gauge bleibt auch so wie einmal konfiguriert... Alternativ gibt es auch noch die Macros, die habe ich bisher aber auch noch nicht benutzt. Ich habe ein VM800B35A und benutze das zur Zeit mit einem 90CAN128. Allerdings programmiere ich den in C und mit meiner eigenen Library.
Das ist der ScreenEditor Output in Pseudocode: cmd_dlstart(); CLEAR_COLOR_RGB(170,0,0); CLEAR(1,1,1); SAVE_CONTEXT(); COLOR_RGB(0,56,112); cmd_bgcolor(0x002040); cmd_gauge(149,110,50,0, 5,5,500,1000); RESTORE_CONTEXT(); DISPLAY(); cmd_swap(); Und das ist das Binärfile als HEX-Format (C-kompatibel)
1 | unsigned char rawData[60] = { |
2 | 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xAA, 0x02, 0x07, 0x00, 0x00, 0x26, |
3 | 0x00, 0x00, 0x00, 0x22, 0x70, 0x38, 0x00, 0x04, 0x09, 0xFF, 0xFF, 0xFF, |
4 | 0x40, 0x20, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0x95, 0x00, 0x6E, 0x00, |
5 | 0x32, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xF4, 0x01, 0xE8, 0x03, |
6 | 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF |
7 | }; |
Rudolph R. schrieb: > Da fand ich es von vornherein einfacher, dem Co-Prozessor das Erzeugen > der kompletten Liste zu überlassen. Ich habe mich da überhaupt noch nicht festgelegt, ich bräuchte nur den Ansatz, wie ich Primitives und Widgets (Co-Prozessor-Anweisungen) miteinander verheiraten kann, denn Rest bekomme ich dann schon hin ;-).
Rudolph R. schrieb: > Ich habe ein VM800B35A und benutze das zur Zeit mit einem 90CAN128. > Allerdings programmiere ich den in C und mit meiner eigenen Library. Ich kann C lesen, wenn das drinsteht, was ich wissen muss, übersetze ich mir das passend. Wenn Du die Library nicht posten möchtest, könnten wir über PN weiterkommunizieren.
Knut B. schrieb: > cmd_dlstart(); > CLEAR_COLOR_RGB(170,0,0); > CLEAR(1,1,1); > SAVE_CONTEXT(); > COLOR_RGB(0,56,112); > cmd_bgcolor(0x002040); > cmd_gauge(149,110,50,0, 5,5,500,1000); > RESTORE_CONTEXT(); > DISPLAY(); > cmd_swap(); Das ist ja für sich eine komplette Display-Liste wie sie über den Co-Prozessor benutzt wird, bzw. der Co-Prozessor schreibt damit die Display-Liste neu. Das SAVE_CONTEXT() und RESTORE_CONTEXT() macht da irgendwie keinen Sinn drin, es ist ja nichts anderes in der Liste. So als Hex-Blob ist das vielleicht etwas unhandlich. Da muss man dann ja drin abzählen und für die Anzeige dann rawData[42] manipulieren. Schreibst Du das an die aktuelle Command-FIFO End-Adresse? Oder nur an den Anfang? Einmal oder zyklisch? Hast Du davor schon was mit dem Co-Prozessor geschrieben? Und lässt Du das dann auch ausführen? >Wenn Du die Library nicht posten möchtest Das fühlt sich alles noch so unfertig an und es ist auch nur eine Teil-Menge implementiert, was ich eben so bisher haben wollte.
:
Bearbeitet durch User
Rudolph R. schrieb: > Das ist ja für sich eine komplette Display-Liste wie sie über den > Co-Prozessor benutzt wird, bzw. der Co-Prozessor schreibt damit die > Display-Liste neu. Ja, wenn ich das an die normale Display List Adresse 0x100000 und folgende schreibe, fehlt das Widget. Wenn ich ab 0x108000 schreibe, kommt nur Müll. Rudolph R. schrieb: > Schreibst Du das an die aktuelle Command-FIFO End-Adresse? > Oder nur an den Anfang? Einmal oder zyklisch? > Hast Du davor schon was mit dem Co-Prozessor geschrieben? Erstmal nur einmal nach der Init, sollte also leer sein und die Pointer sollten auf Anfang stehen... Rudolph R. schrieb: > Und lässt Du das dann auch ausführen? Ähhh...?! Rudolph R. schrieb: > Das fühlt sich alles noch so unfertig an und es ist auch nur eine > Teil-Menge implementiert, was ich eben so bisher haben wollte. Ich bin ja auch erst am Anfang ;-)
Knut B. schrieb: > Ja, wenn ich das an die normale Display List Adresse 0x100000 und > folgende schreibe, fehlt das Widget. Das ist ja auch noch keine Display-Liste so für sich. Das ist die Anweisungs-Liste aus welcher der Co-Prozessor die Display-Liste zusammen baut. Der wird das Widget dann passend aus Primitives zusammen bauen. > Wenn ich ab 0x108000 schreibe, kommt nur Müll. Hast Du vorher schon einen Zugriff auf den Co-Prozessor? Also lädst Du zum Beispiel ein Bild? Dann steht der FIFO ja nicht mehr auf der Anfangs-Adresse. cmdOffset = ft800_memRead16(REG_CMD_WRITE); Das ist die aktuelle Position wenn der Co-Prozessor nichts mehr zu tun hat. Und nichts zu hat er wenn das mit ft800_memRead16(REG_CMD_READ); identisch ist. > Erstmal nur einmal nach der Init, sollte also leer sein und die Pointer > sollten auf Anfang stehen... Hast Du die "leere" Display-Liste mit in der Init? Das hier habe ich so aus den Beispielen mit übernommen:
1 | ft800_memWrite32(FT_RAM_DL, DL_CLEAR_RGB); // Clear Color RGB 00000010 RRRRRRRR GGGGGGGG BBBBBBBB (R/G/B = Colour values) default zero / black |
2 | ft800_memWrite32(FT_RAM_DL + 4, (DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG)); // Clear 00100110 -------- -------- -----CST (C/S/T define which parameters to clear) |
3 | ft800_memWrite32(FT_RAM_DL + 8, DL_DISPLAY); // DISPLAY command 00000000 00000000 00000000 00000000 (end of display list) |
4 | ft800_memWrite32(REG_DLSWAP, DLSWAP_FRAME); // 00000000 00000000 00000000 000000SS (SS bits define when render occurs) |
>> Und lässt Du das dann auch ausführen? > > Ähhh...?! Na, wenn Du was in den Co-Prozessor FIFO geschrieben hast, dann musst Du ihm auch mitteilen, dass er das jetzt abarbeiten darf. Das macht man, in dem man in REG_CMD_WRITE die neue End-Adresse rein schreibt. > Rudolph R. schrieb: >> Das fühlt sich alles noch so unfertig an und es ist auch nur eine >> Teil-Menge implementiert, was ich eben so bisher haben wollte. > > Ich bin ja auch erst am Anfang ;-) Der FT800 kann so extrem viel, das ist noch ein weiter Weg. :-) Ich hatte bis eben auch kein cmd_bgcolor(). Übersetzt auf meine Library sieht das bei mir so aus:
1 | ft800_cmd_dl(CMD_DLSTART); // Start the display list |
2 | ft800_cmd_dl(CLEAR_COLOR_RGB(170,0,0)); // Set the default clear color |
3 | ft800_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG); // Clear the screen - this and the previous prevent artifacts between lists, Attributes are the color, stencil and tag buffers |
4 | ft800_cmd_dl(COLOR_RGB(0,56,112)); |
5 | ft800_cmd_bgcolor(0x00, 0x20, 0x40); |
6 | ft800_cmd_gauge(149,110,50,0, 5,5,500,1000); |
7 | ft800_cmd_dl(DL_DISPLAY); // Instruct the graphics processor to show the list |
8 | ft800_cmd_dl(CMD_SWAP); // Make this list active |
9 | ft800_cmd_execute(); |
Das werfe ich dem Co-Prozessor hier gerade etwa 40 Mal pro Sekunde vor. Und bis auf den Hintergrund vom Instrument sieht das aus wie im Screen-Editor.
Aaaaaaahhhh.... okay, ich glaube das hilft erst einmal weiter. Vielen Dank, ich melde mich... :-)
Okay, hast mich auf die Schiene gesetzt - es funktioniert! Vielen Dank für die schnelle Hilfe!!!
Kann nicht schaden, wenn noch mehr Spass mit den FT8xx haben. :-) So schwer wie die zu bekommen sind muss man die auch nach über zwei Jahren noch als exotisch ansehen. Ich habe gerade auch noch ein 5" mit einem FT8100 bei hotmcu.com bestellt.
Knut B. schrieb: > Ich progge in ASM auf einem Xmega32E5. > > Schöne Grüße, > Knut Ist dir bekannt das Bascom FT800 und FT801 und Xmega support hat? Type mal "FT800" hier: http://avrhelp.mcselec.com/
:
Bearbeitet durch User
Es gibt auch LunaAVR, die Gameduino2 lib und die FTDI Arduino Library. Zum Anfang hatte ich auch einen Uno im Aufbau, das hatte den Vorteil aus der IDE einfach Demos laden und benutzen zu können. Nur ist die Lib von FTDI in Teilen seltsam.
Bei TME gibt es diverse Boards mit dem FT800, dies hier zum Beispiel: http://www.tme.eu/de/details/rvt3.5bcnwr00/tft-displays/riverdi/rvt35b320240cnwr00/ Falls noch jemand Lust auf das Teil hat...
Mal davon ab, dass ich von TME an sich gerade nicht so begeistert bin, es gibt nicht viel, aber noch ein paar mehr. http://www.watterott.com/de/Gameduino-2 http://www.hotmcu.com/43-graphical-lcd-touchscreen-480x272-spi-ft800-p-111.html?cPath=6_16 http://www.hotmcu.com/5-graphical-lcd-touchscreen-480x272-spi-ft800-p-124.html?cPath=6_16 http://www.hotmcu.com/5-graphical-lcd-touchscreen-800x480-spi-ft810-p-286.html?cPath=6_16 Dazu diverse direkt von FTDI, auch über EBay oder Amazon, die Teile sind allerdings recht kostspielig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.