Frage zu TFT code

hallo,
ich verstehe nicht recht, ob der folgende Code SPI, i2c oder bit-Mode ist:
http://rover.ebay.com/rover/0/e11051.m43.l1123/7?euid=b054980c6f7c48a09ed0e8a903c2fa66&loc=http%3A%2F%2Fcgi.ebay.com%2Fws%2FeBayISAPI.dll%3FViewItem%26item%3D221293355806%26ssPageName%3DADME%3AX%3ARTQ%3AUS%3A1123&exe=10710&ext=25574&sojTags=exe=exe,ext=ext

wer versteht was davon?

// UTFT_Demo_128x128_Serial (C)2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of how to use most of the functions
// of the library with a supported display modules.
//
// This demo was made to work on the 128x128 modules.
// Any other size displays may cause strange behaviour.
//
// This program requires the UTFT library.
//
 
#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
 
// Declare an instance of the class
UTFT myGLCD(ITDB18SP,7,6,5,3,4);   // Remember to change the model parameter to suit your display module!
 
void setup()
{
  randomSeed(analogRead(0));
 
// Setup the LCD
  myGLCD.InitLCD(PORTRAIT);
  myGLCD.setFont(SmallFont);
}
 
void loop()
{
  byte buf[126];
  int x, x2;
  int y, y2;
  int r;
 
// Clear the screen and draw the frame
  myGLCD.clrScr();
  myGLCD.setContrast(64);
 
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0,0,127,12);
  myGLCD.setColor(64, 64, 64);
  myGLCD.fillRect(0,117,127,127);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255,0,0);
  myGLCD.print("Universal TFT", CENTER, 0);
  myGLCD.setBackColor(64,64,64);
  myGLCD.setColor(255,255,0);
  myGLCD.print("H.Karlsen", LEFT, 116);
  myGLCD.print("(C)2012", RIGHT, 116);
  myGLCD.setColor(0,255,0);
  myGLCD.drawRect(0,13,127,116);
 
// Draw crosshairs
  myGLCD.setColor(0,0,255);
  myGLCD.drawLine(63,14,63,115);
  myGLCD.drawLine(1,63,126,63);
  for (int i=3; i<128; i+=10)
    myGLCD.drawLine(i, 61, i, 65);
  for (int i=14; i<118; i+=10)
    myGLCD.drawLine(61, i, 65, i);
 
// Draw sin-, cos- and tan-lines  
  myGLCD.setColor(0,255,255);
  myGLCD.setBackColor(0,0,0);
  myGLCD.print("Sin", 2, 14);
  for (int i=1; i<126; i++)
  {
    myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45));
  }
 
  myGLCD.setColor(255,0,0);
  myGLCD.print("Cos", 2, 26);
  for (int i=1; i<126; i++)
  {
    myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45));
  }
 
  myGLCD.setColor(255,255,0);
  myGLCD.print("Tan", 2, 38);
  for (int i=1; i<126; i++)
  {
    myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180)));
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
  myGLCD.setColor(0,0,255);
  myGLCD.drawLine(63,14,63,115);
  myGLCD.drawLine(1,63,126,63);
 
