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
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.
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:
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).
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. :
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
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
}
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.