какие фьюзы выставить для atmega328 для ардуино
IT миниблог
О том что нужно не потерять
Прошиваем Arduino программатором USBASP
При замене чипа на arduino или при изготовлении самодельной Arduino часто возникает необходимость в прошивке чистого чипа Atmega328/168. У многих возникают с этим проблемы, опишу процесс по пунктам.
Для прошивки нам понадобится сама Arduino с распаянным / установленным чипом и программатор USBASP.
Из софта нужны будут следующие файлы:
Загрузчик (Bootloader) ATmegaBOOT_168_atmega328 (скачать)
Теперь подключаемся к Arduino по IСSP.
Замыкаем JP3 на USBASP, так как частота нового контроллера слишком мала.
Открываем AVRDUDE_PROG, и сразу переключаемся на вкладку FUSES выставляем все как на картинке
В примере на картинке FUSES установленны для ARDUINO NANO 328!
Вот список для остальных контроллеров:
Фьюзы установленные по умолчанию в Arduino (только с ATmega328)
Arduino Uno
Low Fuse 0xFF
High Fuse 0xDE
Extended Fuse 0x05
Arduino Duemilanove or Nano w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05
Arduino BT w/ ATmega328
Low Fuse 0xFF
High Fuse 0xD8
Extended Fuse 0x05
LilyPad Arduino w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05
Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05
После прошивки FUSES прошиваем загрузчик.
Прошиваем Arduino программатором USBASP : 3 комментария
Спасибо! Я не знал про перемычку.
Считал фьюзы с помощью AVRDUDESHELL с Arduino UNO и NANO, они оказались одинаковые вот такого типа: LOW – 0xF7, HIGH – 0xDE, EXTENDED – 0xFD, LOCK – 0x3F. Хочу перешить загрузчики на Optiboot, какие фьюзы мне лучше поставить, какие были или которые указаны у Вас?
Про Ардуино и не только
воскресенье, 19 августа 2018 г.
Что такое Фьюзы. Чтение и запись фьюзов Ардуино
Сегодня я хочу рассказать о том, что такое фьюзы, за что они отвечают и как их можно прочитать и записать в Ардуино. Рекомендую также заглянуть в предыдущую публикацию, т.к. работа с фьюзами возможна только через программатор.
При работе с конфигурационными битами нужно помнить один важный момент: если бит содержит логическую единицу, то это означает что он не запрограммирован, соответственно, запрограммированный конфигурационный бит содержит логический ноль. Такая логика основана на принципе хранения данных в EEPROM: чистая микросхема памяти содержит во всех ячейках единицы, а термин запрограммирована по отношению к такой ячейке означает, что в нее записали ноль.
Фьюзы ATmega328 / ATmega328p
Микроконтроллеры ATmega328 и ATmega328p, на базе которых построено большинство плат семейства Ардуино, имеют 3 байта конфигурации: младший, старший и дополнительный. Их описание приведено ниже в таблицах.
Младший конфигурационный байт ATmega328/P
Номер бита | Навание | Описание | Значение по умолчанию |
---|---|---|---|
7 | CKDIV8 | Divide clock by 8 | 0 (запрограммирован) |
6 | CKOUT | Clock output | 1 (не запрограммирован) |
5 | SUT1 | Select start-up time | 1 (не запрограммирован) |
4 | SUT0 | Select start-up time | 0 (запрограммирован) |
3 | CKSEL3 | Select Clock source | 0 (запрограммирован) |
2 | CKSEL2 | Select Clock source | 0 (запрограммирован) |
1 | CKSEL1 | Select Clock source | 1 (не запрограммирован) |
0 | CKSEL0 | Select Clock source | 0 (запрограммирован) |
Старший конфигурационный байт ATmega328/P
Номер бита | Навание | Описание | Значение по умолчанию |
---|---|---|---|
7 | RSTDISBL | External Reset Disable | 1 (не запрограммирован) |
6 | DWEN | debugWIRE Enable | 1 (не запрограммирован) |
5 | SPIEN | Enable Serial Program and Data Downloading | 0 (запрограммирован) |
4 | WDTON | Watchdog Timer Always On | 1 (не запрограммирован) |
3 | EESAVE | EEPROM memory is preserved through the Chip Erase | 1 (не запрограммирован) |
2 | BOOTSZ1 | Select Boot Size | 0 (запрограммирован) |
1 | BOOTSZ0 | Select Boot Size | 0 (запрограммирован) |
0 | BOOTRST | Select Reset Vector | 0 (запрограммирован) |
Дополнительный конфигурационный байт ATmega328/P
Номер бита | Навание | Описание | Значение по умолчанию |
---|---|---|---|
7 | — | — | 1 |
6 | — | — | 1 |
5 | — | — | 1 |
4 | — | — | 1 |
3 | — | — | 1 |
2 | BODLEVEL2 | Brown-out Detector trigger level | 1 (не запрограммирован) |
1 | BODLEVEL1 | Brown-out Detector trigger level | 1 (не запрограммирован) |
0 | BODLEVEL0 | Brown-out Detector trigger level | 1 (не запрограммирован) |
uno.name=Arduino/Genuino Uno
.
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
Для расшифровки шестнадцатеричных значений конфигурационных байтов удобно использовать онлайн калькулятор Engbedded Atmel AVR® Fuse Calculator:
Рассмотрим назначение конфигурационных битов более подробно.
CKDIV8
CKOUT
Конфигурационные биты SUT совместно с битами CKSEL определяют длительность задержки при старте микроконтроллера. Задержка необходима для того, чтобы источник тактовой частоты стабилизировался после подачи питания и вошел в свой рабочий режим. Величина задержки зависит от выбранного источника и составляет от 0 до 65мс. Конкретные значения можно найти в даташите.
CKSEL
Современные микроконтроллеры способны работать с различными источниками тактового сигнала. Выбор источника осуществляется установкой конфигурационных битов CKSEL. В таблице ниже приведены источники тактового сигнала, поддерживаемые микроконтроллерами ATmega328 / ATmega328P, и соответствующие им значения CKSEL.
Источник тактового сигнала | Значение CKSEL3..0 |
---|---|
Экономичный кварцевый генератор | 1111-1000 |
Кварцевый генератор | 0111-0110 |
Низкочастотный кварцевый генератор | 0101-0100 |
Внутренний RC-генератор на 128кГц | 0011 |
Внутренний калиброванный RC-генератор | 0010 |
Внешний сигнал синхронизации | 0000 |
Зарезервировано | 0001 |
RSTDISBL
Фьюз RSTDISBL управляет работой цифрового вывода микроконтроллера, совмещенного с входом внешнего сброса. Если RSTDISBL запрограммирован, то вывод может быть использован как обычный цифровой пин ввода/вывода. Если фьюз RSTDISBL не запрограммирован, то вывод используется для внешнего сигнала сброса: низкий уровень напряжения на нем приводит к генерации сигнала сброса микроконтроллера. Отключение внешнего сброса может быть оправдано при работе с микроконтроллерами, имеющими небольшое количество выводов, в других случаях лучше не трогать этот фьюз.
Узнайте о битах конфигурации ATmega328P и о том, как использовать их с внешним кварцевым резонатором
В данном проекте приводится введение во fuse-биты ATmega328P и показывается, как установить их для использования внешнего кварцевого резонатора 16 МГц.
Обзор статьи
Fuse-биты, также известные как фьюзы или биты конфигурации, – это настройки микроконтроллера для управления определенными действиями, которые обычно не изменяются во время выполнения программного кода. В данной статье вкратце объясняется, какие действия находятся в ATmega328P, и как их устанавливать. Fuse-биты для выбора источника тактового сигнала будут рассмотрены более подробно, в том числе, как и зачем выбрать внешний кварцевый резонатор 16 МГц.
Схема программирования ATMega328P
На фотографии ниже показана простая схема программирования ATmega328P. Схема, полный список компонентов и подробности о сборке содержатся в предыдущей статье. Для продолжения работы с данной статьей вам понадобится собрать данную схему.
Схема программирования ATmega328P
Биты конфигурации ATmega328P
Три байта конфигурации
В ATmega328P в общей сложности имеется 19 бит конфигурации, и они разделены на три разных байта конфигурации. Три бита конфигурации содержатся в «дополнительном байте конфигурации», восемь – в «старшем байте конфигурации», и еще восемь – в «младшем байте конфигурации».
Ниже приводится таблица 31-5 из технического описания ATmega328P версии от ноября 2016 года. Как вы можете видеть, весь дополнительный байт конфигурации работает с уровнем контроля понижения напряжения питания микроконтроллера (brownout).Контроль понижения напряжения питания (brownout) является особенность многих микроконтроллеров, что позволяет им перезагружаться, когда напряжение питания падает ниже определенного уровня. В случае ATMega328P в качестве минимально допустимого напряжения питания можно выбрать одно из трех разных напряжений (1,8 В, 2,7 В или 4,3 В).
Возможно, самое важное, на что следует обратить внимание в таблице, состоит в том, что программирование битов конфигурации состоит в установке их в состояние логического нуля, что является противоположностью ожидаемого поведения. Например, обратите внимание, что каждый бит не запрограммирован, когда он установлен в высокий логический уровень, т.е. 1. Этот несколько необычный метод применяется ко всем байтам конфигурации ATmega328P.
Название бита конфигурации | Номер бита | Описание | Значение по умолчанию |
---|---|---|---|
– | 7 | – | 1 |
– | 6 | – | 1 |
– | 5 | – | 1 |
– | 4 | – | 1 |
– | 3 | – | 1 |
BODLEVEL2 | 2 | Уровень срабатывания детектора понижения напряжения питания | 1 (не запрограммирован) |
BODLEVEL1 | 1 | Уровень срабатывания детектора понижения напряжения питания | 1 (не запрограммирован) |
BODLEVEL0 | 0 | Уровень срабатывания детектора понижения напряжения питания | 1 (не запрограммирован) |
Ниже приведена таблица 31-6 из технического описания. Биты 2-0 используются для установки размера области загрузки ATmega328P; размер области загрузки относится к объему памяти, зарезервированному для установки «загрузчика», аналогичного функции загрузчика, используемого в линейке отладочных плат Arduino. Назначение оставшихся битов в старшем байте конфигурации достаточно понятно из описаний в таблице. Два бита, которых следует избегать, если вы не уверены, что знаете, что делаете, это бит 7, бит RSTDISBL (выключение внешнего сброса), и бит 5 бит SPIEN (включение последовательного периферийного интерфейса). Отключение одного из них часто является причиной появления «кирпичных» микроконтроллеров Atmel; поэтому хорошим советом будет: «оставить их в покое».
Название бита конфигурации | Номер бита | Описание | Значение по умолчанию |
---|---|---|---|
RSTDISBL | 7 | Выключение внешнего сброса | 1 (не запрограммирован) |
DWEN | 6 | Включение DebugWire | 1 (не запрограммирован) |
SPIEN | 5 | Включение последовательного программирования и загрузки данных | 0 (запрограммирован, SPI программирование включено) |
WDTON | 4 | Сторожевой таймер всегда включен | 1 (не запрограммирован) |
EESAVE | 3 | Память EEPROM сохраняется при стирании чипа | 1 (не запрограммирован), EEPROM не защищена |
BOOTSZ1 | 2 | Выбор размера области загрузки (смотрите параметры загрузчика) | 0 (запрограммирован) |
BOOTSZ0 | 1 | Выбор размера области загрузки (смотрите параметры загрузчика) | 0 (запрограммирован) |
BOOTRST | 0 | Выбор вектора сброса | 1 (не запрограммирован) |
Подробная информация о назначении всех 19 битов конфигурации содержится в техническом описании ATmega328P; в данной статье будет включено описание настройки младшего байта конфигурации. Однако общий процесс программирования всех битов конфигурации аналогичен.
Варианты выбора младшего байта конфигурации
Младший байт конфигурации выбирает источник тактового сигнала ATmega328P и управляет некоторыми деталями работы тактовой синхронизации. Ниже приведена таблица 31-7 из технического описания.
Название бита конфигурации | Номер бита | Описание | Значение по умолчанию |
---|---|---|---|
CKDIV8 | 7 | Делитель на 8 | 0 (запрограммирован) |
CKOUT | 6 | Выход тактового сигнала | 1 (не запрограммирован) |
SUT1 | 5 | Выбор времени запуска | 1 (не запрограммирован) |
SUT0 | 4 | Выбор времени запуска | 0 (запрограммирован) |
CKSEL3 | 3 | Выбор источника тактового сигнала | 0 (запрограммирован) |
CKSEL2 | 2 | Выбор источника тактового сигнала | 0 (запрограммирован) |
CKSEL1 | 1 | Выбор источника тактового сигнала | 1 (не запрограммирован) |
CKSEL0 | 0 | Выбор источника тактового сигнала | 0 (запрограммирован) |
Не забывайте, что программирование бита конфигурации состоит в том, чтобы установить его в состояние низкого логического уровня, т.е. 0. Например, обратите внимание, что бит 7 используется для включения/выключения деления частоты тактового сигнала на 8; чтобы включить деление тактовой частоты на 8, бит 7 должен быть установлен в 0, а для отключения деления бит 7 должен быть установлен в 1.
Примечание: для всех битов конфигурации, ‘1’ означает не запрограммированный, а ‘0’ – запрограммированный.
Значения по умолчанию младшего байта конфигурации
Вау! По общему признанию, чтобы установить 8 бит младшего байта конфигурации, требуется много данных, но всё это необходимо, и нет «пути обхода» (рискуя казаться чрезмерно критичным, автор данной статьи считает, что техническое описание может быть написано более четко, чтобы передать детали этого довольно запутанного процесса).
К счастью, есть много информации, которая в техническом описании указана четко, значения по умолчанию, установленные в ATmega328, не содержат ошибок. Посмотрите на таблицу 31-7, представленную ранее:
Примечание:
Примечание:
Теперь вам должно быть понятно, что младший байт конфигурации предварительно запрограммирован на 01100010 (что в шестнадцатеричной нотации равно 0x62), и что это значит для работы микроконтроллера. Если что-то из этого вам непонятно, не удивляйтесь: это сложный вопрос. Вероятно, вам стоит потратить время и перечитать разделы 13 и 31 технического описания ATmega328P.
Теперь сделаем некоторые изменения
Если вы знакомы с семейством микроконтроллерных платформ Arduino, особенно с Arduino Uno, вы, вероятно, помните, что она использует микроконтроллер ATmega328P. Возможно, вы также помните, что UNO имеет внешнюю схему генератора, состоящую из кристалла 16 МГц и двух небольших керамических конденсаторов (часто около 22 пФ каждый). Вы можете также вспомнить, что рабочая частота UNO равна 16 МГц.
Но как насчет ATmega328P? Можете ли вы определить его стандартную рабочую частоту, когда он поставляется с завода?
Вы знаете, что по умолчанию источник тактового сигнала в ATmega328P – это внутренний RC генератор, но вы помните его частоту? Ответ в приложении 2 в таблице 31-7: 8 МГц. И поскольку значение по умолчанию бита 7 младшего байта конфигурации равно 0, деление тактовой частоты на 8 включено. Таким образом, стандартная рабочая частота ATmega328P равна. погодите. 1 МГц.
Но предположим, ваш проект требует тактовую частоту ATmega328P 16 МГц, знаете ли вы, как это сделать? Как обычно, требуется и аппаратное, и программное вмешательство.
Аппаратные изменения: добавим кварцевый резонатор
Чтобы запустить ATmega328P на частоте 16 МГц, вам нужно добавить в схему, показанную в самом начале статьи, внешний кварцевый резонатор. Требуются только три новые детали: резонатор 16 МГц и два керамических конденсатора 22 пФ. Полученная схема показана ниже, а после нее показана фотография собранного макета.
Схема программирования ATmega328P с внешним кварцем и программатором AVR Pocket
Схема программирования ATmega328P с внешним кварцем и программатором AVR Pocket
Программные изменения: изменение настроек младшего байта конфигурации
После того, как вы добавили схему кварцевого генератора на 16 МГц и дважды перепроверили разводку, следующая цель – определить, какие изменения в битах конфигурации необходимы для кварцевого генератора низкой мощности. Дополнительный и старший байты конфигурации не зависят от изменений генератора; необходимо изменить только младший байт конфигурации.
Предупреждение! Не меняйте источник синхронизации на внешний кварц, если у вас на самом деле кварцевый резонатор не установлен. Если вы сделаете это, на ATmega328P не будет поступать тактовый сигнал, и поэтому перепрограммировать его возможности не будет.
Рассмотрим младший байт конфигурации бит за битом.
Примечание: для всех битов конфигурации, ‘1’ означает не запрограммированный, а ‘0’ – запрограммированный.
Таблица 13-3 указывает, что для работы с частотой от 8,0 до 16,0 МГц биты 3-1 (CKSEL[3:1]) должны быть установлены в 111. Но что с CKSEL0? Читаем дальше.
Диапазон частот, МГц | CKSEL[3:1] (2) | Диапазон номиналов конденсаторов C1 и C2, пФ |
---|---|---|
0,4 – 0,9 | 100 (3) | – |
0,9 – 3,0 | 101 | 12 – 22 |
3,0 – 8,0 | 110 | 12 – 22 |
8,0 – 16,0 | 111 | 12 – 22 |
Примечание:
Биты 5 и 4 управляют временем запуска, а значение по умолчанию 10 обеспечивает задержку запуска на 6 тактовых циклов после выключения или снижения энергопотребления плюс дополнительную задержку запуска на 14 тактовых циклов плюс 65 миллисекунд после сброса. Из таблицы 13-4 видно, что, чтобы быть в безопасной зоне для кварцевого генератора малой мощности, вам необходима максимально возможная задержка в 16000 тактовых циклов после выключения или снижения энергопотребления, поэтому SUT1 должен быть установлен в 1, плюс дополнительная задержка запуска на 14 тактовых циклов и 65 миллисекунд после сброса, поэтому SUT0 должен быть установлен в 1. Кроме того, CKSEL0 должен быть установлен в 1.
Резонатор генератора источника / условия питания | Время запуска после выключения и снижения энергопотребления | Дополнительная задержка после сброса (VCC = 5.0 В) | CKSEL0 | SUT[1:0] |
---|---|---|---|---|
Керамический резонатор, быстро нарастающее напряжение питания | 258 тактовых циклов | 14 тактовых циклов + 4,1 мс (1) | 0 | 00 |
Керамический резонатор, медленно нарастающее напряжение питания | 258 тактовых циклов | 14 тактовых циклов + 65 мс (2) | 0 | 01 |
Керамический резонатор, BOD включен | 1 тактовый цикл | 14 тактовых циклов (2) | 0 | 10 |
Керамический резонатор, быстро нарастающее напряжение питания | 1 тактовый цикл | 14 тактовых циклов + 4,1 мс (2) | 0 | 11 |
Керамический резонатор, медленно нарастающее напряжение питания | 1 тактовый цикл | 14 тактовых циклов + 65 мс (2) | 1 | 00 |
Кварцевый резонатор, BOD включен | 16 тактовых циклов | 14 тактовых циклов | 1 | 01 |
Кварцевый резонатор, быстро нарастающее напряжение питания | 16 тактовых циклов | 14 тактовых циклов + 4,1 мс | 1 | 10 |
Кварцевый резонатор, медленно нарастающее напряжение питания | 16 тактовых циклов | 14 тактовых циклов + 65 мс | 1 | 11 |
Примечание:
Таким образом, бит 7 равен 1, бит 6 равен 1, бит 5 равен 1, бит 4 равен 1, биты 3-0 равны 1111. Следовательно, младший байт конфигурации должен быть равен 11111111, что в шестнадцатеричной нотации равно 0xFF. Наконец-то мы получили его!
Avrdude
Avrdude – это утилита с командной строкой, которая более подробно объясняется в этой статье. Это единственный программный инструмент, необходимый для программирования изменений байтов конфигурации в ATmega328P и длинного списка других микроконтроллеров Atmel. Скриншот ниже – это реальный сеанс avrdude с карманным программатором AVR, подключенным к ATmega328P, как показано на принципиальной схеме и макетной сборке выше. Номера строк были добавлены на скриншот, чтобы упростить описание сессии программирования.
Строки 1-3 были сгенерированы avrdude, как только программа была запущена.
Строка 5 показывает, что активный каталог изменяется на место, где была установлена avrdude. В этом случае каталог также называется «avrdude». Вы должны перейти в каталог, в который установили avrdude на свой компьютер.
Строка 7 – это команда, чтобы указать avrdude, какие используются программатор и микроконтроллер. В этом случае программатор AVR Pocket использует драйвер USBTiny, а используемый микроконтроллер – ATmega328P.
Строки 9-17 – это отклики avrdude. Строка 13 представляет сигнатуру ATmega328P в шестнадцатеричной нотации 0x1e950f. Строка 15 представляет байты конфигурации, запрограммированные в ATmega328P в текущее время, также в шестнадцатеричной нотации; в этом случае байты конфигурации запрограммированы на заводе и имеют значения по умолчанию. Дополнительный байт конфигурации равен 0xFF, старший байт конфигурации равен 0xD9, и младший байт конфигурации равен 0x62.
Строка 20 – это команда, чтобы сказать avrdude, какие используются программатор и микроконтроллер, и изменить младший байт конфигурации на 0xFF.
Строки 22-45 – это ответы от avrdude. Каждая строка представляет выполненный шаг, а строка 43 представляет программирование новых битов конфигурации в ATmega328P. Дополнительный байт конфигурации равен 0xFF, старший байт конфигурации равен 0xD9, и младший байт конфигурации равен 0xFF.
Строка 48 – это команда, указывающая avrdude, какие используются программатор и микроконтроллер, и изменить младший байт конфигурации на 0x62 (установка младшего байта конфигурации на 0x62 необходима, только если вы хотите вернуться к исходной конфигурации, поскольку значение 0x62 является значением по умолчанию).
Строки 50-73 – это ответы от avrdude. Каждая строка представляет выполненный шаг, а строка 71 представляет программирование новых битов конфигурации в ATmega328P. Дополнительный байт конфигурации равен 0xFF, старший байт конфигурации равен 0xD9, и младший байт конфигурации равен 0x62. Теперь байты конфигурации снова запрограммированы на заводские значения по умолчанию.
Примеры чтения и записи младшего байта конфигурации с помощью avrdude
«Прошивка» младшего байта конфигурации
Когда всё (и аппаратное, и программное обеспечение) готово, реальное перепрограммирование байтов конфигурации довольно противоречиво; оно происходит так быстро, что, если вы не смотрите внимательно, то можете упустить его. Таким образом, стоит представить некоторые доказательства выполненных изменений. Это достаточно легко сделать, используя ту же программу мигания светодиодом, что и в статье «Макетирование и программирование ATmega328P и ATtiny45 с помощью Atmel Studio 7». Если она всё еще запрограммирована в ваш ATmega328P, то вы готовы; если нет, то создайте файл с кодом, приведенным ниже, и запрограммируйте микроконтроллер скомпилированной программой.
New_Blink.c мигает желтым светодиодом, включая его на ½ секунды и выключая на ½, 60 раз в минуту. Убедитесь, что программа всё еще делает это на вашем макете.
Как вы (надеюсь) вспомните, ATmega328P использует свой откалиброванный внутренний генератор и не полагается на 16-мегагерцовый кварцевый резонатор, который вы только что добавили. В данный момент резонатор игнорируется из-за настроек младшего байта конфигурации (помните, что младший байт конфигурации всё еще установлен в заводское значение по умолчанию 0x62, которое указывает на использование внутреннего геренатора). К счастью, наличие резонатора и двух конденсаторов 22 пФ ничем не мешает использованию внутреннего генератора. Чтобы перейти на 16-мегагерцовый кварцевый генератор, выполните следующие два шага:
Следите за желтым светодиодом; вы заметили, что скорость мигания изменилась? Вот почему.
Мало того, что значение младшего байта конфигурации 0x62 вызывает использование внутреннего генератора 8 МГц, оно также указывает на то, что включена функция деления на 8. Поэтому эффективная частота генератора составляет 1 МГц, что отражено в строке 3 кода New_Blink.c (важно понимать, что строка 3 не контролирует частоту, с которой запускается ATmega328P, а просто сообщает компилятору, что микроконтроллер должен работать на частоте 1 МГц, чтобы код выполнялся с нужной скоростью).
Поскольку вы изменили младший байт конфигурации с 0x62 на 0xFF, вы изменили используемый генератор на кварцевый генератор 16 МГц. Кроме того, вы отключили функцию деления на 8. Чистый эффект этих двух изменений заключается в том, что тактовая частота ATmega328P теперь составляет 16 МГц, но строка 3 New_Blink.c всё еще сообщает компилятору, что микроконтроллер работает на частоте 1 МГц. Поэтому скорость мигания теперь в 16 раз больше, чем должна быть. Что делать?
А есть способ проще?
Вы можете спросить: «А нет более простого способа?», и ответ: «Да». Есть несколько онлайн-приложений, которые будут определять настроки байта конфигурации, отображающие выбранные функции, и одним из самых популярных является калькулятор EngBedded’s AVR Fuse Calculator. Тем не менее, веб-сайты могут исчезать, и всегда хорошо знать, как сделать это самостоятельно; таким образом вы можете в дополнение к «что» понять «как» и «почему».
Что дальше?
В следующей статье из серии мы обсудим работу Atmel Studio 7 более подробно и рассмотрим более дешевый способ получения genuine Atmel ICE программатора.