Forum: Mikrocontroller und Digitale Elektronik FT800 display list handling


von Ray M. (ray_m)


Lesenswert?

ich versuch mich gerade an einem ft800 ...

ich hab versucht mich durch die docu zu arbeiten und mir
die wirklich umfangreichen beispiele angesehen, aber sorry, der scheiß
ist so komplex und die examples so schlecht, dass ist echt unfassbar
oder ich hab zu wenig masse zwischen dne ohren

ich hab soweit verstanden das die ft80x irgendwie anders funktionieren
und mit 2 display listen arbeiten die dann immer umgeschaltet werden,
nur ein beispiel gibt es dafr nicht oder ich find es ienfach nicht

eventuell liest hier jemand mit der mir auf die sprünge helfen kann
oder einen link zu einer brauchbaren docu bei der hand hat ...

folgendes schreibt halt mal was auf's display,
wenn mir jemand eventuell erklären könnte wie man z.b.
in jedem loop die farbe des textes umschaltet würde sich mein
verständnis sicher deutluch erweitern ...
1
#include "SPI.h"
2
#include "Wire.h"
3
#include "FT_VM800P43_50.h"
4
5
FT800IMPL_SPI FTImpl(6, 5, 2);
6
7
int16_t BootupConfigure() {
8
  uint32_t chipid = 0;
9
  FTImpl.Init(FT_DISPLAY_RESOLUTION);
10
  delay(20);
11
  chipid = FTImpl.Read32(FT_ROM_CHIPID);
12
13
  if (FT800_CHIPID != chipid) {
14
    Serial.print("Error in chip id read ");
15
    Serial.println(chipid, HEX);
16
    return 1;
17
  } else {
18
    Serial.print("Chip id read: ");
19
    Serial.println(chipid, HEX);
20
  }
21
22
  FTImpl.SetDisplayEnablePin(FT_DISPENABLE_PIN);
23
  FTImpl.SetAudioEnablePin(FT_AUDIOENABLE_PIN);
24
  FTImpl.DisplayOn();
25
  FTImpl.AudioOff();
26
  return 0;
27
}
28
29
void HelloWorld() {
30
  const char Display_string[18] = "was du wollen ...";
31
  FTImpl.DLStart(); // start display list
32
    FTImpl.ColorRGB(0xFF, 0xFF, 0xFF); // set color of string
33
    FTImpl.Cmd_Text(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2, 31, FT_OPT_CENTER, Display_string);
34
  FTImpl.DLEnd();   // end the display list
35
  FTImpl.Finish();  // render the display list and wait for the completion of the DL
36
}
37
38
void setup() {
39
  Serial.begin(115200);
40
  delay(100);
41
  Serial.println("--Start Setup Application--");
42
  while ( BootupConfigure() ) {
43
    Serial.println("    wait for BootupConfigure ...");
44
  }
45
  if(BootupConfigure()) {
46
    Serial.println("-- !!! BootupConfigure ERROR !!! --");
47
    while (true) {
48
      delay(10000);
49
    }
50
  } else {
51
    HelloWorld();
52
  }
53
  Serial.println("--End Setup Application--");
54
}
55
56
void loop() {
57
  // mach farbe vom text anders
58
  // schalte display liste um
59
  // zeig alles an
60
  // oder sowas in der art ???
61
  delay(500)M
62
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Ray M. schrieb:

> folgendes schreibt halt mal was auf's display,
> wenn mir jemand eventuell erklären könnte wie man z.b.
> in jedem loop die farbe des textes umschaltet würde


richte dir zb 2 Display Listen her. In der einen hast du den Text in der 
einen Farbe, in der anderen hast du ihn in der anderen Farbe.

In der Loop lässt du dann abwechselnd eine der beiden Display Listen 
rendern.

Die die Display Listen als eine Beschreibung dessen an, was du am Schirm 
sehen willst. Ob es Funktionen gibt, mit denen man die Listen im 
Nachhinein noch manipulieren kann, weiss ich nicht (hab die Doku nicht 
studiert). Aber in dem Moment, in dem du die Finish() Funktion aufrufst, 
rendert sich offenbar diese Display Liste aufs Display und du siehst 
ihren Inhalt. Oder was ist am Kommentar
1
  FTImpl.Finish();  // render the display list and wait for the completion of the DL
nicht verständlich?

Jetzt liegt es eben an dir, die Display Listen je nach Bedarf 
zusammenzustellen, neu zu generieren oder wenn möglich: mit Funktionen 
zu manipulieren. Ist deine Manipulation fertig, dann 'aktivierst' du 
sie, in dem du Finish() aufrufst.

: Bearbeitet durch User
von DirkF (Gast)


Lesenswert?

Hi Ray,
ich habe mir das TFT Modul ConnectEVE von http://www.mikroe.com/
besorgt. Das hat ja auch den FT800 drauf.
Schau mal auf der homepage nach examples.

Ich seleber habe enen Beispielcode für den PIC32 im Microchip forum 
gefunden.
Tja, das Display ist angesöpselt, leider ist mein Rechner zur Zeit zur 
Reparatur.....Werde in den nächsten Tagen damit weitermachen..

Gruß Dirk

von Karl H. (kbuchegg)


Lesenswert?

Karl H. schrieb:

> Jetzt liegt es eben an dir, die Display Listen je nach Bedarf
> zusammenzustellen, neu zu generieren oder wenn möglich: mit Funktionen
> zu manipulieren. Ist deine Manipulation fertig, dann 'aktivierst' du
> sie, in dem du Finish() aufrufst.

Und der Sinn der Sache ist es natürlich, dass man in aller Ruhe das 
nächste anzuzeigende Bild vorbereiten kann, während noch das alte Bild 
angezeigt wird. und zwar so, dass man als Benutzer nicht sieht, wie sich 
das Bild langsam aus den diversen Datenquellen aufbaut, weil da ev. 
umfangreichere Berechnungen notwendig sind. Erst wenn mithilfe der 
Display Liste das nächste anzuzeigende Bild komplett beschrieben wurde, 
wird es mit einem Schlag aktiviert und damit sichtbar.

von Karl H. (kbuchegg)


Lesenswert?

Erster Versuch von mir, basierend auf 'educated guesses'
1
int16_t BootupConfigure() {
2
  ... bleibt alles so wie es war
3
}
4
5
unsigned long lastDone = 0;
6
unsigned char whichColor = 0;
7
8
void setup() {
9
  Serial.begin(115200);
10
  delay(100);
11
  Serial.println("--Start Setup Application--");
12
13
  while ( BootupConfigure() ) {
14
    Serial.println("    wait for BootupConfigure ...");
15
  }
16
17
  if(BootupConfigure()) {
18
    Serial.println("-- !!! BootupConfigure ERROR !!! --");
19
    while (true) {
20
      delay(10000);
21
    }
22
  }
23
24
  Serial.println("--End Setup Application--");
25
}
26
27
28
void loop() {
29
  unsigned long now = millis();
30
31
  if( now - lastDone > 1000 ) {
32
    lastDone = now;
33
    whichColor = 1 - whichColor;   // die andere Farbe
34
35
    const char Display_string[18] = "was du wollen ...";
36
37
    FTImpl.DLStart(); // start display list
38
39
    // set color of string
40
    if( whichColor == 0 )
41
      FTImpl.ColorRGB(0xFF, 0xFF, 0xFF);
42
    else
43
      FTImpl.ColorRGB(0xFF, 0x00, 0x00);
44
45
46
    FTImpl.Cmd_Text(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2, 31, FT_OPT_CENTER, Display_string);
47
48
    FTImpl.DLEnd();   // end the display list
49
    FTImpl.Finish();  // render the display list and wait for the completion of the DL
50
  }
51
}

ev. muss vor dem DLStart() noch ein Aufruf rein, der die vorhergehende 
Liste löscht. Kann aber auch sein, dass der DLStart() das gleich 
mitmacht. Kann man aber rauskriegen, indem man im Sekundentakt nicht nur 
die Farbe ändert, sondern zb auch die Position des Textes.

: Bearbeitet durch User
von Uwe (de0508)


Lesenswert?

Hallo Ray,

Richard hat dazu auch eine Lib und einige Demos (Video) geschrieben:

http://avr.myluna.de/doku.php
http://forum.myluna.de/

von Joe F. (easylife)


Lesenswert?

Kennste das schon?:

http://www.ftdichip.com/Support/Documents/ProgramGuides/FT800%20Programmers%20Guide.pdf

Die jeweils neue Display Liste wird in einen Ringbuffer geschrieben, und 
es gibt einen "SWAP" Befehl, um auf diese Liste umzuschalten.
Das Lästige ist: du musst jedesmal die komplette Liste neu in den 
Ringbuffer schreiben, wenn sich auch nur ein Element ändert.

Es gibt aber auch die Möglichkeit, direkt in das Display-RAM zu 
schreiben (pixelweise, wenn du die Zeichenfunktionen nicht brauchst).

: Bearbeitet durch User
von Ray M. (ray_m)


Lesenswert?

folgender code tut schonmal was, farbe und position wechseln,
nur stabil ist das nich, mal schaft er 3 durchläufe mal 100 mal 20
usw...
irgendwas stimmt da noch nicht ... ;)
1
int whichColor = 0;
2
int c = 0;
3
4
void loop() {
5
  c++;
6
  whichColor = 1 - whichColor;   // die andere Farbe
7
8
  unsigned long currentMillis = millis();
9
10
  const char Display_string[18] = "was du wollen ...";
11
12
  FTImpl.DLStart(); // start display list
13
14
  if( whichColor == 0 ) {
15
    FTImpl.ColorRGB(0xFF, 0xFF, 0xFF);
16
    FTImpl.Cmd_Text(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2, 31, FT_OPT_CENTER, Display_string);
17
  } else {
18
    FTImpl.ColorRGB(0xFF, 0x00, 0x00);
19
    FTImpl.Cmd_Text(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2 - 40, 31, FT_OPT_CENTER, Display_string);
20
  }
21
22
  FTImpl.DLEnd();   // end the display list
23
  FTImpl.Finish();  // render the display list and wait for the completion of the DL
24
  Serial.println(c);
25
  delay(500);  
26
}

