Программатор atmega328: Прошивка AVR (ATMEGA328) различными программаторами (в том числе и из-под Arduino)

Прошивка Ардуино ATmega328 через Arduino IDE и программатор

Загрузка скетча или прошивка контроллера Ардуино – основная операция, с которой рано или поздно сталкивается любой ардуинщик. Именно возможность быстро и без лишних проблем загрузить в память контроллера управляющую программу и стала одной из основных причин успеха платформы Arduino. В этой статье мы узнаем, как прошиваются Arduino Uno, Nano, Mega и другие платы на основе Atmega с использованием Arduino IDE, программатора или другой платы Ардуино.

Загрузка скетча в плату Ардуино

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

Что происходит, когда мы жмем кнопку «Загрузить»

Плата Ардуино – это микроконтроллер AVR (Atmega8/168/328 или Atmega1280/2560), который прошивается загрузчиком. В микроконтроллер записывается программа, называемая прошивкой, которая позволяет получать сигналы с датчиков, обрабатывать нажатия кнопок, общаться с различными устройствами через интерфейсы, управлять исполнительными процессами.

Обычно прошивка записывается в кристалл микроконтроллера при помощи специальных устройств, называемых программаторами. Для разных микроконтроллеров существуют различные программаторы – от специализированных до универсальных. Важным отличием Ардуино от других контроллеров является возможность залить прошивку через обычный USB кабель. Это достигается при помощи специальной программы – загрузчика (Bootloader). Для прошивки не требуются лишние провода, не нужно подключать дополнительные устройства или нажимать что-то на плате. Также при работе через загрузчик нельзя добраться до опасных настроек, которые выведут из строя Ардуино.

При подключении платы Ардуино к источнику питания, внутри него начинается активная деятельность микропрограмм. При запуске микроконтроллера управление получает загрузчик. Первые 2 секунды он проверяет, поступил ли новый код от пользователя.  Кроме того загрузчик подает импульсы на пин, к которому подключен светодиод, и он начинает мигать. Это означает, что загрузчик установлен и работает исправно. Когда подается скетч, загрузчик записывает его во флеш-память микроконтроллера. Затем эта программа подается на выполнение.  Если данные не поступили, загрузчик запускает предыдущую программу. Во время выполнения программы внутри Ардуино выполняется ряд операций по инициализации и настройке среды окружения, и только после этого начинается выполнение кода.

Вызов setup и loop при загрузке

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

Команда void setup() – в ней записываются данные, которые микроконтроллер выполняет в момент загрузки, а после может про них забыть. В этой функции указываются номера пинов, к которым подключается устройство, подключаются и инициализируются библиотеки, устанавливается скорость работы с последовательным портом.

Функция void loop – в нее помещаются команды, которые должны выполняться, пока включена плата. Микроконтроллер начнет выполнять программы, начиная с первой, и когда дойдет до конца, сразу вернется в начало, чтобы повторить эту же последовательность бесконечное число раз.

Загрузка скетча в Arduino IDE

В Ардуино IDE компиляция скетча начинается при нажатии кнопки Verify, после этого скетч может быть загружен в память Ардуино через USB с помощью кнопки Upload. Перед загрузкой кода программы нужно установить все параметры в меню Tools. В этом меню выбираются порт, к которому подключена плата, и платформу. В окне Arduino IDE внизу будет отображен ход компиляции скетча. При успешной выгрузке скетча будет получено сообщение «Done uploading».  Запуск скетча начинается сразу после окончания загрузки. Для расширения возможностей можно подключать дополнительные внешние библиотеки, разработанные командой Ардуино или сторонними авторами.

Обзор возможных вариантов загрузки скетча

Кратко весь алгоритм можно записать следующим образом: Написание кода >> компиляция >> загрузка в микроконтроллер. При загрузке скетча используется Bootloader (Загрузчик). Он представляет собой небольшую программу, которая загружается в микроконтроллер на Ардуино. С помощью этой программы можно загружать скетч, не используя дополнительные аппаратные средства. При работе загрузчика на плате будет мигать светодиод.

1. Загрузка в Arduino IDE. Самый простой и удобный вариант загрузки кода. Все, что        нужно сделать – это написать или найти нужный скетч и загрузить его.

  1. Ускоренная загрузка скетча в Arduino IDE. С помощью этого метода можно увеличить скорость загрузки в микроконтроллер в два раза. Для этого нужно лишь зайти в Настройки и снять галочку с пункта Проверка кода. Пропуская шаг проверки, будет уменьшено количество байтов, которые передаются во время загрузки. При этом все равно некоторые из видов проверок будут осуществлены, но они не занимают долгого времени. Отключать проверку кода не рекомендуется, если Ардуино помещается в какой-либо ответственный проект (например, в спутник). Также можно провести проверку, если подключение производится через очень длинный USB кабель (порядка 10 метров).

Уменьшение времени загрузки при помощи отключения проверки работает с любой платой Ардуино, которая использует USB соединение. Все эти микроконтроллеры используют загрузчик avrdude. Платы, которые используют загрузчик Catarina, не нуждаются в отключении проверки кода, так как этот загрузчик работает быстрее.

  1. Загрузка скетча в Ардуино через Bluetooth. Этот способ используется, когда нужно обойтись без физического соединения Ардуино и компьютера – например, в силовых цепях или радиочастотных цепях. Для реализации загрузки потребуется Bluetooth-модуль, который оснащен платой-адаптером для Ардуино. Этот модуль нужно подключить к компьютеру через переходник USB-UART-TTL. Работа с модулем осуществляется с помощью AT-команд.
  2. Загрузка при помощи Андроид-устройства. Для осуществления такого типа загрузки кода понадобятся провода USB-A – USB-B и USB-Host (OTG-кабель), Ардуино и устройство на базе Андроид с поддержкой режима host. На Андроид-устройство нужно установить программу ArduinoDroid или ArduinoCommander из Google Play. Все устройства нужно соединить при помощи кабелей, после этого можно включать Ардуино и загружать на него код. Нужно запустить установленную программу. При включении начнется обновление IDE, на что понадобится некоторое время.

Сначала работа будет рассмотрена на примере программы ArduinoCommander. После ее запуска нужно нажать USB-Device. Затем нужно наддать Autodetect, чтобы Андроид-устройство выполнило поиск Ардуино и отобразило его на экране. Как только Ардуино появится на экране, нужно на него нажать. Чтобы перейти в меню, нужно щелкнуть в нижнем правом углу. В этом меню можно загрузить скетч с SD-карты.

ArduinoDroid представляет собой среду разработки, компилятор и загрузчик одновременно. Начать компиляцию скетча нужно нажав на кнопку Lightning-Button. После завершения компиляции нужно нажать на кнопку загрузки. Загрузка занимает несколько секунд. По окончании загрузки ардуино запустит на выполнение новый код.

  1. Программирование при помощи Raspberry Pi. Можно загружать скетчи двумя способами – при помощи Arduino IDE и при помощи пакета arduino-mk. Пакет позволяет собирать и загружать скетчи Ардуино из командной строки.

Структура памяти Ардуино, где располагается скетч и данные

На микроконтроллере Ардуино имеется 3 вида памяти – флеш-память, которая используется для хранения скетчей, ОЗУ для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флеш-память и EEPROM являются энергонезависимыми, то есть информация сохраняется при выключении питания. ОЗУ используется только для хранения данных, которые имеют отношение к исполняемой программе.

Микроконтроллер ATmega168, который используется на части плат Ардуино, имеет 16 Кб флеш-памяти, 1024 байта для ОЗУ и 512 байт EEPROM. Важно обратить внимание на малый объем ОЗУ. Большие программы могут полностью ее израсходовать, что приведет к сбою в программе. По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее. Уменьшить объем кода можно несколькими способами:

  • Можно отправить часть информации на компьютер.
  • Для таблиц и других крупных массивов использовать минимальный тип данных для хранения.
  • Данные, которые остаются неизменными, можно объявить константами при помощи слова const перед объявлением переменной.
  • Меньше использовать рекурсию. При ее вызове в памяти, называемой стеком, выделяется фрагмент, в котором хранятся различные данные. Если часто вызывать рекурсию, стеки будут занимать большой объем памяти и могут израсходовать ее.
  • Неизменяемые строки можно сохранять во флеш-памяти во время работы программы. Для этого используется функция PROGMEM.

На объем памяти не влияют размер имени переменных и комментарии. Компилятор устроен таким образом, что не включает эти данные в скомпилированный скетч.

Для измерения объема занимаемой памяти ОЗУ используется скетч из библиотеки MemoryFree. В ней имеется специальная функция free­Memory, которая возвращает объем доступной памяти. Также эта библиотека широко используется для диагностики проблем, которые связаны с нехваткой памяти.

Оптимизация флеш-памяти. Как только будет окончена процедура компиляции, в окне появится информация о занимаемой памяти кодом. Если скетч занимает большую часть памяти, нужно произвести оптимизацию использования флеш-памяти:

  • Использование констант. Аналогично как и для ОЗУ задавать неизменяющиеся значения константами.
  • Удалить ненужные Serial.println. Эта команда используется, когда нужно увидеть значения переменных в разных местах программы, нередко эта информация просто не нужна. При этом команды занимают место в памяти, поэтому, убедившись в корректной работе программы, некоторые строки можно удалить.
  • Отказ от загрузчика – можно программировать микроконтроллер через контакты ICSP на плате с использованием аппаратных программаторов.

Флеш память является безопасным и удобным способом хранения данных, но некоторые факторы ограничивают ее использование. Для флеш-памяти характерна запись данных блоками по 64 байта. Также флеш-память гарантирует сохранность информации для 100000циклов записи, после чего информация искажается. Во флеш-памяти имеется загрузчик, который нельзя удалять или искажать. Это может привести к разрушению самой платы.

EEPROM память используется для хранения всех данных, которые потребуются после отключения питания. Для записи информации в EEPROM нужно использовать специальную библиотеку EEPROM.h, которая входит в число стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, порядка 3 мс. Также гарантируется надежность хранения данных для 100000 циклов записи, потому лучше не выполнять запись в цикле.

Варианты прошивки Ардуино

Прошивка с помощью Arduino IDE

Прошить плату при помощи среды разработки Arduino IDE можно в несколько шагов. В первую очередь нужно скачать и установить саму программу Arduino IDE. Также дополнительно нужно скачать и установить драйвер Ch441. Плату Ардуино нужно подключить к компьютеру и подождать несколько минут, пока Windows ее опознает и запомнит.

После этого нужно загрузить программу Arduino IDE и выбрать нужную плату: Инструменты – Плата. Также нужно выбрать порт, к которому она подключена: Инструменты – Порт. Готовая прошивка открывается двойным кликом, чтобы ее загрузить на плату, нужно нажать кнопку «Загрузить» вверху панели инструментов.

В некоторых ситуациях может возникнуть ошибка из-за наличия кириллицы (русских букв) в пути к папке с кодами. Для этого файл со скетчами лучше создать и сохранить в корне диска с английским наименованием.

Прошивка с помощью программатора

Одни из самых простых способов прошивки платы – при помощи программатора. Заливка будет производиться в несколько этапов.

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

После этого нужно выбрать плату, для которой нужно прошить загрузчик. Это делается в меню Сервис >> Плата.

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

Последний шаг – нажать на «записать загрузчик» в меню Сервис.

После этого начнется загрузка. Завершение произойдет примерно через 10 секунд.

Прошивка Arduino через Arduino

Для того чтобы прошить одну плату с помощью другой, нужно взять 2 Ардуино, провода и USB. В первую очередь нужно настроить плату, которая будет выступать в качестве программатора. Ее нужно подключить к компьютеру, открыть  среду разработки Arduino IDE и найти в примерах специальный скетч ArduinoISP. Нужно выбрать этот пример и прошить плату.

Теперь можно подключать вторую плату, которую нужно прошить, к первой. После этого нужно зайти в меню Инструменты и выставить там прошиваемую плату и тип программатора.

Можно начать прошивать устройство. Как только прошивка будет открыта или написана, нужно перейти в меню Скетч >> загрузить через программатор. Для заливания прошивки не подходит стандартная кнопка загрузки, так как в этом случае прошивка будет загружена на первую плату, на которой уже имеется прошивка.

Заключение

В этой статье мы рассмотрели различные аспекты загрузки скетчей в Arduino Uno и Nano. Прошивка плат на базе микроконтроллеров ATmega328 и ATmega256, как правило, не сложна и может выполняться одним нажатием кнопки в Arduino IDE. За эту простоту мы должны благодарить встроенную программу-загрузчик, выполняющую за нас все основные действия на низком уровне.

Еще одним вариантом перепрошивки контроллера является использование другой платы адуино или специальных программаторов, использующих микросхемы CP2102 Ch440, FTDI и другие. Этот метод требует дополнительных усилий и затрат, но позволяет гибко изменять параметры прошивки. Какой из двух вариантов выбрать – решать вам. Для новичков, безусловно, первым шагом станет использование Arduino IDE, благо, ее создатели сделали все, чтобы упростить этот процесс.

Как прошить чип Atmega328 или Atmega168 без программатора

Уважаемые покупатели!

