Даже если система собрана правильно и скопипащен написан хороший код, вероятность что все заработает как надо, примерно 50/50.
Причин тому может быть три:
- Беспаечные макетные платы
- Электродвигатели
- Модули GSM-связи
И если в первом случае достаточно взять в руки паяльник (что делаю с самого начала), то электромагнитные помехи — проблема, которую не всегда можно решить экранированием и фильтрами питания.
Под катом — наиболее простой и "беспроводной", как вы поняли из фото способ поменять фюьзы Ардуино, перейдя на внутренний RC-генератор и отключив контроль питания.
И если решение с генератором я "подсмотрел" у моделистов, использующих мощные движки, то ко второму пришел сам, еще до знакомства с Arduino.
Поскольку первой конструкцией был индикатор полива, потребляющий в активной фазе 0.5мА (ибо 1МГц и 2.4В питания).
Почему платы ProMini? они не содержат ничего лишнего (кроме светодиодов ;-)
Почему сделал стабильное решение на постоянной основе, переделав под программатор одну плату?
Если что-то приходится делать более трех раз, то я пытаюсь это автоматизировать/упростить!
А согласитесь, каждый раз перетыкивать проводочки — несерьезно.
Забегая вперед, скажу, что тестировал результаты на своих СМС-весах.
И если раньше стоило модулю связи зарегистрироваться в стандарте GSM-900, то при расстоянии между оным и Ардуинкой меньше метра, контроллер начинал бутаться.
Теперь-же все ОК, на разных локациях, где данный эффект наблюдался.
Все что нам нужно — гребенка разъемов PBS, тонкий скальпель и лупа:
Скальпелем перерезаем дорожку ресета (в синем круге), и ни в коем случае не паяем разъемы на указанные желтым овалом места.
Да, еще любым отрезком витой пары соединяем пин D10 с подрезанным ресетом.
По сути, у нас получится вот такая (честно скопипащенная из интернета) схема:
Только гораздо компактнее, без проводов и конденсатора, ибо работает.
Теперь подключаем наш будущий программатор к USB-TTL, в ArduinoIDE задаем тип платы и порт, прошиваем из примеров скетч ArduinoISP (не забыв раскомментарить строку #define USE_OLD_STYLE_WIRING)
В папке \arduino-ваша_версия\hardware\arduino\awr правим файл BOARDS, вместо блока Arduino Pro or Pro Mini ставим следующее:
## Arduino Pro or Pro Mini (3.3V, 8 MHz INTERNAL) w/ ATmega328P
## ---------------------------------------------------
pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz INTERNAL)
pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.8MHzatmega328.upload.speed=57600
pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xE2
pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFF
pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L
Тут я поменял low_fuses FF > E2 (переход на внутрениий генератор) и extended_fuses FD > FF (запрет контроля питания)
Все, перезапускаем ArduinoIDE, ставим донора в наш программатор, отключаем провод DTR от USB-TTL (если конечно он у Вас есть ;-)
В разделе Инструменты-Программатор Выбираем "Arduino AS ISP", тип платы Arduino Pro or Pro Mini (3.3V, 8 MHz INTERNAL) — Прошить загрузчик.
Все! Не буду напрягать лишними проверками с помощью avrdude и прочими премудростями и так описанными в десятках мануалов — хотелось дать максимально простой материал.
На заглавном фото кстати, плата с уже выпаянным керамическим резонатором.
Дополнительная плюшка — скетчи в ардуинки можно прошивать без нажатия reset — по Ctrl-Shift-U (Выгрузить с помощью программатора)
Помимо помехозащищенности, такой метод избавляет от сбоя генерации обычного кварца при тряске и ударах.
Минус — точность таймеров +-5%.
Удачных Вам проектов!
Андрей.
Комментарии (28)
ionicman
23.10.2019 15:31+2Эмм… А зачем выпаивать кварц? Почему просто не перейти на внутренний генератор? Это влияет на помехозащищенность?
Я не пользуюсь ARDUINO IDE, пишу в Atmel Studio, прошиваю такие-же платки USB-ASP-ом напрямую.
Делал и GSM, и управление мощным двигателем (от индукции в обмотках двигателя — мосфет и диод) и ни разу никаких проблем не было с ребутом. Может дело в питании все-таки? А не в помехах?
Ну или платки все-таки разные :)
ИМХО — запаянный электролит и керамика по питанию 90% проблем с помехами решают.
ancc
23.10.2019 15:46+2Ничего нет лучше правильно разведенной и платы. И вочдога))
gerasimenkoao Автор
23.10.2019 16:03Ничего нет лучше правильно разведенной и платы. И вочдога))
Согласен, но вот Вам простой пример — школа робототехники — какая разведенная плата? какой вочдог???
gerasimenkoao Автор
23.10.2019 15:52-2Керамический резонатор выпаял для проверки, показалось что слишком уж все гладко.
В этих платах фильтры по питанию и так есть:
И потом, в текущей конструкции СМС-весов у меня модуль связи с солнечной батареей в отдельном выносном блоке, на 5-метровом проводе.
Как только в момент активности GSM-модуля расстояние до микроконтроллера сокращается меньше метра — он ребутится.
Конденсаторов 10 + 0.1 мкФ для потребления 3-4мА более, чем достаточно.
ancc
23.10.2019 16:13+3Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.
И контроллер один мелкий на Atmega32U4 уже лет 7 в машине ездит и выполняет одну простую задачу и тоже никогда не зависал.avf1906
23.10.2019 17:26+1Я в свое время для тестирования на помехоустойчивость клал мобилу на плату и делал вызов на нее и с нее. Ничего не сбивалось, только измерения плыли, но это неудивительно. Ну и печальный опыт на первых разработанных платах после института, когда на столе все работало, а на объекте сбоило (это было еще до мк, на 555 логике) научило внимательно относиться к трассировке. Да, и отключать контроль питания это зло. Надо разбираться с проблемой, а не отключать защиту.
ЗЫ: извиняюсь, это было на сообщение ancc, промахнулсяgerasimenkoao Автор
23.10.2019 19:44Я в свое время для тестирования на помехоустойчивость клал мобилу на плату и делал вызов на нее и с нее. Ничего не сбивалось, только измерения плыли, но это неудивительно. Ну и печальный опыт на первых разработанных платах после института, когда на столе все работало, а на объекте сбоило (это было еще до мк, на 555 логике) научило внимательно относиться к трассировке. Да, и отключать контроль питания это зло. Надо разбираться с проблемой, а не отключать защиту.
ЗЫ: извиняюсь, это было на сообщение ancc, промахнулся
Измерения плывут — мама-не-горюй — у меня до 1.5Кг на HX711 при включенном модуле GSM разброс. Потому и и меряю сейчас когда связь "спит"
Отключать контроль питания — возможно я перегнул, просто согласно графику
стабильная работа контроллера на 8MHz лежит ниже 2.7В
А Brown-Out либо 2.7, либо 1.8 вольт.
Хотя я и на 2.7В 16-мегагерцовые гонял.
К тому-же если напряжение батареи опускается ниже 3.4В, то модули связи даже из режима сна не выходят, так что тут все в порядке на мой взгляд.
xFFFF
24.10.2019 11:43+1стабильная работа контроллера на 8MHz лежит ниже 2.7В
График вообще не так читается) Это максимальная частота от напряжения. Следовательно, при 2,7В он работает на любой частоте до 10МГц. А при 4,5 можно взять любую частоту до 20 МГц. 8 МГц тоже будет работать стабильно.
CodeNameHawk
24.10.2019 11:47+2стабильная работа контроллера на 8MHz лежит ниже 2.7В
Почти так, но наоборот
стабильная работа контроллера на 8MHz начиная с ~ 2.5В и выше
geher
23.10.2019 18:51+1Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.
Зависаний не было, а вот прерывания на ровном месте (на ноге, к коротой был подключен датчик расстояния) были. В результате имелись ложные срабатывания системы — ловились "призраки".
При передаче данных о срабатывании через UART ложных срабатываний не было.
Serge78rus
23.10.2019 18:11+2Минус — точность таймеров +-5%
Если система позволяет работать с такой точностью временных отсчетов — то и фиг с ним. Но вот использовать UART (а с GSM модулем Вы же через него работаете) с такой погрешностью тактовой частоты — это можно даже не заикаться о надежности.gerasimenkoao Автор
23.10.2019 19:27-1Скажем так, SIM800L сам не отличается стабильностью работы.
Вот ради интереса, включал систему на 4.2В и 3.5В — смс приходят.
Датчики DHT22 и температуры DS18B20 работают, вес меряет.
Сейчас поставил в холодильник на пару часов, потом — засуну в духовку на 55 градусов ;-)
Я не утверждаю, что работа UART с таким разбросом — хорошо, но ведь все можно проверить.
И да, еще есть возможность калибровки внутреннего RC-генератора до 1%Mogwaika
23.10.2019 19:30На каждую температуру и потом вносить изменения в счётчики по показаниям градусника?
Serge78rus
24.10.2019 10:37+1Скажем так, SIM800L сам не отличается стабильностью работы.
Я не работал конкретно с SIM800L, но очень много работал с TC65 (Siemens, позже Cinterion), G510 (Fibocom), SIM800C (SIMCom), и из них SIM800C оказался самым стабильным. Под «много работал» я подразумеваю не сборку нескольких любительских поделок, а создание промышленных распределенных систем мониторинга на сотни удаленных узлов. Поскольку SIM800C мало чем по внутренним потрохам отличается от SIM800L, то думаю, что и последний тоже весьма стабилен в работе. Возможно, как говорится, «Вы просто не умеете их готовить»? Под «Вы» я здесь подразумеваю не Вас лично, а и китайского производителя платок «для детского творчества», которые Вы используете в своих проектах (если бы Вы не использовали готовую плату, то вряд ли выбрали бы именно SIM800L по целому ряду причин).
Поймите, что GSM модуль — очень «тяжелый» компонент в использовании для схемотехника, так как он сочетает в себе ряд трудносовместимых свойств:- Потребляемый ток имеет характер импульсов с амплитудой до 2А, но при этом имеются достаточно жесткие требования по допустимым просадкам напряжения питания (кстати, модули SIMCom в этом смысле самые «либеральные» из тех, что я использовал — допускают пульсации аж целых 350мВ, а у других модулей это обычно десятки мВ)
- Модуль содержит в себе достаточно мощный передатчик (до 2Вт на 900МГц), наводки от которого при неудачной разводке вполне способны вызывать сбои даже цифовых схем
- Модуль содержит в себе довольно чувствительный приемник (порядка -105дБм), который, опять же, при неудачной разводке может забиваться наводками от «цифры»
В общем, создать стабильно работающее устройство, содержащее GSM модуль — серьезная задача для опытного схемотехника. Открывайте документ Hardware Design на Ваш модуль, и в первую очередь проверяйте, насколько Вы выполняете требования по питанию. Кстати, модули SIMCom имеют вывод RF_SYNC, что очень упрощает синхронизацию осциллографа с работой передатчика модуля. Думаю, что после этого Ваше мнение насчет «не отличается стабильностью работы» кардинально изменится.
ПС: кстати, если вдруг понадобиться — на официальном китайском сайте информация по SIM800L отсутствует, но ее можно найти на эстонском сайтеDROS
24.10.2019 19:36Разрешите немного по оффтопить.
Поскольку в Вас, несомненно, широкий опыт работы с GSM-модулями, не подскажете, какой модуль умеет net monitor? Задача — отлавливать ближайшие БС-ки ОПСОСов с привязкой к местности (да, я в курсе, что есть база таких данных, но это не интересно).
Хотелось бы стабильного, шустрого монитора, за рубль килограмм и в минимальных габаритах.Serge78rus
25.10.2019 10:20Все модули, с которыми приходилось работать, имеют набор AT команд для мониторинга сети. Во первых, абсолютно все модули поддерживают стандартную команду AT+CSQ (это то, что на телефонах отображается в виде «палок»). Но это, наверное, Вам не интересно. Есть более продвинутые команды, но они специфичны для каждого конкретного вендора.
Далее на примере AT команд SIM800.
AT+CNETSCAN — Сканирует сеть и показывает все видимые соты, как своих, так и чужих операторов. Выполняется долго (десятки секунд), но выдает полный список подробной информации.
AT+CELLLIST — Аналогично предыдущей команде, но может выполняться автоматически в фоновом режиме с заданным периодом.
AT+CENG — Переводит модуль в инженерный режим, в котором можно в реальном времени получать информацию об обслуживающей соте и 6 соседних.
Но ни одна из описанных команд не выдает привязку к местности в виде координат (есть Lac — Location Area Code, но это не координаты). В принципе, по полученной информации можно получить координаты через API Google (давно не пользовался) или Яндекса. Так же у какого-то модуля (наверное, у того же SIM800, но это не точно) попадалась команда, имеющая опцию выдачи прямых координат, но она в наших сетях не работала (да особо и не заморачиваля).
VT100
23.10.2019 21:10Открываем раздел "Вредные советы". Вместо того, чтоб разобраться с разводкой "вороньего гнезда", конфигураций МК и питанием — лепим благоглупости…
Вот, был такой клоун с "дурино нано для промышленных применений": http://caxapa.ru/748942.html?todo=full
gerasimenkoao Автор
24.10.2019 11:37-1Хорошо, скажу так, чтобы стало всем понятно.
Я ВЕДУ КУРСЫ АРДУИНО.
Вы предложите детям на занятиях делать разводку печатных плат?
Когда на первом уроке изучается скетч Blink, а объяснение работы ШИМ для восьмилеток — это отдельный цирк с конями.
То что плохого в моем методе хоть как-то сделать детские конструкции стабильней?
Shtucer
24.10.2019 16:35+1Вы же в статье не написали, что ваша статья для восьмилеток. Вот её и восприняли всерьёз.
gerasimenkoao Автор
24.10.2019 17:13Для восьмилеток — "правленные" ардуинки.
Меня просто поражает, как все возбудились на отключение BOD-а.
В мануале написано НЕ ОТКЛЮЧАТЬ данный режим — нет!
Никто процессора не разгонял?
Так те статьи — норм!
Про порнхаб — норм — годно прямо и православно для Хабра.
А то, что BOD отключается в режимах сна (по доке)- тоже ересь?
sim2q
24.10.2019 17:47+1Дело очень хорошее и трепетное!
Поэтому лучше сразу всё правильно делать:) особенно там где могут дети подсмотреть, а они такие умницы порой — всё замечают
ps «вёл» радиокружок, осознал, раскаиваюсь и теперь беспокоюсь о другихgerasimenkoao Автор
24.10.2019 21:31Вот чесно, мне нравится работать с детьми и платформой ардуино.
Дети менее циничны, чем хабровчане (но не всегда), а Atmega порой прощает ошибки потив STM32, за esp-шки вообще молчу — черный ящик в буквальном смысле слова.
Но на самом деле, с Хабра я не ухожу по другой причине — и как не странно, это критика!
Обыно, ошибки айтишника оцениваются временем и деньгами.
Ошибки электропчеловода оцениваются сотнями тысяч жизней… пчелиных.
Seer777
24.10.2019 21:13+1Автор ты свой текст хоть читал? У тебя мысль прыгает даже не от абзаца к абзацу, а от предложения к предложению.
Чукча конечно не читатель ....
COKPOWEHEU
25.10.2019 12:51+1У ардуинки же вроде есть нормальный 6-контактный разъем для программирования. Что мешало собрать человеческий программатор, хотя бы usbasp / usbisp / avrdoper, не говоря уж про всякие ft232 и подключаться по-человечески, шлейфом, без всяких этажерок?
UPD: А, так на этих недо-платках даже разъема нормального нет
Если уж решили избавляться от основного кварца (странное решение, вообще-то, но дело ваше), почему бы не заменить его на часовой? Когда нужны точные интервалы времени (увы, на интерфейсах это не скажется) запускаем асинхронный таймер и меряем все что нужно.
mastergril
А ещё лучше развести нормальную плату с блэк джеком и шлюхами. И самоделки, пущенные в жизнь, заработают как надо))
gerasimenkoao Автор
Тут вопрос уже не обо мне и моих самоделках, а о людях, делающих первые шаги.
Я например травить платы начал только в институте.