von Ray M. (ray_m)


Lesenswert?

Uwe S. schrieb:
> Hallo Ray,
>
> Richard hat dazu auch eine Lib und einige Demos (Video) geschrieben:
>
> http://avr.myluna.de/doku.php
> http://forum.myluna.de/

ja, aber das beispiel ganz unten
http://avr.myluna.de/doku.php?id=en:lib-ft800
zeigt mir das list-handling auch nicht, das ist da genau so wie bei
gd2 irgendwie in der lib gekapsellt ...

von Ray M. (ray_m)


Lesenswert?

Karl H. schrieb:
> Karl H. schrieb:
>
>> Jetzt liegt es eben an dir, die Display Listen je nach Bedarf
>> zusammenzustellen, neu zu generieren oder wenn möglich: mit Funktionen
>> zu manipulieren. Ist deine Manipulation fertig, dann 'aktivierst' du
>> sie, in dem du Finish() aufrufst.
>
> Und der Sinn der Sache ist es natürlich, dass man in aller Ruhe das
> nächste anzuzeigende Bild vorbereiten kann, während noch das alte Bild
> angezeigt wird. und zwar so, dass man als Benutzer nicht sieht, wie sich
> das Bild langsam aus den diversen Datenquellen aufbaut, weil da ev.
> umfangreichere Berechnungen notwendig sind. Erst wenn mithilfe der
> Display Liste das nächste anzuzeigende Bild komplett beschrieben wurde,
> wird es mit einem Schlag aktiviert und damit sichtbar.