В связи с реорганизацией интернет магазина, продажи товаров приостановлены.
Приносим свои извинения за доставленные неудобства!

Как прошить чип Atmega328 или Atmega168 без программатора? Для этого мы можем воспользоваться платой Arduino UNO.

И так давайте по порядку.

Для начала нам нужно загрузить скетч в наш «будущий программатор» и подготовить его для дальнейших действий.

Для этого в Arduino IDE открываем меню Файл -> Образцы -> ArduinoISP, и зальем его в Arduino UNO.

После этого нужно выбрать во вкладке Инструменты, тип платы поддерживаемой процессоры Atmega328 или Atmega168, ведь мы именно его и хотим прошить.

Ну и далее мы выбираем тип процессора который будем программировать. Я к примеру остановил выбор на Atmega328.

В этой же вкладке тип программатора выбираем AVR ISP. То есть наша плата прошитая скетчем ArduinoISP по сути делает нашу UNO программатором ISP.

Смотря на сервис мануал нашего подопытного процессора, нам надо подпаять его к нашему программатору. К примеру типоразмер TQFP32 на Atmega328 и Atmega168 одинаковы.

И глядя на верхнюю схему, подключаем наш процессор к нашему новоиспеченному программатору по нижеследующей схеме.

Ну и дальше жмем на Записать загрузчик. Arduino IDE сделает все остальное за вас. То есть установит нужные фьюзы и запишет загрузчик.

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

Далее нам нужно залить скетч в наш прошитый загрузчиком процессор. К примеру зальем простой скетч «blink», поморгаем лампочкой.

В Arduino IDE выбираем Файл -> Образцы -> Basics -> Blink. И вот самое главное: Заливать нужно не так как мы обычно заливаем скетчи, не кнопкой Вгрузить.

Заливаем через Эскиз -> Загрузить через программатор. Вот тогда ваш скетч успешно запишется в наш чип!

Удачных Вам Arduino подделок!

В выбранной категории товаров нет.

Прошивка загрузчика на микроконтроллере ATMEGA328P

Цена и размер — это только пара причин, по которым использование платы Arduino для конкретных проектов может оказаться за гранью разумного. Зачастую они слишком большие или слишком дороги для целого ряда применений, особенно если требуется сделать несколько экземпляров. Хорошим способом получить простоту применения, присущую платформе Arduino, и при этом избавиться от всех этих недостатков является использование отдельного микроконтроллера ATmega328P и программирование его посредством среды разработки Arduino IDE и её упрощённой версии языка Си. Однако без начального загрузчика (bootloader) платформы Arduino сам по себе микроконтроллер ATmega328P не получится программировать с помощью среды Arduino IDE.

Цель этого руководства — понять, как работает начальный загрузчик платформы Arduino и как его записать в память микроконтроллера ATmega328P.

Программирование микроконтроллеров может оказаться непростой задачей, поскольку для этого необходимы специальные программаторы и файлы программ в шестнадцатеричном формате с расширением.hex, не говоря уже о глубоких знаниях языка программирования Си, на котором пишутся программы. Это довольно сложно для новичков, поэтому в рамках проекта Arduino был создан специальный файл формата.hex, после установки которого в микросхему семейства AVR можно программировать платы через последовательный порт. При этом всё что вам понадобится — это подсоединить последовательный интерфейс микроконтроллера к компьютеру, что можно осуществить с помощью преобразователя из USB в UART. Этот специальный файл носит название – Загрузчик (Bootloader) Arduino.

Начальный загрузчик весьма похож на систему BIOS, работающую на ПК, и выполняет две задачи:

  1. Отслеживает, не пытается ли компьютер загрузить программу в микросхему через последовательный порт. Если компьютер начинает загрузку, то он принимает код и сохраняет его в специально отведённой области памяти микроконтроллера таким образом, чтобы при этом не затереть самого себя.
  2. Если компьютер не инициирует загрузку кода, то загрузчик командует микросхеме начать выполнение кода, который уже находится в памяти. Как только загрузчик записал в память программу и запустил её, плата Arduino будет непрерывно выполнять программу, пока подаётся питание.

Запись начального загрузчика в микроконтроллер может пригодиться не только, чтобы отдельно использовать микросхему ATmega328P, саму по себе. Это может пригодиться на случай, например, если вам понадобится заменить микроконтроллер на плате Arduino Uno или для спасения неисправной платы, которая перестала принимать код.

Существует немало способов записи загрузчика платформы Arduino в микроконтроллер, но мы остановимся на самом простом, который предполагает использование платы Arduino в качестве внутрисхемного программатора ISP (In-System Programmer).

В процессе производства электронных устройств программу в микроконтроллеры обычно загружают уже после монтажа на печатную плату. Такая операция называется внутрисхемным программированием ISP (In-System Programming), и для неё необходимы специальный разъём на плате, через который получают доступ к микроконтроллеру при записи программы. Большинство плат Arduino оснащены таким разъёмом с выводами 2×3, который используется для одной из разновидностей ISP — внутрисхемного последовательного программирования ICSP (in-circuit serial programming).

Разъём содержит 3 вывода интерфейса SPI – MOSI (D11), MISO (D12), SCK (D13) и выводы питания и земли (VCC, GND), а также вывод сброса (Reset). Через эти выводы и производится загрузка программ в микроконтроллер на плате Arduino. Подключив эти выводы к микроконтроллеру ATmega328P, мы сможем записать в его память начальный загрузчик (BootLoader) Arduino.

1. Подготовьте плату Arduino в качестве внутрисхемного программатора ISP

В среде разработке Arduino IDE есть готовый пример Arduino as ISP, который, если его загрузить в плату Arduino, превращает её во внутрисхемный программатор. Откройте этот пример и загрузите (Upload) его в плату Arduino Uno или Duemilanove.

2. Подключение компонентов

Далее соедините предназначенный для программирования микроконтроллер ATmega328P к плате Arduino с помощью макетной платы, как показано на схеме ниже.

Для наглядности ниже приведена таблица соединения.

ArduinoAtmega328P
D13Pin 19
D11PIN 17
D10Pin 1 Reset (no Capacitor needed)
VCC5V
GNDGND

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

3. Запись Загрузчика

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

Настройте среду Arduino IDE, выбрав в меню Инструменты > Плата (Tools > Board) пункт Arduino Uno. Затем выберите в меню Инструменты > Программатор (Tools > Programmer) пункт Arduino as ISP. Наконец, запишите загрузчик, выбрав пункт меню Инструменты > Записать Загрузчик (Tools > Burn Bootloader). Среда найдёт в папке, соответствующей выбранной вами плате, текстовый файл board.txt для загрузчика.

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

Выполнив все пункты, вы сможете загружать код напрямую из среды Arduino IDE в микроконтроллер ATmega328P и использовать его сам по себе.

Если загрузчик записан, то вы можете загружать в микроконтроллер свои программы посредством среды Arduino IDE, следуя этой инструкции.

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

Самодельный Arduino из контроллера ATMEGA328P-PU

Платформа Arduino стала нынче практически мейнстримом.
В этой статье напишу о том, как собрать минимальную платформу на контроллере Amega 328P-PU, чтобы ее можно было программировать на платформе Arduino IDE.

Контроллер Atmega 328 от компании ATMEL является сердцем платформ Arduino UNO , Arduino Nano, Arduino Pro Mini и ряда других. Данные платы вместе с многочисленными «шилдами» и модулями удобны для создания прототипов, но довольно громоздки и избыточны для готовых устройств.

Конечное устройство можно собрать на макетной или печатной плате. Для этого приобретаем контроллеры Atmega. Я покупал наплощадке aliexpress.com.

Цена на момент покупки была $20 за 10 контроллеров, 10 панелек и 10 кварцевых резонаторов на 16МГц. (Сейчас цена стала немного дороже)

Ссылка на товар на сайте aliexpress.com

Буковка «P» в названии микросхемы означает низкое энергопотребление, а PU-корпус DIP28, который удобно паять обычным паяльником.

Контроллеры пришли, как их теперь готовить?

Yеобходимо установить загрузчик в наши контроллеры. Для этого используем плату Arduino Uno и купленный заранее очень дешевый программатор USBasp. Чтобы не мудрить с проводками, лучше сразу взять еще и такой переходник на 6-ти пиновый разъем ICSP.

Качаем и ставим драйвер программатора.

Описываем параметры микроконтроллера в файле c:\Program Files (x86)\Arduino\hardware\arduino\boards.txt

Для себя я сделал две конфигурации — внутренний кварц 8МГц с загрузчиком optiboot и отключенной проверкой на напряжение питания (чтобы можно было запитать микросхему вольт так от трех)

atmega328_8_33.name=Atmega328 (3.3V, 8 MHz internal)

atmega328_8_33.upload.protocol=arduino
atmega328_8_33.upload.maximum_size=30720
#atmega328_8_33.upload.speed=19200
atmega328_8_33.upload.speed=57600

atmega328_8_33.bootloader.low_fuses=0xC2
atmega328_8_33.bootloader.low_fuses=0xE2
atmega328_8_33.bootloader.high_fuses=0xDE
atmega328_8_33.bootloader.extended_fuses=0x07
atmega328_8_33.bootloader.path=optiboot
atmega328_8_33.bootloader.file=optiboot_atmega328.hex
atmega328_8_33.bootloader.unlock_bits=0x3F
atmega328_8_33.bootloader.lock_bits=0x0F

atmega328_8_33.build.mcu=atmega328p
atmega328_8_33.build.f_cpu=8000000L
atmega328_8_33.build.core=arduino
atmega328_8_33.build.variant=standard

и точная такая же с внешним кварцевым резонатором на 16МГц.

atmega328_16.name=Atmega328_16 (3.3V, 16 MHz external)

atmega328_16.upload.protocol=arduino
atmega328_16.upload.maximum_size=32256
atmega328_16.upload.speed=115200
atmega328_16.bootloader.low_fuses=0xff
atmega328_16.bootloader.high_fuses=0xde
atmega328_16.bootloader.extended_fuses=0x07
atmega328_16.bootloader.path=optiboot
atmega328_16.bootloader.file=optiboot_atmega328.hex
atmega328_16.bootloader.unlock_bits=0x3F
atmega328_16.bootloader.lock_bits=0x0F
atmega328_16.build.mcu=atmega328p
atmega328_16.build.f_cpu=16000000L
atmega328_16.build.core=arduino
atmega328_16.build.variant=standard

Аккуратно вынимаем из панельки Arduino контроллер и ставим туда наш.

Запускам стандартную ArduinoIDE, выбираем в меню «Сервис->Программатор->USBasp», плату Atmega328 (3.3V, 8 MHz internal) или Atmega328_16 (3.3V, 16 MHz external) и нажимаем «Записать загрузчик». После окончания процесса загрузки мы получаем контроллер,  в который можно уже в дальнейшем заливать программы через стандартный USB Ардуины.

В принципе, если вам не требуется низковольтное питание, можно не править фал board.txt, а пошить контроллер как Arduino Uno.

Дальнейшая работа с контроллером такая — либо шить его вставляя на плату Arduino Uno через стандартный USB порт этой платы. Прошив контроллер на работу с внутренним кварцем, можно сразу использовать его практически без всякой обвязки. Например, мигать светодиодом на 13-м порту, как на этой картинке.

Если же нужно постоянно использовать контроллер в своей плате, не переставляя его — то нужно собрать такую схему

и прошивать его через конвертер USB-RS232.

Контроллер с внешним кварцем работает быстрее и гораздо стабильнее.

Где это уже работает?
Контроллер управления вентилятором в ванной комнате

Контроллер управления светодиодной люстрой

А как же мозг не вскипел все это реализовывать?

Ну конечно же был помощник

Полезные ссылки к данной статье:

со своего сайта.

Atmega328p pu схема включения для программирования

Постоянно используя отладочные платы типа Arduino в своих проектах, рано или поздно вы придете к мысли: «- А как же удешевить свои устройства и сделать их более компактными и с меньшим количеством проводов. » Всё это происходит потому, что отладив проект на Arduino, у нас остается много не задействованных разъемов, различных выходов и интерфейсов, занимающих дополнительное место. И первое с чем обычно всем хочется разобраться, это как подсоединиться напрямую к микроконтроллеру, к какой лапке что подключить и создать свою так называемую схему взаимодействия с ним, использую только все самое необходимое в своем проекте.

Разбираться будем на примере микроконтроллера ATmega328P-PU, который используется во всем известной плате Arduino Uno.

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

Сначала мы рассмотрим самую простую схему подключения микроконтроллера без использования внешнего кварцевого резонатора, так как данный микроконтроллер может работать от внутреннего кварца на частоте от 1 до 8 МГц, и этого вам с головой хватит во многих проектах.

Создаем Arduino ISP программатор из любой платы Ардуино.

В качестве программатора будем использовать плату Arduino Nano. Если у вас какая-то другая из плат Arduino, разницы нет ни какой, всё делаем так же. Подключаем плату Arduino к компьютеру. Запускаем программу Arduino IDE. В меню «Инструменты» выбираем как обычно нашу плату Ардуино и порт, с которым работаем. Открываем из примеров в программе скетч ArduinoISP «Файл» — «Примеры» — «ArduinoISP»

