[Numérique] arduino et ecran TFT ILI9341
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

arduino et ecran TFT ILI9341



  1. #1
    breihz.du.29

    arduino et ecran TFT ILI9341


    ------

    Slt les gent
    voila je vous explique mon probleme:

    J'ai un ecrant TFT2.2INCH ILI9341 de resolution 240*320 & un arduino uno
    Nom : IMG_20160502_195645.jpg
Affichages : 1013
Taille : 434,8 Ko
    J'ai suivit les instruction de cablage suivante:

    cablage sur arduino uno

    9: DC
    10: CS
    11: MOSI
    12: MISO
    13: CLK
    3.3V : VCC
    GND: GND



    PIN ecrant
    1: VCC (3.3V de l'arduino)
    2: GND
    3: CS
    4: RST
    5: DC/RS
    6: SDI/MOSI
    7: CLK
    8: LED (r1: VCC (3.3V de l'arduino)etro-eclairage)
    9: SDO/MISO

    NOTE:
    RST non câbler car spécifier comme optionel

    Je joint si dessous le programme de test utiliser:

    Je tien a préciser que le code fournis est le code récupéré dans exemple je ne pense pas qu'il soit bugger ^^

    Code:
    /***************************************************
      This is our GFX example for the Adafruit ILI9341 Breakout and Shield
      ----> http://www.adafruit.com/products/1651
    
      Check out the links above for our tutorials and wiring diagrams
      These displays use SPI to communicate, 4 or 5 pins are required to
      interface (RST is optional)
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
    
      Written by Limor Fried/Ladyada for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
     ****************************************************/
    
    
    #include "SPI.h"
    #include "Adafruit_GFX.h"
    #include "Adafruit_ILI9341.h"
    
    // For the Adafruit shield, these are the default.
    #define TFT_DC 9
    #define TFT_CS 10
    
    // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    // If using the breakout, change pins as desired
    //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
    
    void setup() {
      Serial.begin(9600);
      Serial.println("ILI9341 Test!"); 
     
      tft.begin();
    
      // read diagnostics (optional but can help debug problems)
      uint8_t x = tft.readcommand8(ILI9341_RDMODE);
      Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDMADCTL);
      Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDPIXFMT);
      Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDIMGFMT);
      Serial.print("Image Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDSELFDIAG);
      Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
      
      Serial.println(F("Benchmark                Time (microseconds)"));
      delay(10);
      Serial.print(F("Screen fill              "));
      Serial.println(testFillScreen());
      delay(500);
    
      Serial.print(F("Text                     "));
      Serial.println(testText());
      delay(3000);
    
      Serial.print(F("Lines                    "));
      Serial.println(testLines(ILI9341_CYAN));
      delay(500);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));
      delay(500);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(ILI9341_GREEN));
      delay(500);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
      delay(500);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, ILI9341_MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, ILI9341_WHITE));
      delay(500);
    
      Serial.print(F("Triangles (outline)      "));
      Serial.println(testTriangles());
      delay(500);
    
      Serial.print(F("Triangles (filled)       "));
      Serial.println(testFilledTriangles());
      delay(500);
    
      Serial.print(F("Rounded rects (outline)  "));
      Serial.println(testRoundRects());
      delay(500);
    
      Serial.print(F("Rounded rects (filled)   "));
      Serial.println(testFilledRoundRects());
      delay(500);
    
      Serial.println(F("Done!"));
    
    }
    
    
    void loop(void) {
      for(uint8_t rotation=0; rotation<4; rotation++) {
        tft.setRotation(rotation);
        testText();
        delay(1000);
      }
    }
    
    unsigned long testFillScreen() {
      unsigned long start = micros();
      tft.fillScreen(ILI9341_BLACK);
      yield();
      tft.fillScreen(ILI9341_RED);
      yield();
      tft.fillScreen(ILI9341_GREEN);
      yield();
      tft.fillScreen(ILI9341_BLUE);
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setTextSize(5);
      tft.println("Groop");
      tft.setTextSize(2);
      tft.println("I implore thee,");
      tft.setTextSize(1);
      tft.println("my foonting turlingdromes.");
      tft.println("And hooptiously drangle me");
      tft.println("with crinkly bindlewurdles,");
      tft.println("Or I will rend thee");
      tft.println("in the gobberwarts");
      tft.println("with my blurglecruncheon,");
      tft.println("see if I don't!");
      return micros() - start;
    }
    
    unsigned long testLines(uint16_t color) {
      unsigned long start, t;
      int           x1, y1, x2, y2,
                    w = tft.width(),
                    h = tft.height();
    
      tft.fillScreen(ILI9341_BLACK);
      yield();
      
      x1 = y1 = 0;
      y2    = h - 1;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = w - 1;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t     = micros() - start; // fillScreen doesn't count against timing
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = w - 1;
      y1    = 0;
      y2    = h - 1;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = 0;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t    += micros() - start;
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = 0;
      y1    = h - 1;
      y2    = 0;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = w - 1;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t    += micros() - start;
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = w - 1;
      y1    = h - 1;
      y2    = 0;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = 0;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
    
      yield();
      return micros() - start;
    }
    
    unsigned long testFastLines(uint16_t color1, uint16_t color2) {
      unsigned long start;
      int           x, y, w = tft.width(), h = tft.height();
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
      for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
    
      return micros() - start;
    }
    
    unsigned long testRects(uint16_t color) {
      unsigned long start;
      int           n, i, i2,
                    cx = tft.width()  / 2,
                    cy = tft.height() / 2;
    
      tft.fillScreen(ILI9341_BLACK);
      n     = min(tft.width(), tft.height());
      start = micros();
      for(i=2; i<n; i+=6) {
        i2 = i / 2;
        tft.drawRect(cx-i2, cy-i2, i, i, color);
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
      unsigned long start, t = 0;
      int           n, i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      n = min(tft.width(), tft.height());
      for(i=n; i>0; i-=6) {
        i2    = i / 2;
        start = micros();
        tft.fillRect(cx-i2, cy-i2, i, i, color1);
        t    += micros() - start;
        // Outlines are not included in timing results
        tft.drawRect(cx-i2, cy-i2, i, i, color2);
        yield();
      }
    
      return t;
    }
    
    unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
      unsigned long start;
      int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(x=radius; x<w; x+=r2) {
        for(y=radius; y<h; y+=r2) {
          tft.fillCircle(x, y, radius, color);
        }
      }
    
      return micros() - start;
    }
    
    unsigned long testCircles(uint8_t radius, uint16_t color) {
      unsigned long start;
      int           x, y, r2 = radius * 2,
                    w = tft.width()  + radius,
                    h = tft.height() + radius;
    
      // Screen is not cleared for this one -- this is
      // intentional and does not affect the reported time.
      start = micros();
      for(x=0; x<w; x+=r2) {
        for(y=0; y<h; y+=r2) {
          tft.drawCircle(x, y, radius, color);
        }
      }
    
      return micros() - start;
    }
    
    unsigned long testTriangles() {
      unsigned long start;
      int           n, i, cx = tft.width()  / 2 - 1,
                          cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      n     = min(cx, cy);
      start = micros();
      for(i=0; i<n; i+=5) {
        tft.drawTriangle(
          cx    , cy - i, // peak
          cx - i, cy + i, // bottom left
          cx + i, cy + i, // bottom right
          tft.color565(i, i, i));
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledTriangles() {
      unsigned long start, t = 0;
      int           i, cx = tft.width()  / 2 - 1,
                       cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(i=min(cx,cy); i>10; i-=5) {
        start = micros();
        tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
          tft.color565(0, i*10, i*10));
        t += micros() - start;
        tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
          tft.color565(i*10, i*10, 0));
        yield();
      }
    
      return t;
    }
    
    unsigned long testRoundRects() {
      unsigned long start;
      int           w, i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      w     = min(tft.width(), tft.height());
      start = micros();
      for(i=0; i<w; i+=6) {
        i2 = i / 2;
        tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledRoundRects() {
      unsigned long start;
      int           i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(i=min(tft.width(), tft.height()); i>20; i-=6) {
        i2 = i / 2;
        tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
        yield();
      }
    
      return micros() - start;
    }
    La question est ou je fail et pourquoi sa marche pas ?

    merci d'avance pour votre aide

    -----
    rien n'est impossible alors fonce

  2. #2
    jiherve

    Re : arduino et ecran TFT ILI9341

    Bonsoir
    dans la doc du contrôleur il est dit qu'il faut le reseter !!!
    http://www.newhavendisplay.com/app_notes/ILI9341.pdf
    mais peu etre qu'il y a une astuce sur le bouclier!
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    breihz.du.29

    Re : arduino et ecran TFT ILI9341

    Merci jiherve pour ta reponce

    Du coup il dise que le signal reset est actif a l’état bas donc si je met un condo de 100nF vers la masse avec une résistance de pull-up sa le fait tu pense ?
    rien n'est impossible alors fonce

  4. #4
    jiherve

    Re : arduino et ecran TFT ILI9341

    Re
    oui sans doute mais regardes tout de même les caractéristiques du reset, sa durée en particulier ,pour choisir la bonne constante de temps et place une diode(1N4148) en // sur la résistance cathode au + alim pour décharger la capa lorsque tu coupes l'alim.
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    breihz.du.29

    Re : arduino et ecran TFT ILI9341

    Je vient de parcourir la doc et j'ai trouver aucune info sur la durée il mette juste que le niveau doit être a 1 en idl a moins que j'ai loupe l'info ^^

    Euh t'est sur pour le coup de la cathode au plus ? ^^ pour moi diode ou pas diode dans le sens que tu dit sa change rien, je verrai plus une resistance de 1M en // sur le condo nan
    Dernière modification par breihz.du.29 ; 02/05/2016 à 22h17.
    rien n'est impossible alors fonce

  7. #6
    jiherve

    Re : arduino et ecran TFT ILI9341

    RE
    il y a un temps indiqué page 215 : 10µs après la mise sous tension.
    Donc avec 100k et 100nf cela devrait aller et une diode en // sur la 100K cathode au plus anode au point commun resistance/capa/reset et oui je suis sur.
    nota le reset gère le mode "sleep" donc lire avec attention le chapitre 12.
    JR
    l'électronique c'est pas du vaudou!

  8. #7
    elektrax

    Re : arduino et ecran TFT ILI9341

    il y a un regulateur 3v3 sur le pcb écran ?
    merci

  9. #8
    flyingrock

    Re : arduino et ecran TFT ILI9341

    Bonjour,

    Chez moi le reset se fait de cette manière.
    Code:
      //************* Reset LCD Driver ****************//
             RES = 1;
            delayms(1); // Delay 1ms
            RES = 0;
            delayms(10); // Delay 10ms // This delay time is necessary
            RES = 1;
            delayms(10); // Delay 120 ms

  10. #9
    breihz.du.29

    Re : arduino et ecran TFT ILI9341

    Slt dsl pour mon absence de quelque jour

    j'ai tester avec la capa et la resistance pour le reset et tjrs rien :-/

    il y a un regulateur 3v3 sur le pcb écran ?
    oui il y en a un c'est un "662k"

    flyingrock selon toi le mieu c'est un reset logiciel ou materiel ?

    normalement le reset avec la capa et la resistance doit le faire
    rien n'est impossible alors fonce

  11. #10
    elektrax

    Re : arduino et ecran TFT ILI9341

    faut l'alimenter en 5 volts à vcc, le regulateur intégré fournira le 3v3 au 9341, qui théoriquement d'apres la datasheet n'est pas I/O 5 volts tolérant
    merci

  12. #11
    flyingrock

    Re : arduino et ecran TFT ILI9341

    Bonjour,

    Je n'ai jamais essayé le reset matériel, mais si ça fonctionne ça a le mérite d’économiser une sortie du µC.
    Je rejoins ce qu'a dit elektrax, j'ai du mettre des convertisseurs de tension sur chaque commande du µC, voir le lien.

    http://www.ebay.com/itm/5PCS-IIC-I2C...0AAOSwpDdVE9cc

    @+

  13. #12
    breihz.du.29

    Re : arduino et ecran TFT ILI9341

    Citation Envoyé par elektrax Voir le message
    faut l'alimenter en 5 volts à vcc, le regulateur intégré fournira le 3v3 au 9341, qui théoriquement d'apres la datasheet n'est pas I/O 5 volts tolérant
    ah.... :-/ pas compatible I/O 5V je lui balançais les sortie direct sur ses entre il se peu qu'il est pas aimer sa et cramé ?

    j'ai tester en l'alimentant en 5V et sa change rien

    juste un truc le bas de l'ecrant devient vite chaud
    rien n'est impossible alors fonce

  14. #13
    breihz.du.29

    Re : arduino et ecran TFT ILI9341

    Vu que j'avais un doute j'ai tester avec d'autre programme test et une autre librarie la "ILI9340"
    et rien non plus
    rien n'est impossible alors fonce

Discussions similaires

  1. Inversion de bit / PIC32 / LCD ili9341
    Par schneiderj dans le forum Électronique
    Réponses: 3
    Dernier message: 27/10/2015, 07h26
  2. Ecran LCD sur Arduino UNO
    Par invitedd1bc5d9 dans le forum Électronique
    Réponses: 2
    Dernier message: 21/03/2015, 10h38
  3. Ecran LCD Arduino
    Par invite76fdd873 dans le forum Électronique
    Réponses: 4
    Dernier message: 20/12/2014, 21h55
  4. utiliser un écran lcd arduino
    Par invite712e037c dans le forum Électronique
    Réponses: 3
    Dernier message: 14/12/2014, 07h57
  5. [PIC / C] - Gestion d'un TFT avec contrôleur ILI9341
    Par invite3c35244f dans le forum Électronique
    Réponses: 5
    Dernier message: 25/07/2013, 09h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...