Utilizzo contemporaneo rfidRC522 e microSDcard

Dopo le dovute presentazioni nel topic apposito, spero che qualcuno possa aiutarmi a risolvere questo problema.

Sto sperimentando vari moduli per capirne il funzionamento e le interazioni che si possono creare.
Nello specifico adesso mi sono imbattuto nel problema di riuscire a far funzionare due moduli che utilizzano entrambi il protocollo SPI.

Leggendo su internet ho capito che devono essere collegati in parallelo le uscite SCK, MOSI e MISO, mentre devo assegnare un pin a ciascun SS.
Di volta in volta comunicherà il modulo che avrà il contatto SS impostato su LOW.
Il passaggio successivo è capire come devo gestire le cose a livello di sketch.
Ci pensano le librerie a fare lo switch oppure devo fare qualcosa io per selezionare uno o l'altro modulo?

Con il codice che ho allegato sotto vorrei leggere una scheda rfid e riportare il suo numero sia sullo schermo seriale che sulla scheda sd.
Allo stato attuale non funziona niente.
Se disconnetto fisicamente il modulo sd la lettura avviene, così come la stampa su monitor seriale.

Un grazie di cuore a chiunque mi aiuti a capire ed apprendere.

#include <MFRC522.h>
#include <SD.h>

const int spi_miso = 12;  //mega 50
const int spi_mosi = 11;  //mega 51
const int spi_sck = 13;   //mega 52
const int rfid_ss = 10;   //mega 53
const int rfid_rst = 9;   //mega 49
const int sd_ss = 8;      //mega 48

MFRC522 rfid(rfid_ss, rfid_rst);
File myfile;

byte cardLetta[4];

void setup() {
  pinMode(rfid_ss, OUTPUT);
  pinMode(sd_ss, OUTPUT);
  digitalWrite(rfid_ss, HIGH);
  digitalWrite(sd_ss, HIGH);
  Serial.begin(9600);
  SPI.begin();
  SD.begin(sd_ss);
  rfid.PCD_Init();
}

void loop() {
  int i = 0;
  if(rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
    for(i = 0; i < 4; i++){
      cardLetta[i] = rfid.uid.uidByte[i];
      Serial.print(cardLetta[i]);
      Serial.print(".");
      myfile = SD.open("log.txt", FILE_WRITE);
      myfile.print(cardLetta[i]);
      myfile.print(".");
    }
    rfid.PICC_HaltA();
    Serial.println();
    myfile.close();
  }
}

CHE scheda SD stai usando? Sai che le SD, se sulla scheda non ci sono gli appositi adattatori di livello, funzionano solo a 3.3V? Dacci il link che vediamo ...

Guglielmo

Ciao Guglielmo, il modulo micro sd che uso è quello di questo kit: link
Avevo letto qualcosa del genere su un forum inglese, ma alla fine mi sembra di aver capito che la mia va alimentata a 5v, mentre il modulo rfid lo alimento a 3,3v.

Ok, si, c'è scritto che lavora a 5V, quindi ha gli adattatori di livello a bordo !

Allora andiamo per passi successivi ...
... fai una prova, collega il SOLO modulo SD con pin SS al pin 4 di Arduino e lancia uno dei programmi di esempio della libreria SD fornita con l'IDE e vedi se gli esempi funzionano.

Guglielmo

Ti riporto le prove che ho fatto:

  • ho collegato solo SD usando il pin 4 per SS. Lo sketch di prova della SD funziona
  • ho aggiunto il modulo rfid con gli stessi pin del primo post. Lo sketch di prova della SD funziona
  • nello sketch di prova ho aggiunto la libreria (#include <MFRC522.h>), l'oggetto (MFRC522 rfid(10, 9); ) e l'init (rfid.PCD_Init(); ) del modulo rfid. Lo sketch di prova della SD funziona
  • ho ripreso il mio sketch e ho cambiato il pin SS della SD impostando 4. Il mio schetch non produce niente

Leggendo un po' di post vecchi ho trovato questo con un problema simile al mio
https://forum.arduino.cc/index.php?topic=555324.0

Qualcuno potrebbe spiegarmi dopo posso trovare i parametri di SPI settings dei due moduli che uso io?
RFID MFRC522
MicroSD Card Adapter

Sui datasheet e sulle specifiche tecniche che il produttore ti deve fornire.

Guglielmo

Non sono riuscito a reperire i datasheet, comunque ho trovato i valori sfogliando le librerie che singolarmente funzionano.
Con i dati reperiti ho provato la soluzione che ho linkato nel post sopra, ma non funziona.
Qualcuno ha qualche altra idea?