Одновременная работа RFID-RC522 и дисплея Arduino TFT LCD 1.77'

Тема в разделе "Arduino & Shields", создана пользователем petypen, 24 мар 2016.

Метки:
  1. petypen

    petypen Нерд

    Коллеги, опять нужна ваша помощь.

    Не могу заставить работать на Arduino UNO одновременно дисплей Arduino TFT LCD 1,77' и Funduino FRID-RC522
    Схема соединения: SPI шина с пинов 11,12,13 Arduino заведена на дисплей и с этих же пинов заведена на RFID ридер. Линии SS для дисплея и RFID взяты с разных пинов Arduino. Остальные служебные линии подсоединены в соответствии с указаниями разработчика.
    Дисплей запитан от +5 Arduino. RFID запитан от +3.3 Arduino.

    Написана и загружена программа, которая выводит тестовое сообщение на экран и в процедуре Loop непрерывно опрашивает RFID ридер с выводом считанного ID карты в Serial.print()

    Не меняя текста программы и не меняя схемы устройства ставлю два эксперимента:
    1. Дисплей не подключен к питанию (отбросил +5 от шилда). В Serial.print выводится информация от RFID ридера о считанной RFID метке корректно. Ридер исправен.
    2. Дисплей подключен к питанию.Дисплей отображает поданное на него тестовое сообщение, т.е исправен. Но при подключенном дисплее информация о считанной метке в Serial.print не выводится. Отладочная информация показывает, что методы isCard и readCardSerial библиотеки RFID возвращают False.

    Так как я не меняю программу а только лишь подключаю или отключаю дисплей, то кажется логичным, что проблема в подключении к шине SPI / электронике.
    Коллеги, может у кого нибудь есть идеи?
     
  2. 9xA59kK

    9xA59kK Гик

    А где все остальное и самое нужное и важное СХЕМА подключений и СКЕТЧ. Тут наверное пророков и экстрасенсов нету, хотя всякое бывает. Какие библиотеки использовал (ссылки на них), какие примеры и откуда брал (тоже ссылки).
     
  3. Onkel

    Onkel Гуру

    подтяжки есть на обоих модулях, да еще небось внутренние подтяжки в i2c? Может, достаточно одной подтяжки?
     
  4. Sindbad

    Sindbad Гик

    ТС не I2C, а SPI использует.
    Хотя вопрос актуален. Не подтягивает ли запитанный, но не выбранный, экран какую-нибудь из сигнальных линий до уровня неприемлемого для второго устройства.
     
  5. Sindbad

    Sindbad Гик

    Без схемы и скетча можно только догадки строить.
    Равносильно утверждению о том что программа не виновата, т.к. ничего не меняется, можно предположить, что в программе ошибка при выборе ведомого устройства.
     
  6. Onkel

    Onkel Гуру

    оговорился, конечно spi.
    Но тут логика и не важна, видимо физика давит- например, если подключить к ардуине HC-05 то не будет работать "вгрузить" - просто как пример, или если я на одну из шин спи сажаю шину 1wire, потом ее отключаю, то spi уже не работает - подтяжки 2к2 достаточно, чтобы чип не прошивался программатором (у меня 500).
     
  7. Onkel

    Onkel Гуру

    но может и конфиг софта - например, когда подключен один модуль, то функция неподключенного модуля понимает, что периферии нет и уходит, а другая по своему выставляет параметры spi , таймеры или что там еще ей нужно. У spi кстати дофига параметров - так что можно выставить только битами 2^^8 вариантов, и это не считая частоты.
     
  8. petypen

    petypen Нерд

    Коллеги, искренне прошу прощения. Вот схема. Пока во Fritzing.
    Условные обозначения:
    Черный цвет - земля
    Красный цвет - питание +5 или +3,3
    Зелёный цвет - шина SPI
    Жёлтый цвет - служебные линии

    К сожалению не удалось найти элементы Arduino TFT LCD и Funduino RFID RC-522 поэтому я заменил их на похожие. Актуальная распиновка приведена в примечании к элементу. (Коллеги, вдруг у кого есть вышеназванные элементы для Fritzing? Дайте знать. Буду очень благодарен.)

    test_1_1_bb_2.png
     
  9. Onkel

    Onkel Гуру

    А согласователя уровня не нужно для rfid? А если попробовать?
     
  10. petypen

    petypen Нерд

    скрипт на котором я тестирую
    Код (C++):
    // LIBRARY
    #include <RFID.h>
    #include <TFT.h>
    #include <SPI.h>

    // SETUP PINS RC522
    #define RFID_SS 4 // slave select
    #define RFID_RST 3

    // SETUP PINS TFT LCD
    #define TFT_SS 10 // slave select
    #define TFT_DC 9 // data / command
    #define TFT_RST 8

    // SETUP PINS MicroSD
    // no setup

    // CREATE INSTANS
    RFID rfidReader = RFID(RFID_SS, RFID_RST);
    TFT tftScreen = TFT(TFT_SS, TFT_DC, TFT_RST);

    void setup() {
     
      // prepare RFID
      SPI.begin();
      rfidReader.init();

      // prepare Screen
      tftScreen.begin();
      tftScreen.background(0,0,0);
      tftScreen.stroke(255,255,255); // font coolor
      tftScreen.setTextSize(2);
      tftScreen.text("FRID tag info:",0,0); // X, Y
     
      // prepare Serial
      Serial.begin(9600);
    }

    void loop() {
      if(rfidReader.isCard()){
        if (rfidReader.readCardSerial()){
          printToSerial(rfidReader.serNum); // serNum is array unsigned char of Tag info
        } else {
          Serial.println("no readCardSerial");
        }  
      } else {
        Serial.println("no isCard");
      }
    }

    void printToSerial(unsigned char *arrayToPrint){
      for (int i = 0; i < 4; i++){
        Serial.print(arrayToPrint[i], HEX);
        Serial.print(":");
      }
      Serial.println("");
    }
     
    Не меняя скрипта проверяю два варианта:
    1. Питание на дисплей подано: Дисплей работает; RFID метки не читает
    2. Питание на дисплей не подано: RFID читает метки.
     
  11. petypen

    petypen Нерд

    везде написано, что входы RFID reader терпимы к уровню +5. Важно только питать от +3,3
    Но как рабочую идею, проверю.
     
  12. petypen

    petypen Нерд

    Про частоты думал. Буду проверять. Я считал, возможно ошибочно, что параметры SPI выставляются в начале программы и они подходят и для работы дисплея и для RFID. По отдельности они то работают.
    По поводу того, что библиотека проверяет наличие периферии, я не думал. Такое возможно? Посмотрю код библиотеки.
     
  13. petypen

    petypen Нерд

    Коллеги, может это важно, на плате TFT LCD находится также ридер SD карт. Я его программно не инициализирую.
     
  14. petypen

    petypen Нерд

  15. petypen

    petypen Нерд

    Идею понял. Буду проверять. Спасибо.
     
  16. petypen

    petypen Нерд

    Коллеги, дошли руки до проекта и кое что накопал, а именно:
    если от дисплея отсоединить линию MISO (на схеме выделил синим), то начинает работать и RFID и дисплей одновременно.
    test_1_1_bb_3.png
    Теперь нужно понять, что делать с этой линией. В шилде дисплея есть ридер для SD карт и линия для чтения со Slave, похоже нужна именно там. Я пока никак не инициализирую ридер SD на шилде.
    Пока план такой:
    -- проверить работу после инициализации ридера SD карт
    -- если не поможет, пересажу дисплей на другой SPI