Convivenza SPI (RFID + microSD)

Ciao a tutti,

ho interconnesso al mio Arduino i due moduli in oggetto (lettore RFID e microSD) come da schema. Ho messo in comune i pin SPI (tranne per il reset di cui il modulo microSD è sprovvisto) e ho iniziato la stesura di uno sketch che, concettualmente mi pare corretto, ma ovviamente non funziona (viene caricato ma il sistema non risponde come dovrebbe).

In pratica volevo che, avvicinando una qualsiasi chiave RFID venga verificata la presenza o meno della scheda microsd.

#include <SPI.h>
#include <MFRC522.h>
#define CS_RFIDREADER 9
#define RST_PIN 99
MFRC522 rfid(CS_RFIDREADER, RST_PIN);
MFRC522::MIFARE_Key key;
byte nuidPICC[4];


#include <SD.h>
Sd2Card card;
SdVolume volume;
SdFile root;
const int CS_SDREADER = 10;


void setup() {
  Serial.begin(9600);
  delay(1000);
  pinMode(CS_SDREADER, OUTPUT);
  digitalWrite(CS_SDREADER, HIGH);
  pinMode(CS_RFIDREADER, OUTPUT);
  digitalWrite(CS_RFIDREADER, HIGH);
  rfid.PCD_Init(); // Init MFRC522
}

void loop() {
  digitalWrite(CS_SDREADER, HIGH);
  digitalWrite(CS_RFIDREADER, LOW);
  delay(20);
  if (rfid.PICC_IsNewCardPresent()) {
    if (rfid.PICC_ReadCardSerial()) {
      for (byte i = 0; i < 4; i++) {
        nuidPICC[i] = rfid.uid.uidByte[i];
      }
      printHex(rfid.uid.uidByte, rfid.uid.size);
      Serial.println();
      rfid.PICC_HaltA();
      rfid.PCD_StopCrypto1();
      delay(20);
      digitalWrite(CS_SDREADER, LOW);
      digitalWrite(CS_RFIDREADER, HIGH);       
     delay(20);
      if (card.init(SPI_HALF_SPEED, CS_SDREADER)) {
        Serial.println("SD PRESENTE");
      } else {
        Serial.println("SD NON PRESENTE");
      }
      digitalWrite(CS_SDREADER, HIGH);
    }
  }
}


void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

Non entro nel merito del programma, ma una cosa è certa ... dopo aver correttamente, nel setup(), inizializzato i pin che sono utilizzati come CS ed averli posti HIGH, il resto lo devi lasciar fare alle librerie e tu non devi più toccarli.

Qualsiasi libreria che si rispetti, che usa il bus SPI, deve essere informata di quale pin si usa per il CS e poi lo deve gestire lei.

Guglielmo

Buonasera a tutti,

dopo mesi sono riuscito a riprendere mano con gli esperimenti e... rullo di tamburi.... ne sono venuto fuori dal problema!!!

banalmente mettendo una resistenza come da immagine (in realtà ho utilizzato una resistenza da 220R). Ora però vorrei chiedere a voi il motivo della necessità di tale resistenza. Senza i due moduli non convivono, con la resistenza vanno che è una meraviglia (e faccio inoltre notare che il modulo RFID va a 3.3V, quello SD a 5V, pertanto ho utilizzato degli adattatori di livello su tutte le linee...

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