[RESOLU] ILI9341 : Conflit avec la SD

Bonjour,

je viens vers vous car j’essaie de résoudre un problème depuis plusieurs semaine.

Je souhaite (en vain) charger des BMP sur mon écran ili9341 via le lecteur SD
J’ai parcouru le Web anglophone mais je n’ai pas trouvé de solution à mon problème bien que beaucoup de personne semble le rencontrer.

  • Le tft s’initialise bien
  • la carte SD s’initialise bien
  • Une fois la carte SD initialisée le tft ne fonctionne plus (impossible d’affiché quoi que ce soit même du texte ou changer couleur fond)
#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>         // Core graphics library
#include <Adafruit_ILI9341.h>     // Hardware-specific library
#include <Adafruit_ImageReader.h> // Image-reading functions




  #define SD_CS   5 //4

#define TFT_CS  4 //10//5   
#define TFT_RST 8 //6   
#define TFT_DC 9 //7              
#define TFT_MOSI 11 //8           
#define TFT_CLK 13 //9           
#define TFT_MISO  12// 10   

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST,TFT_MISO);



void setup(void) {


  Serial.begin(9600);

           // Initialize screen
tft.begin(); 
  tft.fillScreen(ILI9341_BLUE);
  Serial.print(F("Initializing SD card..."));
  if(!SD.begin(SD_CS)) {
    Serial.println(F("failed!"));
    for(;;); // Loop here forever
  }
  Serial.println(F("OK!"));

   tft.fillScreen(ILI9341_YELLOW); // A partir de là l'écran ne communique plus
}

Il semblerait qu’il y ait un conflit SPI. connaissez vous une solution à mon problème ?

Je suis sur aduino nano et le tft est celui ci, j’ai également testé avec un lecteur sd externe au tft, même problème

C'est un écran qui fonctionne en 3.3V? Le nano est en 5V donc il te faut un convertisseur de niveau ou des ponts diviseurs pour le faire fonctionner. As-tu fait ça ?

Ton problème peut venir de bibliothèques incompatibles, essaye de changer de bibliothèque pour le lecteur SD.

On trouve beaucoup de choses sur ce problème sur internet : "arduino ILI9341 SD conflict"

Il faudrait fouiller sur le forum pour retrouver le fil en question mais il y a eu en particulier l'exemple de librairies qui ne désactivent pas le chip select de l'écran ou de la SD-card après utilisation créant un conflit sur le bus SPI.

qui a écrit le croquis ?

le spi doit etre commun au sd et tft sauf CS 10 pour le tft et une autre pin CS pour le sd, en 3v3 avec levelshifter

// TFT display and SD card will share the hardware SPI interface. // Hardware SPI pins are specific to the Arduino board type and // cannot be remapped to alternate pins.

The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila ** CS - depends on your SD card shield or module. Pin 4 used here for consistency with other Arduino examples

define TFT_DC 9

define TFT_CS 10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

le lecteur sd ne peut pas etre cablé autrement, les pins sont définies quelque part dans la biblio SD/utility suivant qu'on utilise un uno, mega, etc... on peut juste choisir la pin à relier à CS

quant au lecteur sd externe le catalex v1. 11/01/2013 ne fonctionne pas, sans bidouille spéciale, juste pour info

Bonjour.

J'ai eu le problème il y a qq années de vouloir afficher un bmp à partir du lecteur de SD de la même carte ili9340 ou 41. Ça n'a jamais fonctionné.

J'ai finalement choisi d'utiliser un autre lecteur de carte SD et ça a fonctionné impeccable.

Tout est expliqué sur mon site.

çà peut vraiment fonctionner avec lecteur interne
jpg attachée
çà fait longtemps donc je ne me souviens pas quels biblios, probablement d’après :

comme j’en ai fait un stand-alone, pour l’adapteur de niveau j’ai utilisé les résistances, le 3v3 pour l’adapteur de niveau je l’ai repris sur le tft

Bonjour

lesept: C'est un écran qui fonctionne en 3.3V? Le nano est en 5V donc il te faut un convertisseur de niveau ou des ponts diviseurs pour le faire fonctionner. As-tu fait ça ?

