alimentazione RFID-RC522

Ciao ragazzi!
Ho un problema con il classico RC522, montato su un progetto di domotica più di un anno fa in un arduino mega.

Ha fatto sempre il suo lavoro funzionando, ma da circa un mesetto il chip smette di funzionare, nonostante il led rosso di alimentazione resti acceso.
Ovvero, passando la tessera su di esso essa non viene completamente vista, mentre fino a poche ore prima si.

Se, invece, cortocircuito il pin di reset con un GND dopo il desiderato riavvio il chip torna a funzionare, e tutto questo senza che io abbia toccato nessun cavo inerente la comunicazione arduino <-> RC522.

L’idea di un riavvio automatico non è una buona soluzione, col riavvio perdo un po’ di dati che devo poi andare a reinserire dopo il riavvio…

Qui sotto ho riportato il codice che, per circa un anno, ha funzionato h24.
Giuro che nel resto del codice, che non riporto perchè sono oltre 2k righe, non ci sono casini che riguardano questa funzione :slight_smile:

Un problema che ho pensato è sulla tensione e/o corrente, ho pensato (solo pensato!) di alimentare il chip con i +5V anzicchè con i +3.3V, ma non so se sia una buona idea.

Avete idee sulla causa di questo malfunzionamento? Arduino? Chip?

//libreria
#include <MFRC522.h>

//dichiarazione
MFRC522 mfrc522(SS_PIN, RST_PIN);

//nel setup le inizializzazioni
SPI.begin();
mfrc522.PCD_Init();



//infine la funzione:
short chiave(short * serr) { /
  mfrc522.PICC_IsNewCardPresent();
  mfrc522.PICC_ReadCardSerial();

  String uid_s = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    String uid_a = String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
    String uid_b = String(mfrc522.uid.uidByte[i], HEX);
    uid_s = uid_s + uid_a + uid_b;

    if (i == 3) { 
      Serial.print("\nUID rivelato --> "); Serial.println(uid_s);
      mfrc522.uid.size = 0;
      //altre istruzioni
      return 1;
    } else {
      return -1;
    }

up ?

dopo aver riavviato per quanto tempo funziona regolarmente? comunque non penso che sia una buona idea alimentare a 5v

Di solito un paio d'ore, però è un intervallo di tempo abbastanza variabile.

Succede che smette di funzionare dopo solo 4 - 5 ore così come succede che riesce a funzionare anche per due giorni.

Effettivamente forse dargli 5 volt significherebbe dargli il colpo di grazia :D

In questo momento, ad esempio, non sta funzionando. Ho misurato la tensione ed ho 4.2V ai capi dei 5V Considerando che arduino alimenta 2 display, led rgb, l'rc522, un arduino nano e altri sensori vi sembra bassa?

Ah, ho effettuato il reset hardware e il chip ha ripreso a funzionare ma arduino continua ad erogare la stessa differenza di potenziale

E arduino a quale fonte di tensione l'hai collegato? Usi i delay nel resto del codice? interrupt? comunque sono un po pochi 4,2v il circuito l'hai fatto tu o è prototipo tipo con fili su bredboard?

Arduino è collegato ad un alimentatore che eroga 12V, ma volendo potrei scendere fino ai 5V. Quando faccio aggiornamenti software e lo collego via usb noto che il contrasto degli lcd, oltre a ridursi, tende quasi a sfarfallare

Si uso delay. L'intero programma è fatto per eseguirsi ciclicamente 8 volte in un secondo, poi va in busy wait fino a quando un pin non riceve l'input per far riprendere l'esecuzione. Ogni ciclo ha un delay di 21 ms, inoltre essendoci dei menù ce ne sono molti altri che mi permettono di leggere informazioni e quindi interagire con la scheda. L' input è dato dall'arduino nano con una digitalWrite. Naturalmente c'è una opportuna resistenza per le correnti di ritorno sul mega.

Essendo un progetto di domotica e volendo latenze sui comandi minimi questo è stato il miglior modo che mi è venuto in mente

Il circuito l'ho fatto io, ma nel farlo ho prima provato i componenti su breadbord sullo stesso arduino mega

si ma a quanto pare il v reg (NCP1117ST50T3G mi sembra) di arduino uno dovrebbe reggere secondo il tuo progetto troppe periferiche tra cui led rgb un nano 2 display e non so cos'altro.. sospetto che l'hai stressato un po troppo... Considera che può erogare circa 800mA continui con picchi poco più alti... non capisco perché realizzando un pcb esterno non ti sei creato anche li un v reg dedicato magari con un 7805 è condensatori, in modo da non ciucciare corrente dal v reg citato prima...

Perchè nella scatola che contiene il tutto ci stanno a malapena i componenti di adesso... Cercherò di alleggerire il più possibile il carico ad arduino, grazie mille!

Ciao, Poiché mi trovo nella tua stessa situazione, rc522 che smette di leggere le card dopo un tempo random, volevo sapere se alleggerendo il carico hai risolto il tuo problema.

Grazie

mi sa che per entrambi il problema possa provenire più da queste…

String uid_s = "";
...
    String uid_a = String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
    String uid_b = String(mfrc522.uid.uidByte[i], HEX);

le String fanno sempre venire il mal di testa :smiley: