Lapgoch
Сб 24 февраля 2018 г., 2:39
Привет.
Я ищу помощь.
У меня есть существующий эскиз, который работает нормально.
Эскиз используется для разблокировки двери с помощью RFID -карты.
Он использует Maple Mini с ENC28J60 и MFRC522 на шине SPI.
Я хотел бы добавить дисплей ILI9431 TFT, чтобы показать несколько сообщений ввода дверей.
Когда я добавляю TFT -дисплей в ту же шину SPI и запускаю только базовый эскиз TFT, TFT -дисплей работает ОК.
Когда я добавляю один и тот же базовый эскиз TFT в свой эскиз для блокировки дверей и запускаю общий набросок, у меня есть проблемы.
Проблема в том, что ENC28J60 и MFRC522 все еще работают нормально, но очень медленно.
Дисплей ILI9431 TFT обновляет только по одному пикселю за раз невероятно медленно.
Кто -нибудь знает, почему ILI9431 противоречит ENC28J60 / MFRC522.
Вот эскиз TFT
Я ищу помощь.
У меня есть существующий эскиз, который работает нормально.
Эскиз используется для разблокировки двери с помощью RFID -карты.
Он использует Maple Mini с ENC28J60 и MFRC522 на шине SPI.
Я хотел бы добавить дисплей ILI9431 TFT, чтобы показать несколько сообщений ввода дверей.
Когда я добавляю TFT -дисплей в ту же шину SPI и запускаю только базовый эскиз TFT, TFT -дисплей работает ОК.
Когда я добавляю один и тот же базовый эскиз TFT в свой эскиз для блокировки дверей и запускаю общий набросок, у меня есть проблемы.
Проблема в том, что ENC28J60 и MFRC522 все еще работают нормально, но очень медленно.
Дисплей ILI9431 TFT обновляет только по одному пикселю за раз невероятно медленно.
Кто -нибудь знает, почему ILI9431 противоречит ENC28J60 / MFRC522.
Вот эскиз TFT
// tft screen setup
#define CS_TFT PA8
#define DC_TFT PB12
#define RST_TFT PA1
#include
#include
Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(CS_TFT, DC_TFT, RST_TFT);
void setup() {
tft.begin();
tft.setRotation(1);
}
void loop() {
tftDisplay();
}
void tftDisplay() {
tft.setTextSize(1);
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_RED);
tft.drawString("01234",0,0,7);
tft.drawString("56789",0,120,7);
delay(1000);
tft.setTextSize(2);
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_YELLOW);
tft.drawString("1234",0,0,7);
tft.drawString("Lapgoch",50,140,4);
delay(1000);
}
Мэнни
Сб 24 февраля 2018 г., 11:57
Взгляните мне, что RFID читает для Целевая работа непрерывно подбрасывает ресурсы, он должен выглядеть примерно так из папки примеров библиотеков
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) return; // check if rfid card is present
if ( ! mfrc522.PICC_ReadCardSerial()) return; // read rfid card
mfrc522.PICC_HaltA(); // stop reading rfid card
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
for (int i = 0; i < 4; i++) { // setup loop to read 4 bytes from rfid card
readCard[i] = mfrc522.uid.uidByte[i]; // read card ID byte
stringReadCard[i] = String(readCard[i], HEX); // save card ID byte as hex data
}
// convert rfid hex data to rfid string
String readID = stringReadCard[0] + stringReadCard[1] + stringReadCard[2] + stringReadCard[3];
if (readID != "") checkAccess(readID);
tftDisplay();
}
}
Mrburnette
Сб 24 февраля 2018 г., 22:52
Я согласен с Мэнни. Вам действительно нужно использовать Millis () и профилировать дельта-время для функций в цикле по сравнению с общим временем для выполнения 1 полного цикла. Узнайте, что подталкивает ваш код.
Луча
Луча
Lapgoch
Солнце 25 февраля 2018 г. 7:55 утра
Спасибо, ребята.
Я сейчас в Испании.
Поэтому я попробую ваши предложения, когда вернусь через пару недель.
Я сейчас в Испании.
Поэтому я попробую ваши предложения, когда вернусь через пару недель.
Lapgoch
Чт, 8 марта 2018 г., 17:29
Привет, ребята.
Я попробовал ваши предложения, и, к сожалению, это не имело никакого значения.
Я обнаружил, что если я удалю весь код RFID в основном цикле и просто оставлю в коде TFT, то он все равно не работает.
Если я тогда прокомментирую MFRC522.Pcd_init (); В цикле установки TFT работает нормально.
Есть еще идеи ?
Я попробовал ваши предложения, и, к сожалению, это не имело никакого значения.
Я обнаружил, что если я удалю весь код RFID в основном цикле и просто оставлю в коде TFT, то он все равно не работает.
Если я тогда прокомментирую MFRC522.Pcd_init (); В цикле установки TFT работает нормально.
Есть еще идеи ?
Mrburnette
Чт, 08, 2018, 17:57
Я не большой поклонник этой логической структуры:
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) return; // check if rfid card is present
if ( ! mfrc522.PICC_ReadCardSerial()) return; // read rfid card
mfrc522.PICC_HaltA(); // stop reading rfid card
Стивестронг
Чт, 08, 2018, 8:21 вечера
В последнее время я помню, что в другом случае была проблема с ILI9341 LIB в репо Роджере, я не помню точно, какой из них.
Вы можете попробовать ILI9341 LIB из моего репо (www.GitHub.com/stevstrong/arduino_stm32).
Вы можете попробовать ILI9341 LIB из моего репо (www.GitHub.com/stevstrong/arduino_stm32).
Lapgoch
Пт, 09 марта 2018 г., 7:43
Привет, Рэй.
Я не могу переделать код, так как я снял весь код считывателя карт, и дисплей TFT все еще не работал.
Это было только тогда, когда я удалил MFRC522.Pcd_init (); Из цикла настройки, который работал TFT -дисплей.
Привет, Стив.
Я сделаю вашу библиотеку позже.
Спасибо.
Я не могу переделать код, так как я снял весь код считывателя карт, и дисплей TFT все еще не работал.
Это было только тогда, когда я удалил MFRC522.Pcd_init (); Из цикла настройки, который работал TFT -дисплей.
Привет, Стив.
Я сделаю вашу библиотеку позже.
Спасибо.
Lapgoch
Пт, 09 марта 2018 г., 11:18
Привет, Стив.
Когда я использую вашу библиотеку arduino_stm32, я получаю следующее сообщение об ошибке компиляции.
ARM-None-Eabi-G ++: Ошибка: (сборка.флаги.оптимизировать): нет такого файла или каталога
В исходной библиотеке arduino_stm32 нет этой ошибки.
Любая идея, что может быть неправильно ?
Когда я использую вашу библиотеку arduino_stm32, я получаю следующее сообщение об ошибке компиляции.
ARM-None-Eabi-G ++: Ошибка: (сборка.флаги.оптимизировать): нет такого файла или каталога
В исходной библиотеке arduino_stm32 нет этой ошибки.
Любая идея, что может быть неправильно ?
Стивестронг
Пт, 09 марта 2018 12:24
Вы взяли только файлы LIB ILI9341 или полное ядро?
Без полного журнала окна сообщения Arduino IDE (словесное включено) не может его понять.
Без полного журнала окна сообщения Arduino IDE (словесное включено) не может его понять.
Lapgoch
Пт 09 марта 2018 12:51
Привет, Стив.
Я использовал весь ядро.
Я сделаю библиотеку ILI9431.
Спасибо.
Я использовал весь ядро.
Я сделаю библиотеку ILI9431.
Спасибо.
Стивестронг
Пт, 09 марта 2018 12:56
Lapgoch
Пт, 09 марта 2018 13:37
Привет, Стив.
Когда я использую только библиотеки ILI9341_STM и GFX_AS, я получаю немного дальше, но сбой при другой ошибке.
Когда я использую только библиотеки ILI9341_STM и GFX_AS, я получаю немного дальше, но сбой при другой ошибке.
\DOCUME~1\ADMINI~1\LOCALS~1\Temp\build4c2071f28635de9ec1f5b1d3003eb191.tmp\sketch\demo.ino.cpp.o"
In file included from C:\arduino-1.6.9\portable\sketchbook\maple\demo box\demo\demo.ino:29:0:
C:\arduino-1.6.9\portable\sketchbook\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_ILI9341_STM/Adafruit_ILI9341_STM.h: In member function 'void Adafruit_ILI9341_STM::spiwrite16(uint16_t)':
C:\arduino-1.6.9\portable\sketchbook\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_ILI9341_STM/Adafruit_ILI9341_STM.h:148:48: error: 'class SPIClass' has no member named 'write16'
inline void spiwrite16(uint16_t c) { mSPI.write16(c); } // 8 bit mode
^
Using library SPI at version 1.0 in folder: C:\arduino-1.6.9\portable\sketchbook\hardware\Arduino_STM32\STM32F1\libraries\SPI
Using library UIPEthernet-master at version 2.0.6 in folder: C:\arduino-1.6.9\libraries\UIPEthernet-master
Using library rfid-master at version 1.2.0 in folder: C:\arduino-1.6.9\portable\sketchbook\libraries\rfid-master
Using library Adafruit_GFX_AS in folder: C:\arduino-1.6.9\portable\sketchbook\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS (legacy)
Using library Adafruit_ILI9341_STM in folder: C:\arduino-1.6.9\portable\sketchbook\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_ILI9341_STM (legacy)
exit status 1
Error compiling for board Maple Mini.
Стивестронг
Пт, 09 марта 2018 13:48
На первом взгляде кажется, что вы используете нестандартную установку.
Структура файла arduino_stm32 должна быть расположена под: C:/пользователи/<пользователь>/Документы/arduino/hardware/. где ваши наброски обычно расположены под: C:/пользователи/<пользователь>/Документы/arduino/ За исключением примеров конкретных библиотек.
Кроме того, я рекомендую использовать Arduino IDE версию 1.8.5 в отдельном каталоге (например: c:/users/<пользователь>/Загрузки/).
Кроме того, я вижу, что вам также нужна моя библиотека SPI, которая содержит некоторые дополнительные функции по сравнению с ядром Роджера.
Структура файла arduino_stm32 должна быть расположена под: C:/пользователи/<пользователь>/Документы/arduino/hardware/. где ваши наброски обычно расположены под: C:/пользователи/<пользователь>/Документы/arduino/ За исключением примеров конкретных библиотек.
Кроме того, я рекомендую использовать Arduino IDE версию 1.8.5 в отдельном каталоге (например: c:/users/<пользователь>/Загрузки/).
Кроме того, я вижу, что вам также нужна моя библиотека SPI, которая содержит некоторые дополнительные функции по сравнению с ядром Роджера.
Lapgoch
Пт, 09 марта 2018 г., 14:16
В итоге у меня была портативная версия Arduino, потому что у меня были проблемы с компиляцией любого эскиза.
My Arduino IDE работает на виртуальной машине XP.
Я не могу вспомнить точное сообщение об ошибке компиляции, но это было связано с тем, что путь к файлу слишком длинный.
Я не хочу обновлять свою Arduino IDE в данный момент, так как я мог бы представить еще больше проблем.
Мне просто нужно будет продолжать гуглую свою проблему.
Еще раз спасибо за вашу помощь.
My Arduino IDE работает на виртуальной машине XP.
Я не могу вспомнить точное сообщение об ошибке компиляции, но это было связано с тем, что путь к файлу слишком длинный.
Я не хочу обновлять свою Arduino IDE в данный момент, так как я мог бы представить еще больше проблем.
Мне просто нужно будет продолжать гуглую свою проблему.
Еще раз спасибо за вашу помощь.
Стивестронг
Пт, 09 марта 2018 г., 14:19
В качестве альтернативы вы можете в конечном итоге использовать SPI1 для только TFT, а остальные устройства на SPI2.
Lapgoch
Пт, 09 марта 2018 г., 16:42
Да, это другой способ.
К сожалению, я уже сделал печатную плату со всем, подключенным к SPI1.
Я связывался с библиотекой MFRC522 и обнаружил, что если я прокомментирую следующие строки в MFRC522.Pcd_init (); Затем работает TFT -дисплей.
Pcd_writeregister (tmodereg, 0x80); // tauto = 1; Таймер начинается автоматически в конце передачи во всех режимах связи на всех скоростях
Pcd_writeregister (tprescalerreg, 0xa9); // tprescaler = tmodereg [3..0]: tprescalerreg, т.е. 0x0a9 = 169 => f_timer = 40 кГц, т.е. период таймера 25 мкс.
Pcd_writeregister (Treloadregh, 0x03); // перезагружать таймер с 0x3e8 = 1000, т.е. за 25 мс до тайм -аута.
Pcd_writeregister (treloadregl, 0xe8);
Pcd_writeregister (txaskerg, 0x40); // по умолчанию 0x00. Заставьте модуляцию 100 % ASK независимо от настройки регистра MODGSPREG
Pcd_writeregister (modereg, 0x3d); // по умолчанию 0x3f. Установите заданное значение для CRC Coprocessor для команды Calccrc на 0x6363
Pcd_antennaon (); // Включить контакты драйвера антенны TX1 и TX2 (они были отключены с помощью сброса)
Очевидно, что читатель RFID больше не работает.
Любые мысли о том, почему написание этих значений для чтения карт RFID вызовет проблемы с дисплеем TFT ?
К сожалению, я уже сделал печатную плату со всем, подключенным к SPI1.
Я связывался с библиотекой MFRC522 и обнаружил, что если я прокомментирую следующие строки в MFRC522.Pcd_init (); Затем работает TFT -дисплей.
Pcd_writeregister (tmodereg, 0x80); // tauto = 1; Таймер начинается автоматически в конце передачи во всех режимах связи на всех скоростях
Pcd_writeregister (tprescalerreg, 0xa9); // tprescaler = tmodereg [3..0]: tprescalerreg, т.е. 0x0a9 = 169 => f_timer = 40 кГц, т.е. период таймера 25 мкс.
Pcd_writeregister (Treloadregh, 0x03); // перезагружать таймер с 0x3e8 = 1000, т.е. за 25 мс до тайм -аута.
Pcd_writeregister (treloadregl, 0xe8);
Pcd_writeregister (txaskerg, 0x40); // по умолчанию 0x00. Заставьте модуляцию 100 % ASK независимо от настройки регистра MODGSPREG
Pcd_writeregister (modereg, 0x3d); // по умолчанию 0x3f. Установите заданное значение для CRC Coprocessor для команды Calccrc на 0x6363
Pcd_antennaon (); // Включить контакты драйвера антенны TX1 и TX2 (они были отключены с помощью сброса)
Очевидно, что читатель RFID больше не работает.
Любые мысли о том, почему написание этих значений для чтения карт RFID вызовет проблемы с дисплеем TFT ?
Стивестронг
Пт, 09 марта 2018 г., 16:50
Возможно, это только последний вызов функции, который позволяет несколько выводов.
Пожалуйста, проверьте сопоставление выводов, может быть, между ними и выберите TFT CHIP или другой PIN -код, зарезервированный для TFT.
Пожалуйста, проверьте сопоставление выводов, может быть, между ними и выберите TFT CHIP или другой PIN -код, зарезервированный для TFT.
Lapgoch
Пт, 09 марта 2018 г., 17:08
Привет, Стив.
Не могли бы вы взглянуть на мой оригинальный пост, есть обзор того, как он подключен.
Вы можете заметить что -нибудь не так?
Не могли бы вы взглянуть на мой оригинальный пост, есть обзор того, как он подключен.
Вы можете заметить что -нибудь не так?
Стивестронг
Пт, 09 марта 2018 г., 17:15
Ах, хорошо, теперь я вижу картирование твоего булавки.
Мне это выглядит нормально.
У меня действительно есть ощущение, что официальный ILI9341 LIB не ошибочно обрабатывает чип.
Для тестирования, пожалуйста, постарайтесь добавить после каждой функции TFT группы вызова A TFT_CS Line:
Мне это выглядит нормально.
У меня действительно есть ощущение, что официальный ILI9341 LIB не ошибочно обрабатывает чип.
Для тестирования, пожалуйста, постарайтесь добавить после каждой функции TFT группы вызова A TFT_CS Line:
tft.funct1(); // pseudo code
tft.func2(); // pseudo code
digitalWrite(TFT_CS, HIGH); // real code
Lapgoch
Пт, 09 марта 2018 г., 17:31
Попробовал это и до сих пор не радости.
Похоже, мне придется вернуться к чертежной доске с этим.
Еще раз спасибо за вашу помощь.
Похоже, мне придется вернуться к чертежной доске с этим.
Еще раз спасибо за вашу помощь.
импульс
Сб 10 марта 2018 г., 5:10 утра
На других платформах я видел аналогичные проблемы, когда поддержка транзакций SPI не была включена.
Я не заглянул в ядро STM32 достаточно, чтобы узнать, будет ли это применимо, но отметил, что STM32FX/Libraries/SPI/SRC/SPI.час Поддержка транзакций отключена по умолчанию.
Я не заглянул в ядро STM32 достаточно, чтобы узнать, будет ли это применимо, но отметил, что STM32FX/Libraries/SPI/SRC/SPI.час Поддержка транзакций отключена по умолчанию.
#define SPI_HAS_TRANSACTION
Стивестронг
Сб 10 марта 2018 г. 8:27 утра
Даже если это определение не активно, я всегда использую SPI.начало транзакции (...) Когда участвует SPI. Оно работает.
Но это не имеет ничего общего с первоначальной проблемой.
Но это не имеет ничего общего с первоначальной проблемой.
Lapgoch
Пт 23 марта 2018 г., 19:14
Привет.
После долгих мест создать новую виртуальную машину Win7 с Arduino IDE 1.8.5 со стандартной установкой .
У меня все еще была такая же проблема, считыватель карт MFRC522 и дисплей ILI9431 просто не работали вместе на одной и той же шине SPI.
Я наконец бросил библиотеки <Adafruit_gfx_as.час> и <Adafruit_ili9341_stm.час> и просто использовал <Adafruit_gfx.час> и <Adafruit_ili9341.час>
Они работали отлично, медленно, но хорошо для моего применения.
Таким образом, кажется, что конфликт с библиотекой Adafruit STM и библиотекой MFRC522.
Быть простым смертным, я понятия не имею, как исправить конфликт.
Может быть.
После долгих мест создать новую виртуальную машину Win7 с Arduino IDE 1.8.5 со стандартной установкой .
У меня все еще была такая же проблема, считыватель карт MFRC522 и дисплей ILI9431 просто не работали вместе на одной и той же шине SPI.
Я наконец бросил библиотеки <Adafruit_gfx_as.час> и <Adafruit_ili9341_stm.час> и просто использовал <Adafruit_gfx.час> и <Adafruit_ili9341.час>
Они работали отлично, медленно, но хорошо для моего применения.
Таким образом, кажется, что конфликт с библиотекой Adafruit STM и библиотекой MFRC522.
Быть простым смертным, я понятия не имею, как исправить конфликт.
Может быть.
Стивестронг
Пт 23 марта 2018 г. 22:50
Есть PR на GitHub о проблемах с функциями библиотеки графики, покидающих шину SPI в 16 -битном режиме, что, скорее всего, является причиной этой проблемы.
Вы можете попробовать выполнить
Вы можете попробовать выполнить
SPI.beginTransaction(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT));
Lapgoch
Сб 24 марта 2018 г., 6:43
Привет, Стив.
Большое спасибо, ты звезда.
Теперь все отлично работает.
Я играл со всеми различными настройками для SPI.BegintransaStion без радости.
Я не знал о настройках 8/16 бит.
Также спасибо Роджеру Кларку за то, что у него были подобные проблемы с несколькими устройствами SPI и изучили его.
Большое спасибо, ты звезда.
Теперь все отлично работает.
Я играл со всеми различными настройками для SPI.BegintransaStion без радости.
Я не знал о настройках 8/16 бит.
Также спасибо Роджеру Кларку за то, что у него были подобные проблемы с несколькими устройствами SPI и изучили его.