schon klar, der sinn von double-buffer ist mir noch aus alten 
dos-vga-demo-zeiten bekannt ...
es geht um ein brauchbares beispiel weil ich zu doof bin mir aus der
umfangreichen docu was sinnvolles zusammenzureimen ... ;)

: Bearbeitet durch User
von Ray M. (ray_m)


Lesenswert?

DirkF schrieb:
> Hi Ray,
> ich habe mir das TFT Modul ConnectEVE von http://www.mikroe.com/
> besorgt. Das hat ja auch den FT800 drauf.

das hab ich hier auch liegen ... dass löst aber das problem auch nicht 
;)

> Schau mal auf der homepage nach examples.

das sind die gleichen wie beim normalen ft800 ...

> Ich seleber habe enen Beispielcode für den PIC32 im Microchip forum
> gefunden.
> Tja, das Display ist angesöpselt, leider ist mein Rechner zur Zeit zur
> Reparatur.....Werde in den nächsten Tagen damit weitermachen..
>
> Gruß Dirk

von Ray M. (ray_m)


Lesenswert?

Joe F. schrieb:
> Kennste das schon?:
>
> 
http://www.ftdichip.com/Support/Documents/ProgramGuides/FT800%20Programmers%20Guide.pdf

kenne ich ... und hab ich nicht verstanden ;(

> Die jeweils neue Display Liste wird in einen Ringbuffer geschrieben, und
> es gibt einen "SWAP" Befehl, um auf diese Liste umzuschalten.
> Das Lästige ist: du musst jedesmal die komplette Liste neu in den
> Ringbuffer schreiben, wenn sich auch nur ein Element ändert.

hast du ein beispiel ? ;)

> Es gibt aber auch die Möglichkeit, direkt in das Display-RAM zu
> schreiben (pixelweise, wenn du die Zeichenfunktionen nicht brauchst).

die hätte ich schon gern benutzt ...

von Hans M. (Gast)


Lesenswert?