L'écran est branché sur la sortie 3.3v de l'arduino

lesept: Ton problème peut venir de bibliothèques incompatibles, essaye de changer de bibliothèque pour le lecteur SD.

J'ai essayé avec la library SD et SDfat, même résultat

lesept: On trouve beaucoup de choses sur ce problème sur internet : "arduino ILI9341 SD conflict"

Oui énormément de chose mais peu de solutions :sob:

fdufnews: Il faudrait fouiller sur le forum pour retrouver le fil en question mais il y a eu en particulier l'exemple de librairies qui ne désactivent pas le chip select de l'écran ou de la SD-card après utilisation créant un conflit sur le bus SPI.

J'ai cherché sans résultat dans le forum.J'ai essayer de forcer les CS à HIGH dans mon code, là encore en vain

elektrax: qui a écrit le croquis ?

le spi doit etre commun au sd et tft sauf CS 10 pour le tft et une autre pin CS pour le sd, en 3v3 avec levelshifter

// TFT display and SD card will share the hardware SPI interface. // Hardware SPI pins are specific to the Arduino board type and // cannot be remapped to alternate pins.

The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila ** CS - depends on your SD card shield or module. Pin 4 used here for consistency with other Arduino examples

define TFT_DC 9

define TFT_CS 10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

le lecteur sd ne peut pas etre cablé autrement, les pins sont définies quelque part dans la biblio SD/utility suivant qu'on utilise un uno, mega, etc... on peut juste choisir la pin à relier à CS

quant au lecteur sd externe le catalex v1. 11/01/2013 ne fonctionne pas, sans bidouille spéciale, juste pour info

contrairement à ce que le croquis dit tout est branché correctement, comme tu l'indiques SD_cs en 4 TFT_cs 10, les numéros de pins commentés sont des tests, ça peut induire en erreur désolé

Bonjour

Afin d'exlure un conflit de CS, j'ai testé les valeurs au voltmetre des mes pins TFT_CS et TFT_DC. TFT_CS passe bien à 4,25v quand je communique avec la SD SD_CS passe bien à 4,25v quand je communique avec le TFT.

j'ai testé avec une autre bibliotheque tft, lors de la loop, le TFT_CS varie correctement de 0 à 4.35v, SD_CS stagne a 4.35v. Mais le TFT n'affiche rien, alors que si je commente l'init de la SD ça fonctionne correctement.

void setup(void)
{
  Serial.begin(9600);
  if(!SD.begin(SD_CS)) {
 Serial.println(F("ko!"));
 for(;;);
}
 Serial.print(F("sdok"));
digitalWrite(SD_CS,HIGH);
  delay(1000);
  ucg.begin(UCG_FONT_MODE_TRANSPARENT);
  //ucg.begin(UCG_FONT_MODE_SOLID);
  ucg.clearScreen();
}


void loop(void)
{
  //ucg.setRotate90();
  ucg.setFont(ucg_font_ncenR12_tr);
  ucg.setColor(255, 255, 255);
  //ucg.setColor(0, 255, 0);
  ucg.setColor(1, 255, 0,0);
  
  ucg.setPrintPos(0,25);
  ucg.print("Hello World!");


  delay(500);  
}

Salut.

Cela tombe bien, je suis en train de faire des essais avec un ILI9341 et un NRF24L01.

Pour que mon NRF24L01 fonctionne j'ai basculé les pins du ILI9341 comme suit :

define TFT_DC 5

define TFT_CS 10

define TFT_MOSI 4

define TFT_CLK A0

define TFT_RST 6

define TFT_MISO 12

Donc je n'ai plus aucune pin commune entre les deux. Et cela fonctionne. Si cela peut aider ... @+

Bonjour et merci

je me suis empressé de tester désormais sd s'initialise mais le tft reste blanc j'ai bien configuré A0 en output=> pinMode(A0, OUTPUT);

OK oublié de démutualisé le MOSI ça a l'air de fonctionné !

merci beaucoup !

Je confirme problème résolu, j'arrive désormais à afficher le bmp depuis la SD. Mille merci j'étais bloqué depuis un mois...

Coup de bol ... je travaillais sur le sujet :) Bonne continuation. @+