Display con SD card

Ciao a tutti, ho ordinato un piccolo display con lettore SD card incorporato.
Seguendo il pdf trovato online riesco a far funzionare il display o la SD, mentre tutti e due insieme non riesco ad usarli, o meglio riesco solo se cambio i pin del display e non lo uso come SPI.
Viceversa ottengo un display bianco ed un errore nella SD

Non capisco perché mi da questo problema, qualcuno potrebbe aiutarmi per favore?
Vi allego il pdf del display, anche se l'ho preso su un altro sito insieme ad un nettino.

Onestamente senza SPI rallenta di parecchio.

La piedinatura con cui riesco a farlo funzionare è la seguente

TFT_CS 10
TFT_RST 9
TFT_DC 8
TFT_SDA (MOSI) 7
TFT_SCK 6

SD_MOSI 11
SD_MISO 12
SD_SCK 13
SC_CS 4

Gli sketch sono quelli di esempio che si trovano con Arduino e quelli di esempio dopo che si installa la Adafruit ST7735

Per provare display e SD insieme ho solo aggiunto all'esempio della SD un riga di comando

tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST77XX_BLACK);
  tft.println("Initializing SD car..");

Giusto per vedere se compare qualcosa.

Sempre grazie per l'aiuto :slight_smile:

No PDF . Magari metti anche il link diretto al prodotto che hai acquistato

fabpolli:
No PDF . Magari metti anche il link diretto al prodotto che hai acquistato

Scusa mi sa che ho lo stesso problema di qualche tempo fa, che i miei post venivano tagliati o non venivano allegati i file, ci riprovo sperando vada bene. :slight_smile:

Il pdf l'ho preso da un sito che fornisce i pdf dei vari articoli, mentre il display l'ho preso da qui, ma sono identici:

https://it.aliexpress.com/item/1005001621932172.html?spm=a2g0s.9042311.0.0.1d3d4c4dVtW6Do

1,8 TFT Display Ita.pdf (1.23 MB)

Hedaa:
Scusa mi sa che ho lo stesso problema di qualche tempo fa, che i miei post venivano tagliati o non venivano allegati i file ...

I post vengono tagliati appena viene incontrato un qualche cosa di NON valido, esempio, se si cerca di inserire un emoticon direttamente e non con l'apposito bottone delle faccine; i files non vengono allegati se sono di tipo diverso da quelli supportati (ino, jpg, png, pdf, zip) o se di dimensioni superiori ai 2MB (complessivi).

Guglielmo

Scusa, chiariamo, stiamo parlando di questo display? ? ?


... così abbamo i vari pin ben definiti ... ::slight_smile:

Guglielmo

gpb01:
I post vengono tagliati appena viene incontrato ...

Ok grazie :slight_smile:

gpb01:
Scusa, chiariamo, stiamo parlando di questo display? ? ?

Si proprio lui

Ok, se il display è quello vedo che la parte display e la parte SD hanno entrambe un pin di CS quindi, in teoria, occorre effetuare i seguenti collegamenti (con riferimento ai pin di Arduino UNO):

D13 - SPI SCK : collegare assieme a questo pin il pin SD_SCK della SD ed il pin SCK del display

D12 - SPI MISO : collegare a questo pin il pin SD_MISO (il display NON ha tale pin)

D11 - SPI MOSI : collegare assieme a questo pin il pin SD_MOSI della SD ed il pin SDA del display

Poi, occorrono due pin per i CS dei due oggetti ... di base, la libreria SD di Arduino usa il pin 10 quindi occorre trovare un'altro pin libero per il CS del display (es. il pin 9 se non lo si usa). Entrambi i pin vanno nel setup dichiarati come pin di OUTPUT e vanno inizializzati al valore HIGH.

Poi servono un altro po' di pin per gli altri segnali del display, tipo RST (reset), A0 (che è D/C data/command), ecc.

Occorre solo capire come dire alla libreria che gestisce il display quale pin di è appunto usato per il CS, ma questa è cosa che normalmente si trova o nel metodo begin() di inizializzazione o pure quando la si istanzia ... tocca studiarsi la libreria. ::slight_smile:

Guglielmo

EDIT: Attenzione, ho letto in giro che quel display lavora SOLO a 3.3V ... SE è cosI NON puoi collegarlo direttamente, ma ti occorrono degli adattatori di livello !!! In effetti, sul pdf, si vede un chip attraverso cui passano tutti i segnali che potrebbe essere, appunto, un traslatore di livelli.

Ciao, avevo già seguito i collegamenti da te indicati, ho anche riprovato adesso per sicurezza, ma nulla non si inizializza la scheda, riesco a farli funzionare solo che uso un pin Arduino per ognuno del display e SD, se metto in comune anche un solo pin non funziona più.
Sto provando con l'esempio ReadWrite che si trova sull'IDE, aggiungendo solo qualche riga di comando per il display.
Grazie per il consiglio dei collegamenti a 3V, non ci avevo fatto caso, anche se lo uso da giorni per fare le varie prove e per adesso non si è bruciato :sweat_smile:
ma posso usare delle resistenze se non faccio male i conti da 50Ω per abbassare i 5V oppure serve per forza un traslatore?

Ancora grazie

una Buona Pasqua a tutto il gruppo.

/*
  SD card read/write

  This example shows how to read and write data to and from an SD card file
  The circuit:
   SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4 (for MKRZero SD: SDCARD_SS_PIN)

  created   Nov 2010
  by David A. Mellis
  modified 9 Apr 2012
  by Tom Igoe

  This example code is in the public domain.

*/

#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> 

// 5 RIGHE AGGIUNTE
#define RED      0xF800
#define TFT_CS        7
#define TFT_RST       9 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC        8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //1 RIGA AGGIUNTA 
  tft.initR(INITR_BLACKTAB);
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");
  // 3 RIGHE AGGIUNTE 
  tft.fillScreen(ST77XX_GREEN);
  tft.setTextColor(RED);
  tft.println("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ");
  
  
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop() {
  // nothing happens after setup
}

Hedaa:
... serve per forza un traslatore?

Serve per forza un traslatore su tutti i pin e ... ringrazia il cielo se ancora non hai bruciato nulla ... ::slight_smile:

Guglielmo

P.S.: Ricambio gli auguri !!! :slight_smile:

Grazie :slight_smile:
ora faccio l'ordine :wink:

gpb01:
Serve per forza un traslatore su tutti i pin e ... ringrazia il cielo se ancora non hai bruciato nulla ... ::slight_smile:

Guglielmo

P.S.: Ricambio gli auguri !!! :slight_smile:

Posso chiederti un aiuto?
Non capisco cosa cambia tra i 3:

https://it.aliexpress.com/item/32633858782.html?spm=a2g0s.9042311.0.0.797c4c4dRyoitW

https://it.aliexpress.com/item/32590674633.html?spm=a2g0s.9042311.0.0.797c4c4dRyoitW

https://it.aliexpress.com/item/4001336438913.html?spm=a2g0s.9042311.0.0.797c4c4dRyoitW

Sempre grazie.

Il primo è a 2 canali ed è fatto per il bus I2C, il secondo è come il primo ma a 4 canali mentre il terzo è quello che ti serve ed è ad 8 canali.

Guglielmo

gpb01:
Il primo è a 2 canali ed è fatto per il bus I2C, il secondo è come il primo ma a 4 canali mentre il terzo è quello che ti serve ed è ad 8 canali.

Guglielmo

Ok grazie :slight_smile:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.