Коллеги, опять нужна ваша помощь. Не могу заставить работать на 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 / электронике. Коллеги, может у кого нибудь есть идеи?
А где все остальное и самое нужное и важное СХЕМА подключений и СКЕТЧ. Тут наверное пророков и экстрасенсов нету, хотя всякое бывает. Какие библиотеки использовал (ссылки на них), какие примеры и откуда брал (тоже ссылки).
подтяжки есть на обоих модулях, да еще небось внутренние подтяжки в i2c? Может, достаточно одной подтяжки?
ТС не I2C, а SPI использует. Хотя вопрос актуален. Не подтягивает ли запитанный, но не выбранный, экран какую-нибудь из сигнальных линий до уровня неприемлемого для второго устройства.
Без схемы и скетча можно только догадки строить. Равносильно утверждению о том что программа не виновата, т.к. ничего не меняется, можно предположить, что в программе ошибка при выборе ведомого устройства.
оговорился, конечно spi. Но тут логика и не важна, видимо физика давит- например, если подключить к ардуине HC-05 то не будет работать "вгрузить" - просто как пример, или если я на одну из шин спи сажаю шину 1wire, потом ее отключаю, то spi уже не работает - подтяжки 2к2 достаточно, чтобы чип не прошивался программатором (у меня 500).
но может и конфиг софта - например, когда подключен один модуль, то функция неподключенного модуля понимает, что периферии нет и уходит, а другая по своему выставляет параметры spi , таймеры или что там еще ей нужно. У spi кстати дофига параметров - так что можно выставить только битами 2^^8 вариантов, и это не считая частоты.
Коллеги, искренне прошу прощения. Вот схема. Пока во Fritzing. Условные обозначения: Черный цвет - земля Красный цвет - питание +5 или +3,3 Зелёный цвет - шина SPI Жёлтый цвет - служебные линии К сожалению не удалось найти элементы Arduino TFT LCD и Funduino RFID RC-522 поэтому я заменил их на похожие. Актуальная распиновка приведена в примечании к элементу. (Коллеги, вдруг у кого есть вышеназванные элементы для Fritzing? Дайте знать. Буду очень благодарен.)
скрипт на котором я тестирую Код (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 читает метки.
везде написано, что входы RFID reader терпимы к уровню +5. Важно только питать от +3,3 Но как рабочую идею, проверю.
Про частоты думал. Буду проверять. Я считал, возможно ошибочно, что параметры SPI выставляются в начале программы и они подходят и для работы дисплея и для RFID. По отдельности они то работают. По поводу того, что библиотека проверяет наличие периферии, я не думал. Такое возможно? Посмотрю код библиотеки.
Коллеги, может это важно, на плате TFT LCD находится также ридер SD карт. Я его программно не инициализирую.
Ещё раз прошу прощения. Забыл дать ссылки на библиотеки: Для LCD TFT - стандартная библиотека которая входит в состав IDE http://www.arduino.cc/en/Reference/TFTLibrary версия 1.0.5 Для SPI - стандартная библиотека http://www.arduino.cc/en/Reference/SPI Для RFID библиотека rfid-master из статьи http://robocraft.ru/blog/3004.html
Коллеги, дошли руки до проекта и кое что накопал, а именно: если от дисплея отсоединить линию MISO (на схеме выделил синим), то начинает работать и RFID и дисплей одновременно. Теперь нужно понять, что делать с этой линией. В шилде дисплея есть ридер для SD карт и линия для чтения со Slave, похоже нужна именно там. Я пока никак не инициализирую ридер SD на шилде. Пока план такой: -- проверить работу после инициализации ридера SD карт -- если не поможет, пересажу дисплей на другой SPI