и загружаем его в нашу плату «Скетч» — «Загрузка».

Всё! Наш Arduino ISP программатор готов!

*На заметку. Что такое ISP и SPI и в чем отличия! Несколькими словами это можно охарактеризовать так:

ISP — это метод внутрисхемного программирования, способ записи программы, программное обеспечение.

SPI — последовательный периферийный интерфейс, протокол, шина, стандарт обмена данными между устройствами.

Подключаем Arduino ISP программатор к микроконтроллеру ATmega328P-PU.

Наш микроконтроллер ATmega328P-PU DIP28 имеет 28 ножек, по 14 с каждой стороны. Собирая схему, обратим внимание на выемку с одной из сторон на корпусе микроконтроллера ATmega328P-PU, которая поможет правильно сориентироваться в нумерации лапок микроконтроллера в соответствии с приведенными ниже схемами.

Соединяем Arduino Nano с микроконтроллером ATmega328P-PU через SPI интерфейс.

Для того чтобы понять, что и к какой лапке микроконтроллера мы подсоединили, воспользуемся для подсказки схемой распиновки микроконтроллера ATmega328P-PU.

И схемой распиновки платы Arduino Nano.

Теперь мы видим, что пин питания 5V платы Arduino Nano мы направили к лапкам VCC и AVCC микроконтроллера. Пин GND платы Ардуино мы направили на лапки GND микроконтроллера. Таким образом, мы обеспечили полностью питанием наш микроконтроллер ATmega328P-PU. Далее соединяем пины MISO (D12), MOSI (D11), SCK (D13) платы Arduino Nano с лапками MISO, MOSI, SCK микроконтроллера ATmega328, а пин SS (D10) от Ардуино подводим к лапке reset микроконтроллера. Если вы используете другую плату Arduino в качестве ISP программатора, просто найдите схему распиновки вашей платы Arduino и определитесь, где у неё находятся пины MISO, MOSI, SCK и SS. После чего соедините их с соответствующими лапками микроконтроллера ATmega328P-PU.

*На заметку.

Пины SPI интерфейса платы Arduino Mega : MISO (50), MOSI (51), SCK (52), SS (53)

Пины SPI интерфейса платы Arduino Uno : MISO (12), MOSI (11), SCK (13), SS (10)

Прошивка бутлоадера (загрузчика) в ATmega328P-PU через SPI интерфейс с помощью Arduino ISP программатора.

Теперь нам необходимо залить бутлоадер (загрузчик операционной системы) в наш микроконтроллер ATmega328P-PU. Для этого будем использовать Arduino загрузчик, настроенный специально для работы с внутренним кварцем на 8 МГц.

Качаем загрузчик по ссылке breadboard.zip

В программе Arduino IDE в меню «Файл» — «Настройки» смотрим (вспоминаем) свой путь к папке со скетчами. В этой папке со скетчами создаем папку hardware и разархивируем в неё архив с загрузчиком. Перезагружаем программу Arduino IDE и видим в меню «Инструменты» — «Платы» появилась строка «ATmega328 on a breadboard (8 MHz internal clock)», выбираем её.

В этом же меню «Инструменты», выбираем в списке программаторов, программатор «Arduino as ISP». Осталось записать загрузчик. Переходим «Инструменты» — «Записать загрузчик».

Если не прошивается бутлоадер (загрузчик).

1. Загрузчик не всегда записывается с первого раза. Если программа Arduino IDE выдаст ошибки при записи загрузчика, необходимо просто повторно выполнить команду «Инструменты» — «Записать загрузчик», обычно со второго раза загрузчик прошивается нормально.

2. Загрузчик может так же не прошиваться, если вы делали какие-то не осмысленные действия с микроконтроллером и настройки так называемых фьюзов в итоге выставились не так как надо. В таком случае необходимо просто подключить внешний кварцевый резонатор на 16МГц к лапкам 9 и 10 микроконтроллера, имеющими обозначения на схеме распиновки в виде надписи «crystal».

И снова выполнить команду «Инструменты» — «Записать загрузчик» и не забываем, что надо сделать пару попыток, с первого раза загрузчик может не записаться. После чего внешний кварц можно будет снова убрать и работать дальше без него.

Загрузка скетчей в микроконтроллер ATmega328P-PU

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

Открываем программу Arduino IDE. Создаем новый файл и копируем в него код.

Далее переходим в меню «Скетч» — «Загрузить через программатор».

Всё! Светодиод, должен начать мигать. Именно команда «Загрузить через программатор» позволяет загрузить скетч через Arduino Nano, считая в таком случае её ISP программатором для передачи данных по SPI интерфейсу. Если же нажимать просто команду «Скетч» — «Загрузить», тогда программа будет пытаться загрузить скетч в саму Arduino Nano и при правильном выборе платы она его конечно же загрузит )).

Схема минимальной обвязки ATmega328P-PU с внешним кварцевым резонатором на 16 МГц.

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

Кварцевый резонатор мы уже помним, как подсоединяется на ножки 9 и 10 микроконтроллера. А вот для обеспечения стабильной работы кварца, необходимо каждую его ножку соединить с землей через керамический конденсатор емкостью 22пФ. Так же для фильтрации ВЧ помех в нашей электрической цепи, соединим питание и землю микроконтроллера керамическим конденсатором 0.1мкФ.

Микроконтроллер работает по заданной программе, когда на ножке reset присутствует положительный сигнал. В принципе, микроконтроллер всегда сам держит вывод reset в режиме выполнения кода, но для стабильного положительного сигнала на этой линии (чтобы избежать впоследствии не стабильной работы), соединим ножку reset микроконтроллера ATmega328P-PU с положительным потенциалом нашей линии питания 5V через резистор 10 кОм.

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

Осталось залить в контроллер бутлоадер (загрузчик), предназначенный для работы с внешним кварцевым резонатором на 16 МГц. Тут все ещё проще, не надо ничего скачивать. Просто открываем программу Arduino IDE и в меню «Инструменты» — «Платы» выбираем «Arduino/Genuino Uno». То есть мы сейчас прошьем тем самым загрузчиком, которым прошит микроконтроллер в самой обычной Arduino Uno. Программатор в меню «Инструменты» остается «Arduino as ISP». Переходим в меню «Инструменты» — «Записать загрузчик».

Всё! Наш аналог платы Arduino Uno своими руками готов! Можно дальше заливать скетчи через меню «Скетч» — «Загрузить через программатор» и продумывает свои будущие, более дешевые и компактные в габаритах проекты.

*На заметку. Многие пытаются сразу перейти на работу с UART интерфейсом для загрузки последующих скетчей в микроконтроллер. UART интерфейс тема другой статьи, но тут напомним одну не стыковку. Если вы пытаетесь заливать скетчи через UART интерфейс и ничего не получается, попробуйте снова перепрошить загрузчик через SPI интерфейс, но только не заливать после этого через SPI интерфейс ни каких скетчей. То есть первый скетч после прошивки загрузчика заливайте через UART интерфейс.

Постоянно используя отладочные платы типа Arduino в своих проектах, рано или поздно вы придете к мысли: «- А как же удешевить свои устройства и сделать их более компактными и с меньшим количеством проводов. » Всё это происходит потому, что отладив проект на Arduino, у нас остается много не задействованных разъемов, различных выходов и интерфейсов, занимающих дополнительное место. И первое с чем обычно всем хочется разобраться, это как подсоединиться напрямую к микроконтроллеру, к какой лапке что подключить и создать свою так называемую схему взаимодействия с ним, использую только все самое необходимое в своем проекте.

Разбираться будем на примере микроконтроллера ATmega328P-PU, который используется во всем известной плате Arduino Uno.

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

Сначала мы рассмотрим самую простую схему подключения микроконтроллера без использования внешнего кварцевого резонатора, так как данный микроконтроллер может работать от внутреннего кварца на частоте от 1 до 8 МГц, и этого вам с головой хватит во многих проектах.

Создаем Arduino ISP программатор из любой платы Ардуино.

В качестве программатора будем использовать плату Arduino Nano. Если у вас какая-то другая из плат Arduino, разницы нет ни какой, всё делаем так же. Подключаем плату Arduino к компьютеру. Запускаем программу Arduino IDE. В меню «Инструменты» выбираем как обычно нашу плату Ардуино и порт, с которым работаем. Открываем из примеров в программе скетч ArduinoISP «Файл» — «Примеры» — «ArduinoISP»

и загружаем его в нашу плату «Скетч» — «Загрузка».

Всё! Наш Arduino ISP программатор готов!

*На заметку. Что такое ISP и SPI и в чем отличия! Несколькими словами это можно охарактеризовать так:

ISP — это метод внутрисхемного программирования, способ записи программы, программное обеспечение.

SPI — последовательный периферийный интерфейс, протокол, шина, стандарт обмена данными между устройствами.

Подключаем Arduino ISP программатор к микроконтроллеру ATmega328P-PU.

Наш микроконтроллер ATmega328P-PU DIP28 имеет 28 ножек, по 14 с каждой стороны. Собирая схему, обратим внимание на выемку с одной из сторон на корпусе микроконтроллера ATmega328P-PU, которая поможет правильно сориентироваться в нумерации лапок микроконтроллера в соответствии с приведенными ниже схемами.

Соединяем Arduino Nano с микроконтроллером ATmega328P-PU через SPI интерфейс.

Для того чтобы понять, что и к какой лапке микроконтроллера мы подсоединили, воспользуемся для подсказки схемой распиновки микроконтроллера ATmega328P-PU.

И схемой распиновки платы Arduino Nano.

Теперь мы видим, что пин питания 5V платы Arduino Nano мы направили к лапкам VCC и AVCC микроконтроллера. Пин GND платы Ардуино мы направили на лапки GND микроконтроллера. Таким образом, мы обеспечили полностью питанием наш микроконтроллер ATmega328P-PU. Далее соединяем пины MISO (D12), MOSI (D11), SCK (D13) платы Arduino Nano с лапками MISO, MOSI, SCK микроконтроллера ATmega328, а пин SS (D10) от Ардуино подводим к лапке reset микроконтроллера. Если вы используете другую плату Arduino в качестве ISP программатора, просто найдите схему распиновки вашей платы Arduino и определитесь, где у неё находятся пины MISO, MOSI, SCK и SS. После чего соедините их с соответствующими лапками микроконтроллера ATmega328P-PU.

*На заметку.

Пины SPI интерфейса платы Arduino Mega : MISO (50), MOSI (51), SCK (52), SS (53)

Пины SPI интерфейса платы Arduino Uno : MISO (12), MOSI (11), SCK (13), SS (10)

Прошивка бутлоадера (загрузчика) в ATmega328P-PU через SPI интерфейс с помощью Arduino ISP программатора.

Теперь нам необходимо залить бутлоадер (загрузчик операционной системы) в наш микроконтроллер ATmega328P-PU. Для этого будем использовать Arduino загрузчик, настроенный специально для работы с внутренним кварцем на 8 МГц.

Качаем загрузчик по ссылке breadboard.zip

В программе Arduino IDE в меню «Файл» — «Настройки» смотрим (вспоминаем) свой путь к папке со скетчами. В этой папке со скетчами создаем папку hardware и разархивируем в неё архив с загрузчиком. Перезагружаем программу Arduino IDE и видим в меню «Инструменты» — «Платы» появилась строка «ATmega328 on a breadboard (8 MHz internal clock)», выбираем её.

В этом же меню «Инструменты», выбираем в списке программаторов, программатор «Arduino as ISP». Осталось записать загрузчик. Переходим «Инструменты» — «Записать загрузчик».

Если не прошивается бутлоадер (загрузчик).

1. Загрузчик не всегда записывается с первого раза. Если программа Arduino IDE выдаст ошибки при записи загрузчика, необходимо просто повторно выполнить команду «Инструменты» — «Записать загрузчик», обычно со второго раза загрузчик прошивается нормально.

2. Загрузчик может так же не прошиваться, если вы делали какие-то не осмысленные действия с микроконтроллером и настройки так называемых фьюзов в итоге выставились не так как надо. В таком случае необходимо просто подключить внешний кварцевый резонатор на 16МГц к лапкам 9 и 10 микроконтроллера, имеющими обозначения на схеме распиновки в виде надписи «crystal».

И снова выполнить команду «Инструменты» — «Записать загрузчик» и не забываем, что надо сделать пару попыток, с первого раза загрузчик может не записаться. После чего внешний кварц можно будет снова убрать и работать дальше без него.

Загрузка скетчей в микроконтроллер ATmega328P-PU

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

Открываем программу Arduino IDE. Создаем новый файл и копируем в него код.

Далее переходим в меню «Скетч» — «Загрузить через программатор».

Всё! Светодиод, должен начать мигать. Именно команда «Загрузить через программатор» позволяет загрузить скетч через Arduino Nano, считая в таком случае её ISP программатором для передачи данных по SPI интерфейсу. Если же нажимать просто команду «Скетч» — «Загрузить», тогда программа будет пытаться загрузить скетч в саму Arduino Nano и при правильном выборе платы она его конечно же загрузит )).

Схема минимальной обвязки ATmega328P-PU с внешним кварцевым резонатором на 16 МГц.

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

