Hallo Freunde, ich habe mir eine TFT320 SSD1289 gekauft und ich möchte das Display mit der SPI Schnittstelle mit einem ATmega2560 ansteuern. Haben Sie vielleicht ein Tipp wie ich dann anfangen soll. Ich habe schon mal paar library von TFT bei mir. Danke im Vorau Vivien
Hallo Vivien, von ramtex gibt es eine kostenpflichtige Library. Wenn Du genau weisst, welche Grafikhfunktionen Du benötigst, ist es keine große Aktion, die Grundfunktionen selbst zu schreiben. Am schwierigsten fand ich bei einem ähnlichen Display den Startcode. Wenn man erst einmal das erste Pixel gesetzt hat muss man nur die richtigen Teile zusammensuchen (Line, Kreis...). Bleibt noch die Frage, welche Ansteuerung (16-Bit, 8Bit, SPI) Du für die Grafik verwenden willst. Grüße, Kurt
Kurt Harders schrieb: > Bleibt noch die Frage, welche Ansteuerung (16-Bit, 8Bit, SPI) Du für die > Grafik verwenden willst. Danke für die rasche Antwort Kurt Die Ansteuerung die, ich für die Grafik verwenden will, ist eigentlich Egal im moment. Aber ich würde sagen, dass ich mit dem 8Bit SPI anfangen werde. hast du vielleicht ein Besipiel der Ansteuerung eineS TFT LCD mit SPI-Schnistelle? Grüße Vivien
Hallo Vivien, ich lege Dir mal die Ansteuerung für einen HX8347-I-Controller bei. Da die Controller recht ähnlich sind, hilft es Dir vielleicht. Angesteuert wird der Display bei mir mit 18 Bit (3x6 für RGB). Bei der SPI-Ansteuerung werden die Daten meist nur in Bytes aufgeteilt, die Befehle bleiben oft gleich oder sehr ähnlich. Oberhalb des gezeigten Codes ist dann eine Softwareschicht, die Linien, Zeichen und Kreisbögen kann. Vieles davon ist aus dem Internet kopiert (Interpolationsroutinen...) anderes auf meinem Mist gewachsen. Für meine Anwendung stellt der verwendete ATMega645 Funktionen auf Anwendungsebene bereit. Z.B. FügeLinieHinzu, ZeichneGrafik, SetzeMenueItem, ZeichneMenue, ZeigeText... Der unangenehmste Teil der Inbetriebnahme ist die Initialisierung. Da sollt man sich in aller Ruhe die meist gut dokumentierten Abläufe aus der Doku anschauen. Viel Spass, Kurt
Hallo Kurt, Danke für deine Dateien. Ich glaube, dass es schon mal eine gute anfang für mich ist. Ich werde mich dransetzen und versuchen das Display über SPI im Lauf zu kriegen. Erstmal möchte ich nur kleine Texte oder Zahlen auf dem Diplay zeigen lassen und dann kann ich weiter mit dem IMAGE... programmieren. Grüß Vivien
Hallo Kurt, ich habe noch eine Frage. die Befehle TFT_N_WR, TFT_N_WR, TFT_N_CS. wo hast du die dann initialisiert(bzw haben sie keine Define wert? oder Port zuweisung)? Gruß Vivien
:
Bearbeitet durch User
Hallo Vivien, fang mit Punkten an :-) Danach kannst Du ja diese Routinen anpassen:
1 | void TFTGraphics_drawPixel(int16_t x, int16_t y) { |
2 | TFTDriver_setRAMAddress(x, y); |
3 | TFTDriver_outputPixel(currentContext.currentColor); |
4 | }
|
5 | |
6 | void TFTGraphics_drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1) { |
7 | int16_t dx = abs(x1-x0), sx = x0<x1 ? 1 : -1; |
8 | int16_t dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1; |
9 | int16_t err = dx+dy, e2; /* error value e_xy */ |
10 | |
11 | for(;;){ /* loop */ |
12 | TFTGraphics_drawPixel(x0, y0); |
13 | if (x0==x1 && y0==y1) break; |
14 | e2 = 2*err; |
15 | if (e2 > dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */ |
16 | if (e2 < dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */ |
17 | }
|
18 | }
|
19 | |
20 | void TFTGraphics_drawCircle(int16_t x0, int16_t y0, int16_t radius) { |
21 | int16_t f = 1 - radius; |
22 | int16_t ddF_x = 0; |
23 | int16_t ddF_y = -2 * radius; |
24 | int16_t x = 0; |
25 | int16_t y = radius; |
26 | |
27 | TFTGraphics_drawPixel(x0, y0 + radius); |
28 | TFTGraphics_drawPixel(x0, y0 - radius); |
29 | TFTGraphics_drawPixel(x0 + radius, y0); |
30 | TFTGraphics_drawPixel(x0 - radius, y0); |
31 | |
32 | while(x < y) { |
33 | if(f >= 0) { |
34 | y--; |
35 | ddF_y += 2; |
36 | f += ddF_y; |
37 | }
|
38 | x++; |
39 | ddF_x += 2; |
40 | f += ddF_x + 1; |
41 | |
42 | TFTGraphics_drawPixel(x0 + x, y0 + y); |
43 | TFTGraphics_drawPixel(x0 - x, y0 + y); |
44 | TFTGraphics_drawPixel(x0 + x, y0 - y); |
45 | TFTGraphics_drawPixel(x0 - x, y0 - y); |
46 | TFTGraphics_drawPixel(x0 + y, y0 + x); |
47 | TFTGraphics_drawPixel(x0 - y, y0 + x); |
48 | TFTGraphics_drawPixel(x0 + y, y0 - x); |
49 | TFTGraphics_drawPixel(x0 - y, y0 - x); |
50 | }
|
51 | }
|
Die Interpolationen sind aus Wikipedia übernommen. Und hier die defines:
1 | #define TFT_BUS_LOW PORTA // low byte
|
2 | #define TFT_BUS_HIGH PORTC // high byte
|
3 | #define TFT_BUS_16_17 PORTG // Bit 17+18
|
4 | #define TFT_CMD PORTD
|
5 | #define TFT_DDR DDRD
|
6 | |
7 | #define TFT_N_CS PD1
|
8 | #define TFT_DNC PD2
|
9 | #define TFT_N_WR PD0
|
10 | #define TFT_N_RD PD4
|
11 | #define TFT_N_TFT_RESET PD3
|
Grüße, Kurt
:
Bearbeitet durch User
Hallo, ist das ein aufgelötetes TFT Display So was ähnliches: http://www.geeetech.com/wiki/index.php/3.2TFT_LCD Dann hat es zu 100% eine parallele Schnittstelle (8 oder 16 Bit Bus). Gruß G.G
Gerhard Gehlert schrieb: > ist das ein aufgelötetes TFT Display > > So was ähnliches: http://www.geeetech.com/wiki/index.php/3.2TFT_LCD > Hallo Gehlert, ich benutze genau dieses TFT. Gruß Vivien
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.