Also wenn es schon tut, was es soll aber nach 20-100 mal "spinnt" hier 
meine Erfahrung :
Achte darauf, das die DL Kommandos IMMER 4Byte aligned sind. Kann bei 
dynamisch erzeugten Texten schnell aus dem Tritt kommen.
Lass dem auch n bissl Zeit. Hatte am Anfang das Problem, das in der 
ersten Testsoftware ( nur Main mit Displayneuaufbau ) die Slider und 
Dials ruckelig aktualisierten. Problem war das das zu schnelle Pollen 
des TouchTag, den Chip offenbar daran hindert ihn zu aktualisieren. Also 
kleines Delay rein ( oder die endgültige Apllikation ) und schon liefs 
flüssig.

Wenn de noch Fragen hast, nur zu.

Hans

von Ray M. (ray_m)


Lesenswert?

Hans M. schrieb:
> Also wenn es schon tut, was es soll aber nach 20-100 mal "spinnt" hier
> meine Erfahrung :
> Achte darauf, das die DL Kommandos IMMER 4Byte aligned sind. Kann bei
> dynamisch erzeugten Texten schnell aus dem Tritt kommen.

hmm, ok ... hab ich getestet, bringt nix ;(

> Lass dem auch n bissl Zeit. Hatte am Anfang das Problem, das in der
> ersten Testsoftware ( nur Main mit Displayneuaufbau ) die Slider und
> Dials ruckelig aktualisierten. Problem war das das zu schnelle Pollen
> des TouchTag, den Chip offenbar daran hindert ihn zu aktualisieren. Also
> kleines Delay rein ( oder die endgültige Apllikation ) und schon liefs
> flüssig.

ja, deshalb warte ich 500ms in der schleife, wenn ich das nicht
mache fliegt er gleich ins nirvana

> Wenn de noch Fragen hast, nur zu.

wie ganz am anfang:
  hat jemand ein funktionierendes beispiel ;)

ich finde es unterirdisch das in der docu kein funktionierendes beispiel
drin ist ... unglaublicher scheißdreck ...

von Ray M. (ray_m)


Lesenswert?

so schaut es in etwa aus wenn es sich verabschiedet ...

https://drive.google.com/file/d/0B7PaFN6ql8WgX3hzYkZHbWUxZmc

manchmal dauert es länger ma kürzer, manchmal schreibt
er vorher auch noch mist auf's display oder zerstückelt
ma ldie strings ... je nach wetterlage ;(

von Hans M. (Gast)


Lesenswert?

Nu mal langsam. Reicht dir nicht was du hier:
http://www.ftdichip.com/Products/ICs/FT800.html
findest? Da gibts Beispiele für alles mögliche sowie auch alle möglichen 
CPUs.
Alternativ wenns Arduino sein soll, einfach mal bei Gameduino 2 schauen.
Da gibts auch viele lauffähige Beispiele.
Oder suchst eher n "copy&paste 
ichHabMirDasLesenVonZweiDatenblätternGespart" Beispiel?
Also ich find die Doku ist sehr ausführlich und verständlich.

Nochmal zu deiner Fehlerbeschreibung:
Also deine beschriebenen Fehler kenn ich nur im Zusammenhang, das die 
Adresse eines neuen RAM_CMDs ( nicht vergessen, der CoProzesor schreibt 
auch in die RAM_DL) kein Vielfaches von 4Bytes ist.

Deinen gefilmter Fehler hab ich so noch nicht gesehen, aber für mich 
sieht das ganz schwer nach was elektrischen aus.

Hans

von Jens (Gast)


Lesenswert?

Ray M. schrieb:
> ich finde es unterirdisch das in der docu kein funktionierendes beispiel
> drin ist
Ich hab die FT800-Beispiele für den Arduino alle ausprobiert. Es haben 
alle funktioniert, auch wenn die Codequaliät - nach meinem Verständnis - 
nicht so dolle war.

Jens

von Ray M. (ray_m)


Angehängte Dateien:

Lesenswert?

Hans M. schrieb:
> Nu mal langsam. Reicht dir nicht was du hier:
> http://www.ftdichip.com/Products/ICs/FT800.html
> findest? Da gibts Beispiele für alles mögliche sowie auch alle möglichen
> CPUs.

ja, die hab ich schon angeschaut, da ist keins dabe was in
einem endlos loop läuft, das schaut immer so aus das in der 
setup-routine
irgendwas gemalt wird und gut ist ... das ist genau mein problem,
wobei ich glaube das ich da irgendwas grundsätzliches vom
konzeot nicht mitbekommen ha und deshalb im nebel rumstocher ...

> Alternativ wenns Arduino sein soll,

nein, soll es nicht ... teensy 3.1

> einfach mal bei Gameduino 2 schauen.

hab ich schon, gd geht mit gd2 am teensy 3.1 ohne problem,
aber die gd2-lib kapselt das ganz zeug mit display-listen
und ich versteh den code in den gd2-libs leider nicht,
ich hab versucht es mir rauszupulen bevor ich hier nachgefragt hab ;)

