Watchdog на arduino для майнига . Делаем watchdog своими руками на ардуино UNO

Давно хотел разобраться с “крутилкой”. Наконец появилось время и желание это сделать. В паутине нашел три метода обработки кода грея для энкодера. Первый самый примитивный. Использует тонны if-else и програмный debounce на millis(). Работает медленно. Вот скриншот такой копипасты. image счетчик энкодера у курильщика с ардуино головного мозга С переходными процессами в этом примере разбираются без таймера. Тупо ждут микросекунду. Шах и мат перфекционисты. Вторая особенность – вешают функцию onA() на первое прерывание, а onB() на второе. Зачем? Никто не запрещает читать encoder_A_Pin вместе с encoder_B_Pin при срабатывании внешнего прерывания на onA(). Освободившийся interrupt можно использовать для кнопки или второго энкодера. Второй метод на основе массива всех возможных состояний энкодера. А их не много не мало 16 штук. Достоинства. Простота кода. Чуть-чуть быстрее if-else. Автоматический debounce – все ложные состояния отбрасываются. Правда при сильном дребезге отбрасываются и истиные значения – энкодер кликает, а счетчик не срабатывает. Лечится добавлением 100nF/0.1μF конденсаторов между ногами энкодера и землей. image таблица состояний энкодера Самый продвинутый – это доработанный второй. Из 16 состояний удаляются бесполезные. Какая нам польза от знания где крутилка до/после клика? На основе оставшихся 4-х комбинаций с помощью булевой алгебры и switch-case делается простейший счетчик. Все! Правда есть нюанс. Функция digitalRead() оказалась настолько медленной, что ATmega328 не успевал читать значения pinA и pinB при срабатывании внешнего прерывания с условием CHANGE на pin A. Поэтому для AVR пришлось использовать прерывание по Timer1. Каждые 0.01 секунд срабатывает таймер и AVR не спеша читает состояние пинов и обновляет счетчик энкодера. Для быстрых STM32 и ESP8266 все работает на внешнем прерывании – как только энкодер начинает крутиться, срабатывает внешнее прерывание на pinA, считываются значения pinA и pinB и обновляется позиция энкодера. UDP: Версия библиотеки подросла до 1.4.1 – заменен тормозной digitalRead() для ATmega328 . Тепрь AVR работает без костыля Timer1. счетчик энкодера здорового человека Библиотека подсчитывает только физические клики, оставляя все лишнее за бортом. Внутренняя подтяжка включена и доплнительные резисторы не нужны. У популярного шилда KY-040 10КОм уже есть на плате и подключать их НЕ НАДО. железный debounce С теорией по методам устранения дребезга можно ознакомится здесь. Калькулятор для подбора гасящего конденсатора тут. Чем больше емкость конденсаторов, тем выше износ контактов энкодера. расшифровка контактов KY-040 UDP: Переписал код. Теперь еще быстрее, меньше в размере и винарнее. Для кого-то недостаток, для кого-то достоинство, но теперь без аппаратных прерываний не работает. Спасибо товарищу kotyamba за консультацию и знания. UDP2: Пришлось опять переписать код. Как правильно заметил ksergey9 в комментариях, наше с kotyamba творение более менее нормально работало на медленном AVR. Как только его запускали на быстрых Cortex все превращалось в тыкву. Тепрь все ОК. Лично проверил на Arduino Nano 16Mhz, STM32 Blue Pill и ESP8266. UDP3: Воспользовался ООП и путем наследования сделал тяжелый класс с float – “RotaryEncoderAdvanced”. В нем можно прописывать количество шагов на клик, минимальное и максимальное значение. Получился законченный велосипед. Естественно легкий класс “RotaryEncoder” никуда не делся и работает без изменений. UDP4: Переделал “RotaryEncoderAdvanced” на template, прощай float. Библиотека может занимать меньше памяти – все зависит от типа используемых переменных. Добавил возможность на лету менять – step per click, minimum value и maximum value. Управляем множеством различных значений с помощью одного энкодера!!! UDP5: Тормозной digitalRead() для ATmega328 заменен на быстрый, теперь все работает без костыля Timer1. Забирать как всегда тут.

При эксплуатации мощного вычислительного оборудования в летнее время очень важно обеспечить правильный температурный режим. Это способствует долговременной работе компьютеров практически без ущерба их ресурсу. В первую очередь при повышенной температуре страдают полупроводниковые элементы, в особенности память. После продолжительной работы в условиях повышенной температуры память уже не может держать повышенные частоты, выдает все больше ошибок, в конце концов полностью выходя из строя. Убитой память практически гарантированно становится после нескольких месяцев эксплуатации видеокарт при температуре выше 79 градусов. Температурный режим, заявленный производителем касается видеокарт, эксплуатирующихся в обычном режиме: для игр и офисных задач. Из-за вибрации, ударов, резких температурных перепадов/перегрева со временем может произойти ухудшение контакта BGA-шаров на видеокарте: В случае значительного перегрева…