Кварцевый резонатор мы уже помним, как подсоединяется на ножки 9 и 10 микроконтроллера. А вот для обеспечения стабильной работы кварца, необходимо каждую его ножку соединить с землей через керамический конденсатор емкостью 22пФ. Так же для фильтрации ВЧ помех в нашей электрической цепи, соединим питание и землю микроконтроллера керамическим конденсатором 0.1мкФ.

Микроконтроллер работает по заданной программе, когда на ножке reset присутствует положительный сигнал. В принципе, микроконтроллер всегда сам держит вывод reset в режиме выполнения кода, но для стабильного положительного сигнала на этой линии (чтобы избежать впоследствии не стабильной работы), соединим ножку reset микроконтроллера ATmega328P-PU с положительным потенциалом нашей линии питания 5V через резистор 10 кОм.

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

Осталось залить в контроллер бутлоадер (загрузчик), предназначенный для работы с внешним кварцевым резонатором на 16 МГц. Тут все ещё проще, не надо ничего скачивать. Просто открываем программу Arduino IDE и в меню «Инструменты» — «Платы» выбираем «Arduino/Genuino Uno». То есть мы сейчас прошьем тем самым загрузчиком, которым прошит микроконтроллер в самой обычной Arduino Uno. Программатор в меню «Инструменты» остается «Arduino as ISP». Переходим в меню «Инструменты» — «Записать загрузчик».

Всё! Наш аналог платы Arduino Uno своими руками готов! Можно дальше заливать скетчи через меню «Скетч» — «Загрузить через программатор» и продумывает свои будущие, более дешевые и компактные в габаритах проекты.

*На заметку. Многие пытаются сразу перейти на работу с UART интерфейсом для загрузки последующих скетчей в микроконтроллер. UART интерфейс тема другой статьи, но тут напомним одну не стыковку. Если вы пытаетесь заливать скетчи через UART интерфейс и ничего не получается, попробуйте снова перепрошить загрузчик через SPI интерфейс, но только не заливать после этого через SPI интерфейс ни каких скетчей. То есть первый скетч после прошивки загрузчика заливайте через UART интерфейс.

воскресенье, 3 февраля 2019 г.

Обвязка ATmega328P

Распиновка ATmega328P

Прежде чем приступить к рассмотрению обвязки ATmega328P считаю нужным привести описание его выводов. Когда мы работаем с платами Ардуино, то не задумываемся о соответствии физических выводов микроконтроллера используемым в IDE Arduino обозначениям. Когда же речь идет об отдельном микроконтроллере, то под рукой всегда нужно иметь его распиновку. Поэтому советую сохранить ее:

Есть еще один интересный прием — это распечатать номера выводов и наклеить получившуюся шпаргалку на микроконтроллер, как показано на следующем фото. Мелковато, но вполне читабельно. PDF файл для печати можно скачать по этой ссылке.

Подключение питания

Напряжение питания подается на выводы микроконтроллера VCC и GND и не должно превышать значение, указанное в технической документации. Для ATmega328P верхняя граница рекомендуемого напряжения питания составляет 5,5В, абсолютный максимум — 6В, продолжительная работа при таком напряжении может вывести микроконтроллер из строя.

Для подавления высокочастотных помех в цепи питания рекомендуется устанавливать керамический конденсатор емкостью 0.1мкФ между VCC и GND. Причем располагаться он должен как можно ближе к питающим выводам микроконтроллера для минимизации паразитной индуктивности и сопротивления подводящих проводников.

Рекомендуемая схема подключения питания ATmega328P
при использовании встроенного АЦП

Вывод Reset и кнопка сброса

Схема начального сброса

Обвязка для предыдущих моделей микроконтроллеров обязательно включала в себя схему начального сброса, состоящую из резистора и конденсатора, которая обеспечивала постепенное нарастание сигнала на входе Reset при включении питания. Таким образом осуществлялся начальный сброс микроконтроллера. Сейчас же схема начального сброса (Power-on-Reset) присутствует, пожалуй, в каждом современном микроконтроллере. Внешняя цепь может потребоваться при наличии особых требований к длительности импульса сброса (в случае медленного нарастания напряжения питания).

Схема начального сброса микроконтроллера

Номиналы резистора и конденсатора могут отличаться от приведенных на схеме значений и зависят от требуемой длительности импульса сброса.

Обвязка Reset и защита от непреднамеренного сброса

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

Востребованность подтягивающих резисторов как для входа Reset, так и для обычных линий ввода-вывода, привела к добавлению их в микроконтроллеры. В ATmega328P имеется собственный подтягивающий резистор на входе Reset номиналом 30-60кОм (конкретное значение из указанного диапазона устанавливается на заводе-изготовителе при калибровке). И тут часто возникает вопрос: нужен ли внешний подтягивающий резистор на входе Reset или можно обойтись внутренним. Всё зависит от конкретной ситуации и условий, в которых будет работать микроконтроллер: для любительских, «бытовых» проектов, возможно, будет достаточно встроенного резистора; для устройств, предназначенных для работы в промышленности, в неблагоприятных условиях номинал встроенного резистора может оказаться недостаточен. Это, что называется, слабая подтяжка, в таких случаях цифровой вход подтягивают внешним резистором номиналом в несколько кОм.

Зачастую одного только подтягивающего резистора оказывается недостаточно и для дополнительной защиты от шума в схему добавляется конденсатор. Вход Reset AVR микроконтроллеров имеет собственный фильтр нижних частот. Внешний конденсатор, установленный между выводом Reset и землей, является дополнительной защитой. Однако, его нельзя добавлять в схему, если предполагается внутрисхемное программирование с помощью PDI или DebugWIRE.

В отличие от выводов общего назначения, имеющих защитные диоды и к земле, и к питанию, для входа Reset предусмотрен единственный диод — на землю. Это объясняется тем, что Reset используется для высоковольтного программирования, когда на него подается сигнал 12В. Поэтому если микроконтроллер должен работать в условиях помех от электростатических разрядов (в англоязычной технической документации используется термин ESD — Electrostatic Discharge) и если не планируется использовать высоковольтный программатор, рекомендуется добавить в схему внешний диод между выводом Reset и линией питания.

С учетом всего сказанного рекомендуемая схема обвязки вывода Reset выглядит следующим образом:

Обвязка вывода Reset для защиты от помех

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

Кнопка сброса

Если для защиты от случайного сброса микроконтроллера вход Reset подтягивается к питанию (встроенным резистором или внешним для более сильной подтяжки), то для сброса при нажатии на кнопку он должен замыкаться на землю. Нет ничего проще — добавляем кнопку между входом Reset и землей. Если обвязка вывода Reset содержит конденсатор как в вышеприведенной схеме, то для предотвращения его закорачивания через кнопку (что может привести к возникновению помех) разработчики из Microchip рекомендуют добавлять в схему резистор порядка 330Ом:

Подключение кнопки сброса к микроконтроллеру

Подключение резонатора

Кварцевый или керамический резонатор обеспечивают работу встроенного тактового генератора. Резонатор подключается к выводам XTAL1, XTAL2 микроконтроллера. Для его стабильной работы в схему добавляются керамические конденсаторы, номинал которых подбирается в соответствии с рекомендациями производителя резонатора или микроконтроллера. Так в даташите на ATmega328P для резонаторов на 400кГц и выше рекомендуется использовать конденсаторы номиналом 12..22пФ:

Подключение резонатора к микроконтроллеру

При использовании резонатора на 32.768кГц можно задействовать внутренние конденсаторы, подключив их к XTAL1 и XTAL2 установкой фьюзов CKSEL.

При тактировании от внутреннего RC-генератора необходимость во внешнем резонаторе и согласующих конденсаторах отпадает.

Заключение

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

Интересный документ по теме — рекомендации Microchip, которые необходимо соблюдать при проектировании оборудования с использованием микроконтроллеров AVR, ссылка: AN2519 AVR Microcontroller Hardware Design Considerations

Рекомендуем к прочтению

Как подключить AVR микроконтроллер к программатору

Научимся искать информацию по разным моделям AVR микроконтроллеров, разберемся c чтением PDF документов в операционной системе Linux. Узнаем как подключить микроконтроллер к программатору используя интерфейс ISP при помощи нескольких проводников.

Содержание:

  1. Несколько рекомендаций
  2. Чтение PDF документов в Linux
  3. Подключение AVR микроконтроллера к программатору
  4. Заключение

Несколько рекомендаций

Чтобы правильно подключить микросхему-микроконтроллер к программатору нужно разобраться где у него и какие выводы. Для получения исчерпывающей информации о интересующем нас микроконтроллере качаем на официальном сайте даташит (datasheet) на интересующий нас чип — Даташиты по микроконтроллерам ATMEL.

На первой страничке даташита приводится подробное описание возможностей микроконтроллера, а далее приведена распиновка микросхем под каждый из типов корпусов. Каждый даташит по AVR чипу содержит массу подробной информации на английском языке, к примеру даташит на микроконтроллер ATmega8 содержит 326 страниц!

Не знаете английского? — старайтесь понемногу изучать, без него сейчас очень трудно в современном мире радиоэлектроники и компьютерной техники, это универсальный международный язык. А пока что, если не знаете что означает какое-то слово или предложение — переведите его через сервис машинных переводов translate.google.com.

Чтение PDF документов в Linux

Как правило, все даташиты на микросхемы поставляются в формате PDF (Portable Document Format) — формат электронных документов для использования на разных платформах, разработан фирмой Adobe Systems.

Под Windows есть множество разных программ для чтения и работы с документами формата PDF. В операционной системе Linux формат PDF тоже имеет отличную программную поддержку.

Программы в Linux что умеют читать PDF:

  • Okular — универсальная и мощная программа для просмотра документов, входит в окружение рабочего стола KDE;
  • Qpdfview — простая и легковесная программа для просмотра документов в формате PDF, DjVu и PS;
  • Evince (Document Viewer) — очень быстрый и легковесный просмотрщик документов PostScript (PS), EPS, DJVU, DVI, PDF;
  • Xpdf — высокопроизводительный просмотрщик PDF-файлов.

Какую программу выбрать для просмотра PDF под Linux? — очень хорошо справляются со своими задачами программы Okular и Evince.

Если у вас установлена рабочая среда KDE то скорее всего что программа Okular уже присутствует в системе. Если Okular не установлен то исправить это можно командой:

sudo apt-get install okular okular-extra-backends

Если же у вас рабочая среда отличная от KDE — GNOME, XFCE, UNITY то более экономичным решением будет установить Evince, поскольку установка в данных средах программы Okular потребует некоторые компоненты от рабочей среды KDE.

Рис. 1. Универсальный просмотрщик документов Evince под Linux — средство для листания PDF документов по микроконтроллерам.

Просмотрщик документов Evince очень хорошо открывает огромные документы и справляется иногда с такими что не под силу прочитать для Okular. Установка Evince в Linux:

sudo apt-get install evince

Думаю что у вас теперь не возникнет проблем с чтением документов в формате PDF под ОС GNU Linux .

Подключение AVR микроконтроллера к программатору

Выше было рассказано что для подключения микроконтроллера к программатору нужно соединить выводы ISP: VCC, GND, MISO, MOSI, SCK, RST. Выводы с данными названиями присутствуют у всех микроконтроллеров, так что даташит нам в помощь.

Рис. 2. Распиновка микроконтроллера ATmega8 и подключение его к ISP (USB ASP).

У программатора USB ASP на коннекторе ISP предусмотрено напряжение +5В (VCC), так что для программирования чипа можно воспользоваться питанием от программатора, а вернее от USB порта к которому он подключен.

В рассмотреных раньше программаторах, что используют COM и LPT порты, нет вывода VCC, а это значит что с использованием этих программаторов на выводы GND (-) и VCC (+) микроконтроллера нужно подать напряжение питания 5В от внешнего источника.

Подключения микроконтроллера к программатору USB ASP на беспаечной макетной панели очень просто реализовать при помощи перемычек (проводники со штырьками на двух концах).

Рис. 3. Подключение к ISP коннектору программатора USB ASP на беспаечной макетной панели.

Рис. 4. Программатор USBASP подключен к микроконтроллеру ATmega8 (увеличение рисунка по клику).

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

Заключение

Как видите, нет ничего сложного в подключении микроконтроллера к программатору используя интерфейс ISP. Главное найти даташит под нужный микроконтроллер и разобраться с его ножками, а там останется подсоединить несколько проводков и… готово!

В следующей статье рассмотрим программное обеспечение для работы с AVR микроконтроллерами под ОС GNU Linux, а также кратко рассмотрим разные среды для разработки и написания кода.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Знакомство с WEMOS XI на LGT8F328D

До недавнего времени китайские производители предлагали разнообразные аналоги плат Arduino, которые при меньшей стоимости, ни чуть не уступали по качеству оригиналам. Инженеры китайской компании LogicGreen пошли дальше и выпустили более продвинутый аналог микроконтроллера ATmega328 — LGT8F328. Применяя микроконтроллеры на ядре LGT8F, в китайских аналогах ардуино были реализованы новые функции, которые отсутствуют в стандартной реализации. Несмотря на то что по микроконтроллерам LogicGreen очень мало информации в Интернете, я решил попробовать разобраться в них и заказал китайский аналог Arduino — WEMOS XI на китайском микроконтроллере LGT8F328D.