> Da gibts auch viele lauffähige Beispiele.
> Oder suchst eher n "copy&paste
> ichHabMirDasLesenVonZweiDatenblätternGespart" Beispiel?
> Also ich find die Doku ist sehr ausführlich und verständlich.

die docu ist sehr ausführlich ja, aber für einen schnellen
einstieg viel zu umfangreich ... ein 5 seiten pdf mit 3 seiten
überblick und 2 seiten funktionierenden beispielen ... das wär
mal was ...

> Nochmal zu deiner Fehlerbeschreibung:
> Also deine beschriebenen Fehler kenn ich nur im Zusammenhang, das die
> Adresse eines neuen RAM_CMDs ( nicht vergessen, der CoProzesor schreibt
> auch in die RAM_DL) kein Vielfaches von 4Bytes ist.

dann würde das aber auf einen fehler in den ftdi-libs für den ft800
hinauslaufen ...

> Deinen gefilmter Fehler hab ich so noch nicht gesehen, aber für mich
> sieht das ganz schwer nach was elektrischen aus.

??? bei 6 kabeln ??? hmmm ... nach was elektrischen den ???

von Ray M. (ray_m)


Lesenswert?

Jens schrieb:
> Ray M. schrieb:
>> ich finde es unterirdisch das in der docu kein funktionierendes beispiel
>> drin ist
> Ich hab die FT800-Beispiele für den Arduino alle ausprobiert. Es haben
> alle funktioniert, auch wenn die Codequaliät - nach meinem Verständnis -
> nicht so dolle war.

hmm ...

ok, welchen arduino hast du verwendet ?

eventuell mag die lib meinen teensy 3.1 einfach nicht ?

von Hans M. (Gast)


Lesenswert?

Ray M. schrieb:

> wie ganz am anfang:
>   hat jemand ein funktionierendes beispiel ;)
>
> ich finde es unterirdisch das in der docu kein funktionierendes beispiel
> drin ist ... unglaublicher scheißdreck ...
>
>Ich hab die FT800-Beispiele für den Arduino alle ausprobiert. Es haben
>alle funktioniert,


Irgendwie komm ich jetzt nicht mehr so richtig mit...
Du hattest also doch funktionierende Beispiele? o.O
Die Beispiele vom Gameduino und der FTDI Webseite hab ich damals auch 
für den Einstieg genutzt ( okay portiert nach C für einen STM32 )und die 
haben funktioniert.

Also welchen Anspruch legst du an ein "funktionierendes Beispiel"?

Wenn der Code funktioniert und deine beschrieben/gefilmten Probleme 
auftreten, bestärkt das meine Vermutung, das das Problem irgendwo im 
Elektrischen liegt ( Hardware, SpgVersorgung, etc).
Zeig doch mal deinen Aufbau, im Video war ja nur das Display bis zum 
Stecker zu sehen.

Aber vielleicht verweigert sich der FT800 auch nur wegen der gruseligen 
Rechtschreibung ;-)

Hans

von Ray M. (ray_m)


Lesenswert?

Hans M. schrieb:
> Ray M. schrieb:
>
>> wie ganz am anfang:
>>   hat jemand ein funktionierendes beispiel ;)
>>
>> ich finde es unterirdisch das in der docu kein funktionierendes beispiel
>> drin ist ... unglaublicher scheißdreck ...
>>
>>Ich hab die FT800-Beispiele für den Arduino alle ausprobiert. Es haben
>>alle funktioniert,
>
>
> Irgendwie komm ich jetzt nicht mehr so richtig mit...
> Du hattest also doch funktionierende Beispiele? o.O
> Die Beispiele vom Gameduino und der FTDI Webseite hab ich damals auch
> für den Einstieg genutzt ( okay portiert nach C für einen STM32 )und die
> haben funktioniert.
>
> Also welchen Anspruch legst du an ein "funktionierendes Beispiel"?

