Как прошить микроконтроллер ATMEGA328. Какие программаторы можно использовать для прошивки AVR. Как настроить среду разработки для прошивки микроконтроллеров AVR. Какие особенности нужно учитывать при прошивке ATMEGA328 через разные программаторы.
Обзор способов прошивки микроконтроллеров AVR
Прошивка микроконтроллеров семейства AVR, в частности популярного ATMEGA328, может осуществляться несколькими способами:
- Через встроенный загрузчик (bootloader) по UART/USB
- С помощью программатора через интерфейс ISP
- Высоковольтное программирование для восстановления «кирпичей»
Каждый из этих методов имеет свои особенности и области применения. Давайте разберем их подробнее.
Прошивка через встроенный загрузчик
Это самый простой и распространенный способ прошивки AVR микроконтроллеров, особенно на платформе Arduino. Для его реализации требуется:
- Наличие загрузчика в микроконтроллере
- USB-UART преобразователь (встроен в большинство плат Arduino)
Алгоритм прошивки следующий:
- Подключаем плату к компьютеру по USB
- Выбираем нужный COM-порт и тип платы в Arduino IDE
- Нажимаем кнопку «Загрузка»
- Arduino IDE компилирует скетч и отправляет его в микроконтроллер
Преимущества этого метода — простота и отсутствие необходимости в дополнительном оборудовании. Недостаток — невозможность прошить «чистый» микроконтроллер без загрузчика.
Прошивка с помощью программатора
Программатор позволяет записывать прошивку напрямую в память программ микроконтроллера через интерфейс ISP (In-System Programming). Этот способ применяется для:
- Прошивки новых микроконтроллеров без загрузчика
- Записи загрузчика
- Изменения фьюз-битов
- Чтения/записи EEPROM
Наиболее популярные программаторы для AVR:
- USBasp — дешевый USB программатор
- AVRISP mkII — фирменный программатор от Atmel
- Arduino в режиме ArduinoISP
Для прошивки через программатор потребуется:
- Подключить программатор к целевому микроконтроллеру по схеме
- Установить драйверы программатора
- Настроить среду разработки для работы с программатором
- Выполнить прошивку с помощью avrdude или через IDE
Настройка Arduino IDE для прошивки через программатор
Чтобы использовать Arduino IDE для прошивки через внешний программатор, необходимо:
- Выбрать тип платы и процессора в меню «Инструменты»
- Выбрать программатор в меню «Инструменты» -> «Программатор»
- Использовать пункт «Загрузить с помощью программатора» вместо обычной загрузки
Это позволит прошивать микроконтроллер напрямую, минуя загрузчик. Также можно использовать пункт «Записать загрузчик» для записи бутлодера на новый чип.
Использование avrdude для прошивки AVR
Avrdude — это универсальная утилита командной строки для программирования микроконтроллеров AVR. С ее помощью можно выполнять следующие операции:
- Чтение/запись флэш-памяти
- Чтение/запись EEPROM
- Программирование фьюз-битов
- Верификация прошивки
Пример команды для прошивки через USBasp:
avrdude -c usbasp -p m328p -U flash:w:firmware.hex:i
Где:
- -c usbasp — тип программатора
- -p m328p — тип микроконтроллера
- -U flash:w:firmware.hex:i — записать файл firmware.hex во флэш-память
Особенности прошивки ATMEGA328 на плате Arduino
При прошивке ATMEGA328 на платах Arduino нужно учитывать следующие моменты:
- На большинстве плат установлен кварц 16 МГц
- Фьюзы должны быть настроены на работу с внешним кварцем
- Для работы с Arduino IDE нужен загрузчик
- Загрузчик занимает часть флэш-памяти
Стандартные настройки фьюзов для Arduino Uno:
- Low: 0xFF
- High: 0xDE
- Extended: 0x05
Эти настройки обеспечивают работу с внешним кварцем 16 МГц и активируют загрузчик.
Восстановление «кирпичей» с помощью высоковольтного программирования
Если микроконтроллер был заблокирован неправильными настройками фьюзов, его можно восстановить с помощью высоковольтного программирования. Для этого потребуется специальный программатор, способный подавать 12В на вывод RESET.
Процесс восстановления:
- Подключить высоковольтный программатор к микроконтроллеру
- Подать 12В на вывод RESET
- Записать корректные настройки фьюзов
- Прошить работоспособный загрузчик
После этого микроконтроллер должен вернуться к нормальной работе. Важно соблюдать осторожность при работе с высоким напряжением.
Заключение
Прошивка микроконтроллеров AVR может осуществляться различными способами в зависимости от конкретной задачи. Для начинающих оптимально использовать Arduino IDE и встроенный загрузчик. Более продвинутые пользователи могут применять внешние программаторы и утилиту avrdude для полного контроля над процессом программирования.
При возникновении проблем с прошивкой рекомендуется:
- Проверить правильность подключения
- Убедиться в исправности программатора
- Проверить настройки в среде разработки
- Попробовать другой способ прошивки
Соблюдение этих рекомендаций позволит успешно прошивать микроконтроллеры ATMEGA328 и другие AVR в большинстве случаев.
Неудачно прошил atmega328p | AlexGyver Community
Matveyugru
✩✩✩✩✩✩✩
- #1
Знатоки в avr, прошу помощи, мой МК не хочет прошивать Я, прошивали avrisp из ардуины, программы выдают ошибку что не могут прочитать сигнатуру, фьюзы я не трогал, прошивка в МК не работает, пробовал собрать фьюэбит доктор на ардуине, не помогло, что делать не знаю, буду благодарен любой помощи!
IamNikolay
★★★✩✩✩✩
- #2
прежде чем задавать вопрос вы даже не воспользовались поиском.
вопрос настолько банальный….
вам не «знающий человек» нужен, а копипастер
Эдуард Анисимов
★★★★★★✩
- #3
Чё на человека наехали?
Он уже перепробовал всё, что нашёл в интернете.
Пробовал советы, которые ему давали.
Можете дать ссылку на метод который работает на 146%. Просто дайте. А человеку который только начал этим заниматься сложно отличить нормальную инфу от фуфла, которым забит интернет.
Реакции:
te238sbort707
★★★★★★✩
- #4
Эдуард Анисимов написал(а):
Можете дать ссылку на метод который работает на 146%. Просто дайте.
Нажмите для раскрытия…
Эдуард, проблемы просто не существует. И потому никакого «решения на 146%» нет и быть не может.
Все дело в отсутсвии опыта и неуверенности. Человек в чем-то элементарно ошибается. но понять в чем и где — на его уровне практически нереально.
А к глючной вернутся через полгода — и плата либо прошьется с пол-пинка, либо будет уверенно и закономерно отправлена в помойку.
Реакции:
NikanorЭдуард Анисимов
★★★★★★✩
- #5
@bort707, USBasp в этом деле помочь может.
Или нужен какой то специальный программатор?
bort707
★★★★★★✩
- #6
Эдуард Анисимов написал(а):
USBasp в этом деле помочь может.
Нажмите для раскрытия…
причем тут USBASP? Образно говоря — человек взялся варить борщ, но забыл налить в кастрюльку воду.. Поможет ли ему другая кастрюля? — а фиг знает, может он в другой раз воду нальет и все получится… так и будет до конца жизни думать. что борщ можно варить только в зеленых кастрюлях…
Реакции:
Andara, te238s, kostyamat и ещё 1 человекЭдуард Анисимов
★★★★★★✩
- #7
@bort707, Ответьте пожалуйста. Не для него. Для меня.
Я хоть особо и не работаю с атмелами, но вдруг пригодится.
ТехнарьКто
★★★★★✩✩
- #8
@Эдуард Анисимов,
1) Чип сожгли
2) Испортили фьюзы
___а) чип блокирован
___б) чип хочет внешний кварц
___в) чип хочет низкую скорость внешнего тактового сигнала
3) Прошили программатор ISP взамен чипа
4) плохое питание
___а) большие пульсации
___б) разные напряжения чипа и программатора (например avr запитан от 5V, а плата ISP с питанием 3. 3V)
5) кривой программатор
___а) отсутствует конденсатор перезапуска
___b) плохой USB шнур
6) Ошибки операционной системы при работе с портом программатора
___а) не установлен драйвер
___б) установлен не тот драйвер
___в) работа драйвера блокируется другим ПО
___г) выбран не тот порт
___д) выбрана не та скорость
___е) сбита какая либо дополнительная настройка порта
7) Испорченные фьюзы чинят неработающим фьюзедоктором
Реакции:
te238s, Nikanor и IamNikolayIamNikolay
★★★✩✩✩✩
- #9
Эдуард Анисимов
★★★★★★✩
- #10
@ТехнарьКто, Спасибо.
IamNikolay написал(а):
ответы есть в гугле 3 940 результатов!
Нажмите для раскрытия…
Попробуйте набрать «STM32 перенос векторов прерывания». Получите 8млн. результатов и нет ни одного вменяемого ответа.
95% авторов ответов несут ахинею. С оставшимися 5% связаться не удалось. Ответил только один и тот после взаимных приветствий пропал с горизонта.
IamNikolay
★★★✩✩✩✩
- #11
@Эдуард Анисимов, здесь ситуация совсем другая, проблем может быть много, как и писал @ТехнарьКто, какая именно у автор — не понять. Если бы были полноценные вводные данные с кодом, схемой подключения, фото как оно выглядит, то было бы что обсуждать. А так — только копипастить ответы на всевозможные проблемы по списку, и то, список не полный.
bort707
★★★★★★✩
- #12
Эдуард Анисимов написал(а):
Попробуйте набрать «STM32 перенос векторов прерывания». Получите 8млн. результатов и нет ни одного вменяемого ответа.
Нажмите для раскрытия…
обычно так бывает, когда вы делаете то, что никто никогда до вас не делал.
Тут может быть два варианта — либо вы гений и делаете что-то принципиально новое(тогда вы должны знать вопрос лучше гугля), либо вы делаете никому не нужную неведомую хрень
Эдуард Анисимов
★★★★★★✩
- #13
@IamNikolay, А кто мешает попросить, что бы объяснил. Показал. Рассказал.
Ты же знаешь где он обитает.
IamNikolay
★★★✩✩✩✩
- #14
@Эдуард Анисимов, а зачем?
никакой секретный алгоритм для диагностики ни кто не скрывает, нужно проверить:
- железо
- софт
- исходный код
что и как проверять, а также как исправлять — есть и в поиске и в указанной теме, так что не вижу смысла писать/копипастить еще сюда
Matveyugru
✩✩✩✩✩✩✩
- #15
Избыточное цитирование
IamNikolay написал(а):
@Эдуард Анисимов, здесь ситуация совсем другая, проблем может быть много, как и писал @ТехнарьКто, какая именно у автор — не понять. Если бы были полноценные вводные данные с кодом, схемой подключения, фото как оно выглядит, то было бы что обсуждать. А так — только копипастить ответы на всевозможные проблемы по списку, и то, список не полный.
Нажмите для раскрытия…
Код не могу предоставить, т.к. использую уже готовые HEX и EEPROM файлы, в качестве порогроматора использую ардуину, схема подключения стандартная, пробовал прошить камень отдельно от платы — не помогло.
2021-05-16_214140.png
33.7 KB Просмотры: 28
Matveyugru
✩✩✩✩✩✩✩
- #16
Избыточное цитирование
ТехнарьКто написал(а):
@Эдуард Анисимов,
1) Чип сожгли
2) Испортили фьюзы
___а) чип блокирован
___б) чип хочет внешний кварц
___в) чип хочет низкую скорость внешнего тактового сигнала
3) Прошили программатор ISP взамен чипа
4) плохое питание
___а) большие пульсации
___б) разные напряжения чипа и программатора (например avr запитан от 5V, а плата ISP с питанием 3. 3V)
5) кривой программатор
___а) отсутствует конденсатор перезапуска
___b) плохой USB шнур
6) Ошибки операционной системы при работе с портом программатора
___а) не установлен драйвер
___б) установлен не тот драйвер
___в) работа драйвера блокируется другим ПО
___г) выбран не тот порт
___д) выбрана не та скорость
___е) сбита какая либо дополнительная настройка порта
7) Испорченные фьюзы чинят неработающим фьюзедокторомНажмите для раскрытия…
1)Каким образом его можно сжечь?
2) Испортили фьюзы
___а) как разблокировать
___б) Он стоит
___в) на сколько низкую? я пробовал подовать от внешнего генератора 1 МГц- не помогло
3) Нет,т.к. сверадиод состояния горел как надо, без изинений
4) питал от ардуины
___а) наврятли
___б)нет
5) кривой программатор
___а) стоит на ноге RESET
___b)Хм…А вот это может быть
6)может быть
___а)драйвера стоять, иначе бы я дуню не прошил
___б) нет
___в) каким?
___г) нет
___д) а какая должна быть?
___е) например?
7) а как его проверить?
bort707
★★★★★★✩
- #17
Matveyugru написал(а):
Код не могу предоставить, т. к. использую уже готовые HEX и EEPROM файлы
Нажмите для раскрытия…
то есть исходника у вас нет?
ТехнарьКто
★★★★★✩✩
- #18
@Matveyugru,
Вот с этого и надо было начинать. Прошил транзистор тестер. Теперь он не работает. И не любить мозг сообществу.
Хочешь помощи? Тогда
1) Полное название транзистор тестера. Либо полная версия схемы по которой было собрано самостоятельно.
2) Что хотели получить пере прошивкой. Или это Ваша первоначальная прошивка без понимания че, куда, для чего и откуда?
3) С чего Вы взяли, что не работает? Признаки.
4) Откуда брали прошивку. Чтобы я мог определиться исходя из (1), что там залито, для исключения не то, не туда, не так.
5) Какие фьюзы были рекомендованы. Какие фьюзы вы выставляли и в какой программе. Это важно. Можно скриншот.
6) Какой дисплей применен. Загорается ли подсветка дисплея. Это тоже важно. Если нет подсветки. Снимали ли дисплей с отпаиванием подсветки.
Мной был дан вариант прошивки для конкретно LCR-T4NoStripGrid и фьюзы указаны для avrdudeprog33 в режиме отображения инверсных фьюзов. Клонов «Транзистор—тестер Маркуса и Karl-Heinz K ̈ubbeler» огромное количество. Даже версии от Маркуса и Карла сильно различаются. Там два разных человека двигали и развивали проект, плюс огромное количество энтузиастов. Это не Китайский прибор, а именно как обычно спи женные китайцами из открытых источников макеты, разводка и софт. Причем все старое. А уж альтернативных разработок для этого проекта, просто огромное количество, да еще и с разными дисплеями. Так что огрызок схемы не катит для помощи, от слова совсем.
@Matveyugru,
Сжечь элементарно. Воткнуть на измерение не разряженный конденсатор. Или бездарно, без понимания, прикрученный доп функционал, например измерение напряжения стабилитронов.
@bort707,
Как только увидел огрызок схемы, сразу стало все понятно. Нужен исходник? Могу дать, поскольку исходник лежит в открытом доступе для всех желающих. Мало того, есть ролики на русском языке по сборке из исходника файла прошивки. Есть подробное описание, что где и для чего править, для получения разного функционала, подключения разных дисплеев, какие ошибки бывают и все это детально расписано и немецким и русским сообществами по развитию этого проекта.
Matveyugru
✩✩✩✩✩✩✩
- #19
1)Полное название-GM328A
2)изначально был тестер T4,я разбил на нем экран, мне подарили ST7735 ,я решил сделать копию модели 1), перед разводкой платя припоял экран проводами к старой плате,залил прошивку без изменения фьюзов ардуиной через синапрог,он заработал без нареканий, потом развел двухстороннюю пладу для лут, после зборки тестер включился,но горел белый экран(экран я проверил и соединения тоже)потом на экране отобразилась ошибка CEL!, затем надпись Закоротите!, после нескольких перепрошивок я заложил мк
Matveyugru
✩✩✩✩✩✩✩
- #20
Вот схема и картинка на экране нового тестера
Tester-1. sch.zip
44.3 KB Просмотры: 10
ТехнарьКто
★★★★★✩✩
- #21
@Matveyugru,
CEL! — это не ошибка. Это select. Закоротите — это один из пунктов калибровки. Поздравляю. Вы смогли собрать работающий транзистор тестер и на этапе калибровки за психовали и за прошивали работающее устройство. Поскольку синапрог шьет фьюзы всегда, то в очередной раз психа пере прошивки, фьюзы по умолчанию были изменены. И контроллер окирпичился. И все равно фьюзы по умолчанию для транзистор тестера надо менять на нужные. Нужные зависят от примененного кварца. А вот что там сейчас в этом кирпиче зашито, только доктор AVR разберет. Еще раз. В синапроге всегда надо выставлять фьюзы под конкретный микроконтроллер, иначе будут все равно зашиты какие нибудь, а atmega превращается в кирпич.
Кто виноват выяснили. Теперь, что делать. Либо паять рабочую atmega, либо раскирпичивать старую. На пальцах. Доктор AVR он же Atmega fusebit doctor — это высоковольтный параллельный программатор для AVR с сильно урезанными возможностями. Ног для программирования достаточно только, чтобы при параллельном программировании переписать фьюзы. На этом возможности заканчиваются. Более подробно Googl в помощь. Собрать работающий высоковольтный параллельный программатор для AVR, при умении заблокировать правильно работающий прибор. Это impossible (невозможно). Паяйте другую atmega328. А заблокированную отложите до тех пор, когда научитесь разблокировать AVR с неправильно прошитыми фьюзами.
PS Непруха по жизни? Поверь мне — это не повод для огорчения! Ведь говорят — дуракам везет. Тебе не везет? Все, значит ты не дурак!
Реакции:
Matveyugru, Nikanor и Эдуард АнисимовСтарик Похабыч
★★★★★★★
- #22
Матвей далеко не дурак, просто молодой, горячий.
Реакции:
MatveyugruЭдуард Анисимов
★★★★★★✩
- #23
Реакции:
MatveyugruMatveyugru
✩✩✩✩✩✩✩
- #24
@ТехнарьКто, Хм. .. Спасибо, а такой вопрос, я пробовал делать на ардуине докторо, причем 2 штуки, и к сожалению они не помогли https://www.radiokot.ru/cherdak/47/
ТехнарьКто написал(а):
PS Непруха по жизни? Поверь мне — это не повод для огорчения! Ведь говорят — дуракам везет. Тебе не везет? Все, значит ты не дурак
Нажмите для раскрытия…
Спасибо
ТехнарьКто
★★★★★✩✩
- #25
Matveyugru написал(а):
такой вопрос, я пробовал делать на ардуине докторо, причем 2 штуки, и к сожалению они не помогли https://www. radiokot.ru/cherdak/47/
Нажмите для раскрытия…
По указанной ссылке «РЕАНИМАТОР для AVR» сделан только применительно к ATmega8, а fuse bits у ATmega8 и ATmega328 разные.
Автор той заметки пишет: «Идея разработки этого устройства родилась после ошибочной записи значений фьюзов в ATmega8, -кусь- В своей конструкции я подключал к программатору, кроме панели для ATmega8 ещё панель для ATmega16, поскольку алгоритм программирования для него почти такой же -кусь- В результате устройство даже в такой представленной «игрушечной» версии успешно «реанимирует» кроме ATmega8 ещё и ATmega8535, ATmega16, ATmega32 -кусь-«
PS Эта информация из источников по Вашей ссылке. Желаю Вам научиться кроме фиги, видеть книгу.
Прошивка Arduino через USB (UART) / AVR ISP разъём (USBasp программатор) – urpylka՚s blog!
Эта заметка нацелена на изложение основных действий для перепрошивки Arduino как при помощи встроенного бутлодера, так и с помощью программатора. В первых двух разделах я коротко изложу техническую базу и особенности использования двух методов, а в третьем разделе среду разработки и утилиты необходимые для прошивки.
Прошивка с помощью встроенного bootloader (через последовательный порт)
Все платы Arduino (основная линейка) построены на базе чипа Atmega с архитектурой AVR. AVR – это семейство микроконтроллеров, их прошивка, а именно запись постоянной памяти и выставление Fuse битов реализовано через ICSP порт очень похожий на SPI. Однако наиболее распространенным способом прошивки является прошивка через USB. Точнее через UART, тк на самом деле на плате разведён USB-RS232 преобразователь.
RS232 это надстройка над UART. UART содержит только пины
RX
,TX
. Тогда как RS232 содержит ещё и другие линии (подробнее на UART, COM-порт, RS-232, что это и как они связаны?):
Для перепрошивки через UART требуется выполнение двух условий:
- Наличие загрузчика в МК (его вполне может и не быть там, тогда остается только вариант с прошивкой через программатор)
- Для начала загрузки прошивки необходимо перезагрузить МК в очень узкое временное окно и затем начать передавать прошивку через UART. На некоторых платах отсуствует встроенный USB-RS232 преобразователь, например
Arduino Pro Mini
. В этом случае вы можете попробовать перезагрузить МК с кнопки на плате Arduino (у меня это получилось раза 20го). Как альтернатива, если вы используете внешний USB-RS232 преобразователь с линиейDTR
. Вы можете подключить этот вывод на пинRESET
Arduino. Аналогичным способом подключен встроенный преобразователь на Arduino.
Для начала разберемся с тем, что нужно постоянно искать – пинами на программаторе.
Прошивка с помощью программатора
Есть множество различных программаторов, я использую USBasp
(USBASP: USB AVR программатор для микроконтроллеров ATmega, ATtiny).
Также в качестве программатора можно использовать ещё одну плату Arduino со специальной прошивкой.
Все сложность в прошивки этим способом обеспечить корректное подключение программатора к Arduino. Также обратите внимание, что лучше запитать Arduino непосредственно от программатора.
Основная проблема в том, что на большинстве программаторов ICSP-разъём содержит 10 пинов, тогда как на всех платах Arduino, и не только, он 6ти пиновый.
Для прототипирования небольших проектов, я люблю использовать Arduino Nano
, ниже описание выводов:
На некоторых программаторах, в том числе на USBasp выведены также I2C, UART-линии:
Для облегчения процесса перепрошивки, может быть сделан переходник. Подробнее в статье AVR ISP Разъемы (webarchive).
Иногда при прошивке с помощью программатора возникает ошибка
avrdude: warning: cannot set sck period, please check for usbasp firmware update
, при этом она может вызвана двумя причинами:
- Плохой контакт тактирующего сигнала
SCK
.- Устаревшая прошивка на программаторе, подробнее как её обновить тут Прошивка USBasp.
Среда разработки и прошивка
Стандартная среда разработки Arduino IDE включает в себя:
- Магазин библиотек
- Текстовый редактор
- Набор драйвером для сериал портов (последовательных портов)
- Монитор последовательного порта
- Обертку над
avrdude
- Компилятор
По сути весь процесс прошивки заключается в запуске avrdude
с разными аргументами. Мне не нравится среда Arduino IDE
ввиду крайне неудобного редактора при открытии нескольких файлов.
Я использую в качество основного редактора кода VSCode, для него есть замечательный плагин Platformio
, который позволяет производить сборку, а также прошивку устройств через встроенный загрузчик. Однако для перепрошивки, а также для работы с последовательным интерфейсом я предпочитаю использовать напрямую утилиты avrdude
и screen
. Для этого я добавляю в репозиторий примерно следующий Makefile
:
all: upload upload: platformio run --target upload clean: platformio run --target clean build: platformio run list: ls -l /dev/tty.* monitor: screen /dev/tty.usbserial-AH05WAKX 115200 usbasp: avrdude -c usbasp -p m328p -P usb -U flash:w:.pio/build/ATmega328P/firmware.hex:i -FD direct: avrdude -c arduino -p m328p -U flash:w:.pio/build/ATmega328P/firmware.hex:i -P /dev/tty.usbserial-AH05WAKX info: avrdude -c usbasp -p m328p -P usb -v setup: brew install avrdude screen
Адрес последовательного интерфейса может отличаться, также цель
setup
использует пакетный менеджерbrew
для установки зависимостей на macOS.
Библиотеки я предпочитаю лично контролировать включением их в репозиторий, для этого в проекте Platformio необходимо создать папку lib
.
Небольшое обновление: я сделал репозиторий-шаблон на Github, который можно взять за основу при написании кода под МК Atmega.
Пожалуй, это основные лайфхаки которые я использую для прошивки Arduino. Я умышленно упростил и недосказал некоторые моменты, возможно я допишу это когда-нибудь.
Burn Bootloader ATmega328p AU на SMD чипе
При покупке новой микросхемы ATMEGA328P AU обычно ничего не прожигается в памяти. Для программирования этих микроконтроллеров вам необходимо предварительно записать загрузчик. Загрузчик похож на микрочип copan duro
нтроллер. Без этого контроллера микросхема не будет понимать язык, который мы прислали из Arduino IDE. Чтобы понять код, который мы отправляем, мы должны сначала записать загрузчик.
Здесь я покажу вам, как записать загрузчик на SMD-чип ATmega328p AU, используя Arduino NANO в качестве программатора ISP.
В первую очередь нам предстоит сделать базовую настройку микросхемы ATMEGA328P AU. Интегрированный не будет работать без этой конкретной конфигурации. Для этого потребуется рекомендованная производителем схема с основным источником питания, развязывающими конденсаторами, кварцевым генератором и необходимыми подтягивающими резисторами. На приведенной ниже схеме я показываю вам основные компоненты и соединения, которые необходимо выполнить для правильного функционирования микроконтроллера.
Как видите, у нас есть кварцевый генератор 16 МГц между контактами 7 и 8 микросхемы SMD с двумя конденсаторами по 22 пФ на землю. Мы должны подключить землю к контактам 3, 6 и 21 и питание 5 В к контактам 4, 6 и 18. Наконец, мы добавляем подтягивающий резистор на 1 кОм между 5 В и контактом сброса, который является контактом 29.этого чипа SMD. Рекомендуется подключить конденсатор 47 мкФ между контактом Aref и 5V.
После того, как мы сделали базовую схему, нам нужно будет выполнить следующие соединения между Arduino NANO и выводами smd-чипа, чтобы записать на него загрузчик.
Цифровой контакт 13 от arduino NANO к контакту 17 от чипа SMD (SCK)
Цифровой контакт 12 от arduino NANO к контакту 16 от чипа SMD (MISO)
Цифровой контакт 11 от arduino NANO к контакту 15 от Микросхема SMD (MOSI)
Цифровой контакт 10 от arduino NANO к контакту 29 от микросхемы SMD (CS)
Теперь открываем Arduino IDE. Заходим в файл -> Примеры -> Arduino as ISP и открываем скетч примера ArduinoISP. В инструментах мы выбираем Arduino NANO в качестве платы, COM нашего USB-подключенного Arduino и загружаем скетч как обычный, как и любой другой, в Arduino NANO.
Как только мы загрузим код ArduinoISP в Arduino NANO и с предыдущими соединениями, мы можем записать загрузчик. Для этого мы идем в Tools -> Programmer -> Arduino as ISP, как показано ниже.
Все, что осталось сделать, это перейти в Инструменты и нажать кнопку записи загрузчика. Мы увидим, что индикаторы Arduino NANO часто мигают. Как только он говорит, что загрузчик сгорел, мы закончили. Мы успешно записали загрузчик на SMD-чип.
Все, что нам нужно сделать сейчас, это проверить правильность работы чипа. Для этого мы загрузим простой блинк-код, используя соединение FTDI, как показано ниже. Не забудьте вернуть программатор в нормальное состояние.
Помните, что нам нужен конденсатор 0,1 мкФ между выводом DTR модуля FTDI и нашим выводом сброса, чтобы запрограммировать этот чип.
Надеюсь, это руководство помогло вам. Посетите мой канал на YouTube, чтобы увидеть больше учебников и материалов по электронике.
См. руководство по контроллеру arduino+RF здесь:
Установка загрузчика ATmega328 с помощью Arduino Shield/макетной платы
В своих предыдущих проектах я создавал собственные схемы Arduino, дизайн печатной платы KiCAD Arduino и моделирует сигналы автоматизации железной дороги. Все они основаны на пользовательских схемах, подобных Arduino, на базе микроконтроллера ATmega328p. В тех я рекомендовал купить ATmega328p с предустановленным загрузчиком. Это полезно для новичков, так как означает, что вы можете сосредоточиться на пользовательской схеме, но в этом я подробно расскажу о том, как вы можете установить загрузчик, если вы покупаете базовую микросхему без загрузчика.
Видео ниже дает представление об этом.
Его можно создать на макетной плате, но я также разработал специальный экран для печатной платы, который можно использовать для специального программирования.
Загрузчик Arduino
Загрузчик Arduino — это фрагмент кода, отвечающий за выполнение пользовательского кода и/или установку нового пользовательского кода. Это выполняется всякий раз, когда микроконтроллер ATmega включается или сбрасывается. Важно, чтобы увидеть, пытается ли IDE отправить новый код в Arduino, и если да, то он сохраняет этот новый код в прикладной области флэш-памяти. Если нет, то он переходит к коду, уже находящемуся во флэш-памяти, и запускает работу микроконтроллера. Это упрощение, но оно дает вам представление о том, как это работает.
Без загрузчика микроконтроллер ничего не сможет сделать, если он не запрограммирован напрямую с помощью внутрисистемного программатора или подобного.
Выделенный AVR-ISP и Arduino
Вы можете приобрести выделенный AVR-ISP, который представляет собой внутрисистемный программатор, разработанный специально для микросхем микроконтроллеров, основанных на архитектуре AVR (включая микросхемы серии ATMel ATmega). В качестве альтернативы вы можете установить код на Arduino, чтобы он мог действовать как внутрисистемный программатор. Это известно как Arduino в качестве интернет-провайдера, что и рассматривается в этом руководстве.
Версия для макетной платы
На приведенной ниже диаграмме показана базовая установка того, как вы можете запрограммировать загрузчик с помощью простой схемы, похожей на Arduino, созданной на макетной плате.
Версия шилда
Первоначальный шилд Arduino (показан вверху этой страницы) основан на той же схеме, что и макетная версия, но сделан на заказной печатной плате. Хотя эта схема работает правильно, основываясь на опыте работы с программатором, было бы лучше с разъемом ZIF и светодиодами состояния. Поэтому я создал обновленную схему, хотя еще не имел возможности ее попробовать.
Установка загрузчика
Для установки загрузчика необходимо выполнить следующие шаги.
Настройте Arduino как ISP
- Откройте IDE Arduino (желательно последнюю версию)
- Откройте пример эскиза для Arduino ISP
- Если UNO не используется, раскомментируйте запись
#define USE_OLD_STYLE_WIRING
- Выберите модель платы Arduino, которую вы будете использовать в качестве Arduino ISP
- Выберите подходящий порт
- Загрузить скетч
Установить загрузчик
- Выбрать Arduino UNO для платы
- В разделе «Программист» выберите Arduino в качестве ISP .