С обратной стороны ничего интересного: только дорожки, соединяющие три переходных отверстия с пинами модуля. Да не очень качественно отмытый флюс: Модуль построен на базе далласовского чипа DS1232. Для тех, кто привык читать официальную литературу, вот даташит. Чип обеспечивает сразу три функции: мониторинг питания, сторожевой таймер и формирование правильного импульса Reset (нужных фронтов, амплитуды и длительности), даже при дребезге контактов ручной кнопки перезагрузки. Коротко и сжато о назначении выводов чипа Продавец услужливо опубликовал схему модуля и его разводку: Как видим из схемы, линии чипа ST, RST и /RST выведены, как одноимённые, и на пины модуля. Производитель предоставил нам самое лояльное и комфортное включение чипа: максимально широкий коридор питающих напряжений (от 4,5 до 5V) и максимально возможный таймаут сторожевого таймера (1,2 секунды). Теперь становится понятной схема подключения модуля к нашей условной ардуине: — линии Vcc и Gnd на модуле подключаются к двум одноимённым линиям на arduino; — линия /RST на модуле подключается к пину RST на ардуине — линия ST подключается к любому свободному пину, желательно без аппаратного ШИМ, — допустим, у меня это пин 2. Набросаем простенький скетч для проверки модуля. Я (исключительно для наглядности) при инициализации программно мигаю встроенным светодиодом. Этого можно было не делать, светодиод мигнёт и без нас. Но так — нагляднее и понятнее новичкам. При значении задержки 1150 миллисекунд (в моём конкретном случае) или меньших, наша ардуина спокойно крутится в рабочем цикле, ей ничто не мешает. Светодиод, мигнув вначале, не светится — перезагрузок нет. Как только мы увеличим эту задержку хотя бы до 1200 миллисекунд (или внесём значительную задержку в процедуру Setup), мы увидим, что светодиод начнёт циклически вспыхивать: время для собаки становится критическим и она перезагружает ардуину. В реальных же условиях рабочего скетча, достаточно внести строчкув самый конец основного цикла, чтобы сторожевой модуль, подключённый к пину 2, чувствовал себя спокойно. При инициализации ардуины все пины передёргиваются, поэтому собаке абсолютно всё равно, на каком логическом уровне зависло устройство: таймер был запущен и, значит, перезагружающий импульс неминуемо придёт. Выводы. 1. Нужен ли сторожевой таймер в принципе? Если в проектируемом вами устройстве зависания могут привести к негативным последствиям, то да. С ним система будет, очевидно, более устойчивой, чем без него. 2. Является ли внешний сторожевой таймер панацеей? Конечно, нет. Он более эффективен, чем внутренний, имеющийся во многих микроконтроллерах, но и он не панацея. Для достижения максимальной эффективности его работы, важно его подключить в правильное место вашей системы. Лучше не подключать его к линиям, на которых сигналы формируются аппаратно (ШИМ, различные аппаратные порты со стробами), а также к сигналам внешнего или внутреннего тактового генератора. Ну и абсолютно бессмысленно подключать его к линиям, работающим на вход — так мы будем контролировать не свой микроконтроллер, а что-то другое. 3. Есть ли минусы у этого сторожа? Главным минусом внешнего сторожевого таймера, в общем случае, является потребность в выделении для его работы одного пина на вашем устройстве. Хотя на практике, этого очень часто удаётся избежать: если ваш микроконтроллер что-то постоянно пишет или рисует на дисплее, что-то постоянно посылает в порты, формирует какие-то управляющие импульсы для внешних устройств — подключайте сторожевую собаку к этим линиям, — ей абсолютно безразличны частота и скважность импульсов, ей лишь бы была постоянная движуха. Главным минусом конкретно этой реализации таймера я назову, пожалуй, довольно короткий контрольный таймаут. Бывают случаи, когда хотелось бы иметь запас хотя бы в 3-5 секунд. 4. Надо ли покупать именно этот watchdog? Ну, каждый решит для себя. Сторожевую собаку, совершенно точно, можно получить дешевле $3. Кому-то проще купить один лишь только обозреваемый выше чип и с помощью ЛУТ сделать такой модуль самому. Кому-то проще взять легендарный 555 и сделать сторожевой таймер на рассыпухе: плюсы — дёшево и доступно, минусы — больше возни и времязадающие электролитические конденсаторы, а, значит, с годами гарантированно поплывут все параметры. Кому-то проще сделать одновибратор с таймером вообще на полупроводниках. Тут каждый решает сам. Здесь же за вполне посильные деньги мы получаем полностью готовое и рабочее устройство с нормированными параметрами. Так что резонность покупки каждый оценит самостоятельно. Моей же задачей было рассказать о таких устройствах, о принципах их работы и, возможно, дать кому-то творческий импульс для самостоятельного построения новых интересных самоделок. Никто ничего не предоставлял и не спонсировал, всё куплено на свои. UPD: Пока писал обзор, продавец неожиданно поднял цену. Упс. Будем считать это временным приступом жадности. На этот товар у него периодически бывает скидка. Ну и ничто не мешает искать этот товар у какого-то другого продавца.