In 
http://www.ftdichip.com/Support/Documents/AppNotes/AN_275_FT800_Example_with_Arduino.pdf 
wird beschrieben wie es funktioniert.
1
The index of the last command executed is held in the register REG_CMD_READ, while the index of
2
the last command written is in REG_CMD_WRITE. The process for adding commands is:
3
1) Read REG_CMD_READ and REG_CMD_WRITE. Loop here until they’re equal.
4
2) Write new commands starting at REG_CMD_WRITE.
5
3) Update REG_CMD_WRITE with the next address following the last command in the list (4-
6
byte aligned).
7
4) With the new value in REG_CMD_WRITE, the Co-Processor will start executing each
8
command and updating REG_CMD_READ until it reaches REG_CMD_WRITE.
9
While only one type of rendering is recommended; display list commands can be embedded into
10
the command list. This allows mixing of the primitive graphics elements with widgets allowing the
11
full capabilities of the FT800 to be utilized. The loop() function utilizes this method of embedding
12
display list commands into the command list.

Dann gibt es ein Beispiel in den Examples von FTDI ...
1
#include "SPI.h"
2
#include "Wire.h"
3
4
/* Platform specific includes */
5
#include "FT_VM800P43_50.h"
6
7
/* Global object for FT800 Implementation */
8
FT800IMPL_SPI FTImpl(FT_CS_PIN,FT_PDN_PIN,FT_INT_PIN);
9
10
/* Api to bootup ft800, verify FT800 hardware and configure display/audio pins */
11
/* Returns 0 in case of success and 1 in case of failure */
12
int16_t BootupConfigure()
13
{
14
  uint32_t chipid = 0;
15
  FTImpl.Init(FT_DISPLAY_RESOLUTION);//configure the display to the WQVGA
16
17
  delay(20);//for safer side
18
  chipid = FTImpl.Read32(FT_ROM_CHIPID);
19
  
20
  /* Identify the chip */
21
  if(FT800_CHIPID != chipid)
22
  {
23
    Serial.print("Error in chip id read ");
24
    Serial.println(chipid,HEX);
25
    return 1;
26
  }
27
  
28
  /* Set the Display & audio pins */
29
  FTImpl.SetDisplayEnablePin(FT_DISPENABLE_PIN);
30
    FTImpl.SetAudioEnablePin(FT_AUDIOENABLE_PIN); 
31
  FTImpl.DisplayOn();   
32
  FTImpl.AudioOn();      
33
  return 0;
34
}
35
36
/* API to display Hello World string on the screen */
37
void HelloWorld()
38
{
39
  /* Change the below string for experimentation */
40
  const char Display_string[12] = "Hello World";
41
  
42
  /* Display list to display "Hello World" at the centre of display area */
43
  FTImpl.DLStart();//start the display list. Note DLStart and DLEnd are helper apis, Cmd_DLStart() and Display() can also be utilized.
44
  FTImpl.ColorRGB(0xFF,0xFF,0xFF);//set the color of the string to while color
45
  FTImpl.Cmd_Text(FT_DISPLAYWIDTH/2, FT_DISPLAYHEIGHT/2, 29, FT_OPT_CENTER, Display_string);//display "Hello World at the center of the screen using inbuilt font handle 29 "
46
  FTImpl.DLEnd();//end the display list
47
  FTImpl.Finish();//render the display list and wait for the completion of the DL
48
}
49
50
/* bootup the module and display "Hello World" on screen */
51
void setup()
52
{
53
  /* Initialize serial print related functionality */
54
  Serial.begin(9600);
55
  
56
  /* Set the Display Enable pin*/   
57
  Serial.println("--Start Application--");
58
  if(BootupConfigure())
59
  {
60
    //error case - do not do any thing
61
  }
62
    else
63
  {
64
    HelloWorld();
65
  }
66
  Serial.println("--End Application--");
67
}
68
69
/* Nothing in loop api */
70
void loop()
71
{
72
}

Hmm ... nix im loop ... nix mit Display-Listem umschalten zu finden ...
In keinem Beispiel was ich gefunden hab !

> Wenn der Code funktioniert und deine beschrieben/gefilmten Probleme
> auftreten, bestärkt das meine Vermutung, das das Problem irgendwo im
> Elektrischen liegt ( Hardware, SpgVersorgung, etc).
> Zeig doch mal deinen Aufbau, im Video war ja nur das Display bis zum
> Stecker zu sehen.

Foto hab ich Post weiter oben angehängt ...

> Aber vielleicht verweigert sich der FT800 auch nur wegen der gruseligen
> Rechtschreibung ;-)

Das kann gut sein ;)

von Hans M. (Gast)


Lesenswert?