В 2015 году компания LogicGreen представила микроконтроллеры LGT8F48D, LGT8F88D, LGT8F168D и LGT8F328D. Разница в них заключается в объёмах флеш-памяти и ОЗУ. Последняя является продвинутым аналогом ATmega328.
В своё время, на базе LGT8F328D, китайской компанией Wemos выпускался аналог Arduino Pro Mini, под названием WEMOS XI. На данный момент чип считается устаревшим и вместо него предлагают решения на усовершенствованном микроконтроллере LGT8F328P.
Тем не менее на Алиэкспресс ещё можно купить платы на данном чипе в пределах $1.9. Основная трудность возникает в том, что информация про LGT8F328D удалена с сайта Wemos в поддержку LGT8F328P, поэтому информацию пришлось искать по всему Интернету.

Внешний вид платы WEMOS XI с лицевой и обратной стороны. Размер платы 17 х 38 мм.

Справка: Wemos — китайская компания, специализирующая на производстве ардуиносовместимых плат и шилдов к ним.

WEMOS XI построена на LGT8F328D, который является продвинутым аналогом ATmega328. На микроконтроллере отсутствует какая-либо маркировка, возможно потому что данное решение рассчитано на свой внутренний рынок. Микроконтроллер имеет на борту 32 Кбайт флэш-памяти и 2Кбайт ОЗУ.

Плата позиционируется как аналог Pro Mini. Визуальное сравнение WEMOS XI с китайским аналогом Pro Mini и Nano.

1. Дешевле стоит. Плата обошлась в $1.73 с доставкой в Украину, аналог Pro Mini Atmega328 на данный момент стоит в районе $2.91.
2. Расширенный диапазон частот, на которых работает микроконтроллер. При использовании внутреннего резонатора, микроконтроллер работает на 16 Мгц, в то время как чип от Atmega работает на 8 мГц. Микроконтроллер может работать на более высоких частотах, при использовании внешнего кварца, для этого на плате предусмотрено место для установки. Максимальная рабочая частота для LGT8FX8D — 20 МГц, LGT8F328P может работать на частоте до 32 МГц. ATmega328 в отличии от аналога может работать на частоте 16 МГц.
3. Расширенный диапазон питающих напряжений. Напряжение питания платы от 1.8 до 5.5В и это всё в одном устройстве, к тому же от напряжения не зависит тактовая частота, как в случае с ATmega328.
4. Наличие 8-битного ЦАП. В LGT8FX8D их два, в LGT8F328P — один.
5. 12-битный аналого-цифровой преобразователь, в Atmega он 10-битный.
6. Наличие GUID для шифрования программ, в ATmega328 отсутствует.
7. Отсутствие фьюзов. Та базовая конфигурация микроконтроллера, которая устанавливается фьюзами на ATmega328, в LGT8F328 устанавливается непосредственно в программе.

14 цифровых пинов, могут быть как входами, так и выходами (0 — 13).
6 цифровых пинов могут использоваться как ШИМ (3, 5, 6, 9, 10, 11).
8 аналоговых входов (А0 — А7). Все аналоговые входы можно так же использовать как цифровые пины (14 — 21). В ATmega328 таким образом можно использовать только 6 аналоговых входов.
SPI интерфейс: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
UART интерфейс: 0(RX), 1(TX).
I2C интерфейс: A4(SDA), A5(SCL).
Два 8-битных ЦАП: DAC0, DAC1.
Reset — аналогично кнопке «Сброса».
На плате так же имеется светодиод SCK, который подключен к 13 пину и светодиод PWR — сигнализирующий о наличии напряжения на плате.
DTR пин — применяется для автоматического сброса платы при прошивке.
VCC — подаётся питание на плату, микроконтроллер LGT8F328 можно питать в диапазоне от 1,8 до 5,5 вольт.
SWD интерфейс: пины SWC и SWD используются для отладки микроконтроллера, через этот интерфейс заливается загрузчик.

Программирование производится через USB — TTL переходник, например на PL2303 или CP2102. Для переходника устанавливается соответствующий драйвер.

Схема подключения следующая:






WEMOS XIUSB — TTL
GNDGND
VCC5V или 3,3V
TXRX
RXTX

Не имеет значения каким напряжением будите питать плату 5 или 3,3V.

Обычно WEMOS XI поставляется с загруженным загрузчиком Arduino и при подаче напряжения, светодиод на 13 пине будет мигать двумя быстрыми вспышками, которые будут повторятся. Если этого не наблюдается, скорее всего загрузчик придётся загружать самому, об этом в конце статьи.

При программировании через Ch440G, выскакивают ошибки.

Поскольку платы на LGT8F328D не являются стандартными, по-умолчанию отсутствует их поддержка в Arduino IDE. Для поддержки нужно применить патч. Обычно везде в Интернете, где я находил информацию про подключения WEMOS XI к Arduino IDE, советовали использовать патч из репозитория Wemos.

Скачать с репозитория Wemos

Скачать с моего хранилища MEGA

Данный патч нужно применять с Arduino IDE от версии 1.8.0, если применять с более старой версией, во время компиляции появится «Ошибка компиляции».

В примере пробовал применить патч от Wemos для Arduino IDE 1.6.5

Как правильно установить патч от Wemos я подробно описал здесь.

В итоге среди стандартных плат Arduino появится Wemos — «WEMOS XI (Retired)».

Если вы используете версию Arduino IDE ниже чем 1.8.0, в таком случае нужно применить патч от LogicGreen, который распространяется в виде zip архива «Larduino_hsp_v3.5».

Данный патч поддерживает Arduino IDE версий 1.0.x/1.5.x/1.6.x и может применяться для работы с решениями на микроконтроллерах LGT8F88A, LGT8F328E, LGT8FX8P и LGT8FX8D. Поддерживает загрузчик от Optiboot.

Скачать с моего хранилища MEGA

Архив нужно распаковать и из имеющегося набора папок, папку «hardware» и «libraries» необходимо поместить в папку «Arduino» от вашей Arduino IDE. На вопрос переписать файлы, соглашаемся.

После запуска Arduino IDE в разделе «Инструменты» — «Плата:» будут доступны новые платы, для нашей задачи выбираем «Larduino w/LGT8F328D».

У LogicGreen так же имеется патч для использования Arduino IDE версии 1.8.х в виде архива Larduino_HSP_v3.6c. Хотя в описании сказано что данный патч так же поддерживает микропроцессор LGT8FX8D, но при компиляции скетча у меня выдавалась ошибка.

Загрузка скетча в WEMOS XI мало чем отличается от загрузки в Arduino Pro Mini:

1. Открываем скетч, в примере «Blink».

2. В «Инструменты» — «Плата:» выбираем «WEMOS XI (Retired)» или Larduino w/LGT8F328D, в зависимости от применяемого патча.

3. В «Порт:» выбираем номер порта, на котором висит USB — TTL переходник, в примере COM1.

4. Нажимаем кнопку для загрузки скетча в плату.

5. Когда появится надпись «Загрузка…» или «Вгружаем…» (в зависимости от версии Arduino IDE), кратковременно нажимаем кнопку «Reset» на плате.

6. Надпись «Загрузка завершена» или «Взрузили» будет сообщать об удачной прошивке скетча.

Если по каким то причинам плата придёт без загрузчика, придётся его самому прошивать, для этого нужно воспользоваться пакетом LarduinoISP

Скачать с репозитория LGTMCU

Скачать с моего хранилища MEGA

Прошивать загрузчик будет с помощью Uno.

Распаковываем архив, открывает в Arduino IDE скетч LarduinoISP.ino

Прошиваем им плату UNO, которая после этого превращается в программатор для LGT8F328D.

Соединяем плату Uno с Wemos XI согласно рисунку.

В пункте «Инструменты» — «Программатор:» выбираем «Arduino as ISP[WEMOS XI]» и нажимаем «Записать Загрузчик».

В продолжении изучения 8-битных микроконтроллеров компании LogicGreen, рекомендую прочесть статью про LGT8F328P, там же можно узнать что такое GUID и многое другое.

Программирование Atmega328 на макетной плате (мелкие мысли)

Существует множество руководств по созданию Arduino на
макетная плата, использующая чип Atmega328 (или более старый 168), кристалл,
несколько конденсаторов и резисторов и блок питания.
Это забавный проект, который каждый хакер Arduino должен попробовать хотя бы раз.

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

Конечно, вы можете запрограммировать свой чип Atmega, пока он находится в Arduino,
затем отключите его от разъема Arduino и переместите в
макет. Но что за хлопот! Так удобнее оставить фишку
в макете, пока вы тестируете новые версии кода. И ты можешь,
двумя разными способами: с FTDI, который использует загрузчик Arduino,
или с интернет-провайдером, которого нет.

В любом случае, начните с загрузки хорошей распиновки для
Микросхема Atmega328. Я использую этот:
Ардуино
Распиновка ATmega328 от HobbyTronics, очень компактная, но
хорошая работа по включению как сопоставлений с цифровым, так и аналоговым Arduino
контакты и функции, такие как RX, TX, MOSI и MISO, которые вам понадобятся для
программирование чипа.

Загрузка программ с помощью FTDI

Плату FTDI подключить немного сложнее, чем к интернет-провайдеру, но это
менее рискованно, потому что он загружает код так же, как и Arduino,
так что вы не перезаписываете загрузчик и вы
все еще может вставить ваш чип обратно в Arduino, если что-то пойдет не так.
Итак, начнем с FTDI.

Я использую
Adafruit «FTDI Friend», но есть много похожих
Платы FTDI от Sparkfun
и другие поставщики. У них шесть выходов,
но вам понадобится только пять из них.Что касается распиновки Atmega,
подключите питание, землю, TX и RX. Для некоторых плат FTDI может потребоваться
подтягивающие резисторы на линиях TX и RX; Они мне не нужны.

Теперь у вас подключены четыре контакта.
Подключение линии сброса сложнее, потому что для этого требуется
Конденсатор 0,1 мкФ. Во многих руководствах не упоминается конденсатор,
но у меня это не сработало без него.
Подключиться из RTS на плате FTDI, через
Конденсатор 0,1 мкФ на линию RST.

Конденсатор 0,1 мкФ представляет собой электролитический колпачок с плюсом и
отрицательный результат, но несколько онлайн-руководств, в которых даже упоминается
конденсатор не удосужился сказать, какая сторона какая.Я подключил
Друг FTDI к отрицательному выводу крышки, а положительный вывод к
Микросхема Атмега, и все заработало.

Вам также может понадобиться подтяжка на этой линии RST / RTS: резистор
около 10 кОм от контакта 1 RST микросхемы atmega до линии питания 5 В.
Примечание: на диаграмме Фритзинга показаны подтягивающие резисторы на RST, TX.
и RX. Возможно, они вам не понадобятся.

Между прочим, RST означает «сброс», а RTS означает «Ready To».
Отправить «; они не являются анаграммами друг друга. Оставшийся значок
на другом FTDI, CTS, имеет значение «Готово к отправке» и не требуется для
Ардуино.

Как только проводка будет готова, подключите плату FTDI, убедитесь, что
Порт установлен на любой порт, зарегистрированный на плате FTDI,
и попробуйте загрузить программу, как если бы вы загружали ее на обычный Arduino Uno.
И скрестите пальцы. Если не работает, попробуйте поиграть с подтягиваниями.
и номиналы конденсаторов.

Загрузка программ с помощью ISP

Внутрисистемный программист, или интернет-провайдер, записывает программы прямо в чип,
обход (и перезапись) загрузчика Arduino. Вы также можете использовать
Интернет-провайдер, чтобы записать новый загрузчик и перепрограммировать предохранители на вашем
Arduino, чтобы изменять такие параметры, как тактовая частота.(Подробнее об этом в части 2.)

Вы можете использовать
Arduino в качестве интернет-провайдера, но он несколько ненадежен и
склонны к необъяснимым ошибкам. Выделенный интернет-провайдер не дорог, стоит
легче подключить и, скорее всего, будет работать. Распространенным типом интернет-провайдеров является
называется USBtinyISP, и вы можете купить его у таких поставщиков, как
Sparkfun или
Адафрут,
или найдите usbtinyisp на таких сайтах, как ebay или aliexpress.

Обновление: мне было интересно узнать об этой нестыковке: почему «Arduino как ISP»
у одних работает нормально, у других — совсем не работает? Я спросил одного человека
думал, что это связано с тем, как Arduinos сбрасывает строку RESET всякий раз, когда
последовательный порт открыт: поэтому СБРОС переключается не в то время, как
код загрузчика передается.Альтернативный метод, который может обойти это, —
Gammon Forum’s
Программатор загрузчика Atmega, который включает биты загрузчика
как часть кода, поэтому нет необходимости повторно открывать последовательный порт.
Кто-то еще говорит, что конденсатор 10 мкФ между сбросом и землей должен
предотвратить это; а другой человек говорит, что это должно быть
Конденсатор 100 нФ между RST на программаторе и RST на микросхеме AVR
плюс подтягивающий резистор 10 кОм,
Большинство руководств по Arduino-as-ISP, включая официальные на arduino.cc,
не упоминайте ни конденсаторы, ни подтяжки,
так что это может объяснить, почему метод работает для одних людей, а не для других.