// Draw a moving sinewave
  x=1;
  for (int i=1; i<3654; i++)
  {
    x++;
    if (x==127)
      x=1;
    if (i>127)
    {
      if ((x==63)||(buf[x-1]==63))
        myGLCD.setColor(0,0,255);
      else
        myGLCD.setColor(0,0,0);
      myGLCD.drawPixel(x,buf[x-1]);
    }
    myGLCD.setColor(0,255,255);
    y=63+(sin(((i*1.3)*3.14)/180)*45);
    myGLCD.drawPixel(x,y);
    buf[x-1]=y;
//    delay(3);
  }
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some filled rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10));
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some filled, rounded rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10));
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some filled circles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillCircle(30+(i*10),35+(i*10), 25);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
  // Draw some lines in a pattern
  myGLCD.setColor (255,0,0);
  for (int i=11; i<115; i+=3)
  {
    myGLCD.drawLine(1, i, i-10, 115);
  }
  myGLCD.setColor (255,0,0);
  for (int i=112; i>14; i-=3)
  {
    myGLCD.drawLine(126, i, i+14, 14);
  }
  myGLCD.setColor (0,255,255);
  for (int i=115; i>14; i-=3)
  {
    myGLCD.drawLine(1, i, 116-i, 14);
  }
  myGLCD.setColor (0,255,255);
  for (int i=14; i<115; i+=3)
  {
    myGLCD.drawLine(126, i, 140-i, 115);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some random circles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=22+random(85);
    y=35+random(59);
    r=random(20);
    myGLCD.drawCircle(x, y, r);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some random rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(124);
    y=15+random(101);
    x2=2+random(124);
    y2=15+random(101);
    myGLCD.drawRect(x, y, x2, y2);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some random rounded rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(124);
    y=15+random(101);
    x2=2+random(124);
    y2=15+random(101);
    myGLCD.drawRoundRect(x, y, x2, y2);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some random lines
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(124);
    y=15+random(101);
    x2=2+random(124);
    y2=15+random(101);
    myGLCD.drawLine(x, y, x2, y2);
  }
 
  delay(2000);
 
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,14,126,115);
 
// Draw some random pixels
  for (int i=0; i<5000; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    myGLCD.drawPixel(2+random(124), 15+random(101));
  }
 
  delay (2000);
 
// Set up the "Finished"-screen
  myGLCD.setContrast(0);
  myGLCD.fillScr(0,0,255);
  myGLCD.setColor(255,0,0);
  myGLCD.fillRoundRect(2, 40, 125, 88);
 
  myGLCD.setColor(255,255,255);
  myGLCD.setBackColor(255,0,0);
  myGLCD.print("That's it!", CENTER, 46);
  myGLCD.print("Restarting in a", CENTER, 66);
  myGLCD.print("few seconds...", CENTER, 76);
 
  myGLCD.setColor(0,0,0);
  myGLCD.setBackColor(0,0,255);
  myGLCD.print("Runtime: (msecs)", CENTER, 108);
  myGLCD.printNumI(millis(), CENTER, 118);
 
  myGLCD.setContrast(64);
 
  delay (10000);
 
// Fade screen to black
  for (int i=64; i>0; i--)
  {
    myGLCD.setContrast(i);
    delay(100);
  }
}

Ein Blick in die .h verrät:

#define ITDB32			0	// HX8347-A (16bit)
#define ITDB32WC		1	// ILI9327  (16bit)
#define TFT01_32W		1	// ILI9327	(16bit)
#define ITDB32S			2	// SSD1289  (16bit)
#define TFT01_32		2	// SSD1289  (16bit)
#define GEEE32			2	// SSD1289  (16bit)
#define ITDB24			3	// ILI9325C (8bit)
#define ITDB24D			4	// ILI9325D (8bit)
#define ITDB24DWOT		4	// ILI9325D (8bit)
#define ITDB28			4	// ILI9325D (8bit)
#define TFT01_24_8		4	// ILI9325D (8bit)
#define TFT01_24_16		5	// ILI9325D (16bit)
#define ITDB22			6	// HX8340-B (8bit)
#define GEEE22			6	// HX8340-B (8bit)
#define ITDB22SP		7	// HX8340-B (Serial)
#define ITDB32WD		8	// HX8352-A (16bit)
#define TFT01_32WD		8	// HX8352-A	(16bit)
#define ITDB18SP		9	// ST7735   (Serial)
#define LPH9135			10	// PCF8833	(Serial)
#define ITDB25H			11	// S1D19122	(16bit)
#define ITDB43			12	// SSD1963	(16bit) 480x272
#define ITDB50			13	// SSD1963	(16bit) 800x480
#define ITDB24E_8		14	// S6D1121	(8bit)
#define ITDB24E_16		15	// S6D1121	(16bit)
#define INFINIT32		16	// SSD1289	(Latched 16bit)
#define GEEE24			17	// ILI9320	(8bit)
#define GEEE28			18	// ILI9320	(16bit)

