RFID-RC522 + Hanrun Ethernet shield

Тема в разделе "Arduino & Shields", создана пользователем Alpinegrove, 9 ноя 2014.

  1. Alpinegrove

    Alpinegrove Нуб

    Подскажите пожалуйста, возможно ли одновременное подключение этих двух компонентов к Arduino UNO если они используют одни и те же выводы для работы?
     

    Вложения:

  2. Arseny

    Arseny Нерд

    если они используют одни и те же выводы - нет, хотя есть вариант перемычками перебросить RFID на другие порты
     
  3. geher

    geher Гуру

    RFID сканер выполнен не в формате шилда, а потому механических проблем с переназначением выводов нет.
    Судя по маркировке полагаю, что данные модули пересекаются на SPI, что вполне нормально.
    Главное, дать им разные SS (CS,CSN). У Ethernet Shield, скорее всего, эти SS традиционно назначены на 10 для Ethernet, и 4 для SD. Для RFID надо для него выбрать любой свободный пин.
    Маркировку на фото RFID видно не очень хорошо, похоже, что SS - это крайний контакт, противоположный 3.3 В.
    Не исключено, что придется подкорректировать библиотеку сканера, если в ней SS прописан строго, без возможности назначения.
     
  4. Alpinegrove

    Alpinegrove Нуб

    Спасибо большое! Сейчас буду пробовать.
     
  5. geher

    geher Гуру

    Или тот, что между 3.3 В и GND. Лучше уточнить в описании.
     
  6. Alpinegrove

    Alpinegrove Нуб

    Перенес SS и RST на 6 и 7 пины. не помогло( Как еще попробовать?
     
  7. Alpinegrove

    Alpinegrove Нуб

    Получается на одной шине spi работают 2 устройства
     
  8. droncs46

    droncs46 Нуб

    У вас получилось?

    Подскажите на Mega 2560 ДВА RC522 Card Read Module RFID можно подключить?
     
  9. geher

    geher Гуру

    Если они управляются по SPI, то теоретически можно. Главное, развести по разным пинам чип-селекторы и другие дополнительные пины, которые нужны, но к SPI отношения не имеют. И еще бы понять, какой именно пин для чего нужен, поскольку маркируют из порой весьма разнообразно.

    На практике же могут быть разного рода казусы в виде не совсем правильной реализации SPI, что приводит к разного рода конфликтам.

    Так что только практическая проверка может дать ответ на вопрос о возможности такого подключения.
    И библиотеку устройства не мешает проверить на предмет наличия ошибок, препятствующей совместной работе устройств на шине SPI, как одинаковых, так и разных.
     
  10. droncs46

    droncs46 Нуб

    Завтра опишу подробней... Какие есть и какую библиотеку использую.
     
  11. snake32

    snake32 Нерд

    Делал два устройства на SPI( SD, NFC ). Покупал дорогие шилды в Амерке. Но зато проблем особых небыло. Код выбора устройств SPI у меня получился таким:
    Код (Text):
    const char epicfail[] = "EPIC FAIL!";
    const char ok[] = "Ok.";

    void selectSPI( int pin, bool init = false )
    {
      static int lastSelect_pin = -1;
      const int offsx = 5;
      if( lastSelect_pin == pin )
        return;
      lastSelect_pin = pin;
     
      if( pin == SD_pin )
      {
        digitalWrite( NFC_pin, HIGH );
        digitalWrite( SD_pin, LOW );
        if( init )
        {
          printLCD( 0, 1, " SD  ");
          if(!SD.begin())
          {
            printLCD( offsx, 1, epicfail );
        while( true );
          }
          printLCD( offsx, 1, ok );
        }else
          SD.begin();
      }
     
      if( pin == NFC_pin )
      {
        digitalWrite( SD_pin, HIGH );
        digitalWrite( NFC_pin, LOW );
     
        nfc.begin();
        if( init )
        {
          printLCD( 0, 1, " NFC      ");
          uint32_t versiondata = nfc.getFirmwareVersion();
          if( !versiondata )
          {
            printLCD( offsx, 1, epicfail );//Didn't find PN53x board
            while ( true ); // halt
          }
          printLCD( offsx, 1, ok );
        }
        nfc.SAMConfig();
      }
    }
     
  12. snake32

    snake32 Нерд

    Использование:
    Код (Text):
    void setup()
    {
      lcd.begin(16, 2);
      pinMode( SD_pin, OUTPUT );
      pinMode( NFC_pin, OUTPUT );
       
      printLCD( 0, 0, " Initialization ");
      selectSPI( SD_pin, true );
      delay( init_delay );
      selectSPI( NFC_pin, true );
      delay( init_delay );
     
      lcd.clear();
    }
    void loop(void)
    {
    /*вырезал*/
        selectSPI( NFC_pin );
    /*работа с NFC*/
      selectSPI( SD_pin );
    /*работа с SD*/
    }
     
  13. droncs46

    droncs46 Нуб

    Вопрос решен!))))) Можно хоть 5 RFID RC522 повесить

    Код (Text):

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

    #define SS_PIN 10
    #define SS_PIN1 5
    MFRC522 mfrc522(SS_PIN, 0); // Create MFRC522 instance.
    MFRC522 mfrc523(SS_PIN1, 0); // Create MFRC523 instance.
    unsigned long uidDec, uidDecTemp;

    boolean Red1 = false;
    boolean Red2 = false;
    boolean Blue1 = false;
    boolean Blue2 = false;

    void setup() {
    Serial.begin(9600); // Initialize serial communications with the PC
    SPI.begin(); // Init SPI bus
    mfrc522.PCD_Init(); // Init MFRC522 card
    mfrc523.PCD_Init(); // Init MFRC523 card
    Serial.println(«Waiting for card...»);
    }

    void loop() {
    byte status;
    byte byteCount;
    byte buffer[2]; // длина массива (16 байт + 2 байта контрольная сумма)
    byteCount = sizeof(buffer);
    uidDec = 0;

    status = mfrc522.PICC_RequestA(buffer, &byteCount);
    if (mfrc522.PICC_ReadCardSerial()) {
    for (byte i = 0; i < mfrc522.uid.size; i++) {
    uidDecTemp=mfrc522.uid.uidByte[i];
    uidDec=uidDec*256+uidDecTemp;
    }
    if ((uidDec==46015106) && (Red1==false)){
    Serial.println(«Red Card logged on Rider 1»);
    Red1=true;
    Red2=false;
    }
    if ((uidDec==3546663646) && (Blue1==false)){
    Serial.println(«Blue Card logged on Rider 1»);
    Blue1=true;
    Blue2=false;
    }
    }
    status = mfrc523.PICC_RequestA(buffer, &byteCount);
    if (mfrc523.PICC_ReadCardSerial()) {
    for (byte i = 0; i < mfrc523.uid.size; i++) {
    uidDecTemp=mfrc523.uid.uidByte[i];
    uidDec=uidDec*256+uidDecTemp;
    }
    if ((uidDec==46015106) && (Red2==false)){
    Serial.println(«Red Card logged on Rider 2»);
    Red2=true;
    Red1=false;
    }
    if ((uidDec==3546663646) && (Blue2==false)){
    Serial.println(«Blue Card logged on Rider 2»);
    Blue2=true;
    Blue1=false;
    }
    }
    }