Для управления приложением я использую плату Arduino Pro Mini с микроконтроллером ATMega328P (5V, 16MHz). Купил на Aliexpress в магазине Consumer Electronics Store  Store No.336447.

Удобная диаграмма !ProMini. Datasheet контроллера Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.

Программирование осуществляется при помощи Arduino IDE. Подключение к компьютеру осуществляется через USB порт при помощи USB to TTL UART модуля, например, на микросхеме CP2102 (CP2102 datasheet). Купил на Aliexpress в магазине ModuleFans Store No.612195.

Подключение к USB осуществляется по схеме:

Поскольку предполагается автономная работа в течение длительного времени, необходимо решить задачу перезагрузки контроллера в случае его зависания. Для этого используется watchdog timer. Идея простая: в таймер записывается время (максимально 8 секунд) и таймер начинает его уменьшать. Нужно до достижении 0 сбросить таймер. Если таймер не сброшен, то это означает, что контроллер завис. При достижении 0 контроллер перезагружается. Вот код, реализующий эту функцию:

  //* (c) Victor Makarov, 2015  #include     void setup() {      wdt_enable(WDTO_8S); // Установка таймера Watchdog на 8 секунд  }    void loop() {        //  Какие-либо полезные действия        // Сброс таймера Watchdog. Если управление не получено в течение      // 8 секунд от предыдущего вызова - будет осуществлена перезагрузка.      wdt_reset();  }  

Однако существует проблема в стандартном bootloader Arduino. Он неправильно работает с этим таймером. При перезагрузке этот таймер устанавливается на 15мс и загрузчик должен его выключить. Однако загрузчик Arduino этого не делает и контроллер не успев запустить прикладную программу снова уходит в перезагрузку.

Для решения этой проблемы я установил загрузчик Optiboot. Сам загрузчик и инструкции по установке можно скачать здесь. Я использовал одну плату Arduino Pro Mini для установки Optiboot на другую плату. Шаги по установке Optiboot:

1) Скачать загрузчик, скопировать папку optiboot в /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/bootloaders. Старую папку предварительно переименовать в optiboot.bak (на всякий случай).

2) Отредактировать файл /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/boards.txt. Предварительно сделать его резервную копию boards.txt.bak. Я удалил из него разделы всех плат, которыми не пользуюсь и добавил новый раздел для  Arduino Pro Mini с загрузчиком Optiboot:

  pro328o.name=[Optiboot] Arduino Pro Mini (5V, 16 MHz) w/ ATmega328p  pro328o.upload.tool=avrdude  pro328o.upload.protocol=arduino  pro328o.upload.maximum_size=32256  pro328o.upload.speed=115200  pro328o.bootloader.tool=avrdude  pro328o.bootloader.low_fuses=0xff  pro328o.bootloader.high_fuses=0xd6  pro328o.bootloader.extended_fuses=0x05  pro328o.bootloader.file=optiboot/optiboot_atmega328.hex  pro328o.bootloader.unlock_bits=0x3F  pro328o.bootloader.lock_bits=0x0F  pro328o.build.mcu=atmega328p  pro328o.build.f_cpu=16000000L  pro328o.build.core=arduino:arduino  pro328o.build.variant=arduino:standard  

Обращаю внимание на скорость 115200. Стандартно Arduino IDE загружает на меньшей скорости и если не исправить, то загрузка программ в Arduino не получится.

3) Использовать другую Arduino Pro Mini как программатор. Скетч программатора находится в примерах Arduino IDE.

ОНАС

AT (Artem Technologies) – команда, основанная двумя Артёмами. Мы стремимся к улучшению качества жизни, применяя самые последние технологии для разработки передовых устройств.

