Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

Sziasztok!
Segítségre lenne szükségem.
Van egy ilyen https://learn.adafruit.com/adafruit-2-d ... 2/overview kijelzőm amit egy 1284p IC-s Arduino kompatibilis lappal szeretném üzemeltetni. A "maniacbug Mighty 1284P 16 Mhz using optiboot" boarddal kiválasztva az Arduino 1.6.8 verziót használva az alap programokat fel tudom tölteni. Arzomban a kijelzővel nem boldogulok! Fehér kijelzőnél tovább nem jutok. Korábban már használtam MEGA és DUE lapokat Mcufreind kijelzőkkel UTFT és TFTLCD könyvtárakkal. Tudnátok bármilyen segítséget nyújtani 1284p-hez példakönyvtár, bekötések stb.
Előre is köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Robert »

Arduino által _nem_ natívan támogatott rendszerek esetén a járulékos/külső eljáráskönyvtárak nem nagyon működnek - ha alacsonyszintű rutinokat kezelnek.
Ezek kibogozása, átírása nem 1-2 perces folyamat.
Nem lehet áttérni Mega2560 panelra? Sokkal gyorsabb lenne a fejlesztés....


Kérdés: Más (alap) UNO/Mega lapon _ez a kijelző_ feléledt már? Futottam belem hibás példányba, ami nem működött. Az 5V-3.3V illesztések igaz megvannak? A chip NEM 5V toleráns!
http://www.tavir.hu - a gazda :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: kapu48 »

Szerintem ott van minden szükséges ismertető.
8-Bit Library Install:
https://learn.adafruit.com/adafruit-2-d ... bit-wiring

8bites bekötés:
https://learn.adafruit.com/assets/15441

Resistive Touchscreen:
https://learn.adafruit.com/adafruit-2-d ... ouchscreen
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: kapu48 »

Illesztésnek, Ott van a hátulján a 2db. 74LVC245 párhuzamos Port.
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

Sajnos már a fordításnál elakadok:

In file included from C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:19:0:

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\pin_magic.h:350:3: error: #error "Board type unsupported / not recognized"

#error "Board type unsupported / not recognized"

^

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp: In member function 'void Adafruit_TFTLCD::write8(uint8_t)':

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:962:21: error: 'write8inline' was not declared in this scope

write8inline(value);

^

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp: In member function 'uint8_t Adafruit_TFTLCD::read8fn()':

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:969:21: error: 'read8inline' was not declared in this scope

read8inline(result);

^

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp: In member function 'void Adafruit_TFTLCD::setWriteDir()':

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:976:21: error: 'setWriteDirInline' was not declared in this scope

setWriteDirInline();

^

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp: In member function 'void Adafruit_TFTLCD::setReadDir()':

C:\Program Files (x86)\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:982:20: error: 'setReadDirInline' was not declared in this scope

setReadDirInline();

^

exit status 1
Error compiling for board "maniacbug" Mighty 1284p 16MHz using Optiboot.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Robert »

Ott a válasz - amit írtam: Board not supported.
A cp és h állományba bújj bele, hogy a M1284P chip támogatott legyen (regiszterek, portok pontosítása, kiegészítése). Az összes rész, ahol #ifdef chinév szerepel, ott nincs benne a M1284P, hanem csak pl. Due, M2560, M1280....

Ennek bogarászása, beírása - gyakorlattól függően 2...4 óra.....
http://www.tavir.hu - a gazda :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: kapu48 »

Pár jó tanács!

Mivel új Boardot akarsz rendszerbe állítani, biztos, hogy bele kel nyúlni a meglevő libbe.
Ezért nem jó, ha a rendszer könyvtárba rakod, mert ott írásvédett lesz.
Inkább rakd át a helyére: c:\Users\Name\Documents\Arduino\libraries\TFTLCD-Library\

Nekem Mega1280 boardra lefordult a példaprogram. Pár jelentéktelen Warning-al. (Amiket persze illik kijavítani!)

Már csak annyi a dolgod, hogy Ahol a ilyesmi fordítási feltételek szerepelnek:
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
Beszúrod plusz a te: || defined(__AVR_ATmega1284__) –esedet.
Azt nem tudom mi a különbség a felsorolt procik között? Ha valami nem jól müködik? Azt javítani kel.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Robert »