Интернет-провайдеры обычно используют шестиконтактный разъем (2×3). Не всегда легко
выяснить, какой конец есть какой, поэтому используйте мультиметр в режиме непрерывности
чтобы выяснить, какой штифт заземлен. Убедившись, что вы уверены, отметьте свой разъем
так что вы будете знать, какой контакт является контактом 1 (MISO, контакт напротив земли).

После того, как вы установили контакты вашего провайдера, обратитесь к своему удобному денди.
Распиновка Atmega328 и подключение питания, заземления, MOSI, MISO, SCK и RST
к соответствующим контактам Atmega.

Все подключено? В среде Arduino IDE установите Programmer на своего интернет-провайдера,
например, USBtinyISP или Arduino в качестве интернет-провайдера
Затем используйте кнопку «Загрузить», чтобы загрузить эскизы.Если вы предпочитаете Arduino-mk вместо IDE, добавьте это в свой Makefile:

ISP_PROG = usbtiny
 

(или любого другого провайдера, который вы используете). Затем введите и сделайте ispload .
вместо сделать загрузку

Когда у вас есть FTDI или интернет-провайдер, вы можете подумать о создании
еще более простая схема — без внешних часов и связанных с ними
конденсаторы. Но есть еще пара дополнительных уловок.
Следите за обновлениями части 2.

Теги: железо, arduino
[15:44 9 декабря, 2017
Больше оборудования |
постоянная ссылка на эту запись |

]

Программирование AVR ATmega328P с помощью Arduino

Обзор

Arduino может использоваться для прошивки автономного микроконтроллера ATmega328P без загрузчика Arduino.

В этой статье мы рассмотрим:

  • Настройка Arduino IDE для программирования автономного микроконтроллера ATmega328P
  • Подготовка Arduino Uno к работе в качестве внутрисистемного программиста
  • Программирование ATmega328P с помощью мигающего светодиода программа

Введение

ATmega328P — это микроконтроллер, на котором работает плата разработки Arduino Uno. Плата Arduino упрощает взаимодействие с контактами ATmega328P, добавляя при этом дополнительные функции, которых нет в автономном микроконтроллере, включая последовательный интерфейс USB и тактовую частоту 16 МГц.Прототипирование — отличное применение для платы Arduino, поскольку оно позволяет быстро и легко изменять дизайн, но для завершенных проектов это часто может быть излишним, в зависимости от используемых функций. Официальный Arduino Uno стоит более 20 долларов (хотя клоны можно найти на eBay за 10 долларов или меньше), в то время как автономный ATmega328P стоит около 2 долларов. Итак, как только вы завершили прототипирование проекта с помощью Arduino, вы можете вместо этого перевести проект на использование автономного ATmega328P.

Первая проблема, которая может стать очевидной, заключается в том, что вы не можете подключить ATmega328P напрямую к компьютеру для загрузки на него программ.Нужен отдельный программатор. К счастью, если у вас есть Arduino, у вас уже есть то, что вам нужно, поскольку сам Arduino можно использовать в качестве программатора для ATmega328P (и многих других микроконтроллеров AVR). В этой статье показано, как запрограммировать автономный ATmega328P с использованием Arduino и Arduino IDE. Мы также будем использовать прямой код C без каких-либо встроенных функций, которые предоставляет Arduino IDE.

Компоненты

Чтобы прошить чип ATmega328P с помощью Arduino, вам понадобится всего несколько простых компонентов, которые, вероятно, у вас уже есть, если вы используете Arduino, включая:

  • Arduino Uno
  • Микроконтроллер ATmega328P
  • Макет
  • Перемычки

В этом примере я буду прошивать ATmega328P с помощью простой программы мигающего светодиода, поэтому мне также понадобятся следующие компоненты:

  • 2 светодиода
  • Резистор 2 x 560 Ом (или любой резистор более 200 Ом)

Настройка оборудования

Для этого проекта мы установим автономный ATmega328P на макетной плате с двумя светодиодами, подключенными к отдельным контактам, которые будут мигать вперед и назад с изменяющейся скоростью.Два светодиода будут подключены к контактам 14 и 15 на ATmega328P, которые соответствуют контактам PB0 и PB1. Поскольку мы используем для программы прямой код C, это означает, что нам нужно только позаботиться о PORTB для управления контактами.

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

Подключите контакт 7 (VCC) к шине питания, а контакт 7 (GND) к шине заземления. Они служат источником питания и заземлением для ATmega328P.Наконец, подключите светодиоды к контактам 14 (PB0) и 15 (PB1), как показано, и с помощью резистора подключите их к шинам заземления.

Код

Для написания кода мы будем использовать IDE Arduino. Откройте IDE Arduino и создайте новый эскиз. Удалите в нем весь предварительно заполненный код, поскольку при использовании C напрямую для программирования ATmega328P нам не нужны процедуры setup () и loop (), которые автоматически предоставляет Arduino IDE.

Чтобы светодиоды мигали, мы будем использовать следующий код.Поместите этот код в пустой эскиз и сохраните его как «doubleLED_blink».

Настройка Arduino IDE

Прежде чем мы сможем запрограммировать наш код в ATmega328, нам нужно выполнить некоторые дополнительные настройки в Arduino IDE, чтобы заставить Arduino Uno работать как программист. Поскольку прошиваемый нами ATmega328P не имеет той же конфигурации, что и микроконтроллер на Arduino, нам необходимо установить дополнительную конфигурацию оборудования в Arduino IDE, как показано ниже:

  • Загрузите конфигурацию макетной платы-1-6-x здесь.
  • Определите местоположение папки вашего альбома для эскизов Arduino, открыв IDE Arduino, выбрав «Файл», выбрав «Настройки» и затем посмотрев на расположение Sketchbook.
  • Перейдите в папку с альбомом и создайте «аппаратную» папку, если она еще не существует.
  • Извлеките папку «макет» из zip-файла «макетная плата-1-6-x» и переместите ее во вновь созданную папку «оборудования». В папке «оборудование» теперь должна быть папка «макет».
  • Перезагрузите Arduino IDE
  • В среде Arduino IDE убедитесь, что установка была выполнена правильно, выбрав «Инструменты»> «Плата». Теперь вы должны увидеть «ATmega328 на макетной плате (внутренняя частота 8 МГц)» как вариант в списке плат.

Как указано в названии, конфигурация, которую мы только что загрузили в Arduino IDE (ATmega328 на макетной плате (внутренние часы 8 МГц)), предполагает, что внутренняя тактовая частота ATmega328P установлена ​​на 8 МГц.Хотя 8 МГц является одной из тактовых частот микроконтроллера, он, скорее всего, не работает на этой скорости. ATmega328P прямо от производителя настроен на работу на частоте 1 МГц. Эта разница между тем, что IDE считает установленной тактовой частотой, и тем, на чем фактически работает Atmega328P, будет означать, что время задержки в коде будет неправильным. Это можно изменить, изменив тактовую частоту ATmega328P так называемыми «битами предохранителя», но это требует дополнительной работы. Более простой способ — сообщить IDE, на какой скорости ATmega328P.Это делается следующим образом:

  • Перейдите в папку «hardware», которую мы только что создали при загрузке конфигурации, и откройте папку «layout», затем откройте папку «avr».
  • Откройте файл «boards.txt «
  • Найдите в файле строку «atmega328bb.build.f_cpu = 8000000L»
  • Измените строку на следующую «atmega328bb.build.f_cpu = 1000000L»
  • Сохраните и закройте файл

Теперь, когда программа загружается в ATmega328P, она будет знать, что микроконтроллер работает на частоте 1 МГц вместо 8 МГц, и время задержки будет правильным.

Подготовка и подключение Arduino

Сама Arduino Uno должна иметь загруженный в нее специальный скетч, чтобы ее можно было использовать в качестве внутрисистемного программиста (ISP). После загрузки он сможет программировать ATmega328P. Arduino настраивается как ISP, выполнив следующие шаги:

  • Откройте эскиз ArduinoISP, выбрав Файл -> Примеры -> ArduinoISP -> «ArduinoISP»
  • Загрузите скетч ArduinoISP на свой Arduino, как обычно с любым другим скетчем.

Теперь, когда Arduino настроен как ISP, мы можем использовать его для программирования ATmega328P.Мы будем использовать шину последовательного периферийного интерфейса (SPI) для подключения Arduino к ATmega328P путем правильного подключения контактов SPI. Здесь все может быть сложно, потому что номера контактов заголовка на Arduino не соответствуют напрямую номерам контактов на ATmega328P, даже если Arduino использует сам ATmega328P. Чтобы убедиться, что мы подключаем правильные контакты, нам нужно сравнить номера контактов Arduino с номерами контактов ATmega328P. На рисунке ниже показано, как контакты Arduino сравниваются с нашим ATmega328P для работы SPI.

Имена контактов SPI — SCK, MISO, MOSI и SS. Из схемы видно, что нам нужно подключить выводы Arduino к выводам ATmega328P следующим образом:

  • Вывод 13 Arduino → PB5 (SCK)
  • Вывод 12 Arduino → PB4 (MISO)
  • Вывод 11 Arduino → PB3 (MOSI)
  • Вывод 10 Arduino → PC6 (SS для сброса)

Для SCK, MISO и MOSI мы просто подключаем эти контакты на Arduino к тем же контактам на ATmega328P.Но SS на Arduino не подключается к SS на ATmega328P, вместо этого он подключается к RESET (PC6) на ATmega328P. Это необходимо для перехода ATmega328P в режим программирования. Ниже мы видим, как должны быть соединены пины.

Мы также используем контакты 5V и GND на Arduino для питания ATmega328P, поэтому эти контакты необходимо подключить к шинам питания и заземления на макетной плате, как показано.

Программирование ATmega328P

Прежде чем мы сможем прошить программу в ATmega328P, нам нужно убедиться, что в Arduino IDE выбраны правильная плата и программатор, выполнив следующие действия:

  • Выберите правильную плату в Arduino IDE, перейдя в Инструменты> Плата и выбрав «ATmega328 на макете (внутренние часы 8 МГц)»
  • Выберите правильный программатор в Arduino IDE, выбрав «Инструменты»> «Программист» и выбрав «Arduino as ISP».

Теперь, когда плата и программатор установлены правильно, мы можем прошить программу в ATmega328P.Откройте скетч «doubleLEB_blink», который мы создали ранее. Перейдите в «Эскиз» и выберите «Загрузить с помощью программиста». Если ATmega328P успешно запрограммирован, мы должны теперь увидеть, как светодиоды мигают вперед и назад с более высокой скоростью, пока цикл не завершится и не начнется заново.

Сводка

В этой статье мы рассмотрели, как Arduino Uno можно использовать в качестве внутрисистемного программатора для программирования автономного ATmega328P. Выполнив некоторые простые модификации конфигурации Arduino IDE и подключив Uno к ATmega328P на макетной плате, мы можем легко загрузить наши программы в микроконтроллер, а также запитать его напрямую от Arduino.Теперь вы можете создавать прототипы и разрабатывать собственные программы для микроконтроллера, не прибегая ко всем дополнительным функциям Arudino, и при этом использовать меньший по размеру корпус после того, как ваш дизайн будет завершен.

Полезные ресурсы

Запись загрузчика ATMega328p

В центре каждой Arduino UNO находится микроконтроллер Microchip ATmega328p. Это мозг операции, без него ваш Arduino не смог бы делать ничего из того, чем он славится.

Запись загрузчика за 5 простых шагов:

Шаг 1 — Установка мини-ядра

  1. Установите «Мини-ядро» — аппаратный пакет, который добавляет поддержку ряда устройств ATmega в Arduino IDE.
  2. Откройте IDE Arduino и перейдите к настройкам (или нажмите ctrl +,). Скопируйте следующий URL-адрес в пустое поле с надписью «Дополнительные URL-адреса диспетчера плат»: https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
  3. перейдите в диспетчер досок, который можно найти в меню «Инструменты»> «Плата»> «Менеджер плат». .
  4. Введите «minicore» в строку поиска, и появится соответствующая запись. Выберите последнюю версию и нажмите «установить». После завершения установки закройте окно диспетчера досок.

Шаг 2 — Установка ArduinoISP

Прошивка Arduino с помощью встроенного в систему программатора. Вы найдете ArduinoISP под заголовком «Примеры» в меню «Файл».

Шаг 3 — Подключение

Подключите Arduino к макетной плате. Чтобы ваш ATMega328 работал, вам понадобятся четыре дополнительных компонента:

  • Подтягивающий резистор 10 кОм
  • Два керамических конденсатора 18-22 пФ
  • Кристалл 16 МГц или 8 МГц

Хотя загрузчик можно загрузить и без них компонентов (вместо этого полагаясь на внутреннюю тактовую частоту 8 МГц), вы столкнетесь с меньшим количеством проблем, если включите их.

Подключите все это так:

