Вот вы написали программу, и залили её в свой UNO. Всё великолепно работает, но такую громадную железку не запихнуть в миниатюрный корпус. Да и вдруг, вы хотите сделать 100 таких устройств, а зачем вам увеличение себестоимости, ведь на платах Arduino куча ненужного барахла.
Ну что же, попробуем. Для начала, как мы помним, в самых распространённых платах Nano и Mega, используется камень AtMega328P. Логично, что для его запуска, нам нужно подать питание на него. Для этого здесь достаточно много пинов VCC и GND, особенно в планарных типах корпуса. Связано это с топологией чипа на уровне производства, ведь каждый пин контроллера держит токовую нагрузку, поэтому МК должен быть запитан равномерно со всех сторон
![](http://wreckage.ru/wp-content/uploads/2019/05/Снимок-экрана-354-1024x760.png)
Пин AREF отвечает за опорное напряжение АЦП, туда можно подать напряжение, относительно которого вы хотите читать результаты, или, если это будет 5в, или 2.5 от внутреннего делителя, то подтянуть конденсатором к питанию. Также, по классике, на линию питанию нужно повесить конденсаторы для сглаживанию питающего напряжения – от этого зависит стабильность микроконтроллера.
![](http://wreckage.ru/wp-content/uploads/2019/05/Mega328-обвязка-голого-чипа-1024x756.png)
Знаете, на arduino, есть такая кнопка – Reset, от которой можно перезагрузить МК. Это такой выход i/o, на который на который вроде бы можно повесить периферию, но с большими ограничениями. Поэтому, если вам хватает ног, лучше не трогайте этот пин. Изначально он подтянут внутренним резистором, но лучше, для надёжности и стабильности сделать внешнюю подтяжку резистором 10кОм. Перезагружать готовое устройство нужды особой нет – кнопку ставить не будем.
![mega328 подтяжка reset](https://wreckage.ru/wp-content/uploads/2019/05/mega328-подтяжка-reset-1-1024x687.png)
Теперь нужно разобраться с тактированием. Arduino работает на частоте 16Мгц, т.е. от внешнего кварца. Если вы продолжаете работать на этой частоте, то этот кварц нужно установить на создаваемую плату, вместе с конденсаторами 22пФ.
![Тактирование atmega328p](https://wreckage.ru/wp-content/uploads/2019/05/Тактирование-atmega328p-1-1024x741.png)
Но если точность вычислений вам не сильно нужна, а хочется сэкономить в размерах, как иногда мне, то кварц можно вообще не ставить, а тактироваться от внутренней RC цепочки с 8Мгц. Как скомпилировать прошивку в arduino с другой частотой в 8Мгц, я расскажу позже. А пока рассмотрим самую важную часть – как программировать то голый микроконтроллер? Ведь usb выхода у него нет. Есть разные пути, но самый простой – использовать внутрисхемное программирование SPI. И купить дешёвый программатор USB ASP. Мой выглядит так, у него не подписаны контакты
![](http://wreckage.ru/wp-content/uploads/2019/05/usbasp-покупной.jpg)
Нарисовал удобную распиновку, если смотреть со стороны контактов. Для SPI нам важны 5 контактов, но я обычно беру и питание с программатора – MISO, MOSI, SCK, RST, GND
![](http://wreckage.ru/wp-content/uploads/2019/05/Распиновка-usbasp-blue.png)
Также у меня лежит самодельный UsbAsp, но он громоздкий, и у него не сделан вывод 3.3в, поэтому я его давно не использую
![](http://wreckage.ru/wp-content/uploads/2019/05/usbasp1-1024x643.jpg)
Теперь рассмотрим, какие выводы мы будем использовать для программирования на принципиальной схеме МК.
![Полная обвязка atmega328 для программатора](https://wreckage.ru/wp-content/uploads/2019/05/Полная-обвязка-atmega328-для-программатора-1-1024x776.png)
Теперь если подать питание, и подключить выводы программатора MOSI, MISO, SCK, RESET, GND то можно приступать к программированию. Как помните, из предыдущей статьи, где мы рассказали как достать HEX файл из среды Arduino, IDE делает два файла – *.hex и *with_bootloader.hex. Загрузчик нам не нужен, поэтому будем использовать обычный *.hex. Есть один нюанс – при покупке голого кристалла, он запрограммирован на RC цепочку 1Мгц. Да и вообще у atmega, есть система фьюз-битов. Выглядит это обычно не очень понятно, но конечно в среде Arduino всё это вырезано, чтоб не смущать новичков. Чтобы добраться до этих конфигураций, полезно будет скачать программу AVRDUDE. Главное окно выглядит так, здесь нужно сразу выбрать нужный МК
![](http://wreckage.ru/wp-content/uploads/2019/05/Выбор-контроллера.png)
Переходим во вкладку Fuses – здесь, чтобы не наделать бед, а если вы запишите неправильные данные, контроллер можно превратить почти в кирпич (что не очень удобно на распаянной smd плате), я сначала СЧИТЫВАЮ биты, заодно можно убедиться в правильности подключения программатора к МК. Если всё хорошо – получаем такую картинку
![](http://wreckage.ru/wp-content/uploads/2019/05/фьюз-биты-прочитаны.png)
Чтобы правильно выставить fuse-биты, нужно воспользоваться помощью специального калькулятора. Я пользуюсь этим. Тут также нужно выбрать чип, способ тактирования и другие параметры. В принципе для смены частоты достаточно сменить блок CKSEL фьюзов. В данном случае я выбрал Int RC – 8Mhz.
![](http://wreckage.ru/wp-content/uploads/2019/05/калькулятор-fuse-битов-1024x330.png)
Получил картинку фьюзов.
![](http://wreckage.ru/wp-content/uploads/2019/05/Биты-для-8МГЦ-1024x567.png)
А теперь переносим параметры в AVR DUDE, также калькулятор включает делитель на 8, бит CKDIV8, он нам не нужен. Можете пользоваться нижеприведённым скриншотом, для запуска atmega 328p на 8Мгц от внутреннего RC осциллятора.
![](http://wreckage.ru/wp-content/uploads/2019/05/Чтение-фьюз-битов.png)
Жмём запись – и МК принимает необходимую конфигурацию. Теперь осталось залить прошивку, но ведь она у нас рассчитана на 16Мгц, но в Arduino IDE, есть простой путь скомпилировать прошивку для atmega 328, для частоты 8Мгц. Нужно выбрать плату arduino pro, и указать частоту 8mhz
![](http://wreckage.ru/wp-content/uploads/2019/05/Arduino-прошивка-на-8Мгц.png)
Как вы заметили, напротив чипа, стоит напряжение 3.3В при пониженной частоте – всё верно, но это не означает, что нельзя запитать кристалл от 5В. Зато от 3.3В теперь можно). Теперь после компиляции нам осталось по знакомому пути найти файл прошивки в формате HEX, и вернуться в AVR DUDE. Выбрать файл прошивки – и нажать программирование.
![](http://wreckage.ru/wp-content/uploads/2019/05/Прошивка-через-avrdude.png)
Всё! Вы избавились от лишней периферии Arduino, можете сделать плату в своём дизайне PCB, а прошивку использовать с вашего прототипа. В следующей статье, мы сделаем свою плату игральных костей в размере 4х4 см, чтобы упаковать в маленький корпус, и проделаем эти шаги на практике.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.