Sorry, falsch zitiert das war ja der Jens ;-)
Wenn dir 5 Seiten Datenblatt reichen, dann versuchs mal mit einem 
Widerstand, aber nicht mit was so komplexem wie einem Grafikkontroller 
:-(

Das was im Video zu sehen ist, sieht für mich nach einem Absturz oder 
ungewolltem Reset des FT800 aus.

Absturz ist aber nicht möglich, das er einfach ganz stumpf die 
Displayliste Zeile für Zeile abarbeitet und das mit 60Hz. Und da wird 
jeder Sch... als Kommando gesehen und umgesetzt, was zu komischen 
Bildern führt. Selbst wenn er der Meinung ist, ein Reset-Befehl zu 
interpretieren, dann sieht das immer noch nicht so aus, wie im Video.

Ungewollter Reset kann z.B. durch Spannungseinbruch entstehen oder keine 
Ahnung falsches Rumgewackel am CS Pin.

Im Zweifelsfall, Logicanalyzer mit SPI_Protokolldekoder dran und schauen 
ob auch das über den Bus geht, was auch drüber gehen soll. Mit diesem 
Ergebnis kann man dann das weitere Vorgehen planen.

Hans

von Hans M. (Gast)


Lesenswert?


von Ray M. (ray_m)


Lesenswert?

Hans M. schrieb:
> Sorry, falsch zitiert das war ja der Jens ;-)
> Wenn dir 5 Seiten Datenblatt reichen, dann versuchs mal mit einem
> Widerstand, aber nicht mit was so komplexem wie einem Grafikkontroller
> :-(

Was spricht gegen einen Schnell-Einstieg ?
Wenn ich mehr will kann ich immernoch die komplette Docu lesen,
aber für einen EInstieg ist das einfach OverKill.

> Das was im Video zu sehen ist, sieht für mich nach einem Absturz oder
> ungewolltem Reset des FT800 aus.

Das heist ich schreibe irgendwo in den Speicher wo ich nicht sollte
und er verabschiedet sich ...

Und da ich das nicht mache, sondern nur die Funktionen der Lib
benutze verstehe ich es nicht.

> Absturz ist aber nicht möglich, das er einfach ganz stumpf die
> Displayliste Zeile für Zeile abarbeitet und das mit 60Hz. Und da wird
> jeder Sch... als Kommando gesehen und umgesetzt, was zu komischen
> Bildern führt. Selbst wenn er der Meinung ist, ein Reset-Befehl zu
> interpretieren, dann sieht das immer noch nicht so aus, wie im Video.
>
> Ungewollter Reset kann z.B. durch Spannungseinbruch entstehen oder keine
> Ahnung falsches Rumgewackel am CS Pin.

Ok ... Dann werde ich das jetzt mal alles auf ein Lochraster löten,
dann wackelt nix mehr ...

> Im Zweifelsfall, Logicanalyzer mit SPI_Protokolldekoder dran und schauen
> ob auch das über den Bus geht, was auch drüber gehen soll. Mit diesem
> Ergebnis kann man dann das weitere Vorgehen planen.
>
> Hans

von Ray M. (ray_m)


Lesenswert?

Hans M. schrieb:
> http://excamera.com/sphinx/gameduino2/samples/abstract/index.html
> läuft definitiv in einer Schleife ;-)

genau, hatte ich auch schon bemerkt,
gameduino2 mit gd2-lib und teensy geht ...

teensy an einem tft mit ft800 und FT_VM800P43_50.h,
also ohne die gd2-lib geht nicht ...

von Hans M. (Gast)


Lesenswert?

> Was spricht gegen einen Schnell-Einstieg ?
> Wenn ich mehr will kann ich immer noch die komplette Docu lesen,
> aber für einen Einstieg ist das einfach OverKill.

genau der Grund für diesen Thread :-D

Du WILLST den FT800 verwenden, aber dich nicht in die Lage versetzen dir 
im Fehlerfall selbst zu helfen.

Merkst den Widerspruch?

Aber egal, ich bin dann hier mal raus.

Schönes WE und troll weiter

Hans

von Ray M. (ray_m)


Lesenswert?

Also mit einem Gameduino an einem Teensy 3.1 funktioniert das
einfachste Beispiel ohne Probleme.
1
#include <SPI.h>
2
#include <GD2.h>
3
4
void setup()
5
{
6
  GD.begin();
7
}
8
9
void loop()
10
{
11
  GD.ClearColorRGB(0x103000);
12
  GD.Clear();
13
  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
14
  GD.swap();
15
}

Also werde ich mal versuchen in der GD2-lib die passenden
Aufrufe und die Logik zu finden ...

von Ray M. (ray_m)


Lesenswert?