Шаг 4 — Выберите устройство, кристалл и программатор

  1. Выберите соответствующие параметры устройства, кристалла и программатора в меню «Инструменты».
  2. Под платой выберите «ATmega328» (или любой другой чип, который вы используете).
  3. В разделе «Часы» выберите частоту внешних часов. Это должно быть написано заглавными буквами на верхней части корпуса кристалла.
  4. и ваш программист под именем «Arduino as ISP»

Шаг 5 — Запишите загрузчик

  1. Запишите загрузчик, используя опцию «Записать загрузчик» в нижней части меню «Инструменты».
  2. Затем вы можете удалить перемычки, соединяющие контакты 10-13 платы Arduino с макетной платой.

Теперь ваша макетная плата будет работать с использованием только сигналов +5 В и заземления — все сигналы данных будут поступать от самого ATMega328. Вы сможете загружать эскизы в ATMega328 с помощью кабеля FTDI, соединяющего микроконтроллер с USB-разъемом компьютера.

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

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

Для этого вам нужно записать загрузчик на чип. Это означает подключение Arduino к вашей новой макетной плате. Таким образом, Arduino действует как системный программист или интернет-провайдер. Мы проведем вас через этот процесс, но прежде чем мы начнем, давайте поговорим о преимуществах такого подхода и кратко объясним, что такое ATmega328p.

Что такое ATmega328p?

Семейство микросхем megaAVR было создано Atmel, а затем приобретено Microchip Technology, когда они приобрели Atmel в 2016 году.ATmega является флагманом этой серии и с самого начала составляла основу плат Arduino.

Чтобы установить ATmega на макетную плату, вам понадобится DIP-версия микросхемы. Он будет аккуратно вставлен в центр макета, так что ножки будут располагаться по обе стороны от зазора. Как только он будет установлен, вы сможете использовать соседние разъемы для подключения к контактам.

Что делает ATmega328p на Arduino UNO?

С определенной точки зрения, ATmega328p — это Arduino.Ваши наброски хранятся во внутренней памяти, и он выполняет все содержащиеся в нем инструкции, повышая и понижая напряжение и считывая внешние входные данные. Когда мы говорим о подключении чего-либо к Arduino, на самом деле мы говорим о подключении чего-либо к ATmega328p — среда и печатная плата Arduino просто обеспечивают легкую для понимания упаковку, которая делает подключение к ATMega328 немного более интуитивным. ATMega328 имеет ту же распиновку, что и женские разъемы Arduino Uno, за исключением контактов питания.

Что такое загрузчик?

Так что же такое загрузчик и почему он так важен? Возможно, вы знакомы с этим термином на своем настольном ПК. В этом случае загрузчик — это программа, которая запускается, как только машина включается, и ее задача — запустить вашу операционную систему. Хотя у Arduino нет операционной системы, у него все еще есть загрузчик, который на самом деле представляет собой небольшую часть программного обеспечения, которая позволяет устанавливать новую прошивку на чип без необходимости использования внешнего интернет-провайдера.Если на чипе нет загрузчика, то нет возможности ввести новую прошивку, а это означает, что каждый загрузчик необходимо будет установить с помощью внешнего интернет-провайдера хотя бы один раз.

Нельзя вынуть ATmega328 из Arduino?

Если на вашем Arduino установлена ​​DIP-версия ATmega328, вы можете просто переместить ее на макетную плату. Поскольку на нем уже есть загрузчик, вам не нужно ничего делать, но вы, очевидно, не сможете использовать свой Arduino, если на нем нет микроконтроллера.

Зачем использовать ATmega328 отдельно?

Вам может быть интересно, в чем смысл всего этого. Если в Arduino уже есть все необходимое для работы ATmega, зачем убирать одно из другого? Существует несколько возможных причин:

  • Для ваших нужд может потребоваться специализированная плата с большим или меньшим количеством функций, чем на стандартной плате Arduino.
  • Ваш Arduino может быть частью давней цепи. Микроконтроллер позволит вам освободить Arduino для других целей.
  • Возможно, вы захотите отказаться от своих проектов на Arduino только для удовольствия.

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

Запись загрузчика

Установка мини-ядра

. Пакет MiniCore от MCUDude — это аппаратный пакет, который добавляет поддержку ряда устройств ATmega в IDE arduino, а именно:

  • ATmega8
  • ATmega48
  • ATmega88
  • ATmega168
  • ATmega328
  • ATmega328PB

1 — Откройте IDE Arduino и перейдите к настройкам (или нажмите ctrl +,).Внизу страницы есть пустое поле рядом с «URL-адресами дополнительных плат». Вы хотите скопировать сюда следующий URL-адрес:

https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

Шаг 2 — Перейдите к диспетчеру досок, который находится в меню Инструменты> Доска> Менеджер плат. Здесь вы найдете список плат, с которыми может взаимодействовать ваш Arduino.

Шаг 3 — Введите «minicore» в строку поиска, и появится соответствующая запись. Вы сможете выбрать из списка предыдущих версий, но если у вас нет конкретной цели, лучше выбрать последнюю.Нажмите «установить» и дождитесь его завершения. Затем закройте окно менеджера досок.

Установка ArduinoISP

Вы собираетесь прошить Arduino с помощью встроенного в систему программатора, почти так же, как вы загружали бы пример скетча. Фактически, вы найдете ArduinoISP под заголовком «Примеры» в меню «Файл» (по умолчанию это номер одиннадцать).

Подключение

Теперь мы собираемся подключить оборудование так, чтобы Arduino был подключен к микроконтроллеру на плате.Помимо проводов, в идеале для этой работы вам понадобятся четыре дополнительных компонента. Это:

  • Подтягивающий резистор 10 кОм
  • Два керамических конденсатора 18-22 пФ
  • А 16 МГц или 8 МГц Кристалл

Резистор предназначен для обеспечения высокого напряжения на выводе сброса, когда он не активен. Это предотвращает случайный сброс устройства при возникновении шума на контакте. Часы и конденсаторы служат для предоставления микросхеме важной информации о времени.Хотя можно загрузить загрузчик без этих компонентов (вместо этого полагаясь на внутренние часы чипа с частотой 8 МГц), вы столкнетесь с меньшим количеством проблем, если включите их.

Подключите все это так:

Выберите устройство, кристалл и программатор

Пора убедиться, что все правильно выбрано. Есть три варианта, о которых следует помнить, и любой из них может свести на нет ваши усилия в случае несогласованности. Все они находятся в меню «Инструменты».

Перейдите в меню плат в разделе «Инструменты» и выберите «ATmega328».Если вы используете другой чип, вы можете соответствующим образом изменить свой выбор.

Выберите кристалл, который вы будете использовать для часов. Мы сказали, что будем использовать кристалл с частотой 16 МГц, так что давайте продолжим. Если вы используете кристалл с частотой 8 МГц, выберите его. Частота вашего кристалла должна быть написана заглавными буквами на верхней части корпуса.

Наконец, установите для вашего программиста «Arduino as ISP». Ты почти сделал!

Запишите загрузчик!

Пришло время записать загрузчик.Сделайте это с помощью параметра «Записать загрузчик» в нижней части меню «Инструменты». Если вы все сделали правильно и ничего не пошло наперекосяк, вам нужно будет сделать это только один раз. После этого вы можете удалить перемычки, соединяющие контакты 10-13 платы Arduino с макетной платой.

С этого момента вам нужно только подавать на него сигналы +5 В и заземление — все сигналы данных будут поступать от самого ATMega328. Вы сможете загружать свои наброски на ATMega328 с помощью кабеля FTDI, который соединяет микроконтроллер с USB-разъемом компьютера.

Программирование ATmega328P Barebone | ezContents blog

Осуществляемый электронный проект не всегда требует специальной платы Arduino. Иногда достаточно использовать отдельный чип Atmel ATmega328P и добавить вокруг него какие-то детали, чтобы он заработал.

В этом небольшом проекте мы собираемся построить макет с чипом ATmega328P и запрограммировать его с помощью платы Arduino Nano. Для начала нам нужно определить, какие детали необходимы:

  • Микросхема Atmel ATmega328P
  • , кристалл 16 МГц
  • Резистор 220 Ом
  • Резистор 10 кОм
  • 5мм светодиод (желтый)
  • Конденсаторы 2 x 22 пФ (код 220)
  • 28-контактный разъем IC (опционально)
  • 4-контактный тактильный кнопочный переключатель (для кнопки сброса, также опционально)
  • Макет
  • Ардуино Нано
  • Провода 22 AWG.У меня были только черный и красный, но рекомендуется использовать другой нейтральный цвет (например, синий).

Мы можем построить плату в соответствии со схемой, которую я создал в Cadsoft EAGLE. Эта программа также позволяет создавать топологию печатной платы из схемы. В будущем я расскажу об этом более подробно. Как вы, наверное, заметили, я добавил заголовок ISP, но на макетной плате мы будем использовать только прямые проводные соединения с микросхемой ATmega.

Светодиод подключен к контакту 2 микросхемы, который в Arduino IDE подключен к цифровому контакту номер 0.Я признаю, что это была ошибка в конструкции, поскольку я фактически подключил светодиод к контакту 4 микросхемы (PD2), который является цифровым контактом Arduino 2. PD0 используется для последовательной связи RXD, и хотя его можно использовать , Я не тестировал этот сценарий в этой настройке. На схеме ниже вы можете увидеть (розовая этикетка), как микросхема подключается к цифровым и аналоговым контактам Arduino.

На картинке ниже вы можете увидеть, как выполняются подключения к плате Arduino Nano. Мы будем использовать его как программист Arduino ISP.Обратите внимание, что контакты заголовка ISP на схеме подключены в соответствии со списком ниже к Arduino Nano:

.

  • Arduino Nano D13 к контакту 19 ATmega328P (SCK)
  • Arduino Nano D12 к контакту 18 ATmega328P (MISO)
  • Arduino Nano D11 к контакту 17 ATmega328P (MOSI)
  • Arduino Nano D10 к контакту 1 ATmega328P (СБРОС)
  • Линия от 5 В до 5 В Arduino Nano на макетной плате
  • Arduino Nano Линия GND на GND на макетной плате

Питание будет подаваться через USB, и он обеспечивает достаточный ток как для Arduino Nano, так и для чипа Atmel.

После того, как вы закончите сборку макета, пора запрограммировать чип Atmel с Arduino с помощью IDE. Для начала вам нужно запрограммировать Arduino Nano с помощью ArduinoISP Sketch. Вы можете найти его в Файл -> Примеры -> 11. ArduinoISO -> ArduinoISP.

Теперь выберите Arduino Nano как обычно и загрузите этот эскиз, как если бы вы поступали с обычным проектом.

Теперь в меню Инструменты выберите Программист: Arduino как ISP

На этом этапе вам может потребоваться записать загрузчик.Моя микросхема ATmega уже была снабжена загрузчиком, но вы можете сделать этот шаг перед тем, как приступить к программированию микросхемы ATmega. Плата taget должна быть установлена ​​на Arduino Nano и ATmega328p, но поскольку мы уже используем плату Nano, это должно быть уже установлено. Чтобы записать загрузчик, выберите Инструменты -> Записать загрузчик.

Теперь вы готовы к программированию микросхемы Atmel. В меню «Файл» -> «Примеры» выберите «Основные» и «Мигающий эскиз» и измените номер контакта, который вы использовали для подключения макета.Теперь проверьте / скомпилируйте код и выберите «Загрузить с помощью программиста». Это будет использовать Arduino Nano для написания микросхемы Atmel ATmega328P с эскизом Blink.

Как настроить Atmel-ICE для программирования ATmega328 на PlatformIO с VSCode в Windows 10

Я пытаюсь использовать свой atmel ICE с platformIO и VS Code вместо Atmel Studio, так как это программное обеспечение вызывает затруднения, когда я хочу использовать Arduino.h с библиотеками.

* Я ранее публиковал этот вопрос в stackoverflow, но, похоже, никто не знаком с PlatformIO в достаточной степени, чтобы ответить, поэтому я решил задать тот же вопрос напрямую сообществу PIO!

Однако я не могу загрузить с помощью своего программатора.Я пробовал с 32-контактным ATmega328.

Сначала я использовал документацию PIO о том, как использовать Atmel-ICE с ним на этой странице: debug-tools / atmel-ice

  Если вы хотите использовать этот инструмент для загрузки прошивки, измените загрузку

протокол:
[env: myenv]
платформа = ...
доска = ...
debug_tool = ледяной лед
upload_protocol = ледяной лед
  

Так вот что я написал в своем файле:

  [env: ATmega328P]
платформа = atmelavr
плата = ATmega328P
framework = arduino
upload_protocol = ледяной лед
  

И я получаю это сообщение, когда запускаю команду загрузки на PIO:

  ДАННЫЕ: [] 0.4% (использовано 9 байт из 2048 байт)
ПРОГРАММА: [] 1,4% (использовано 444 байта из 32256 байтов)
Настройка протокола загрузки ...
В НАЛИЧИИ: atmel-ice
ТЕКУЩИЙ: upload_protocol = atmel-ice
Ищем порт загрузки ...
Ошибка: укажите `upload_port` для среды или используйте глобальную опцию` --upload-port`.
Для некоторых платформ разработки это может быть USB-накопитель (например, / media /  / )
*** [upload] Явный выход, статус 1
  

