====== Сборка прошивки и загрузка ====== Если вы читаете данную статью, то вы либо уже собрали устройство, либо находитесь на завершающей стадии сборки. Так или иначе, я предлагаю на выбор 2 способа загрузки: собрать прошивку из исходников с помощью **Arduino IDE 2** или загрузить бинарный файл сборки с помощью специальной утилиты. ===== Сборка прошивки из исходников ===== В данной процедуре нет совершенно ничего сложного, я попытаюсь построить свое объяснение таким образом, чтобы было ясно даже для тех, кто никогда до этого не работал с платформой Arduino, в любом случае в интернете есть много материалов, которые помогут разобраться в этой теме. Итак, для начала нам потребуется скачать и установить программу **Arduino IDE 2**, для этого качайте ее с [[https://www.arduino.cc/en/software|официального сайта]] и устанавливайте на свой компьютер. Cкачайте файлы исходников (они находятся на [[main|главной странице проекта]]). Затем откройте скетч //desktop_stopwatch.ino.// Далее для сборки нам потребуется установить несколько сторонних библиотек, весь список приведен в таблице, на всякий случай я оставил номера версий, которые были использованы и являются совместимыми с исходным кодом, а то вдруг может выясниться, что коды библиотек окажутся несовместимыми после обновления их авторами, так что, если вдруг возникнут какие-то проблемы, то скачайте указанные версии. На момент прочтения некоторые библиотеки могут уже быть обновлены, и как принято в программистском сообществе: если первая цифра в номере версии та же, то код должен оставаться совместимым, но всегда нужно иметь в виду, что никто не обязан следовать данному принципу, он может даже не знать о нем. ^ Имя библиотеки ^ Автор ^ Версия ^ Ссылка на репозиторий ^ | EncButton | AlexGyver | 3.6.3 | [[https://github.com/GyverLibs/EncButton]] | | max7219 | Jonathan Evans | 1.0.0 | [[https://github.com/JemRF/max7219]] | | TimerMs | AlexGyver | 1.2 | [[https://github.com/GyverLibs/TimerMs]] | | GyverTimers | AlexGyver | 1.10 | [[https://github.com/GyverLibs/GyverTimers]] | | BME280 | Tyler Glenn | 3.0.0 | [[https://github.com/finitespace/BME280]] | | RTC | Manjunath CV | 1.8.0 | [[https://github.com/cvmanjoo/RTC]] | Хорошо, IDE (интегрированную среду разработки) запустили, а скетч открыли, теперь, нажмите на боковой панели на кнопку, которая похожа на стопку книг или нажмите сочетание клавиш **Ctrl + Shift + I**, затем в поле// Filter your search //введите имя библиотеки (1), проверьте автора (2), затем нажмите на кнопку **Install**, дождитесь конца процесса загрузки и установки, затем проделайте те же действия для остальных библиотек. {{ :personal_blog:diy:desktop_stopwatch:instasll_library.jpg?400&direct |поиск библиотеки Arduino}}Далее модифицируйте код в соответствии со своими потребностями. В строчке кода //#define DISPLAY_INVERTED <значение параметра>// установите значение параметра:1 - если порядок подключения общих катодов индикаторов к MAX7219 обратный, в текущей схеме устройства он такой, но, если вы подключите обычный модуль, то можете обнаружить, что чередование символов инвертированное; 0 - если не нужно инвертировать порядок символов, установите это значение, если используете заводской дисплейный модуль. В строчке кода //#define USE_RTC_MODULE <значение параметра>// установите значение параметра:1 - если установлен модуль DS3231 и необходимо его задействовать (в предыдущих статьях я писал, что есть нюансы при использовании данного модуля совместно с датчиком BME280); 0 - в противном случае. Следующие параметры рекомендуется редактировать только опытным пользователям: * //DISPLAY_BLINK_PERIOD //- период переключения состояния дисплея включен/выключен (мигание) в миллисекундах * //BUZZER_PIN //- номер цифрового пина, к которому подключен пьезоизлучатель * //BUZZER_FREQ //- частота сигнала, который подается на пьезоизлучатель * //BUZZER_DURATION //- продолжительность подачи сигнала в миллисекундах * //BUZZER_DELAY//- задержка между звуковыми сигналами в миллисекундах После того как все параметры установлены, подключите плату ардуино к компьютеру, в моем случае я использовал неофициальную плату ардуино, которая использует для связи с компьютером микросхему **CH340**, поэтому потребуется установить драйвер на ПК ([[https://wiki.amperka.ru/_media/articles:driver-ch340:ch340ser-windows.zip|ссылка на драйвер для Windows]]). В остальном случае обратитесь к документации для своей платы. После выберите подключенную плату и порт в //Tool -> Board:<....> -> Arduino AVR Board -> (выберите совместимую плату)//. Повторю, что я в данном проекте использована плата Arduino Nano с микроконтроллером Atmega328p, но вы можете использовать другую плату на микроконтроллере AVR, с характеристиками аналогичными или более высокими. {{ :personal_blog:diy:desktop_stopwatch:select_board.jpg?600&direct |выбор платы Arduino}}Если плата окажется не совместимой, то код скорее всего не пройдет компиляцию, также после удачной компиляции будет выведена информация о том, сколько процентов постоянной и оперативной памяти будет использовано. Чтобы запустить сборку нажмите на верхней панели на кнопку с галочкой(Verify) или сочетание клавиш **Ctrl+R**, если сборка прошла успешно, то будет выведено сообщение вроде этого {{ :personal_blog:diy:desktop_stopwatch:build_success.jpg?nolink |успешная компиляция}}Как я ранее говорил, будет выведена информация с требованиями к памяти, для платы Arduino Nano необходимо 70% ПЗУ и 35% оперативной памяти. Если кроме этого выводятся сообщения об ошибках, то проверьте все проделанные ранее действия. Если все собирается без проблем, то нажмите кнопку с изображением стрелки (Upload) или **Ctrl+U**, начнется процесс загрузки, после его завершения устройство будет готово к работе. Как пользоваться устройством читайте в материале [[user-manual]]. ===== Загрузка готовой сборки ===== В архиве //Builds.zip// находятся бинарные файлы с расширение HEX, всего присутствует 2 варианта: с применение модуля часов реального времени DS3221 (имя файла имеет суффикс "//_rtc//") и без него. На моем оборудовании были проблемы при наличии в модуле часов батарейки, устройство зависало при запуске, может в вашем случае все будет иначе, в любом случае решайте сами. Данный способ я не использовал на практике, поэтому не могу с уверенностью сказать как производится загрузка прошивки в микроконтроллер. Один из вариантов загрузки: с помощью утилиты [[https://github.com/binaryupdates/xLoader|XLoader]], с инструкцией по использованию вы можете ознакомиться в [[https://jarduino.ru/2019/12/23/arduino-hex-upload/|этой статье]], также в материале описаны другие способы загрузки. ===== Другие варианты схемы ===== Данное устройство имеет очень простую схему и для минимальной комплектации достаточно всего трех компонентов: плата ардуино, модуль дисплея на микросхеме MAX7219 и 3 кнопки, на изображении ниже показано устройство, которое я собрал на брэдборде(breadboard) {{ :personal_blog:diy:desktop_stopwatch:breadboard_stopwatch.jpg?600&direct |NotOnlyClock собранный на брэдборде с применение микроконтроллера LGT8F328P}}Также в показанной схеме использован аналог МК AVR, а конкретно **LGT8F328P**, устройство работает, но есть один нюанс, пользовательские настройки не сохраняются в постоянной памяти, так как данный МК не имеет EEPROM. Но, при желании можно использовать и его, просто необходимые настройки можно задать непосредственно в коде прошивки. Пользовательские настройки хранятся в структуре //struct SetttingsData{...}//, все параметры имеют приставку схожую с той, что указана в [[user-manual]], p1, p2 и т.д., после знака //"="// введите необходимые значения параметров, затем скомпилируйте и загрузите прошивку. Изменить параметры и опробовать их можно в режиме установки пользовательских настроек, только учтите, что при повторное загрузке контроллера будут установлены начальные значения. Для других вариантов конструкции может возникнуть желание и необходимость поместить компоненты устройства в подходящий корпус, этот вопрос вы уже решаете сами, можете переделать предложенный мной вариант корпуса на свое усмотрение. При должном умении вы можете изменить прошивку, а также добавить дополнительную периферию, для этого я оставил несколько свободных цифровых пинов, например, у меня была идея вывести разъем на заднюю стенку для подключения реле, чтобы включать звонок при срабатывания будильника, также поступали предложения добавить светочувствительный элемент, чтобы яркость дисплея подстраивалась в зависимости от освещения. На самом деле вариантов апгрейда можно придумать бесчисленное количество, все определяется потребностями и материальными возможностями. ===== Вместо заключения ===== Спасибо всем, кто уделил время прочтению данных материалов, надеюсь моя разработка окажется полезной не только для меня и вы соберете свой экземпляр устройства, а лучше соберите и для себя, и в подарок для хорошего человека. Вы можете принять участие в усовершенствовании проекта, для этого в конце статьи будет указан адрес, на который вы можете присылать свои замечания и предложения, а чтобы не пропустить новые обновления подписывайтесь на [[https://t.me/ironmesh_studio_rus|Телеграм канал]]. Также я подумываю открыть Discord сервер для ведения обсуждений, но в случае, если будет соответствующий запрос от вас. ---- {{page>..:article-footer & noheader }}