Dann wird wohl ITDB18SP seriell (SPI) angesteuert.

Der Beispielssketch wird wieder über Serial noch Parallel angesteuert. Entscheiden für die Aufabe ist diese Stelle

// Declare an instance of the class
UTFT myGLCD(ITDB18SP,7,6,5,3,4);   // Remember to change the model parameter to suit your display module!

Diese musst du an dein Display anpassen. Hier können sowohl parallele oder serielle Schnittstellen definiert werden. UTFT hat eine umfangreiche PDF mit der Libary ausgeliefert.

ok, danke, die kenne ich ntl nicht.
Denn im Angebot verlinkt ist sie nicht.
SPI mit 3-4 pins wäre absolut ok - kanst du was erkennen?

Was soll erkannt werden??

ob die lib für SPI gedacht ist
(von einer lib kann ich aber auch nichts erkennen im Angebot)

This library supports a number of 8bit, 16bit and serial graphic displays, and will work with both Arduino and chipKit boards.

Ob du die mit deinen Display nutzen kannst, hängt davon ab, ob der Treiber von der Libary unterstütz wird.

http://henningkarlsen.com/electronics/files/UTFT_Requirements.pdf
http://henningkarlsen.com/electronics/resource/UTFT/UTFT.pdf

ich glaube, wir reden aneinander vorbei.
Das Angebot lautet: TFT LCD Shield Module SPI
Also muss es SPI libs haben.
Meine Frage:
Hat es die?
Wo sind die?
Sind die velinkten Beispiele kompatibel und abgestimmt auf die SPI-Verbindung?

Hallo,
"Also muss es SPI libs haben"
warum?

"Hat es die?"
mußt mal nach suchen

"Wo sind die?"
Da- wo Du sie findest...
Gruß und Spaß
Andreas

HaWe:
ich glaube, wir reden aneinander vorbei.
Das Angebot lautet: TFT LCD Shield Module SPI
Also muss es SPI libs haben.
Meine Frage:
Hat es die?
Wo sind die?
Sind die velinkten Beispiele kompatibel und abgestimmt auf die SPI-Verbindung?

Ähm, irgendwie hier alles confus.

Das Display wird von der Libery so wie ich das sehe

#define DISABLE_ST7735			1	// ITDB18SP
#define DISABLE_ST7735S			1	// TFT01_18SP
unterstützt.

Die Libary von UTFT spricht Parallele so wie Serielle Displays an. Das siehst du nicht, da sich der Henning mühe gemacht hat, alles mit einander kompatibel zu machen. Die Arbeit läuft im Hintergrund ab.

Man kann Daten nur seriell oder parallel übertragen. SPI ist nichts anderes als eine Serielle Schnittstelle für Peripheriegerät. Wobei man nicht verallgemeinern kann, das parallel schneller als seriell ist.

was ich meine:
zu einem anderen Display von Adafruit gab es verschiedene libs und Beispiele zu SPI oder zu 16bit.
Ich habe keinen Schimmer von Hardware- libs, deswegen weiß ich nicht, wofür die obigen Beispiele gedacht sind.
seriell oder parallel intersessiert mich nicht grundsätzlich oder allgemein, mich interessiert nur SPI wegen der einzigen hierfür noch freien pins (50-53) auf meinem Mega. Also interessiert mich auch nicht ein anderes serielles Protokoll wie i2c oder was auch immer, wenn es auf andere Pins gelegt ist.
Meine Frage also: Funktioniert das TFT Boards mit SPI auf Pins 50-53 und den verlinkten Beispielen?

schon passiert, aber außer dem obigen Beispielcode keine weiteren Infos.

Wenn nur noch die Pins 50 - 53 frei sind, nein!

Für die Ansteuerung des Displays brauchst du CLK (Pin 52), MOSI (Pin 51), Data/Command (frei wählbar), ChipSelect (frei wählbar).

Möchtest du aber weiterhin auch die SD Karte nutzen, kommen dazu noch ChipSelect (fürs TFT) (frei wählbar), sowie MISO (Pin 51) dazu.

RST/Reset kannst du auf den Reset vom Mega legen.

Das macht, ohne die Spannungsversorgung (VCC/GND) mitzuzählen

fürs Display 5 Pins
für Display + SD 6 Pins

@Mike:
Wo ist das Problem mit dem Beispielssketch? Der enthält bereits mehr Information, als man benötigt.

UTFT myGLCD(ITDB18SP,7,6,5,3,4);   // Remember to change the model parameter to suit your display module!

Die PDF von Henning gibt genaue aufschlüsse, was benötigt wird.

UTFT(Model, SDA, SCL, CS, RST[,RS]);

Somit wird auch ersichtlich, was benötigt wird, wohl gemerkt, ohne die Anbindung der SD Karte!

SDA -> MOSI
SCL -> CLK
CS -> ChipSelect
RST -> Hier einfache einen Wert eintragen, der keinen Pin entspricht. 0 dürfte frei sein und Reset auf den Mega Reset auflegen.
RS -> Wird hier so wie ich das in den Schematics sehe nicht benötigt.

Sprich so sollte es ausreichen:

UTFT myGLCD(ITDB18SP,51,52,*,0);

Ob 0 frei ist, muss du aber testen.

  • = beliebig.

Jedoch solltest du sicherstellen, ob das Display an SDA/MOSI/ChipSelect 5V verkraften kann. Ansonsten müssen da Pegelwandler zwischen.

"seriöse Verkäufer senden einen Democode mit ihrem Kopf"
Halte ich in den meisten Fällen für unnötig. Gäbe es das Arduino Konzept nicht, wäre es für die Verkäufer einfacher. Den die Arbeit mit Mikrokontroller erfordert immer, dass man Datenblätter versteht. Es gibt gerade bei Pollin oftmals Displays, die vorher selten im Hobbybereich eingesetz wurden. Dort muss eines selber erarbeitet werden. Mit Glück ist die Ansteuerung der TFT Treiber bereits von jemanden publiziert. Entsprechend auch der Preis.

ich brauche nur das nackte Display, nichts weiter. Also auch kein Touch etc., SD - da wüsste ich nicht wofür, es sei denn, man braucht es für Fonts; dann ntl.

Hallo,
das Display sieht verdächtig nach einem alten S65 Display aus.
Auf den Bildern kannst Du schon sehen, das es beschissen verarbeitet ist.
Lasse es, suche Dir etwas neues.
Gruß und Spaß
Andreas

ist jetzt nicht sonderlich hilfreich, wenn du mir nicht sagen kannst: welches.
Fertig zusammengbaut,
kein Gewackel an losen Strippen,
komplette SPI-Libs,
vollständige Sourcecodes für Beispiele,
und eben nur Pins 50-53.

Bevor ich keine besseren Alternativen habe, bleibt also die Frahe zum obigen Display stehen:
Läuft es mit SPI und Pins 50-53 ?

Sorry,
http://rover.ebay.com/rover/0/e11051.m43.l1123/7?euid=b054980c6f7c48a09ed0e8a903c2fa66&loc=http%3A%2F%2Fcgi.ebay.com%2Fws%2FeBayISAPI.dll%3FViewItem%26item%3D221293355806%26ssPageName%3DADME%3AX%3ARTQ%3AUS%3A1123&exe=10710&ext=25574&sojTags=exe=exe,ext=ext
Gruß
Andreas

?
Ist das nicht das gleiche, auf das sich meine TOP-Frage bezieht ?
http://www.ebay.com/itm/1-8-inch-128x160-TFT-LCD-Shield-Module-SPI-serial-interface-For-Arduino-/221293355806?ssPageName=ADME:X:RTQ:US:1123

(Scheiß lahmer Server heute wieder!)

Hallo,
sieht verdächtig danach aus.
Auf der Rückseite sind die Pins rausgeführt, wahrscheinlich für einen UNO, KEIN ICSP-Stecker.
Wenn es dafür keinen Schaltplan gibt, dann lasse es- schon weil es ein S65 sein könnte.
Gruß und Spaß
Andreas