На данный момент я не уверен, что попробовать.Я попробовал пару вещей, описанных ниже, но не уверен, что иду по правильному пути. Программатор atmel ICE, по сравнению, например, с Arduino, не имеет связанного с ним номера USB-ПОРТА, поэтому я не знаю, как я должен указать свой аргумент upload_port в моем файле .ini.

Некоторые параметры описаны в документации по платформеIO https://docs.platformio.org/en/latest/projectconf/section_env_upload.html, но я полностью заблудился. Мне кажется, что сообщение, которое я получаю: для некоторых платформ разработки это может быть USB-накопитель (т.е.е. / media //) может быть хорошей подсказкой. Любая идея, что мне следует изменить в моем файле .ini, чтобы мой atmel ICE работал? Благодарность!

Я пробовал и другие вещи: я прочитал сообщение (извините, я больше не могу найти ссылку), в котором добавляется

  upload_port = USB
  

может решить проблему. При добавлении этой строки в мой platformio.ini я получаю другое сообщение об ошибке:

  avrdude: Не удается найти идентификатор программиста "atmel-ice"

Допустимые программисты:
  2232HIO = универсальный программатор на основе FT2232H
  4232h = универсальный программатор на основе FT4232H
  arduino = Arduino
  

И список продолжается…

Я поискал и нашел этот пост с тем же сообщением об ошибке !: Atmega 328 — Внутренний генератор 8 МГц — Проблемы с загрузкой Atmel ICE

Решением здесь было добавить

  upload_flags = -e
  

Но для меня это ничего не изменило.

Он также упомянул, что внес изменения в файл 328p8m.json, которым в моем случае будет ATmega328P.json. Я даже не знаю, где его найти. Было бы это актуально?

разработчик программного обеспечения atmega328 с навыками freeRTOS

Кто разработчик программного обеспечения atmega328?

Разработчик программного обеспечения atmega328 — инженер, работающий над чипсетами ATmega. он занимается разработкой драйверов низкого уровня для разработки приложений. Микроконтроллеры ATmega328 выполняют строгие команды, позволяя системе достичь максимальной пропускной способности.структура MIPS на МГц, таким образом управляя потреблением энергии и скоростью обработки. Эти микроконтроллеры Microchip предназначены для использования в промышленных приложениях и автоматизации домов и зданий.

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

Как работает ATmega-328.

ATmega-328 по сути является микроконтроллером для Specialized Virtual RISC (AVR). Информация сохраняется до восьми (8) бит.ATmega-328 имеет 32 КБ встроенной системной памяти. У этого микроконтроллера есть ряд других атрибутов. AT mega 328 имеет программируемую постоянную память (EEPROM) объемом 1 КБ. Вы также можете нацелить презентацию на PIC16F877a (это микроконтроллер PIC), а затем оценить возможности этих двух микроконтроллеров. Это особенно важно, когда питание микроконтроллера прекращается, но даже тогда, после подачи на него питания, он может сохранять данные, а также обеспечивать производительность.Кроме того, для ATmega-328 имеется 2 КБ статической оперативной памяти (SRAM). Позже другие особенности будут уточнены в конституции коллективной группы единиц. структура MIPS на МГц, балансировка использования энергии и рабочей памяти путем выполнения эффективных направлений в тактовом цикле.

Рисунок. 1

Где использовать ATMEGA328P

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

  • В ARDUINO IDE также можно выполнять программирование ATMEGA328P.
  • Скомпилируйте его после написания программного обеспечения для устранения ошибок.
  • Создайте HEX-файл, созданный IDE для написанной программы после компиляции.
  • Этот файл HEX содержит машинный код, который должен быть записан в контроллер флэш-памяти.
  • Выберите конкретный продукт, который обеспечивает взаимодействие между ПК и ATMEGA328P (обычно это программатор SPI, разработанный для систем управления AVR).ATMEGA328P также можно программировать с помощью платы ARDUINO UNO.
  • Запустите программу для программатора и выберите требуемый шестнадцатеричный файл.
  • Используйте эту программу для записи рукописного файла HEX программы на микросхему памяти ATMEGA328P.
  • Отключите программатор, подключите необходимые периферийные устройства к контроллеру и затем запустите устройство.

Почему ATmega328 используется в Arduino?

Плата Arduino была предназначена для студентов, не имеющих даже опыта в области электроники и технологий в Институте дизайна пользовательского опыта Ivrea.Приспосабливаясь к новым задачам и потребностям, эта плата начала переходить от базовых 8-битных фреймов к элементам для устройств IoT (Интернет вещей), 3D-печати, портативных и интегрированных сред. Все платы имеют полностью открытый исходный код, что позволяет пользователям самостоятельно создавать их и, в конечном итоге, настраивать в соответствии со своими требованиями. Платы Arduino использовались на протяжении многих лет для создания проектов, от предметов повседневного обихода до композитных масс-спектрометров. В этом месте с открытым исходным кодом собралась международная группа дизайнеров, художников, учителей, инженеров, энтузиастов и специалистов, их вклад составил огромное количество полезной информации, которая может принести огромную пользу новичкам и заслужить профессиональное доверие.

Идеальной платой для знакомства с технологиями и программированием кажется Arduino UNO. UNO — безусловно, самая стабильная доска, на которой можно было бы играть, если это ваше первое впечатление от экспериментов с фреймворком.

Рисунок. 2

Разница между Atmega328P / Atmega328

  1. Архитектурный стиль, Atmega328P и Atmega328 во всех отношениях одинаковы. Таким образом, вместо 328 пользователи могут перейти только к 328p и наоборот.
  2. Atmega328P потребляет меньше энергии, чем Atmega328. На схеме проверьте числа. Это гарантирует, что, возможно, 328P изготовлен лучше, чем 328. Пример: 328 может быть 90-нм системой, а 60-нм системой может быть 328P. Так что да, просто заплатите немного больше за лучший метод, который сэкономит вам несколько микроампер с мощностью. Тогда выбирайте 328P, если это важно для всех.
  3. Сигнатуры микросхем 328P и 328 различаются. Итак, если какая-то программа считывает эти сертификаты, чтобы сделать выбор (например, Arduino), вы должны обратить внимание, потому что программное обеспечение может заявить, что оно использует неправильный процессор.
  4. Пункт (2) выше также указывает на то, что, возможно, версия микросхемы продукта TQFP доступна только в 328P, а не в 328. Это связано с тем, что для того, чтобы получить кристалл процессора большего размера, который поместился бы в компактном пространстве, таком как TQFP, вам просто нужно более тонкая операция.

Базовая работа ЦП разработчика программного обеспечения atmega328

  • Следующая последовательность вопросов загружается в регистровый файл при следующем тактовом импульсе.
  • В многоцелевых регистрах 8-битные регистры, но есть еще 3 16-битных регистра.
  • А если отключили электричество, EEPROM хранит информацию бесконечно. Программное обеспечение в EEPROM работает медленно.
  • Последовательный периферийный интерфейс (SPI) — это интерфейсная шина, широко используемая для передачи данных на крошечные периферийные устройства, включая такие камеры, мониторы, SD-карты и т. Д. Среди микроконтроллеров. Чтобы выбрать компьютер, с которым вы хотите поговорить, он включает разные линии часов и данных, включая строку выбора. Чтобы распознать и восстановить после сбоя MCU, 7.Используется сторожевой детектор.
  • Аналоговый компаратор сравнивает входные данные положительного и отрицательного вывода, и производительность устанавливается, когда цена положительного вывода лучше.
  • Положение и команда используются путем проверки других блоков в ЦП через частые интервалы для регулирования потока выполнения команд.
  • Прошивка — это программное приложение, которое настраивается на аппаратном компьютере или с помощью набора инструкций. Он предоставляет необходимое руководство относительно того, как система взаимодействует с другим оборудованием машины.Прошивка хранится на энергонезависимых картах памяти типа ROM.
  • 40 контактов доступны на Atmega32. Два для энергии (контакт № 10: + 5 В, контакт № 11: поверхность), два для резонатора (контакты 12, 13), один для повторного подключения (контакт 9), несколько для внутреннего АЦП, чтобы обеспечить необходимую мощность и сопротивление для сравнения. и 32 (4, 8) контакта ввода / вывода.

Подробнее об этом.

Программатор разъемов TQFP для чипов SMT Atmega328

Исходя из «промышленного», а не «хобби» опыта, я всегда стараюсь включить какой-то заголовок ICSP в свои (окончательные) проекты продуктов.Я всегда этим занимался.

Нет ничего хуже, что вас просят поддержать какое-то оборудование, и через несколько лет вы хотите обновить прошивку и снимать микроконтроллеры с их плат контроллеров; Кто знает, какой ущерб вы нанесете, сняв их, и можете ли вы быть уверены, что они снова включатся и полностью исправны?

Если отпаять микросхему, сменить прошивку и переустановить ее, она не работает, как отследить неисправность? Возможно, новая прошивка работает не так, как ожидалось, но может случиться так, что вы гениальный программист, все сделали правильно с первого раза и просто не совсем правильно припаяли все контакты назад, или у вас сухое соединение или что-нибудь.

Это основное различие, которое я вижу между «любителями» и «коммерческими» разработчиками.
Разработчик-хобби будет «работать вперёд» — находить то, что заставляет что-то работать, и следовать по пути к выводу. Обычно «коммерческий» разработчик (и особенно тот, кто имеет большой опыт работы с методом «прямой работы») будет «работать в обратном направлении».

Это означает, что нужно начинать с точки отказа.
Поставьте себя на место бедняги, который через четыре года, когда вещь выйдет из строя или нуждается в обновлении, стоит перед вашим оборудованием с отверткой в ​​руке, проклиная того, кто мог бы сделать их жизнь намного проще. , просто изменив дизайн.Однажды этот бедняга может стать тобой! Коммерческие разработчики склонны начинать с неудач и возвращаться к ним — если что-то пойдет не так, как мне это исправить? Какие условия должны быть выполнены, прежде чем это произойдет? Если эти условия не выполняются, следует ли разрешить моему устройству работать?

А в «промышленном» мире микроконтроллеров — где PIC все еще правит (или, по крайней мере, так было примерно десять лет назад, когда я перестал серьезно заниматься промышленной электроникой и сам стал больше «любителем»), это означает одно из двух:

Либо вставьте каждую микросхему в гнездо.
Это самый простой способ.
Но также — особенно для любителей, пробующих идеи — самые дорогие, что ведет к созданию более крупных и громоздких дизайнов (а в наше время миниатюризации меньшие размеры почти всегда лучше / предпочтительнее).

Другой метод — поместить заголовок ICSP на все.
Я обычно так и делаю.
Любой дизайн на основе PIC, я позабочусь о том, чтобы мои контакты программирования были легко доступны, поэтому, если каждый раз придет время, очень легко ударить программиста и обновить прошивку.И хотя программирование ICSP не так распространено в стране Arduino, это не является чем-то необычным.

С тех пор как в этом году я использовал микросхемы Arduino / AVR в нескольких проектах, я обнаружил, что микросхемы SMT с шагом 0,8 мм отлично подходят для ручной пайки (с другой стороны, микросхемы PIC с шагом 0,5 мм — настоящая проблема для пайки на самодельные Печатные платы). Поскольку чем меньше, тем лучше, а некоторые другие ботаники настаивают на проектах на основе AVR, а не на основе PIC, я подумал, что попробую оставить заголовок программирования в нескольких домашних проектах, чтобы уменьшить размер дизайна. как можно меньше (довольно часто мой программный заголовок примерно такого же размера, как и остальная часть всей печатной платы!)

Вот где небольшая красота.

Это 32-контактный разъем TQFP на коммутационной плате размером с DIP. Мы смотрели на них несколько лет назад, и тогда они стоили 70 фунтов стерлингов или больше. Если вы найдете их на Фарнелле, они все равно будут тупыми деньгами.

К счастью, китайские пираты с радостью продают их по цене менее 15 фунтов стерлингов и продают на eBay. Так что заставить кого-то опробовать это казалось несложным делом.

Вы можете «правильно» запрограммировать свои микросхемы AVR с помощью программатора AVR и Atmel Studio / avrdude. Или вы можете найти контакты последовательного порта и сброса и запрограммировать их с помощью загрузчика через последовательный порт.

Поскольку наши микросхемы предназначены для использования в «разовых» проектах, мы просто записали прошивку прямо на микросхему, без использования загрузчика. Казалось немного глупым записывать загрузчик с помощью контактов ICSP, а затем использовать совершенно другой набор контактов для программирования прошивки, поэтому мы просто сбросили прошивку прямо сейчас.

Единственное, что было не так однозначно, — это расположение штифтов.

Мы не могли просто предположить, что «первый контакт» на коммутационной плате (крайний левый верхний контакт) был подключен к первому контакту на микросхеме TQFP.На самом деле оказалось, что это совсем не так.

Но после того, как мы немного поработали с мультиметром, нам удалось определить, какой из выводов гнезда подходит к какому из выводов DIP на коммутационной плате.

.