Официальный сайт компании Arduino по адресу arduino.cc
Подружить DMD экран и SoftwareSerial
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 26/04/2019 - 14:39
К моей Arduino Uno подключено ESp8622, через SoftwareSerial я с ним коммуницирую. Пока все хорошо.
Дальше, хочу подключить пиксельный екран. Либа DMD2.
Сам экран еще физически не подключил, только библиотеку и инициировал его програмно.
Так вот, заметил, если запускаєтся комманда dmd.begin() то сериальный порт перестает работать. Некоторые приходящие символы искажаются или не приходят. Если закомментировать dmd.begin(), то все ок.
Вот такой простой скетч у меня на Arduino Uno
Вот такой ровный вывод, если закомментирована dmd.begin()
Вайвай не работает нормально вместе с ДМД. Почему - не знаю.
Просто с сериалом (а я работал и с 232 и с 485) ДМД работает нормально. Как только появляется намек на вайвай - идут глюки. Точно такая же фигня происходит с ИК портом - тоже не работает вместе.
На будущее для себя решил - отдельный проц для ДМД, отдельный для всего остального и связь между ними по 232.
Да, DMD и ESP плохо работают в связке. Намучился с ними.
Но в данном случае думаю что проблемма не в этом. У меня DMD, а wifi просто внешняя вещь, которая для Arduino видится как SoftwareSerial (может быть подключено другое устройство, не обязательно wifi).
Так вот, создается впечатление, что если я активизирую WiFi, то по софтварному серийному порту начинаю получать мусор. Здесь подобная проблемма описана. Но решения так и не нашел.
Проблема в том, что ДМД очень сильно грузит проц. Все таки одновременное управление кучей пикселей (а я на вемосе раскрутил 42 модуля > 21к пикселей), которые надо не просто зажечь и забыть, а регулярно им напоминать их состояние - работа, требующая самоотречения!
На том же самом вемосе я в итоге решил так: вебморда настройки работает первые 3 минуты после включения (ДМД в это время даже и не инициализируется), после трех минут вайвай полностью гасится и включается ДМД. Для повторной настройки табло надо выключить-включить и все успеть за 3 минуты...
Потому что совместно работать я их с горем пополам заставил, но а) постоянно отваливается вайвай б) иногда при обращении к вебморде вемос просто перезагружался в) визуально обновление экрана шло раз в 5 медленнее, чем при отключенном вайвае.
Хм... похоже вы правы.
Но такое решение мне не подходит...
Нужно что-то думать
много раз обсуждалось - кроме того что DMD грузит проц и затрудняет работу прерываний - еще max72xx очень сильно "срет" в питание, что может сводить с ума другие модули.
вообще идея вешать DMD на отдельный МК вполне здравая
много раз обсуждалось - кроме того что DMD грузит проц и затрудняет работу прерываний - еще max72xx очень сильно "срет" в питание, что может сводить с ума другие модули.
вообще идея вешать DMD на отдельный МК вполне здравая
Допустим я DMD повешу на отдельный контроллер... но как с ним общаться, если проблема именно в том, что не могу нормално общаться, если активный DMD.
я DMD повешу на отдельный контроллер... но как с ним общаться, если проблема именно в том, что не могу нормално общаться, если активный DMD.
По 232, по стандартному аппаратному 232...
Допустим я DMD повешу на отдельный контроллер... но как с ним общаться, если проблема именно в том, что не могу нормално общаться, если активный DMD.
вопрос хороший :) Но вообще, чем меньше одновременных задач занимает МК - тем оегче добиться совместимости между ними.
СофтСериал в любом случае выкиньте -он и без ДМД глючит
Здесь подобная проблема. Пишуть, что DMD2 i SoftwareSerial конкурируют за timer0. Я отключил таймер, тепрь вывод работает при включенном DMD, но теперь нужно как-то самому реализовать Timer. ("define NO_TIMERS and write your own routine to manage updating the display, see DMD_Timer.cpp for more info")