Az 1284p az valahol az atmega128 és az atmega256 közt van - csak DIP tokban.
A regiszterek elnevezései, a funkcinális lábak eltérőek az előző chipektől, Ezért nem csak a feltételrendszereket kell piszkálni...:(
http://www.tavir.hu - a gazda :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: kapu48 »

Igen!
Itt kezdődik a munka érdekesebb része!
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

kapu48 írta:Pár jó tanács!

Mivel új Boardot akarsz rendszerbe állítani, biztos, hogy bele kel nyúlni a meglevő libbe.
Ezért nem jó, ha a rendszer könyvtárba rakod, mert ott írásvédett lesz.
Inkább rakd át a helyére: c:\Users\Name\Documents\Arduino\libraries\TFTLCD-Library\

Nekem Mega1280 boardra lefordult a példaprogram. Pár jelentéktelen Warning-al. (Amiket persze illik kijavítani!)

Már csak annyi a dolgod, hogy Ahol a ilyesmi fordítási feltételek szerepelnek:
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
Beszúrod plusz a te: || defined(__AVR_ATmega1284__) –esedet.
Azt nem tudom mi a különbség a felsorolt procik között? Ha valami nem jól müködik? Azt javítani kel.
Kösz a segítséget!

Átpakoltam a c:\Users\Name\Documents\Arduino\libraries\TFTLCD könyvtárat, beszúrtam a TFTLCD.cpp-be mindenhova a
|| defined(__AVR_ATmega1284__) -ot.

Most ez a fordítási hibaüzenet:
WARNING: Spurious .github folder in 'Adafruit ILI9340' library
C:\Users\Norbi\Documents\Arduino\libraries\TFTLCD\TFTLCD.cpp:915:5: error: #error "No pins defined!"

#error "No pins defined!" ^

C:\Users\Norbi\Documents\Arduino\libraries\TFTLCD\TFTLCD.cpp:943:5: error: #error "No pins defined!"

#error "No pins defined!" ^

C:\Users\Norbi\Documents\Arduino\libraries\TFTLCD\TFTLCD.cpp:1000:5: error: #error "No pins defined!"

#error "No pins defined!" ^

C:\Users\Norbi\Documents\Arduino\libraries\TFTLCD\TFTLCD.cpp:1044:5: error: #error "No pins defined!"

#error "No pins defined!" ^

exit status 1
Error compiling for board "maniacbug" Mighty 1284p 16MHz using Optiboot.

Hogyan tudom a PIn-eket definiálni?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: kapu48 »

Kezdő létedre eléggé nehéz válalkozás!

Most jön az a rész, amit Robi említett. Hogy eltérő a tokozás, és ezzel összefüggően a lábak elnevezése.
Ezért feltételes fordítási direktívákat kel alkalmazni.

Most keresel adatlapot valamelyikhez (__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
Nekem ez ismerős: ATmega1280.
És az új alkatrész adatlapja: ATmega1284

Jelzi, hogy melyik fájl, melyik sor, hányadik karakternél van a hiba:
...\libraries\TFTLCD\TFTLCD.cpp:915:5: error:

Ide kell a feltételes fordítás, így:
#if defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
Itt legyenek az eredeti sorok

#elif defined(__AVR_ATmega1284__)
Ide kel a javítást szerkeszteni!
Vagy más a néven szerepel a pin, vagy nem is létezik?

#endif

Van a: pin_magic.h
Az egész #ifdef ... #else .... #endif, részletezést értelmezned kel

Ott láthatod hogyan van feltételes fordításba egyes Boardok pin kiosztása deklarálva:
Például: #ifdef USE_ADAFRUIT_SHIELD_PINOUT
...
#endif

Ezek alapján létrehozol egy Új Boardot az alkalmazott névvel:
Valahogy így csak csupa nagybetűvel???
#ifdef Mighty_1284p_16MHz_using_Optiboot
...

Majd láthatod anevek minden boardnál egy formák, Csak a hozzárendelt értékek mások.
Pl.:
#define RD_MASK B00000001

...
#define RD_MASK B10000000
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

Sziasztok,
köszönöm az eddigi segítségeket!
Találtam egy "Arduino UNO*Pro - Upgrade" boardot aminek a könyvtárát felhasználva sikerült SPI-n keresztül kommunikációra bírni a kártyámat a kijelzővel.
A serial monitoron ha nem érek a kijelzőhöz az alábbi érték olvasható:
X = 0 Y = 562 Pressure = 0

X = 6 Y = 1023 Pressure = 5
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

Sziasztok,
köszönöm az eddigi segítségeket!

Találtam egy "Arduino UNO*Pro - Upgrade" boardot aminek a könyvtárát felhasználva sikerült SPI-n keresztül kommunikációra bírni a 1284p kártyámat a kijelzővel. http://www.hobbytronics.co.uk/arduino-uno-pro

Sikeresen fut rajta a grahicstest program, rámegy a touchpaint is viszont nem érzékel a kijelző.

A serial monitoron ha nem érek a kijelzőhöz az alábbi értékek olvashatóak:
X = 0, Y = 562, Pressure = 0
amint bármely pontjára rábökök ez olvasható:
X = 6, Y = 1023, Pressure = 5

Megmértem az analóg csapokat olvasnak rendesen.

A bekötést az SPI csapos rajz alapján csináltam.
"Touchscreen Paint (SPI mode)
An additional 4 pins are required for the touchscreen.
For the two analog pins, we'll use A2 and A3.
For the other two connections, you can pin any two digital pins but we'll be using D9 (shared with D/C) and D8 since they are available.
We can save the one pin by sharing with D/Cbut you can't share any other SPI pins. So basically you can get away with using only three additional pins.

Wire the additional 4 pins as follows:
Y+ to Arduino A2
X+ to Arduino D9 (Same as D/C)
Y- to Arduino D8
X- to Arduino A3"



Íme a kódom:

Kód: Egész kijelölése

#include <Adafruit_GFX.h>    // Core graphics library
#include <SPI.h>
#include <Adafruit_ILI9341.h>
#include "TouchScreen.h"

// These are the four touchscreen analog pins
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A3 // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin  5
#define XP 9   // can be a digital pin  4

// This is calibration data for the raw touch data to the screen coordinates
#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000

#define MINPRESSURE 10
#define MAXPRESSURE 1000

// The display uses hardware SPI, plus #9 & #10
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// Size of the color selection boxes and the paintbrush size
#define BOXSIZE 40
#define PENRADIUS 3
int oldcolor, currentcolor;

void setup(void) {
 // while (!Serial);     // used for leonardo debugging
 
  Serial.begin(9600);
  Serial.println(F("Touch Paint!"));
  
  tft.begin();
  tft.fillScreen(ILI9341_BLACK);
  
  // make the color selection boxes
  tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
  tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
  tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
  tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
  tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
  tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
 
  // select the current color 'red'
  tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
  currentcolor = ILI9341_RED;
}

void loop()
{
  // Retrieve a point  
  TSPoint p = ts.getPoint();
  
  //  pinMode(XP, OUTPUT);
  //  pinMode(XM, OUTPUT);
  //  pinMode(YP, OUTPUT);
  //  pinMode(YM, OUTPUT);
     
  Serial.print("X = "); Serial.print(p.x);
  Serial.print("\tY = "); Serial.print(p.y);
  Serial.print("\tPressure = "); Serial.println(p.z);  
 
  
  // we have some minimum pressure we consider 'valid'
  // pressure of 0 means no pressing!
  if (p.z < MINPRESSURE || p.z > MAXPRESSURE) {
     return;
  }
  
 
  // Scale from ~0->1000 to tft.width using the calibration #'s
 //p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);//default is (240, 0) [default puts touch cord. 0=x/y upper right.
 //p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);//default is (320, 0) [I change these cause i like 0=xy bottom left. 
  
   p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
   p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
 
  /*
  Serial.print("("); Serial.print(p.x);
  Serial.print(", "); Serial.print(p.y);
  Serial.println(")");
  */
    
  if (p.y < BOXSIZE) {
     oldcolor = currentcolor;

     if (p.x < BOXSIZE) { 
       currentcolor = ILI9341_RED; 
       tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*2) {
       currentcolor = ILI9341_YELLOW;
       tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*3) {
       currentcolor = ILI9341_GREEN;
       tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*4) {
       currentcolor = ILI9341_CYAN;
       tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*5) {
       currentcolor = ILI9341_BLUE;
       tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*6) {
       currentcolor = ILI9341_MAGENTA;
       tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     }

     if (oldcolor != currentcolor) {
        if (oldcolor == ILI9341_RED) 
          tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
        if (oldcolor == ILI9341_YELLOW) 
          tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
        if (oldcolor == ILI9341_GREEN) 
          tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
        if (oldcolor == ILI9341_CYAN) 
          tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
        if (oldcolor == ILI9341_BLUE) 
          tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
        if (oldcolor == ILI9341_MAGENTA) 
          tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
     }
  }
  if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) {
    tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
  }
}
Sajnos nincs több ötletem :( .

Kis segítség jól jönne, köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Robert »

Az önálló Touch-ot nézd meg - csak utána a grafikai rajzolós mintát.
A touchban a 2.4-es kijelzőből _4 féle_ bekötés van! És még a Digit és a Analog kivezetések is vándorolnak....


A bármely pontra ráböksz és azonos kijelzés olvasható : hibás a AD/Digit lábkijelölés...
http://www.tavir.hu - a gazda :)
Trebi
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2017. június 19. hétfő, 6:48

Re: Adafruit 2.8" TFT, ILI9341 VS. 1284p

Hozzászólás Szerző: Trebi »

Köszönöm a választ!

Kicsit félrevezető volt a gyári infó, miszerint 2 analóg és 2 digitális lábra kell kötni a kijelző X,Y lábait.

Próbaképp az összes lábat analógra kötöttem és láss csodát működik az érintés...

#define YP A2
#define XM A3
#define YM A4
#define XP A5

Köszi még egyszer!
Válasz küldése