RC522 y Arduino UNO/MEGA usando IRQ (interrupts)

Iniciado por [u]nsigned, 6 Junio 2020, 07:20 AM

0 Miembros y 1 Visitante están viendo este tema.

[u]nsigned

Hola, estoy aprendiendo Arduino. Tengo un lector RFID modelo RC522 y lo quiero usar con tarjetas.



Todos, absolutamente todos los ejemplos que he encontrado son usando el metodo polling, es decir meter una rutina que constantemente esté verificando si se leyo algo, dentro de la funcion loop del programa Arduino.

Mi duda es si algun heroe sin capa podria darme un ejemplo basico de como usar el pin IRQ del RC522 asi poder manejar la lectura con las interrupciones de mi Arduino. Tambien tengo un arduino Mega como opcion B

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

rub'n

#1
[quote author=nsigned link=topic=505194.msg2223199#msg2223199 date=1591420849]
Hola, estoy aprendiendo Arduino. Tengo un lector RFID modelo RC522 y lo quiero usar con tarjetas.



Todos, absolutamente todos los ejemplos que he encontrado son usando el metodo polling, es decir meter una rutina que constantemente esté verificando si se leyo algo, dentro de la funcion loop del programa Arduino.

Mi duda es si algun heroe sin capa podria darme un ejemplo basico de como usar el pin IRQ del RC522 asi poder manejar la lectura con las interrupciones de mi Arduino. Tambien tengo un arduino Mega como opcion B
[/quote]

Que tal hommie? no tengo esa tarjeta si quiero es la PN532, por lo visto en el loop debes tener un condicional y con una variable booleana volatile, que sete a false una vez entrado en ese condicional.

Código (cpp) [Seleccionar]
#include <SPI.h>
#include <MFRC522.h>
#include <String.h>

#define RST_PIN     8
#define SS_PIN      9

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

volatile bool cardPresent; //variable como flag

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
 mfrc522.PCD_WriteRegister(MFRC522::ComIrqReg, 0x80); //Clear interrupts
 mfrc522.PCD_WriteRegister(MFRC522::ComIEnReg, 0x7F); //Enable all interrupts
 mfrc522.PCD_WriteRegister(MFRC522::DivIEnReg, 0x14);
 Serial.println(F("Ready..."));
 attachInterrupt(0, isr, RISING);
}

void loop()
{
if (cardPresent)
   {
   Serial.println(F("Interrupt"));
   mfrc522.PCD_WriteRegister(MFRC522::ComIrqReg, 0x80); //Clear interrupts
   cardPresent = false;
   }
}

void isr()
{
  cardPresent = true;
}
}


Pasate por aqui https://arduino.stackexchange.com/questions/9656/using-interrrupts-with-rc522

Y sino funciona, por educacion aunque sea, ayuda con el codigo LMAOOO  :xD si quieres.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

[u]nsigned

Mañana lo pruebo. Pero Ya habia visto ese ejemplo y creo que seguiria siendo polling, ademas ahi no usan el puerto IRQ del RC522

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!