Всем привет!
А теперь по теме: я заметил, что некоторые участники направляют свои минусометы на пост «вопросов и ответов» по неизвестным мне причинам.. Но я догадываюсь, что скорее всего это происходит потому, что пост не несет им какой-либо полезной нагрузки и я их, конечно же, понимаю, но от помощи, пока есть люди, которым она нужна, мы отказаться тоже не можем, поэтому, по возможности, вместе с картинкой из рубрики я буду иногда добавлять под нее что нибудь полезное. Итак, попробуем..
Зачастую бывает ситуация когда вам нужно поставить в плату Arduino новый микроконтроллер ATmega328P, купленный, например, в Китае или радиомагазине. Но просто вставить чистый мк в плату нельзя, точнее можно, но пользы от него будет как с козла молока — загрузить какой-нибудь код через Arduino IDE как ни пытайся, не получится. А дело тут в том, что помимо самого мк, для Arduino нужно что бы в этом мк уже был зашит специальный код — так называемая программа-загрузчик (bootloader), более подробно о которой можно почитать, например, здесь: http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-boo…
И тут встает вопрос прошивки чистого мк этой самой программкой, для последующего использования его в связке с Arduino..
К счастью, сделать это очень просто — вам понадобится сама плата Arduino, заметьте, с уже вставленным в неё «хорошим» оригинальным мк (на картинке отсутствует), кварцевый резонатор на 16МГц, макетная плата, чистый мк и 6-8 проводков.
По сути, плата Arduino будет выполнять роль обычного ISP-программатора.
Далее по пунктам:
1. Выбираем В«Файл>>Примеры>>Arduino ISPВ»
Вот так выглядит схема подключения, обратите внимание на специальную метку на микроконтроллере, она не даст вам ошибиться с подключаемыми к программатору ножками мк.
7. В меню сервис выбираем В«Записать загрузчикВ».
Arduino начнет мигать лампочками и через некоторое время порадует нас сообщением об успешной загрузке bootloader-а в наш чистый мк. Все готово, теперь можно вынуть оригинальный мк из платы и вставить туда наш «свежеиспеченный» микроконтроллер, ну а оригинальный можно использовать, например, уже в конкретном проекте, где громоздкая отладочная плата Arduino больше не понадобится. Только перед этим, конечно, нужно не забыть обвязать этот мк необходимыми компонентами, схем подключения которых в сети большое количество.
На этом все, надеюсь кому-то эта информация будет полезной, всем добра и удачных компиляций! 🙂
Материал для поста был взят с сайта http://bigbarrel.ru/
87
Подключение и прошивка микроконтроллера ATmega328P-PU с помощью Arduino ISP программатора
Постоянно используя отладочные платы типа Arduino в своих проектах, рано или поздно вы придете к мысли: «- А как же удешевить свои устройства и сделать их более компактными и с меньшим количеством проводов???» Всё это происходит потому, что отладив проект на Arduino, у нас остается много не задействованных разъемов, различных выходов и интерфейсов, занимающих дополнительное место. И первое с чем обычно всем хочется разобраться, это как подсоединиться напрямую к микроконтроллеру, к какой лапке что подключить и создать свою так называемую схему взаимодействия с ним, использую только все самое необходимое в своем проекте.
Разбираться будем на примере микроконтроллера ATmega328P-PU, который используется во всем известной плате Arduino Uno.
Начнем с самого простого и быстрого старта, используя в качестве программатора для нашего микроконтроллера любую имеющуюся у вас под рукой плату Arduino. Это гораздо проще, чем начать разбираться с различными существующими программаторами, их поисками или созданием. Море информации в интернете по настройке различных фьюзов микроконтроллера и каких-то других тонкостей, многих сразу пугает новыми непонятными терминами и количеством необходимых манипуляций для этих самых настроек. Поэтому мы не будем сейчас забивать этим мозг, у нас и так все что надо пропишется, и все как надо будет работать. А все прочие тонкости, если будет необходимость, изучите из других статей.
Создаем 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. Создаем новый файл и копируем в него код.
void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); }
</span></span></span></span></p>
Далее переходим в меню «Скетч» — «Загрузить через программатор».
Всё! Светодиод, должен начать мигать. Именно команда «Загрузить через программатор» позволяет загрузить скетч через 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 Uno можно заменить на малюсенький и дешёвый микрочип Atmega328 или даже Atmega8 Я покажу как прямо из среды программирования Arduino прошить микроконтроллеры Atmega328 и Atmega8. Первый у меня имеется в DIP корпусе, а второй в TQFP. Для программирования я использую программатор USBasp. Купил его на ebay.com, стоит он в пределах 150р. Первая проблема с которой столкнутся пользователи Windows8 и Windows10 — установка драйвера для USBasp. Проблема в том, что эти операционные системы просят, что бы у драйвера была какая-то цифровая подпись, а у драйверов для USBasp на сегодняшний день её нет. Проблема решается отключением проверки этих цифровых подписей. Для этого перезагружаем компьютер с нажатой клавишей Shift. Появляется экран, на котором выбираем «Диагностика»Далее — «Дополнительные параметры»Далее — «Параметры загрузки»Далее — «Перезагрузить»На следующем экране появляется список действий, которые мы можем сделать. Выбираем на нём «Не проверять цифровые подписи драйверов», жмём цифру 7После этого драйвер для USBasp устанавливается без проблем. Подключим наш программатор к микрочипу. Для удобства я купил макетную плату и соединительные проводки. Соединяем микрочип с программатором согласно схемеУ Atmega8 в TQFP корпусе выводы располагаются следующим образомК 9 и 10 выводу микроконтроллера присоединяем кварцевый резонатор. Здесь стоит пояснить значение этого резонатора.Скорее всего в купленном вами микроконтроллере выставлены настройки (fuses) на работу от внешнего тактового генератора, т.е. от кварца. Поэтому, что бы его прошить, нужно что бы он был подключён к этому самому кварцу. Для перепрошивки кварц можно взять любой попавшийся вам под руку. Я когда впервые перепрошивал просто выпаял его из какого-то сломанного устройства, вот он маленький на фото. Его хватило что бы микроконтроллер перепрошился. Если же ваш микроконтроллер изначально настроен на работу от внутреннего тактового генератора, то для прошивки кварц вам не нужен, можно обойтись и без него. Для того, что бы можно было прошивать микрочип прямо из среды разработки Arduino, нужно залить на чип ардуиновский загрузчик. Для этого воспользуемся программой avrdude и онлайн конструктором загрузчиков для ардуино. На странице онлайн конструктора загрузчиков переходим в самый низ и видим конструктор1. Выбираем «Внутренний генератор» если не хотим использовать кварцевый резонатор, либо выбираем «Внешний генератор» если хотим увеличить скорость работы чипа.2. Выбираем модель микроконтроллера (в нашем случаем Atmega328)3. Нажимаем «Создать HEX»Появляется такое окно: Первое что мы делаем — скачиваем наш загрузчик в виде hex файла. Если конструктор по какой-то причине не работает, можно скачать загрузчик для atmega328 для внутреннего генератора здесь. Ниже мы видим блок файла boards.txt для Arduino IDE. Я долго пытался подключить этот блок, что бы в среде ардуино появился выбор платы, но мне это почему-то не удалось, в итоге обошёлся без этого. Ещё ниже мы видим подсказку как залить загрузчик через программу avrdude и программатор USBasp. Я делаю следующим образом:-Подключаю программатор к компьютеру через USB.-Копирую HEX файл в папку avrdude-Создаю bat файл в папке avrdude и копирую в bat эту строкуavrdude -c usbasp -p atmega328p -U flash:w:a328p_8MHz_e2_de_5.hex -U lfuse:w:0xe2:m -U hfuse:w:0xde:m -U efuse:w:0x5:m@echo This batch file@pause-Запускаю bat файл. Если лень создавать bat файл, можете скачать его здесь.Если всё сделано правильно, вы увидите что-то подобное Это значит, что всё прошло хорошо и на наш микроконтроллер залился загрузчик ардуино. Теперь мы сможем прошивать его прямо из среды программирования Arduino. Если вы где-то накосячили и что-то сделали не правильно, можете увидеть такое сообщение: Тут могут быть разные причины:-Возможно вы не правильно соединили программатор с микрочипом. Проверьте соединения.-Возможно вы не подключили кварцевый резонатор, а ваш микроконтроллер настроен на работу от него. Тогда подключите любой кварцевый резонатор, хоть из китайских наручных часов выпаяйте.-И третий вариант о котором я не сказал, но с которым тоже столкнулся, когда прошивал Atmega8. На каком-то форуме мне подсказали, что микрочип работает на пониженной частоте и чтобы прошить его, нужно на программаторе замкнуть перемычку JP3. Что собственно мне и помогло. Если проблем у вас не возникло и загрузчик Arduino успешно записался на чип, то переходим к прошивке чипа через среду программирования Arduino. Во-первых, если вы в онлайн конструкторе загрузчика выбирали «Внутренний генератор», то кварцевый резонатор можно убрать из схемы. Откроем среду разработки Arduino и запустим классический пример моргания светодиодом: Видим, что в примере указан цифровой выход 13. На микрочипе он соответствует ножке 19 Т.к. этот вывод у нас сейчас подключен к программатору под вывод SCK, то изменим в программе 13 вывод на 5.И подключим к нему светодиод.Выбираем в Инструментах плату, чип и программатор
Нажимаем Скетч — загрузить через программатор. Программа скомпилируется и загрузится на наш микроконтроллер. Светодиод замигает. С какой задержкой будет мигать светодиод если в программе указано 1 секунда? Зависит от того использовали ли вы внутренний тактовый генератор или внешний. Если внутренний, а частота его 8MHz, то программа будет работать в 2 раза медленней, т.к. в Arduino UNO стоит кварц на 16MHz. Если вы использовали внешний кварц, то задержка моргания светодиодом будет зависить от частоты вашего кварца. При частоте 16MHz светодиод будет моргать через 1 секунду как и полагается по программе. Убедимся, что микроконтроллер прошит и работает самостоятельно. Отключим его от программатора и подключим к нему питание 5 вольт. Увидим, что светодиод моргает, программа, залитая в чип, работает!Используемые источники:- https://pikabu.ru/story/proshivka_chistogo_mikrokontrollera_dlya_rabotyi_s_arduino_a_tak_zhe_rubrika_voprosyi_i_otvetyi_4322225
- http://voltom.ru/project/95-podklyuchenie-i-proshivka-mikrokontrollera-atmega328p-pu-s-pomoshchyu-arduino-isp-programmatora
- http://www.catincoat.ru/2016/02/atmega-usbasp-avrdude.html