Wie verbindet man mehrere RFID-RC522 Geräte?

Hey guys,
ein Freud und ich versuchen unser Projekt zum laufen zu bringen, wir bekommen aber nicht raus was falsch an unserem Setup ist. Wir haben 16 RFID Module mit dem Arduino verbunden. Die RFID Module haben ihr eigenes Netzteil, wir haben aber auch versucht sie direkt mit dem Arduino zu verbinden. SCK, MISO, MOSI und RST sind in einem Grid miteinander verbunden, sodass jeder Port mit dem Arduino verbunden ist und nur ein Kabel benötigt wird. Das gleiche mit 3,3v und GND. Jedes Modul hat seinen eigenen SDA Pin, welcher auf einem eigenen Port mit dem Arduino verbunden ist.

Wenn wir das externe Netzteil verwenden, verbinden wir den GND mit dem Arduino.

Das lustige ist, dass nur die ersten 4 RFID Module funktionieren. Wir haben alle RFID Module getestet bevor wir sie in das Grind zusammengeschlossen haben. Wir haben vorher sogar probiert, ob 6 RFID Module gleichzeitig funktionieren, was funktioniert hat. Ich denke dass irgendwas an dem Grid nicht richtig ist und sich irgendwelche Signale gegenseitig auslöschen oder sowas.

Wir haben auch eine andere Library probiert, was aber das selbe Ergebnis brachte.

Hier ist ein Paint Bild von unserem Grid. Nur die vier in der rechten Spalte funktionieren. Die Pfeile markieren die Verbindung mit dem Arduino und dem Netzteil.

Hier ist noch der Code, falls der von nutzen ist.

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

#define NR_OF_READERS   16
//
byte ssPins[] = {22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37};

MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.

/**
 * Initialize.
 */
void setup() {
  Serial.begin(115200);  // Initialize serial communications with the PC for debugging.
  SPI.begin();
  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    mfrc522[reader].PCD_Init(ssPins[reader], 9); // Init each MFRC522 card
    Serial.print(F("Reader "));
    Serial.print(reader);
    Serial.print(F(": "));
    mfrc522[reader].PCD_DumpVersionToSerial();
  }
}

/**
 * Main loop.
 */
void loop() {

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    // Look for new cards

    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
      Serial.print(F("Reader "));
      Serial.print(reader);
      // Show some details of the PICC (that is: the tag/card)
      Serial.print(F(": Card UID:"));
      dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
      Serial.println();
      Serial.print(F("PICC type: "));
      MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
      Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));

      // Halt PICC
      mfrc522[reader].PICC_HaltA();
      // Stop encryption on PCD
      mfrc522[reader].PCD_StopCrypto1();
    } //if (mfrc522[reader].PICC_IsNewC
  } //for(uint8_t reader
}

/**
 * Helper routine to dump a byte array as hex values to Serial.
 */
void dump_byte_array(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

Library

Ich hoffe ihr könnt uns helfen.
Danke im voraus ^^

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

macht kein Grid sondern einen Bus bei dem ihr von einem Modul zum anderen MOSI/MISO/CLK verbindet.

Ihr verwendet welchen Controller?
Ihr habt den Hinweis auf Arduino gelesen wie CS zu behandeln ist und warum?

1 Like

Arduino Mega.
Ich hab nichts über CS gelesen.

Wie meinst du das mit dem Bus? Kann man einfach eine lange Bus Linie machen und da dann alle Module dran hängen?

Das solltest du aber machen, wenn du mit dem SPI arbeitest.
Hier findest du etwas zum nachlesen.
Und ja, SPI ist ein BUS-System, somit kannst du das auch entsprechend schalten.

Oder hier.

Ihr verwendet SS, ist das gleiche.

This begins use of the SPI bus (digital pins 11, 12, and 13 on most Arduino boards; 50, 51, and 52 on the Mega) and the chip select pin, which defaults to the hardware SS pin (pin 10 on most Arduino boards, 53 on the Mega). Note that even if you use a different chip select pin, the hardware SS pin must be kept as an output or the SD library functions will not work.

also ergänze eine pinmode(53, OUTPUT) eher weiter oben in deinem Setup.

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