image
ЭЛЕКТРОНИКА

В проектах используются самые последние, разработанные главными гигантами рынка электронные компоненты. Платы производятся как и вручную, так и на производстве.

image
3D-ТЕХНОЛОГИИ

Проекты в том числе и электроника полностью конструируются в 3-х мерном пространстве, а затем печатаются на 3D-принтере с использованием биосовместимых материалов.

image
ОБУЧЕНИЕ

Некоторые наши проекты, одним из которых являются смарт-часы ATWatch, направлены на решение проблем в области образования. В большей степени в программировании и микроэлектронике.

image
ЛИЧНОЕ ПРИМЕНЕНИЕ

Так же мы реализуем проекты, необходимые в быту или повседневном обиходе. Например, ATPen – бизнес-ручка, способная управлять презентацией, компьютером, вызовами, сообщениями и конечно же способная писать на бумаге.

Наша Команда

image

Артём Квашнин

image

Артём Земляк

Наши последние Проекты

image

ОБУЧЕНИЕ

На умных часах ATWatch, чередуя теорию и практику, вы можете быстро и эффективно обучаться основам программирования и микроэлектроники. В итоге вы создадите несколько базовых проектов, включённых в общую прошивку часов. А в дальнейшем сможете реализовывать все свои самые смелые идеи!

ЭКСПЕРИМЕНТЫ

Благодаря большому количеству датчиков и модулей, а так же низкому порогу входа, вы можете быстро начать использовать ATWatch в своих собственных исследованиях и экспериментах. Раскройте свой потенциал на полную!

РАЗРАБОТКА

Используйте смарт-часы ATWatch для разработки своих собственных проектов. Обширный функционал и возможности его расширения позволят вам раскрыть все ваши возможности и воплотить в реальность все ваши задумки!

АЭРОМЫШЬ

Благодаря встроенным в ATPen акселерометру и гироскопу вы сможете с лёгкостью управлять презентацией движениями своей руки во время вашего доклада или выступления.

СЕЛЕКТОР

Используйте многофункциональное колесо на верхушке ручки, чтобы переключать инструменты, слайды, вызывать быстрое меню и много другое.

Доп. Кнопки

На боковой части ручки расположены дополнительные кнопки. Что они будут делать? Вы можете настроить их сами под ваши нужды.

Ручка

Пишущая чернилами ручка расположена в нижней части ATPen, и позволяет вам без труда раздавать автографы, делать быстрые заметки и использовать её для многих других повседневных нужд.

В РАЗРАБОТКЕ

image

ЭКРАН

Небольшой экран позволяет выводить самую нужную в данный момент информацию, исходя из запущенного приложения или происходящих событий. Оставшееся время до конца вашего выступления, ключевые слова подсказки, текст сообщения с телефона и многое другое.

Зарядка

Зарядка ATPen производится через Micro-USB, расположенного на боку ручки.

ПРОШИВКА

Для разработчиков и энтузиастов мы предусмотрели возможность прошивки микроконтроллера ручки через Micro-USB. Реализуйте свои идеи и раскройте свои возможности с помощью ATPen!

ЭРГОНОМИКА

Мы тщательно продумали эргономику ATPen, чтобы вам было максимально удобно ею пользоваться.

Чтоговорят о нас?

Нам важно мнение окружающих людей о наших проектах. В работе над проектами мы стараемся учесть все факторы и нюансы, с которыми может сталкиваться будущий пользователь, в стремлении создать лучшие устройства.

Пальчиков Е. И.

Профессор НГУ

“Часы ATWatch – хорошо спроектированное устройство. Дети ЛШИП работали с ним, и не смотря на большое кол-во одновременно задействованных датчиков и модулей, у них не возникало проблем в работе устройства.”

Экспертный совет IV ЛШИП

“За менее чем неделю ребята, обучающиеся на проекте ATWatch, научились многим базовым аспектам программирования, и показали свои полученные навыки в виде большого кол-ва реализованных специализированных приложений для смарт-часов на экспертной сессии. Проект ATWatch очень хорошо подходит для обучения детей старших классов программированию и аспектам микроэлектроники.”

Группа проекта ATWatch, IV ЛШИП

“Нам очень понравилось работать с умными часами, делать свои самые разные приложения от секундомера и плеера до игры змейки и пульсометра. Всё, что мы хотели сделать, у нас получилось реализовать, и все приложения мы объединили в общую прошивку смарт-часов, с которой успешно защитились на экспертной сессии. Мы узнали много нового и интересного, а так же получили незаменимый опыт работы в команде!”

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий