NFC PN5180 et Arduino Mega

Bonjour
Dans le cadre d'un projet j'essaye d'utiliser un lecteur RFID PN5180
Le PN5180 marche en 3,3V j'ai donc du mettre un pitcher pour passer du 5,5V au 3,3V
Le but de mon circuit est simple, vérifier si tag RFID est le bon, et si oui allumer une led verte (pas encore sur le schémas).

Et voilà pour le moment le code que j'ai et que j'ai testé:

#include <Debug.h>
#include <PN5180.h>
#include <PN5180ISO15693.h>

/*

*/
 const int ledred = 7;
 const int ledgreen = 6;

// The number of PN5180 readers connected
 const byte numReaders = 1; ///  A MODIFIER

// What is the "correct" UID that should be detected by each reader
uint8_t correctUid[][8] = 
{
  {0xD1,0xD2,0x48,0x2A,0x50,0x1,0x4,0xE0}, //TAG 1
  {0xB,0x8A,0xC6,0x6A,0x0,0x1,0x4,0xE0} //TAG 2
};


//Si ce tag est lu par un des lecteurs, le puzzle sera reset
uint8_t resetUid[][8] = {{0xD1,0xD2,0x48,0x2A,0x50,0x1,0x4,0xE0}}; //TAG 1}

//Valeur par défaut quand il n'y a pas de tag
uint8_t noUid[][8] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; //TAG 1}

//Serial.println("Etape 1");
// GLOBALS
// Each PN5180 reader requires unique NSS, BUSY, and RESET pins,
// as defined in the constructor below
PN5180ISO15693 nfc[] = {
PN5180ISO15693(10,9,8), // Pins correspondants aux fonstions des lecteurs
 // PN5180ISO15693(16,4,17), // works
 // PN5180ISO15693(33,25,32), // works
};

// Array to record the value of the last UID read by each reader
uint8_t lastUid[numReaders][8];
 
// the setup function runs once when you press reset or power the board
void setup() {

  Serial.println("Etape 1");
  pinMode(ledred,OUTPUT);// Led rouge
  pinMode(ledgreen,OUTPUT);// Led verte

  Serial.begin(115200);
  Serial.println("RFID Tirroir, escape pirate");

  for(int i=0; i<numReaders; i++){
    Serial.print("Reader #");
    Serial.println(i);
    Serial.println(F("Initialising..."));
    nfc[i].begin();
    Serial.println(F("Resetting..."));
    nfc[i].reset();
    Serial.println(F("Enabling RF field..."));
    nfc[i].setupRF();
  }
  Serial.println(F("Setup Complete"));


}

// the loop function runs over and over again forever
void loop() {
 // digitalWrite(ledgreen, LOW);
  digitalWrite(ledred, HIGH);   
  delay(1000);    
  digitalWrite(ledred, LOW);
 // digitalWrite(ledgreen, HIGH);   
  delay(1000);                     
}

En essayant de lancer le code le log me donne ceci:

J'en déduis donc que j'ai un soucis à la ligne nfc[i].reset();
J'ai fait des test de continuité, regardé les tensions qui devaient etre en 3,3V et 5V, meme testé avec un autre PN5180 mais je n'arrive pas a passer le reset du lecteur. Quelqu'un pourrait m'aider?

Je ne sais pas quel module vous avez mais peut-être qu'il faut emmener GND aussi du côté 3.3V et ne pas simplement le connecter au module RFID

rajoutez un fil entre les 2 GND du "pitcher" comme vous l'appelez (voltage-level translator)

Okay je ne connaissais pas le nom! Je viens de relier les deux grounds et cela ne change rien. Aprés j'ai bien 5V sur les pin venant de l'arduino et 3,3V pour les pins qui vont au lecteur donc lui a l'air de bien faire son travail

Voilà à quoi ressemble le schémas actuel:

Autre correction, je viens de vérifier la tension entre la pin reset et le ground et je n'ai rien du tout (enfin 0,02V). Je me suis dis que c'était peut être un problème du modificateur de tension, j'ai donc branché sur une autre entrée5V/sortie3,3V la pin reset qui semblait fonctionnait. Et la pareil, pas de tension dés que je branche ma pin reset. Par contre entre la pin ground et Reset de mon lecteur y'a pas les 3,3V qu'il y'ai (je crois?) censé avoir

EDIT: J'ai changé de lecteur! Et cette fois ci j'ai bien 3,3V entre son ground et la pin reset. Mais toujours pas d'amélioration dans le log

Votre breadboard est bien continue au milieu ?

Oui

Vous pouvez poster une photo du montage ?

Avez vous testé un code d’exemple du lecteur de carte pour voir si le montage est fonctionnel?

Le GitHub - playfultechnology/arduino-rfid-PN5180: Interfacing Arduino with 13.56MHz ISO15693 RFID tags using PN5180 modules dit:

——-

There are 13 pins on the 5180 board, as follows:

  • +5V : +5V DC supply
  • +3.3V : +3.3V DC supply
  • RST : Reset line from Arduino *
  • NSS : (Not) Slave Select is pulled LOW when communicating with Arduino *
  • MOSI : Master-Out, Slave-In used for transmitting data from Arduino to the reader *
  • MISO : Master-In, Slave-Out used for transmitting data from the reader to the Arduino
  • SCK : System Clock signal sent from Arduino *
  • BUSY : Used by reader to report busy state
  • GND : Ground
  • GPIO : Can be used as general-purpose output pin from the reader (e.g. to power an LED)
  • IRQ : Not required
  • AUX : Not required
  • REQ : Not required

Arduino UNO/Nano/Mega operates at 5V logic. However, the PN5180 works at 3.3V logic level, and is not 5V tolerant. If using one of these microprocessors:

  • You must use a 5V <-> 3.3V level shifter on any lines that send HIGH output from the Arduino to the PN5180. These are RST, NSS, MOSI, and SCK marked with an asterisk in the list above.
  • You may use a 3.3V <-> 5V level shifter on those lines that send HIGH output from the PN5180 to the Arduino (MISO, BUSY) though this is not generally necessary - a HIGH 3.3V signal will normally be recognised as a HIGH signal on a 5V system too.
  • MOSI, MISO, and SCK lines are shared between all readers, and use Arduino SPI pins 11(MOSI), 12(MISO), and 13(SCK).
  • NSS, BUSY, and RESET lines must be assigned to unique GPIO pins for each reader.

———-

Okay j'ai enfin trouvé mon erreur! En fait j'ai été idiot, j'avais suivi le plan de cablage montré sans me poser de question. Sur un arduino Uno les pin MOSI, MISO, et SCK sont bien sur les pins 11, 12 et 13 mais pas sur le Mega! Du coup j'ai juste branché aux pin 51, 52 et 53 et ça a marché du premier coup!
Tout fonctionne, merci pour le tips!

Ah ben voilà :slight_smile:

Bonne continuation

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