Hans M. schrieb:
>> Was spricht gegen einen Schnell-Einstieg ?
>> Wenn ich mehr will kann ich immer noch die komplette Docu lesen,
>> aber für einen Einstieg ist das einfach OverKill.
>
> genau der Grund für diesen Thread :-D
>
> Du WILLST den FT800 verwenden, aber dich nicht in die Lage versetzen dir
> im Fehlerfall selbst zu helfen.
>
> Merkst den Widerspruch?
>
> Aber egal, ich bin dann hier mal raus.

das macht sinn ... es gibt leute die müssen immer ganz unten drin
rumwühlen um glücklich zu sein und das ist auch gut so ...

akzeptiert doch einfach mal das es auch leute gibt die anders an die
sache rangehen ... wenn ich eine hw benutze wo die interna von einer
lib in eine api gepackt werden, warum soll ich die nicht benutzen ?
und warum soll ich nicht in einem forum fragen wenn ich da auf probleme
treffe ? der anspruch das jeder selber in den interna rumwühlen sollte
halte ich für überholt ...

aber egal, schönes wochenende ...

von Jens (Gast)


Lesenswert?

Ray M. schrieb:
> es gibt leute die müssen immer ganz unten drin
> rumwühlen um glücklich zu sein und das ist auch gut so ...
Das hat nix mit glücklich sein zu tun, sondern ist eine Notwendigkeit.
Wenn Du nicht bereit bist, diese Notwendigkeit einzusehen, dann suche 
Dir
1. eine einfachere Hardware (z.B. Text-LCD), oder
2. eine andere Platform (z.B. 
http://tinkersphere.com/raspberry-pi-hats/743-3-5-pi-tft-touch-screen-lcd-hat-for-raspberry-pi-software-included.html), 
oder
3. ein anderes Hobby.

Jens

von Ray M. (ray_m)


Lesenswert?

Jens schrieb:
> Ray M. schrieb:
>> es gibt leute die müssen immer ganz unten drin
>> rumwühlen um glücklich zu sein und das ist auch gut so ...
> Das hat nix mit glücklich sein zu tun, sondern ist eine Notwendigkeit.
> Wenn Du nicht bereit bist, diese Notwendigkeit einzusehen, dann suche
> Dir
> 1. eine einfachere Hardware (z.B. Text-LCD), oder
> 2. eine andere Platform (z.B.
> 
http://tinkersphere.com/raspberry-pi-hats/743-3-5-pi-tft-touch-screen-lcd-hat-for-raspberry-pi-software-included.html),
> oder
> 3. ein anderes Hobby.

Ihr versteht es nicht, macht aber nix ...

Ich muss kein Auto bauen können um es zu fahren, also muss ich auch
nicht Bit-Bumsen können um einen Teensy oder ein TFT über die
zur Verfügung stehenden API's zu benutzen und meinem Hobby nach zu 
gehen.

Wenn ich das beruflich machen würde, würde ich euch Recht geben,
dann muss ich das alles wissen ... dann bekomme ich auch Geld dafür.
Wenn ihr nicht bereit seit euer Wissen und/oder Erfahrungen mit 
Hobbyisten
zu teilen, weil ihr es für Herrschaftswissen halten, dann kann ich euch 
auch nicht helfen ...

Eure Argumente sind die gleichen wie die von den Linux-Jungs
von vor 10 oder 15 Jahren, die haben auch Alle gesagt
"schau halt in den Kernel-Source, da steht es drin, ich hab es auch hin 
bekommen aber ich sag dir nicht wie" und die lagen auch falsch und haben
sich zum Glück nicht durchgesetzt, sonst müsste Heute noch jeder
Anwender/Interresierte seinen Kernel selber bauen ... Das hört sich
nicht nur schwachsinnig an, dass ist es auch ...


allen ein schönes we ...

von Horst (Gast)


Lesenswert?

Ray M. schrieb:
> Uwe S. schrieb:
>> Hallo Ray,
>>
>> Richard hat dazu auch eine Lib und einige Demos (Video) geschrieben:
>>
>> http://avr.myluna.de/doku.php
>> http://forum.myluna.de/
>
> ja, aber das beispiel ganz unten
> http://avr.myluna.de/doku.php?id=en:lib-ft800
> zeigt mir das list-handling auch nicht, das ist da genau so wie bei
> gd2 irgendwie in der lib gekapsellt ...

Welches list-handling? Die Listbefehle sind wie im Handbuch benannt und 
herausgeführt. Die Events kommen über Callbacks, man hat also alle 
Freiheiten. Der Source der Lib ist auch einsehbar.Gekapselt sind die 
low-level Sachen. Für die Kommunikation kann man auch Callbacks setzen, 
so habe ich mal die Listbefehle per Uart übertragen können.

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
Noch kein Account? Hier anmelden.