Нет, это не кластер


Даже если система собрана правильно и скопипащен написан хороший код, вероятность что все заработает как надо, примерно 50/50.


Причин тому может быть три:


  1. Беспаечные макетные платы
  2. Электродвигатели
  3. Модули 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)


  1. mastergril
    23.10.2019 15:19
    +2

    А ещё лучше развести нормальную плату с блэк джеком и шлюхами. И самоделки, пущенные в жизнь, заработают как надо))


    1. gerasimenkoao Автор
      23.10.2019 16:08

      А ещё лучше развести нормальную плату с блэк джеком и шлюхами. И самоделки, пущенные в жизнь, заработают как надо))

      Тут вопрос уже не обо мне и моих самоделках, а о людях, делающих первые шаги.


      Я например травить платы начал только в институте.


  1. ionicman
    23.10.2019 15:31
    +2

    Эмм… А зачем выпаивать кварц? Почему просто не перейти на внутренний генератор? Это влияет на помехозащищенность?

    Я не пользуюсь ARDUINO IDE, пишу в Atmel Studio, прошиваю такие-же платки USB-ASP-ом напрямую.

    Делал и GSM, и управление мощным двигателем (от индукции в обмотках двигателя — мосфет и диод) и ни разу никаких проблем не было с ребутом. Может дело в питании все-таки? А не в помехах?

    Ну или платки все-таки разные :)

    ИМХО — запаянный электролит и керамика по питанию 90% проблем с помехами решают.


  1. ancc
    23.10.2019 15:46
    +2

    Ничего нет лучше правильно разведенной и платы. И вочдога))


    1. gerasimenkoao Автор
      23.10.2019 16:03

      Ничего нет лучше правильно разведенной и платы. И вочдога))

      Согласен, но вот Вам простой пример — школа робототехники — какая разведенная плата? какой вочдог???


      1. SADKO
        23.10.2019 16:28
        +1

        Керамика на моторах, на мостах ещё с электролитами и никаких проблем...


  1. gerasimenkoao Автор
    23.10.2019 15:52
    -2

    Керамический резонатор выпаял для проверки, показалось что слишком уж все гладко.


    В этих платах фильтры по питанию и так есть:
    Схема


    И потом, в текущей конструкции СМС-весов у меня модуль связи с солнечной батареей в отдельном выносном блоке, на 5-метровом проводе.


    Как только в момент активности GSM-модуля расстояние до микроконтроллера сокращается меньше метра — он ребутится.


    Конденсаторов 10 + 0.1 мкФ для потребления 3-4мА более, чем достаточно.


    1. ancc
      23.10.2019 16:13
      +3

      Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.

      И контроллер один мелкий на Atmega32U4 уже лет 7 в машине ездит и выполняет одну простую задачу и тоже никогда не зависал.


      1. avf1906
        23.10.2019 17:26
        +1

        Я в свое время для тестирования на помехоустойчивость клал мобилу на плату и делал вызов на нее и с нее. Ничего не сбивалось, только измерения плыли, но это неудивительно. Ну и печальный опыт на первых разработанных платах после института, когда на столе все работало, а на объекте сбоило (это было еще до мк, на 555 логике) научило внимательно относиться к трассировке. Да, и отключать контроль питания это зло. Надо разбираться с проблемой, а не отключать защиту.
        ЗЫ: извиняюсь, это было на сообщение ancc, промахнулся


        1. 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В, то модули связи даже из режима сна не выходят, так что тут все в порядке на мой взгляд.


          1. xFFFF
            24.10.2019 11:43
            +1

            стабильная работа контроллера на 8MHz лежит ниже 2.7В

            График вообще не так читается) Это максимальная частота от напряжения. Следовательно, при 2,7В он работает на любой частоте до 10МГц. А при 4,5 можно взять любую частоту до 20 МГц. 8 МГц тоже будет работать стабильно.


          1. CodeNameHawk
            24.10.2019 11:47
            +2

            стабильная работа контроллера на 8MHz лежит ниже 2.7В

            Почти так, но наоборот
            стабильная работа контроллера на 8MHz начиная с ~ 2.5В и выше


      1. geher
        23.10.2019 18:51
        +1

        Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.

        Зависаний не было, а вот прерывания на ровном месте (на ноге, к коротой был подключен датчик расстояния) были. В результате имелись ложные срабатывания системы — ловились "призраки".
        При передаче данных о срабатывании через UART ложных срабатываний не было.


  1. Serge78rus
    23.10.2019 18:11
    +2

    Минус — точность таймеров +-5%
    Если система позволяет работать с такой точностью временных отсчетов — то и фиг с ним. Но вот использовать UART (а с GSM модулем Вы же через него работаете) с такой погрешностью тактовой частоты — это можно даже не заикаться о надежности.


    1. gerasimenkoao Автор
      23.10.2019 19:27
      -1

      Скажем так, SIM800L сам не отличается стабильностью работы.
      Вот ради интереса, включал систему на 4.2В и 3.5В — смс приходят.
      Датчики DHT22 и температуры DS18B20 работают, вес меряет.
      Сейчас поставил в холодильник на пару часов, потом — засуну в духовку на 55 градусов ;-)


      Я не утверждаю, что работа UART с таким разбросом — хорошо, но ведь все можно проверить.
      И да, еще есть возможность калибровки внутреннего RC-генератора до 1%


      1. Mogwaika
        23.10.2019 19:30

        На каждую температуру и потом вносить изменения в счётчики по показаниям градусника?


      1. 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 отсутствует, но ее можно найти на эстонском сайте


        1. DROS
          24.10.2019 19:36

          Разрешите немного по оффтопить.

          Поскольку в Вас, несомненно, широкий опыт работы с GSM-модулями, не подскажете, какой модуль умеет net monitor? Задача — отлавливать ближайшие БС-ки ОПСОСов с привязкой к местности (да, я в курсе, что есть база таких данных, но это не интересно).

          Хотелось бы стабильного, шустрого монитора, за рубль килограмм и в минимальных габаритах.


          1. 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, но это не точно) попадалась команда, имеющая опцию выдачи прямых координат, но она в наших сетях не работала (да особо и не заморачиваля).


  1. VT100
    23.10.2019 21:10

    Открываем раздел "Вредные советы". Вместо того, чтоб разобраться с разводкой "вороньего гнезда", конфигураций МК и питанием — лепим благоглупости…
    Вот, был такой клоун с "дурино нано для промышленных применений": http://caxapa.ru/748942.html?todo=full


  1. gerasimenkoao Автор
    24.10.2019 11:37
    -1

    Хорошо, скажу так, чтобы стало всем понятно.
    Я ВЕДУ КУРСЫ АРДУИНО.
    Вы предложите детям на занятиях делать разводку печатных плат?
    Когда на первом уроке изучается скетч Blink, а объяснение работы ШИМ для восьмилеток — это отдельный цирк с конями.


    То что плохого в моем методе хоть как-то сделать детские конструкции стабильней?


    1. Shtucer
      24.10.2019 16:35
      +1

      Вы же в статье не написали, что ваша статья для восьмилеток. Вот её и восприняли всерьёз.


      1. gerasimenkoao Автор
        24.10.2019 17:13

        Для восьмилеток — "правленные" ардуинки.


        Меня просто поражает, как все возбудились на отключение BOD-а.


        В мануале написано НЕ ОТКЛЮЧАТЬ данный режим — нет!


        Никто процессора не разгонял?
        Так те статьи — норм!
        Про порнхаб — норм — годно прямо и православно для Хабра.


        А то, что BOD отключается в режимах сна (по доке)- тоже ересь?


  1. sim2q
    24.10.2019 17:47
    +1

    Дело очень хорошее и трепетное!
    Поэтому лучше сразу всё правильно делать:) особенно там где могут дети подсмотреть, а они такие умницы порой — всё замечают
    ps «вёл» радиокружок, осознал, раскаиваюсь и теперь беспокоюсь о других


    1. gerasimenkoao Автор
      24.10.2019 21:31

      Вот чесно, мне нравится работать с детьми и платформой ардуино.


      Дети менее циничны, чем хабровчане (но не всегда), а Atmega порой прощает ошибки потив STM32, за esp-шки вообще молчу — черный ящик в буквальном смысле слова.


      Но на самом деле, с Хабра я не ухожу по другой причине — и как не странно, это критика!


      Обыно, ошибки айтишника оцениваются временем и деньгами.


      Ошибки электропчеловода оцениваются сотнями тысяч жизней… пчелиных.


      1. Mogwaika
        25.10.2019 11:08

        как нИ странно


  1. Seer777
    24.10.2019 21:13
    +1

    Автор ты свой текст хоть читал? У тебя мысль прыгает даже не от абзаца к абзацу, а от предложения к предложению.
    Чукча конечно не читатель ....


  1. COKPOWEHEU
    25.10.2019 12:51
    +1

    У ардуинки же вроде есть нормальный 6-контактный разъем для программирования. Что мешало собрать человеческий программатор, хотя бы usbasp / usbisp / avrdoper, не говоря уж про всякие ft232 и подключаться по-человечески, шлейфом, без всяких этажерок?
    UPD: А, так на этих недо-платках даже разъема нормального нет
    Если уж решили избавляться от основного кварца (странное решение, вообще-то, но дело ваше), почему бы не заменить его на часовой? Когда нужны точные интервалы времени (увы, на интерфейсах это не скажется) запускаем асинхронный таймер и меряем все что нужно.