DUE - совместимость
- Войдите на сайт для отправки комментариев
Коллеги, прошу не пинать сильно )
Есть проект, который не тянет по скорости (цикл примерно 1 секунду).
(SIM800, Nexion, десяток 18b20, DHT22, PZEM, сколько-то цифровых и аналоговых входов-выходов)
Решений вижу два:
1. ставить вторую ардуинку для снятия датчиков
но здесь проблема в том, что самые затратные - общение с SIM800 и Nextion, а оно - двунаправленное, и нормальный код для связки ардуин может съесть всю экономию времени.
2. ставить Due.
Здесь встает вопрос совместимости модулей с 3,3v на Due. Я правильно понимаю, что если поставить преобразователи уровней типа
то проблема уйдет (а SIM800 и так изначально 3,3v (вернее, 3,6))
Плюс придется "покувыркаться" с EEPROM, другими аналоговыми уровнями, и.т.д.
Но меня больше всего пугают библиотеки: я использую OneWire, Time, PZEM004T
Вот кто-нибудь может подсказать - они заведутся на DUE ?
PS: вариант № 3 с оптимизацией кода не предлагать - все, что доступно моим мозгам, уже сделал, и не раз )
PS: вариант № 3 с оптимизацией кода не предлагать
Да, я и не предлагаю, просто смешно как-то
(SIM800, Nexion, десяток 18b20, DHT22, PZEM, сколько-то цифровых и аналоговых входов-выходов)
Вот, ознакомьтесь
ну, сравнивать ассемблер и Си по ресурсоемкости странно...
И да, в прошлой жизни программил на ассемблере немного ).
Но сейчас даже полноценная реализация работы с sim800 и Nextion стала непростой задачяей, поэтому просто проверяю com-порты (буферы) на непустоту и считываю.
И вот тут если работать только по одному порту - все хорошо, а если налепить полную обвязку кода, то изредка (примерно 1 из 20) приемов по портам могу не считать (
А далласы как читаете? Наверное еще библиотекой DallasTemperature. И код как всегда в секрете?
ну, сравнивать ассемблер и Си по ресурсоемкости странно...
Действительно.
первое что пришло на ум при таком поставленном вопросе : программа написана в "блокирующем стиле"-
обрщение к сетевой перефии а так же к экрану (да еще по последовательному интефейсу) оооочень долгие операции в контексте микроконторллера.
так чо если программа написана без учета таких особенностей- хоть core i7 ставьте.
ну, сравнивать ассемблер и Си по ресурсоемкости странно...
Ты ничего не понял в той картинке. Сравнивать надо не Си с ассемблером (они то, как раз, вполне сравнимы), а мозги: твои и тех, кто писал программы для AGM.
Попробуй с этой стороны зайти.
ни капли не спорю - професиионал, да и просто знаток справился бы с этой задачей в разы лучше.
Но для меня это (как и у 90% ардуинщиков) хобби с элементами полезной нагрузки. )
Да и паяльник мне ближе, чем программирование )
MaksVV, mixail844 -
старался делать без блокировок.
По крайней мере, с Далласом - сначала инициирую запрос, а через 30 секунд считываю.
Но и в нем, и тем более - при работе с COM-портами - как минимум десяток миллисекунд приходится ставить delay для считывания буфера.
Код выложить могу, не вопрос (ну посмеетесь немного :)) но только вечером.
Тоже заказал дую, на меге не хватает оперативки и скорость маловата.
только вот мне потребуется rtc и w5100 подключать. Вроде как они были 3.3
Тоже заказал дую, на меге не хватает оперативки и скорость маловата.
лучше блюпилл - дешевле и информации в сети больше
Кроме того - большинство цифровых входов толерантны к 5в - можно смешивать 3.3 и 5в периферию
меня сейчас не столько железная часть беспокоит (это решаемо, причем "как" - понятно, бустро и недорого), сколько софтовая, в первую очередь - работа библиотек: OneWire, Time, PZEM004T
в первую очередь - работа библиотек: OneWire, Time, PZEM004T
С этими либами вы ничего не сварите... они несъедобны для нормального эмбедда... увы...
Забудьте о своей затее... в том виде как вы её видите... хоть время сэкономите...
почему?
насколько я понял, PZEM - да, написана криво, с делеями.
А 1-wire чем не нравится?
(мне казалось, что библиотека 18b20 - верх маразма, а 1wire как раз нормальна....)
почему?
насколько я понял, PZEM - да, написана криво, с делеями.
А 1-wire чем не нравится?
(мне казалось, что библиотека 18b20 - верх маразма, а 1wire как раз нормальна....)
Ну, для "Arduino style" OneWire действительно вполне нормально написана. Но
Как видно, тут не только delay используется, но и прерырывания запрещаются на достаточно долгие периоды.
Как видно, тут не только delay используется, но и прерырывания запрещаются на достаточно долгие периоды.
делай и делаймикросекондс - это "две большие разницы" ...и прерывание запрещено аж на 10- 15 мкс. УжОс, ящитаю! ;))) 15 мкс это ведь"достаточно долго"? Правильно я говорю?
Не поможет ему быстрый процессор. Какой бы он быстрый не был, а ждать в делэях он будет так же как и медленный :) Может че нить двухядерное... ESP32 например :)
Как видно, тут не только delay используется, но и прерырывания запрещаются на достаточно долгие периоды.
делай и делаймикросекондс - это "две большие разницы" ...и прерывание запрещено аж на 10- 15 мкс. УжОс, ящитаю! ;))) 15 мкс это ведь"достаточно долго"? Правильно я говорю?
Ну когда на 15, а когда и на 65. Согласен, что в большинстве случаев это не критично, но случаи бывают разные. Главное же что функция блокирующая, и для чтения температуры требуется больше 6 уже миллисекунд из которых 99 процентов времени процессор ничего полезного не делает.
спасибо, коллеги.
я понял вас, и пойду в сторону связки 2 ардуин - одна для сбора данных, вторая - для логики и работы интерфейсами.
Вот ключевое: "Какой бы он быстрый не был, а ждать в делэях он будет так же как и медленный"
еще раз спасибо за наставление на путь истинный!
(только не надо, что истина - в чистом, красивом и беззадержечном коде - ну не осилю я сам, а давать на сторону - не интересно :))
Так Вы начинайте, а если заткнётесь, мы с удовольствием поможем. Обещаю помогать только намёками, а не готовым решением. Вот сами и сделаете, заодно и научитесь.
спасибо, коллеги.
я понял вас, и пойду в сторону связки 2 ардуин
не ходите туда, это тупик. Вместо связи с модулями будут задержки при связи ардуин.
Нужно учиться писать "чистый, красивый и беззадержечный код" - это единственный выход.
Да и не так это трудно, как вам кажется.
спасибо, коллеги.
я понял вас, и пойду в сторону связки 2 ардуин
не ходите туда, это тупик. Вместо связи с модулями будут задержки при связи ардуин.
Нужно учиться писать "чистый, красивый и беззадержечный код" - это единственный выход.
Да и не так это трудно, как вам кажется.
к тому же еще гемор на пустом месте в виде протокола обмена данных
коллеги, вот мой код.
Часть первая - наверное, самая "чистая" - температура :