RFID works only when connected to PC. Photo and code included

Immediately after powering on, sometimes the arduino/MFRC522 reads tags, and the TX/RX lights blink, showing that it reads. Sometimes, it doesn't. There's seemingly a 50/50 chance it'll read tags every power cycle.

I'm running the example sketch DumpInfo from the MFRC522 library, and the only change I've made is commenting out "While(serial)" in the setup. All connections are specified in the comment chunk at the beginning of the code, I'm using a nano. MFRC522 is powered by 3.3v on board.

  • Works consistently when:
  1. Powered by USB via PC
  • Works inconsistently when:
  1. Powered by 5V 1A to Vin
  2. Powered by 12V 1A to Vin
  3. Powered by USB via 5V 1A Apple Charging block
  • Things I've tried:
  1. Increasing Delay(4) to Delay(100) in the setup, before PCDInit
  2. Changing "#define MFRC522_SPICLOCK SPI_CLOCK_DIV1" from _DIV1 to _DIV8, to slow down the SPI.
  3. Resoldering
/*
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from a PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 * 
 * Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID
 * Reader on the Arduino SPI interface.
 * 
 * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE
 * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When
 * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output
 * will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in communication" messages
 * when removing the PICC from reading distance too early.
 * 
 * If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple tag reading).
 * So if you stack two or more PICCs on top of each other and present them to the reader, it will first output all
 * details of the first and then the next PICC. Note that this may take some time as all data blocks are dumped, so
 * keep the PICCs at reading distance until complete.
 * 
 * @license Released into the public domain.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 */

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_PIN          10         // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

void setup() {
	Serial.begin(9600);		// Initialize serial communications with the PC
	//while (!Serial);		// Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
	SPI.begin();			// Init SPI bus
	mfrc522.PCD_Init();		// Init MFRC522
	delay(4);				// Optional delay. Some board do need more time after init to be ready, see Readme
	mfrc522.PCD_DumpVersionToSerial();	// Show details of PCD - MFRC522 Card Reader details
	Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}

void loop() {
	// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
	if ( ! mfrc522.PICC_IsNewCardPresent()) {
		return;
	}

	// Select one of the cards
	if ( ! mfrc522.PICC_ReadCardSerial()) {
		return;
	}

	// Dump debug info about the card; PICC_HaltA() is automatically called
	mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

Maybe your PC is supplying more than 1A... Sounds a lot like a power issue.

FYI... You can't supply 5V to Vin since that pin is connected to the onboard regulator which needs 6-9V to properly regulate down to 5V. If you do have 5V, connect it directly to the 5V pin, not Vin

Which controller are You using?
5 volt to Vin..... Read the data sheet..
Check the need for current for the full setup. Data sheets again...

Whats the deal with returns inside loop() ?

I heard that on this forum, about the 5V to Vin, so I got excited and thought the 12v power supply would fix it, nope:/ You said my PC is maybe supplying more than 1A, the rfid reader doesn't consume anything near an amp unfortunately, around 15ma.Makes me doubt it's a current issue.

I 100% agree it sounds like a power issue. I can't nail it down still...

That kills the loop, so that if there is no card detected, it doesn't run the whole loop. This is an example code, it's not mine.

Controller is ATMega328P. I learned that the 5v to vin is no bueno. Even after 12v 1A and 12V 2A to vin, no dice. This setup consumes about 100ma total.

Can’t tell from the picture: do you have joined GND between the arduino and the board?

Where did You learn that 5 volt to Vin is okey?
Maybe for a 3.3 volt running controller but for the 5 volt Arduinos the spec says 7 - 12 volt.

So you completely missed the correct way to power a Nano in a meaningful project! :worried:

Use an adequate 5 V regulated power supply connected to "5V" and ground.

"Vin" through the on-board regulator which has minimal heatsinking is basically useless and should be completely avoided. The regulators on some clones are reported to fail at 12 V or slightly above in any case and if they fail shorted, you toast your Nano.

While it may average 100 mA, the MFRC-522 may require more current in bursts.

I am not sure what limitations the "Apple Charging block" may or may not have - it might actually be a better supply than the PC and provide a higher voltage which interferes with the logic levels which would then have the same problem with correct power connection to the "5V" pin. :confused:

You do realise that the "MH-ET Live" module requires 3.3 V logic levels to its inputs, not 5 V, and that the 3.3 V "output" of the "Nano" has limited current capability, do you not? :face_with_raised_eyebrow: