Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

мир электроники – Что такое фьюзы AVR микроконтроллеров

материалы в категории

Что такое фьюзы в AVR микроконтроллерах

Что такое FUSE биты? Слово вроде знакомое, при прошивке микроконтроллера многие с ними сталкивались, но не вникая в особенности просто выставляли их как надо и все…
Но так как нас постоянно предупреждают что при прошивке необходимо правильно выставлять все фьюзы (иначе микроконтроллер просто зависнет), то давайте уделим немного внимания что-же такое фьюзы и зачем они нужны

FUSE биты (фьюзы) – ну если по простому, то они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки Фьюзы включают или настраивают такие параметры как:
–  частота генератора, внешний или внутренний генератор
–  запрет на чтение прошивки микроконтроллера
–  включение или выключение таймеров
–  деление частота кварцевого генератора
–  защита EEPROOM от стирания
…и так далее.

У каждого микроконтроллера выставляются свои фьюзы, у разных микроконтроллеров разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.

Главное правило при работе с фьюзами – не торопиться их выставлять, если вы точно не уверены в правильности своих действий.

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

CKSEL, таких фьюзов с разными буквами всего четыре, это группа CKSEL0, CKSEL1, CKSEL 2 и CKSEL3,определяют частоту тактового генератора, и его тип, тактовые импульсы для работы необходимы практически любого  микроконтроллера.

Во многих микроконтроллерах есть внутренний генератор, но мы можем подключить внешний и фюзы выставить для работы от внешнего генератора. Внешний кварцевый резонатор подключается на вывода XTAL1 и XTAL2, кроме того припаивается пара конденсаторов  ~20пф одни концом на кварц, другим на минус. Если допустить ошибку при установке этих фьюзов, то микроконтроллер может “зависнуть” и для того чтобы восстановить контроллер, подают тактовый сигнал на ногу XTAL1.
На данный момент придумано не мало схем для восстановления контроллеров, залоченных таким образом. Этот генератор можно сделать практически из любой логики или даже из таймера 555 или на простейшей логике типа К155ЛА3. Схема такого генератора показана ниже, а кому интересно как он работает- можете почитать здесь

Данные способы 100% оживляют контроллеры с таким дефектом

Группа фьюзов SUT1 и SUT0 — fuse биты, управляющие режимом запуска тактовых генераторов МК, а так же  задают скорость старта МК после подачи питания. Связаны с фьюзами CKSEL, а именно CKSEL0.

CKOPT – бит, определяет работу встроенного генератора для работы с кварцевыми резонаторами, устанавливает “амплитуду” колебаний тактового сигнала на кварце. Данный бит программируется достаточно часто.

RSTDISBL – очень опасный фьюз, ошибочная установка может отключить вывод RESET, после чего пропадет возможность программирования ISP программатором. Бит RSTDISBL превращает вывод RESETв порт ввода-вывода.

SPIEN – фьюз, который разрешает работу МК по интерфейсу SPI. Все микроконтроллеры выпускаются с уже установленным битом 

SPIEN. Считается опасным фьюзом.

EESAVE –  Удобно читать как EEPROOM SAVE, дословно означает “сохранить EEPROOM”, данный фьюз защищает EEPROM от стирания. Например когда в очередной раз заливаете прошивку в контроллер, можно поставить EESAVE = 0, и при стирании МК EEPROOM останется не тронутым.

BOOTSZ, состоит из группы битов BOOTSZ1 и BOOTSZ0, определяют размер области памяти записываемых программ, связан с битом BOOTRST.

BOOTRST, определяет адрес, с которого и будет начато исполнение программы. Если бит установлен т.е. если BOOTRST = 0, то начало программы будет с адреса области загрузчика (Boot Loader).

BODEN – бит, который при выставлении (BODEN=0), будет контролировать за питающим напряжением, на предельно низких напряжениях микроконтроллер может перезапускаться, глючить и так далее. Связан сBODLEVEL.

BODLEVEL. – определяет момент срабатывания детектора уровня питающего напряжения, при снижении напряжения питания ниже уровня, произойдет “перезагрузка” контроллера.

SELFPRGEN – бит, который разрешает (SELFPRGEN=0) или запрещает (SELFPRGEN =1) программе производить запись в память.

OCDEN – данный фьюз разрешает или запрещает чтение программы из памяти контроллера.

Я как то упоминал в своих статьях про то, что в некоторых программах фьюзы выставляются зеркально. Запомните, запрограммированный фьюз=0

, а не запрограммированный=1. В программах Algorithm Builder, UniProf фьюзы выставляются одним образом, а в программах PonyProg, CodeVisionAVR, AVR Studio, SinaProg и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.

Уже давно на просторах Интернета появились так называемые “калькуляторы фьюзов”, это специальные приложения, призванные помочь в конфигурировании микроконтроллера. Приложение интуитивно понятное, думаю разберетесь, в списке контроллеров выбираем нужный нам МК, далее выбираем необходимые функции, а ниже выставляются галочки фьюзов, все очень просто.

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


Думаю что теперь, если у вас спросят что такое фьюзы, и зачем они нужны?, вы сможете объяснить человеку их назначение

Путаница с перемычками (fuses) | avr-troubleshooting-faq

Перемычки или фьюзы (fuses), как известно, в чипах ATtinyXX и ATmegaXX управляют режимами работы, программирования, отладки и т. д. В даташитах эти перемычки подробно описаны, а с помощью программатора из можно записать в чип. Однако часто в интерпретации значений этих перемычек возникает путаница.

Происходит это по нескольким причинам. Во-первых, из-за того, что биты перемычек – “инвертированные”. Т. е., запрограммированный фьюз означает, что в него записан ноль

, и этот факт означает включение функции бита фьюза (эта функция отражается мнемоническим именем фьюза, например CKDIV8 включает встроенный делитель тактовой частоты на 8. Делитель на 8 включается, когда фьюз CKDIV8 запрограммирован, т. е. в его бит записан 0). Во-вторых, разные программаторы предоставляют разный интерфейс к управлению перемычками, к тому же часто неудобный и неочевидный. Приведу для примера интерфейс трех программаторов и одного калькулятора перемычек, отображающих одно и то же значение перемычек чипа ATtiny45 – 0xС1 low  fuse byte, 0xDF high fuse byte, 0xFF ext  fuse byte.

[ChipProg+, версия 4.38.00, производитель Фитон]

Попробуйте здесь догадаться, какие перемычки соответствуют каким байтам фьюзов, что означает галочка (какое состояние фьюза – 0 или 1?..), и какое все-таки шестнадцатеричное значение у байтов фьюзов.

Отсутствует нумерация бит перемычек, подсказка их по предназначению. Имя фьюза DWEN (debugWire enable) ошибочно указано как WDEN. С помощью экспериментов удалось выяснить, что установленная галочка означает запрограммированность бита фьюза (бит имеет при этом значение 0). Если добавить сюда нестандартность оконного интерфейса, отсутствие файла помощи и неприглядную работу команды поддержки, которая не торопится обновлять программу и исправлять ошибки, то становится ясно, что такой программатор лучше не покупать.

[AVR Studio, Version 4.14 Build 589, железо – JTAGICE mkII]

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

[avrdude, консольный программатор]
avrdude -c usbtiny -p t45 -U lfuse:w:0xc1:m -U hfuse:w:0xDF:m -U efuse:w:0xFF:m

[AVR Fuse Calculator ··· Version 0.3.5.1]


Отличный ресурс, позволяющий разобраться в назначении бит и их нумерации, узнать их величину по умолчанию, высчитать шестнадцатеричное значение байт фьюзов. Эта картинка отображает в браузере ссылку http://palmavr.sourceforge.net/cgi-bin/fc.cgi, (новая ссылка http://www.engbedded.com/fusecalc/) где нужно выбрать тип чипа и указать нужные состояния перемычек.

Что такое Фьюзы. Чтение и запись фьюзов Ардуино

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


Фьюзы (от английского Fuse bits) – это конфигурационные биты микроконтроллера, отвечающие за его предварительную настройку. Эти биты расположены в отдельном адресном пространстве, доступном только при программировании. Биты объединяются в конфигурационные байты и их состав зависит от конкретной модели микроконтроллера.

При работе с конфигурационными битами нужно помнить один важный момент: если бит содержит логическую единицу, то это означает что он не запрограммирован, соответственно, запрограммированный конфигурационный бит содержит логический ноль. Такая логика основана на принципе хранения данных в 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 (не запрограммирован)

Таким образом, значения конфигурационных байтов в ATmega328/P по умолчанию: Low: 0x62, High: 0xD9, Extended: 0xFF. Обратите внимание, это значения именно для “чистого” микроконтроллера ATmega328/P , а не для Ардуино. Значения фьюзов для Ардуино можно найти в файле Arduino_dir\hardware\arduino\avr\Boards.txt, где Arduino_dir – это путь к IDE Arduino. Откройте файл в текстовом редакторе и найдите интересующую плату по названию, чуть ниже будет информация о фьюзах:

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:


Выберите модель микроконтроллера и введите значения фьюзов в соответствующие поля внизу страницы в разделе Current settings – введенные значения будут моментально расшифрованы и представлены в удобном виде. И, наоборот, можно изменить конфигурацию битов в разделах Manual fuse bits configuration и Feature configuration и получить значения конфигурационных байтов для записи в микроконтроллер.

Рассмотрим назначение конфигурационных битов более подробно.

CKDIV8

Данный бит отвечает за деление тактовой частоты на 8. Он определяет начальное значение регистра делителя частоты: если бит не запрограммирован, то регистр делителя будет сброшен в “0000”; если бит CKDIV8 запрограммирован, то в регистре будет установлено значение “0011”, что обеспечит деление тактовой частоты на 8. Однако вне зависимости от значения фьюза CKDIV8 значение делителя может быть изменено программой в любой момент.

CKOUT

ATmega328/p позволяет выводить тактовую частоту на цифровой вывод CLKO (digital pin 8 на Ардуино Уно). Для этого конфигурационный бит CKOUT должен быть запрограммирован. Данная функция может быть полезна при использовании таковой частоты микроконтроллера внешними устройствами. При использовании делителя системной частоты на вывод CLKO также будет поступать пониженная частота.


SUT
Конфигурационные биты 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 не запрограммирован, то вывод используется для внешнего сигнала сброса: низкий уровень напряжения на нем приводит к генерации сигнала сброса микроконтроллера. Отключение внешнего сброса может быть оправдано при работе с микроконтроллерами, имеющими небольшое количество выводов, в других случаях лучше не трогать этот фьюз.
DWEN

Бит DWEN разрешает/запрещает работу отладочного интерфейса debugWire.

SPIEN

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


WDTON

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

EESAVE

Данный бит определяет влияние команды “Стирание кристалла” на EEPROM-память: если бит запрограммирован, то при выполнении команды Chip Erase будут очищены Flash, SRAM и Lock-биты, а содержимое EEPROM затронуто не будет. В противном случае содержимое EEPROM также будет стерто.

BOOTSZ

Конфигурационные биты BOOTSZ определяют размер FLASH памяти микроконтроллера, резервируемой для загрузчика. Значения битов BOOTSZ и соответствующие им размеры указаны в таблице ниже. По умолчанию резервируется максимальный размер – 2048 слов.


Начало секции загрузчика Размер секции (слов) Значение BOOTSZ1..0
0x3F00 256 11
0x3E00 512 10
0x3C00 1024 01
0x3800 2048 00

BOOTRST

Определяет положение вектора сброса. Если бит не запрограммирован, то вектор сброса располагается по адресу 0x0000, выполнение программы начнется именно с этого адреса. Если бит BOOTRST запрограммирован, то выполнение программы начнется с адреса начала секции загрузчика.

BODLEVEL

Конфигурационные биты BODLEVEL определяют порог срабатывания схемы BOD (Brown-Out Detection), которая отслеживает уровень напряжения источника питания. Если работа схемы BOD разрешена, то при снижении напряжения питания ниже установленного порога она переводит микроконтроллер в состояние сброса. Когда напряжение питания вновь увеличивается до порогового значения (данный порог чуть выше предыдущего за счет наличия гистерезиса), сигнал сброса снимается и происходит запуск микроконтроллера. Комбинации битов BODLEVEL и соответствующие им пороговые значения приведены в таблице:


Порог срабатывания схемы BOD (В) Значение BODLEVEL2..0
Схема BOD выключена 111
Vcc = 1. 8 110
Vcc = 2.7 101
Vcc = 4.3 100


Теперь можно понять начальное состояние микроконтроллеров ATmega328/P, в каком они поставляются с завода: микроконтроллер сконфигурирован на работу с внутренним RC генератором на 8МГц, при этом прошитый бит CKDIV8 обеспечивает деление частоты генератора на 8; внешний сброс (по низкому уровню на выводе Reset) не запрещен; разрешено программирование по интерфейсу SPI; для загрузчика отведена область памяти 2048 слов; стартовый адрес программы 0x0000; схема контроля питания отключена.

В Ардуино Уно фьюзы микроконтроллера изменены таким образом, чтобы он был настроен на работу с экономичным кварцевым генератором без делителя частоты; для загрузчика отводится 256 слов; прошитый бит BOOTRST назначает стартовым адресом адрес начала секции загрузчика; порог срабатывания схемы BOD составляет 2.7В.

Разобравшись с назначением фьюзов можно перейти от теории к практике: попробуем прочитать и записать фьюзы Ардуино.

Чтение фьюзов Ардуино

В предыдущей публикации я рассказал о том, как превратить Ардуино в ISP программатор. И сейчас он нам пригодится для работы с фьюзами. Поэтому готовим программатор и подключаем к нему плату, из которой будем считывать фьюзы.

В среде разработки Ардуино нет инструментов для чтения/записи фьюзов. Разве что процедура записи загрузчика включает в себя установку фьюзов, значения которых берутся из упомянутого ранее файла Boards.txt. Но в состав IDE входит программа Avrdude, предназначенная для прошивки AVR микроконтроллеров, ей-то мы и воспользуемся. Avrdude – консольная программа, работать мы с ней будем через командную строку, поэтому запускаем проводник и переходим в папку с программой. У меня IDE Arduino расположена на диске D и путь к Avrdude выглядит следующим образом: D:\Arduino\arduino-1.6.12\hardware\tools\avr\bin.


Находясь в этой папке нужно поместить курсор в адресную строку, удалить из нее путь, ввести cmd и нажать Enter. Откроется окно интерпретатора командной строки:
После этого подключаем программатор к компьютеру и вводим в командной строке следующую команду:

avrdude -C . ./etc/avrdude.conf -c arduino -p m328p -P com26 -b 19200 -U lfuse:r:-:h

Перед выполнением команды проверьте и скорректируйте ее параметры:

  • -c <programmer> – в качестве <programmer> указываем псевдоним используемого программатора, в нашем случае arduino.
  • -p <partno> – указывает тип микроконтроллера, m328p – это ATmega328p.
  • -P <port> – указывает используемый программатором порт.
  • -b <baudrate> – позволяет переопределить указанную для программатора в конфигурации программы скорость подключения по интерфейсу RS-232.
  • -U <memtype>:r|w|v:<filename>[:format] – комплексная опция для указания производимой с памятью операции (чтение. запись, проверка). -U lfuse:r:-:h означает, что мы хотим прочитать содержимое младшего байта конфигурации, считанное значение выводим на экран в шестнадцатеричном виде.
Ниже приведен мой результат выполнения данной команды:
Как видно из скриншота, младший конфигурационный байт моей Arduino Uno содержит значение 0xFF. Кроме запрошенного значения avrdude показал также значения всех трех конфигурационных байт. Это произошло потому, что мы не отключили safemode, это можно сделать, добавив в команду параметр -u. Остальные два конфигурационных байта также соответствуют значениям, приведенным в файле Boards.txt. Если у кого-то возникнут сомнения по поводу соответствия дополнительного конфигурационного байта, то загляните в его описание выше – биты с 3 по 7 не используются и содержат “1”, поэтому вместо 0x05 мы считываем значение 0xFD.

Запись фьюзов Ардуино

Полагаю, из приведенного выше описания фьюзов должно быть понятно, что при работе с ними нужно быть очень осторожным. В противном случае вы рискуете “залочить”  микроконтроллер, т.е. привести в такое состояние, когда его уже нельзя будет перепрограммировать (без дополнительного оборудования). Поэтому будьте внимательны, изменяя фьюзы микроконтроллера.

Давайте в качестве примера попробуем запретить работу схемы BOD в Ардуино Уно. Обратившись к приведенному выше описанию конфигурационных байтов или к онлайн калькулятору Engbedded Atmel AVR® Fuse Calculator, мы видим, что за работу схемы BOD в ATmega328/P отвечают фьюзы BODLEVEL и для ее запрета нужно записать в дополнительный конфигурационный байт значение 0xFF. Это можно сделать следующей командой avrdude:

avrdude -C ../etc/avrdude.conf -c arduino -p m328p -P com26 -b 19200 -U efuse:w:0xFF:m


Из скриншота видно, что avrdude сначала выполняет запись байта efuse, после чего производит контрольное считывание и сообщает об успешном выполнении операции.

В принципе нет ничего сложного в работе с конфигурационными битами. Главное быть внимательным при их изменении, чтобы не залочить микроконтроллер.

Как установить загрузчик ATtiny с виртуальным USB

Добавлено в избранное Любимый 12

Замена предохранителей

Большинство микроконтроллеров поставляются с рядом битов конфигурации, которые находятся в энергонезависимой памяти за пределами обычного программного пространства. В микросхемах AVR, таких как наш ATtiny84, эти биты известны как «предохранители». По умолчанию предохранители на новом ATtiny84 установлены на:

.
  • Разделите часы на 8
  • Отключено обнаружение потемнения
  • Без самопрограммирования

Хотим поменять предохранители так, чтобы у нас было:

  • Без тактового делителя
  • Обнаружение пониженного напряжения на 2. 7 В (необязательно, но полезно при работе от батареи)
  • Самопрограммирование

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

Горящие предохранители с AVRDUDE

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

  • Младший байт предохранителя: 0xE2
  • Старший байт предохранителя: 0xDD
  • Байт расширенного предохранителя: 0xFE

Для этого воспользуемся AVRDUDE.Еще раз перейдите в каталог с AVRDUDE в Arduino и выполните следующую команду:

  avrdude -C ../etc/avrdude.conf -c arduino -p t84 -P <Последовательный порт> -b 19200 -U lfuse: w: 0xe2: m -U hfuse: w: 0xdd: m -U efuse: ш: 0xfe: м
  

Убедитесь, что на предохранителях написано следующее:

  avrdude -C . ./etc/avrdude.conf -c arduino -p t84 -P <Последовательный порт> -b 19200 -U lfuse: r: -: i
  

Пока вы указываете AVRDUDE специально прочитать предохранитель, он распечатает состояние всех предохранителей.Внизу распечатки вы должны увидеть следующее:

  avrdude: safemode: Предохранители исправны (E: FE, H: DD, L: E2)
  

← Предыдущая страница
Установить Micronucleus

Установка битов предохранителя АРН

Все мы знаем, как работает микросхема AVR ATmega32A. Во всех наших предыдущих уроках мы использовали внутренние часы с частотой 1 МГц для управления микросхемой AVR. Это настройка часов по умолчанию, с которой чип ATmega поставляется с завода.В этом уроке мы научимся настраивать биты предохранителя AVR для использования разной тактовой частоты для различных приложений. Это важно там, где нам требуется очень точное время, например, для реализации последовательного UART или USB-соединения. У нас есть предохранители в микроконтроллерах AVR. Мы можем использовать эти предохранительные биты для синхронизации микроконтроллера с желаемой частотой.

Давайте сначала разберемся с основной концепцией и идеями, связанными с настройкой источника синхронизации (внутреннего или внешнего). Я настоятельно рекомендую открыть техническое описание ATmega32A (или любого вашего микроконтроллера) на время этого руководства и вкратце пролистать главу о системных часах и параметрах часов (стр. 25). Щелкните здесь, чтобы просмотреть техническое описание ATmega32A.

Что такое биты предохранителя AVR?

Как мы все знаем, микроконтроллер AVR обычно имеет три области памяти: FLASH, которая предназначена для программного кода, SRAM для переменной времени выполнения и EEPROM, которая может использоваться кодом пользователя для хранения данных, которые должны быть сохранены, когда MCU выключен. Теперь замки / предохранители вместе образуют четвертую область памяти, доступную для программирования. Он содержит несколько байтов для предохранителей: младший байт, старший байт.

Прежде чем мы начнем анализировать предохранители и запорные биты.Мы должны помнить, что бит, установленный в «0», означает запрограммированный, а бит, установленный в «1», означает незапрограммированный. Это немного сложно и очень важно отметить, прежде чем мы продолжим.

В этом уроке мы хотим показать, как вы можете синхронизировать свой микроконтроллер с разной частотой (установка битов предохранителя avr). Обычно есть только два байта предохранителя: старший и младший. Мы больше сосредоточимся на его использовании. Практический пример в этом руководстве позволит вам полностью понять концепцию, и вы будете готовы к дальнейшим экспериментам самостоятельно.Мы рассмотрим биты замков в следующем уроке. Расположение конкретных битов предохранителей различается для всех байтов предохранителей в зависимости от используемого чипа AVR. Поэтому обязательно запишите их, прежде чем устанавливать. В качестве примера мы возьмем микроконтроллер ATmega32A, и вот для него все байты предохранителей.

Младший байт предохранителя – AVR Высокий байт предохранителя – AVR

Значение по умолчанию для бита предохранителя ATmega32 / 32A – 0x99E1, т.е. высокий предохранитель: 0x99 и низкий предохранитель: 0xE1, при этом частота настройки по умолчанию установлена ​​на 1 МГц, внутренний RC-генератор, время запуска: 6CK + 64 мс:

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

Описание каждого бита предохранителя:

BODLEVEL: Уровень срабатывания BOD (обнаружение пониженного напряжения) может быть выбран с помощью этого бита предохранителя. Когда запрограммирован (0) уровень запуска составляет 4 В, а когда не запрограммирован (1) уровень запуска составляет 2,7 В

BODEN: ATmega32A имеет встроенную схему обнаружения пониженного напряжения (BOD) для контроля уровня VCC во время работы путем сравнения его с фиксированным уровнем запуска. Когда BOD включен (запрограммирован BODEN), и VCC уменьшается до значения ниже уровня триггера, немедленно активируется сброс пониженного напряжения.Когда VCC превышает уровень запуска, микроконтроллер снова запускается.

SUT1: 0: Эти биты выбирают время запуска. Значение по умолчанию SUT1: 0 приводит к максимальному времени запуска (6CK и дополнительная задержка 65 мс после RESET [Ссылка Таблица: 8-9, Страница №: 30].

CLKSEL [3-0]: Эти биты используются для выбора различных доступных опций синхронизации. Значение по умолчанию для CLKSEL [3..0] равно 0001, т.е. внутренний RC-генератор, работающий на частоте 1 МГц. Если вы хотите добавить внешний кварцевый резонатор, вам необходимо изменить значение в соответствии с [Таблица 8-1, Страница №: 26].Некоторые общие значения битов предохранителей приведены в конце этой статьи.

OCDEN: Этот вывод используется для включения или отключения отладки на кристалле. Это позволяет эмулировать микроконтроллер в реальном времени при работе в целевой системе. По умолчанию он отключен, поскольку «1» означает, что он не запрограммирован.

JTAGEN: Для отладки встроены интерфейсы JTAG. Он включен в новом микроконтроллере. Вот почему некоторые новички говорят: «PORTC ATmega32 не работает должным образом», отключите его, если вы не используете JTAG, установив бит JTAGEN 1 (высокий).

SPIEN: Значение 0 (запрограммировано) означает, что последовательное программирование ATmega32 / 32A включено. Не меняйте это, если у вас нет параллельного программиста! Поскольку однажды отключенный ATmega32A не может быть запрограммирован с помощью последовательного программатора.

CKOPT: Предохранитель CKOPT выбирает между двумя различными режимами усилителя генератора. Когда CKOPT запрограммирован, выходной сигнал генератора будет колебаться с полным размахом на выходе. Когда не запрограммирован, генератор имеет меньший размах выходного сигнала.Если вы используете внешний генератор, лучше запрограммировать CKOPT, т.е. CKOPT = 0

EESAVE: Если запрограммировано (0), это будет сохранять EEPROM от стирания во время стирания чипа, иначе EEPROM также будет стерто с флэш-памятью.

BOOTSZ0 и BOOTSZ1: Эти биты используются для установки размера загрузчика

BOOTRST: Если бит BOOTRST запрограммирован (0), устройство перейдет на первый адресный блок загрузчика.

Пример: установка битов предохранителя АРН

На этом этапе вы готовы синхронизировать свой микроконтроллер с разными частотами.В этом примере мы будем генерировать звуковой сигнал с помощью пьезодиска. И влияние будет отображаться в виде изменения звуковых сигналов. Рассчитаем биты предохранителей для разной тактовой частоты. Вот замечательная программа для расчета предохранителей для вас AVR Fuse Calculator

Случай 1: Внутренняя частота 1 МГц (по умолчанию), Низкий предохранитель: 0xE1 Высокий предохранитель: 0x99

Случай 2: Внутренняя частота 8 МГц, Низкий Предохранитель: 0xE4 Высокий Предохранитель: 0x99

Корпус 3: Внешний кристалл 16 МГц, Низкий предохранитель: 0xFF Высокий предохранитель: 0x99

Мы надеемся, что это руководство поможет вам понять предохранители AVR.Мы рекомендуем вам поиграться с микросхемой AVR, чтобы сжечь предохранители и увидеть удар. Не бойтесь попробовать самостоятельно и не стесняйтесь оставлять вопросы / комментарии ниже.

Вот видео, которое представляет собой пошаговое руководство. Также влияние было продемонстрировано в живой демонстрации: Установка битов предохранителя AVR

Скачать Калькулятор предохранителей AVR для ПК Windows 10,8,7 – wavetechglobal.com

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

Простой онлайн-калькулятор – это инструмент командной строки, который позволяет пользователям рассчитать предохранитель для своего AVR.

Вы ищете способ получить калькулятор AVR Fuse для вашего компьютера с Windows 10/8/7? Тогда вы попали в нужное место. Продолжайте читать, чтобы узнать, как загрузить и установить AVR Fuse Calculator для ПК, одного из лучших доступных приложений Tools.

Большинство приложений, доступных в Google Play Store или Apple App Store, разработаны специально для мобильных устройств.Но знаете ли вы, что даже если официальная версия для платформы ПК недоступна, вы все равно можете использовать любое из ваших любимых приложений для Android или iOS на своем ноутбуке? Да, есть несколько простых методов, которые вы можете использовать, чтобы установить приложения Android на компьютер с Windows и использовать их так же, как на телефоне Android.

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

Технические характеристики калькулятора предохранителей АРН для ПК

Имя Калькулятор предохранителей АРН
Категория Инструменты
Размер файла 2,55 МБ
Установки 500+
Разработано CruxLab
Пакет приложений xyz.cruxlab.avrfusecalculator

AVR Fuse Calculator – самое популярное приложение в категории «Инструменты» в Google Play.Имеет множество положительных отзывов и оценок. AVR Fuse Calculator для Windows теперь имеет более 500 установок и средний совокупный рейтинг пользователей 5.0.

В настоящее время в магазине Google Play нет калькулятора предохранителей AVR. Если вы еще этого не сделали, перейдите на один из сторонних сайтов загрузки APK и загрузите AVR Fuse Calculator. Его стоит загрузить на свой смартфон.

Скачать калькулятор предохранителей AVR для ноутбуков с Windows 10/8/7:

В настоящее время большинство приложений создаются только для мобильных устройств.PUBG, Subway Surfers, Snapseed, Beauty Plus и другие игры и приложения доступны исключительно для Android и iOS. Однако эмуляторы Android позволяют запускать все эти приложения на ПК.

Несмотря на то, что официальной версии AVR Fuse Calculator для ПК не существует, вы все равно можете использовать его с помощью эмуляторов. В этом посте мы покажем вам, как использовать калькулятор предохранителей AVR на ПК с помощью двух распространенных эмуляторов Android.

Скачать Калькулятор предохранителей AVR для Windows 10/8/7 – Метод 1:

Bluestacks – популярный эмулятор Android, который позволяет запускать приложения Android на ПК с Windows.Приложение Bluestacks также доступно для Mac OS. При таком подходе мы загрузим и установим калькулятор предохранителей AVR для ПК с Windows 10/8/7 Laptop с помощью Bluestacks. Давайте начнем с наших пошаговых инструкций по установке.

  • Шаг 1. Если вы еще этого не сделали, загрузите программу Bluestacks по ссылке ниже – Bluestacks для ПК можно скачать здесь.
  • Шаг 2: Процесс установки несложный и легкий. После успешной установки откройте эмулятор Bluestacks.
  • Шаг 3. Сначала загрузка программного обеспечения Bluestacks может занять некоторое время. Вы должны иметь возможность просматривать главный экран Bluestacks после его запуска.
  • Шаг 4: Bluestacks поставляется с предустановленным Google Play Store. Найдите Playstore на главном экране и дважды щелкните его, чтобы получить к нему доступ.
  • Шаг 5: Теперь перейдите в Магазин программ и найдите приложение, которое хотите установить на свой компьютер. В нашем случае мы будем искать AVR Fuse Calculator для загрузки и установки на наш компьютер.
  • Шаг 6: Калькулятор предохранителей AVR будет установлен на Bluestacks сразу после того, как вы нажмете кнопку «Установить». Программу можно найти в списке установленных приложений Bluestacks.

Просто дважды щелкните значок приложения AVR Fuse Calculator в bluestacks, чтобы начать использовать его на своем ноутбуке. Вы можете использовать приложение так же, как на телефоне Android или iOS.

Поскольку программа недоступна в Google Play, вам необходимо загрузить APK-файл AVR Fuse Calculator из стороннего источника APK, а затем использовать параметр «Установить файл APK» в Bluestacks в нижней части экрана.Вам не нужно скачивать игру из магазина Google Play. Однако рекомендуется использовать обычный способ установки любых приложений для Android.

Последняя версия

Bluestacks обладает множеством впечатляющих функций. Смартфон Samsung Galaxy J7 на самом деле в 6 раз быстрее, чем Bluestacks4. Лучший способ установить калькулятор предохранителей AVR на ПК – использовать Bluestacks. Для Bluestacks требуется ПК с минимальными настройками. В противном случае у вас могут возникнуть проблемы с загрузкой высококлассных игр, таких как PUBG.

Скачать Калькулятор предохранителей AVR для Windows 10/8/7 – Метод 2:

MEmu play – еще один известный эмулятор Android, который в последнее время привлекает большое внимание.Он очень адаптируемый, быстрый и специально создан для игр. Теперь мы узнаем, как использовать MemuPlay для получения калькулятора предохранителей AVR для ноутбуков с Windows 10, 8 или 7.

  • Шаг 1. Загрузите MemuPlay и установите его на свой компьютер. На веб-сайте Memu Play есть ссылка для скачивания. Скачайте программу с официального сайта.
  • Шаг 2. После установки эмулятора запустите его и найдите значок приложения Google Playstore на главном экране Memuplay. Чтобы открыть, просто дважды нажмите на него.
  • Шаг 3. Перейдите в магазин Google Play и найдите приложение «Калькулятор предохранителей AVR». Найдите официальное приложение разработчика CruxLab и нажмите кнопку «Установить».
  • Шаг 4: Калькулятор предохранителя AVR появится на главном экране MEmu Play после успешной установки.

MemuPlay – простое и понятное приложение. По сравнению с Bluestacks он очень легкий. Вы можете играть в высококлассные игры, такие как PUBG, Mini Militia, Temple Run и другие, поскольку они предназначены для игр.

Заключение: Калькулятор предохранителей АРН для ПК

Благодаря простому, но эффективному интерфейсу калькулятор предохранителей AVR приобрел огромную популярность. Мы показали два наиболее эффективных способа установить калькулятор предохранителя AVR на ваш компьютер или ноутбук. Оба вышеупомянутых эмулятора широко используются для запуска приложений на компьютере. Вы можете загрузить калькулятор предохранителей AVR для ПК с Windows 10 любым из этих способов.

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

Предохранители AVR

– Документация UTAT Space Systems Documentation 1.0

Микроконтроллер содержит предохранители (биты предохранителей), которые управляют такими настройками, как тактовая частота.

Мы используем одинаковые предохранители для всех микроконтроллеров, и вы никогда не должны менять их (кроме случаев, когда MCU устанавливается на новую печатную плату в первый раз).

Вы можете получить помощь с расчетом конфигураций битов предохранителей и их значения на http://www.engbedded.com/fusecalc/.

Наши настройки битов предохранителей

Заводские биты предохранителей на 64M1: 62 6F FF (в шестнадцатеричной системе).

Мы всегда используем биты предохранителей F9 D7 FF (шестигранные).

Ключевые настройки:

  • BODLEVEL2 = 0, BODLEVEL1 = 0, BODLEVEL0 = 0 – обнаружение пониженного напряжения при 2,6 В – см. Техническое описание на стр. 37, 62, 67-69, 366, 377-378, 399, 411 – требуется это для защиты флэш-памяти / EEPROM, хотя он потребляет некоторую мощность для цепи BOD

Установка битов предохранителя

Если вам нужно установить биты предохранителя, cd в каталог lib-common и запустите:

$ avrdude -U efuse: w: 0xf9: m -U hfuse: w: 0xd7: m -U lfuse: w: 0xff: m -c stk500 -C avrdude.conf -p m64m1 -P <порт>

Вы ​​должны заменить на порт, к которому подключен программист (который вы обычно используете для загрузки программ), например /dev/tty.usbmodem00208212 (на Mac помните, что номер порта программирования обычно заканчивается в 2) или COM3 (в Windows).

ПРИМЕЧАНИЕ. Вы должны загрузить приложение Pololu USB AVR Programmer v2 Configuration Utility на свой портативный компьютер. Вы должны проверить частоту вашего программатора перед запуском команды настройки предохранителя.Обычно мы устанавливаем частоту интернет-провайдера на 1714 кГц, максимально возможное значение, которое поддерживает наш программист, чтобы программы загружались быстрее. Однако это не сработает для нового микроконтроллера, потому что по умолчанию он использует гораздо более медленные часы. Обязательно измените частоту ISP на 114 кГц (и нажмите «Применить настройки») перед запуском команды fuse. После настройки предохранителей снова измените частоту интернет-провайдера на 1714 кГц (и нажмите «Применить настройки»).

Причина, по которой мы используем -C avrdude.conf , потому что файл avrdude.conf по умолчанию в установке avrdude не поддерживает 64M1, поэтому мы создали модифицированный файл avrdude.conf , поместили его в репозиторий lib-common и сказали avrdude использовать вместо этого файл конфигурации.

Если вы используете 32M1 , замените m64m1 на m32m1 .

Предохранитель

avr – osamuaoki / avrdude-friend Wiki

Вот памятки по настройкам предохранителя АРН.

EEPROM (предохранитель)

Калькулятор предохранителей:

Система ATmega328P

ТИП С m328p А 2000 A Uno
MCU м 328P м 328P м 328P
———— ——- ——- ——-
LFUSE HEX 62 FF FF
L7: CKDIV8 Х
L6: CKOUT
L5: SUT1
L4: SUT0 Х
L3: CKSEL3 Х
L2: CKSEL2 Х
L1: CKSEL1
L0: CKSEL0 Х
СК Внутр. / 8M Xtl / 16M Xtl / 16M
———— ——- ——- ——-
HFUSE HEX D9 DA DE
H7: RSTDISBL
H7: OCDEN
H6: DWEN
H6: JTAGEN
H5: SPIEN Х Х Х
h5: WDTON
h4: EESAVE
h3: BOOTSZ1 Х Х
h2: BOOTSZ0 Х
РАЗМЕР БОКА 4K 2K 512
ЗАГРУЗИТЕЛЬ АДРЕС 3800 3C00 3F00
H0: BOOTRST Х Х
———— ——- ——- ——-
EFUSE HEX FF FD FD
E7:
E6:
E5:
E4:
E3: HWBE *
E2: BODLVL2
E1: BODLVL1 Х Х
E0: BODLVL0
BOD Volt НЕТ 2.7В 2,7 В
———— ——- ——- ——-
ШЕСТИГРАННАЯ РАЗБЛОКИРОВКА 3F 3F
ЗАМОК ШЕСТИГРАННЫЙ 0F 0F
HEX VID
ШЕСТИГРАННЫЙ ДАТЧИК

Система ATmega32u4

ТИП С m32u4 A Lenld A Micro ПОДРОСТКОВ Т комп. т LUFA Т наноБ
MCU m32u4 m32u4 m32u4 m32u4 m32u4 m32u4 m32u4
———— ——- ——- ——- ——- ——- ——- ——-
LFUSE HEX 5E FF FF 5F 5F 5F 5F
L7: CKDIV8 Х Х Х Х Х
L6: CKOUT
L5: SUT1 Х Х Х Х Х
L4: SUT0
L3: CKSEL3
L2: CKSEL2
L1: CKSEL1
L0: CKSEL0 Х
СК Внешний / 8M Xtl / 16M Xtl / 16M Xtl / 16M Xtl / 16M Xtl / 16M Xtl / 16M
———— ——- ——- ——- ——- ——- ——- ——-
HFUSE HEX 99 D8 D8 DF D9 D9 DF
H7: RSTDISBL
H7: OCDEN
H6: DWEN
H6: JTAGEN Х
H5: SPIEN Х Х Х Х Х Х Х
h5: WDTON
h4: EESAVE
h3: BOOTSZ1 Х Х Х Х Х
h2: BOOTSZ0 Х Х Х Х Х
РАЗМЕР БОКА 4K 4K 4K 512 4K 4K 512
ЗАГРУЗИТЕЛЬ АДРЕС 3800 3800 3800 3F00 3800 3800 3F00
H0: BOOTRST Х Х
———— ——- ——- ——- ——- ——- ——- ——-
EFUSE HEX F3 CB CB F4 F5 F5 F5
E7:
E6:
E5:
E4:
E3: HWBE * Х Х Х Х Х
E2: BODLVL2 Х Х Х
E1: BODLVL1 Х Х Х Х
E0: BODLVL0 Х
BOD Volt 2.6В 2,6 В 2,6 В 2,4 В 2,2 В 2,2 В 2,2 В
———— ——- ——- ——- ——- ——- ——- ——-
ШЕСТИГРАННАЯ РАЗБЛОКИРОВКА 3F 3F 3F 3F
ЗАМОК ШЕСТИГРАННЫЙ 2F 2F 0F? (0F) (0F)
HEX VID 2341 2341
ШЕСТИГРАННЫЙ ДАТЧИК 8036 8037

LOCK МОЖЕТ быть внесен в список с C0:

  • 0F + C0 = CF – APPL = 1 no_SPM no_LPM / BOOT = 3 LPM SPM / MODE 1 = no_lock
  • 1F + C0 = DF – APPL = 1 no_SPM no_LPM / BOOT = 4 LPM no_SPM / MODE 1 = no_lock
  • 2F + C0 = EF – APPL = 1 no_SPM no_LPM / BOOT = 4 no_LPM SPM / MODE 1 = no_lock
  • 3F + C0 = FF – APPL = 1 no_SPM no_LPM / BOOT = 4 no_LPM no_SPM / MODE 1 = no_lock (БЕСПЛАТНО!)

В указанном выше:

  • C m328p: голый чип ATmega328P от ATMEL
  • A 2000: Атдуино Дуэмиланове
  • UNO: Arduino Uno
  • C m32u4: голый чип ATmega32u4 от ATMEL
  • A Lenld: Ардуино Леоналду
  • Микро: Arduino Micro
  • TEENSY: PJRC Teensy 2.0 (Подлинный)
  • T Comp .: Generic Teensy 2.0-совместимая плата как есть (без загрузчика)
  • T LUFA: Generic Teensy 2.0-совместимая плата с загрузчиком LUFA HID
  • T nanoB: Generic Teensy 2.0 совместимая плата с загрузчиком nanoBoot HID версия nanoBoot 512B

Сокращения:

  • RSTDISBL: отключение внешнего сброса

  • OCDEN: ON CHIP DEBUG включить

  • DWEN: включение отладочной сети

  • JTAGEN: JTAG включен

  • HWEN: включение аппаратного сброса (работает, если вывод ~ HWEN (33 для PE2) также L)

    • У всех Teensy / pro micro / micro контакт 33 заземлен.
  • BOOTRST: Strat Bootlader при СБРОСЕ

  • SUT (1..0) CKSEL (3..0): Часы

    • м324п
      • 10 0010 6CLK + 65 мс для внутр. RC
      • 11 1111 16CLK + 65 мс для доб. Xtal 8 МГц –
      • 01 1111 16CLK + 0 мс для доб. Xtal 8 МГц –
    • m32u4
      • 01 1110 258CLK + 65 мс для доб. Xtal 8 МГц –
      • 11 1111 16CLK + 65 мс для доб. Xtal 8 МГц –
      • 01 1111 16CLK + 0 мс для доб.Xtal 8 МГц –

ПРЕДУПРЕЖДЕНИЯ

  • m324p не должен включать DWEN для нормального использования (у меня только avrisp2 но не avr-ice3!)
  • m32u4 не должен включать JTAGEN для нормального использования (у меня только avrisp2 но не avr-ice3!)
  • НИКОГДА НЕ ВЫКЛЮЧАЙТЕ SPIEN !!!

Объем памяти

Загрузчик расположен в нижней части флеш-памяти.

Ключевые цифры

  512B 200H
1024B 400H
2048B 800H
16 КБ - 512 Б 3C00H
16KiB -1024B 3A00H
16 КиБ -2048B 3800H
16 КБ 4000H
32 КБ - 512 ГБ 7C00H
32 КиБ -1024B 7A00H
32 КиБ -2048B 7800H
32 КБ 8000H
64 КБ 10000 ч
128 КБ 20000H
  

1 слово = 2 байта

Размер необходимо проверить с помощью файла bin.

Программирование бит предохранителей AVR – настройки генератора

Думаю, многие из вас были сбиты с толку при программировании предохранителей AVR. Я получаю много вопросов новичков, например: «Я программировал Atmega8, но он не работает». Тогда мой стандартный ответ: «Вы трогали биты конфигурации?», И если да, то я почти на 90% уверен, что он сделал это неправильно. Большинство из них ошибочно понимают, что запрограммированный бит предохранителя в конфигурации следует оставлять неотмеченным и наоборот. Давайте посмотрим на широко используемое программное обеспечение для программирования – PonyProg.

Первое, что вы делаете перед программированием микросхемы, это установка битов конфигурации (Atmega8 на картинке):

В первую очередь следует обратить внимание на источники тактовой частоты. Источниками синхронизации Atmega8 управляют четыре бита: CKSEL0, CKSEL1, CKSEL2, CKSEL3.

Как вы, возможно, уже знаете, Atmega8 может иметь 4 разных источника синхронизации:

  • Внешний кристалл или резонатор;
  • Внешний низкочастотный кристалл;
  • Внешний RC-генератор
  • или откалиброванный внутренний RC-генератор;
  • Источник внешнего тактового сигнала.

В таблице вы видите соответствующие настройки CKSEL0..3

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

Внешний кристалл или резонатор

Внешний кристалл или резонатор

может быть установлен от 1010 до 1111 (обратите внимание, что запрограммирован «0», а «1» означает незапрограммированный). Эти диапазоны оставлены для выбора времени запуска микроконтроллера для стабилизации производительности генератора перед первой командой.

Если вы подключаете внешний кварцевый генератор или резонатор к XTAL1 и XTAL2

Появляется еще один бит предохранителя CKOPT.Этот бит выбирает два разных режима усилителя генератора. Если CKOPT запрограммирован (не отмечен), тогда генератор колеблется с полным выходом от Rail-to-Rail. Это удобно, когда среда зашумлена или использует XTAL2 для управления другим микроконтроллером или буфером. Но с другой стороны, это требует большей мощности. Если CKOPT не запрограммирован (отмечен галочкой), то раскачка меньше, и энергопотребление снижается. Обычно, если резонатор имеет частоту до 8 МГц, оставьте CKOPT (отмечено = не запрограммировано) и запрограммировано (не отмечено флажком) выше 8 МГц.В таблице вы видите выбираемые режимы кварцевого генератора:

битов CKSEL0, SUT0 и SUT1, в этом случае, используются для выбора времени запуска микроконтроллера – сколько тактов нужно ждать перед выполнением первой команды. Эти настройки необходимы для обеспечения стабильности керамических резонаторов и кристаллов.

Примечание 1. Это быстрое время запуска – не подходит для кристаллов;

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

Итак, если вы хотите стабильный запуск системы, лучше оставить CKSEL0, SUT0 и SUT1 запрограммированными (не отмеченными), что означает время запуска около 65 мс.

Генератор низкочастотный

Для CKSEL0, CKSEL1, CKSEL2, CKSEL3 установлен только один бит – 1001 (не отмечено, отмечено, отмечено, не отмечено) для низкочастотного генератора. Низкочастотный кристалл – это типичный тактовый кристалл с частотой 32768 кГц.Основными опциями для этого режима являются установка времени запуска кристалла с помощью предохранителей SUT0 и SUT1.

Примечание 1. Менее стабильный запуск.

Внешний RC-генератор

Частота в этом режиме рассчитывается по формуле f = 1 / (3RC), в то время как C должно быть не менее 22 пФ. Если CKOPT запрограммирован (не отмечен), тогда включен внутренний конденсатор 36 пФ между XTAL1 и GND, тогда нужен только резистор.

..

И снова таблица режимов работы:

И время запуска:

Примечание 1. не используйте эту настройку, когда частота близка к максимальной.

Калиброванный внутренний RC-генератор

Калиброванный внутренний RC-генератор

используется довольно часто, потому что нет необходимости в каких-либо внешних компонентах, и он может обеспечить фиксированные тактовые частоты 1, 2, 4 и 8 МГц. Этот режим выбирается путем программирования битов предохранителей в диапазоне от 0001 до 0100. Оставьте бит CKOPT незапрограммированным для этого режима (отмечен).

Режимы работы:

Примечание 1. по умолчанию этот параметр выбран для всех Atmega8 и таблицы параметров запуска:

Примечание 1. по умолчанию эта опция выбрана для всех Atmega8

О калибровке внутреннего RC-генератора читайте в техническом описании устройства.

Внешние часы

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

И снова есть таблица запуска внешнего источника синхронизации, управляемая SUT0 и SUT1:

Если вы снимите флажок CKOPT, тогда вы включите конденсатор между XTAL1 и GND.

Примеры правильного программирования источников синхронизации Atmega8

  • Кристалл 8 МГц с медленно нарастающей мощностью:
  • Керамический резонатор 2 МГц с быстрым увеличением мощности:
  • Стабильная частота резонатора 32768 кГц при запуске:
  • Внешний RC-генератор 4 МГц с внутренним C, позволяющим быстро нарастать мощность:
  • Если вы хотите получить максимальную отдачу от вашего Atmega: выберите быстрорастущую мощность 16 МГц:

Вы можете найти всю эту информацию в таблицах данных.Но как всегда – люди забывают их читать.

Если есть какие-либо вопросы или проблемы, не стесняйтесь спрашивать.

Настройки предохранителя Arduino / ATmega 328P

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

Вот некоторые вещи, которые можно сделать, изменив номинал предохранителей:

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

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

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

Заявление об отказе от ответственности, я относительно новичок в программировании предохранителей, и это заметки, которые я написал, чтобы помочь мне запомнить вещи. Информация основана на техническом описании чипа ATmega, результатах поиска в Интернете и вопросах, которые я задавал на форумах (особенно на форуме Arduino).

Всего 3 байта:

    предохранитель младшего байта
  • ,
  • Предохранитель
  • старший байт,
  • предохранитель удлиненный

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

Каждый байт составляет 8 бит, и каждый бит представляет собой отдельную настройку или флаг. Когда мы говорим о настройке / не настройке, запрограммированных / не запрограммированных предохранителях, мы фактически используем двоичные данные. 1 означает, что не установлен / не запрограммирован, а 0 (ноль) означает, что установлен / запрограммирован.

При программировании предохранителей вы можете использовать двоичное представление или, чаще, шестнадцатеричное представление. Для 8 бит (1 байт) мы можем использовать B11111111 или 0xFF. Оба имеют одинаковую ценность.

Примечание. Для всех предохранителей значение 1 означает, что они не установлены, а значение 0 (ноль) означает, что они установлены.

ATmega 328P 28 Схема PDIP

Младшие предохранители

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

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

CKSEL (источники тактовой частоты / выбор тактовой частоты)

Тактовый сигнал может поступать от внутреннего генератора, внешнего кварцевого резонатора / резонатора или внешнего сигнала.Arduinos обычно использует внешний кристалл с частотой 16 МГц.


Вот кристалл 16 МГц, используемый на макетной плате Arduino, подключенной к XTAL1 и XTAL2. Необходимо указать микросхеме ATmega использовать внешний кристалл, и это делается путем установки битов CKSEL. Распространенной ошибкой является то, что кристалл правильно подключен в схему, но забывают указать микросхеме, чтобы он его использовал.

Различные варианты для CKSEL:

Arduinos обычно использует кварцевый генератор малой мощности.
ATmega имеет 2 встроенных генератора, RC-генератор 128 кГц и откалиброванный RC-генератор.
Опция внешних часов позволяет микросхеме использовать внешний тактовый сигнал прямоугольной формы. Это используется, когда у вас есть схема с собственными часами, с которыми вы хотите синхронизировать ATmega, или если вы хотите использовать отдельную микросхему часов. Внешний тактовый сигнал должен быть подключен к контакту CLOCK-IN

.

Опции кварцевого генератора


CKSEL3 = 1 CKSEL2 = 1 CKSEL1 = 1 CKSEL0 = 1 выбирает кристалл в любом месте от 8 МГц до 16 МГц и является нормальной настройкой для Arduinos.
Если вы хотите использовать более медленный кристалл, например, 6 МГц, вы должны использовать CKSEL3 = 1 CKSEL2 = 1 CKSEL1 = 0 CKSEL0 = 1 (3.От 0 до 8,0).

Чтобы использовать внутренний RC-генератор на частоте 8 МГц, настройки: CKSEL3 = 0 CKSEL2 = 0 CKSEL1 = 1 CKSEL0 = 0

SUT1 / SUT0 (время запуска)

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

CKSEL0 используется вместе с SUT1 и SUT0 для установки времени задержки запуска.


BOD – это обнаружение перебоев в работе и обсуждается позже.

Arduino использует максимальную задержку запуска 14CK + 65 мс (CKSEL0 = 1, SUT1 = 1, SUT0 = 1), которые также являются настройками по умолчанию для новых чипов ATmega 328 / 328P.

CHDIV8 (деление часов)

Микросхемы

ATmega 328 / 328P имеют встроенный RC-генератор с частотой 8,0 МГц. Новые микросхемы поставляются с этим набором в качестве источника тактовой частоты и активным предохранителем CKDIV8, что дает 1.Системные часы 0 МГц. Установлено максимальное время запуска и включен период ожидания. (CKSEL = «0010», SUT = «10», CKDIV8 = «0»). Этот параметр используется для того, чтобы все пользователи могли выполнить желаемую настройку источника синхронизации с помощью любого доступного интерфейса программирования.

CKDIV8 следует использовать, если выбранный источник синхронизации имеет более высокую частоту, чем максимальная частота микросхемы ATmega.

Микросхемы ATmega можно использовать при очень низких напряжениях, однако, чем ниже напряжение, тем медленнее им нужно работать.CHDIV8 можно использовать для установки низкой тактовой частоты в соответствии с низким напряжением.

CKOUT (Выходной сигнал)

Тактовый сигнал может быть направлен на PB0. Это полезно, если вам нужен тактовый сигнал для управления другими цепями. Это работает для всех источников синхронизации, а настройка по умолчанию для новых микросхем – CKOUT = 1 (не установлено).

Старшие байтовые предохранители

Предохранитель старшего байта имеет несколько различных настроек. Обычно интерес представляют (по крайней мере, для меня, как для увлеченного человека) сторожевой таймер, сохранение или стирание EEPROM и настройки атрибутов загрузчика.

RSTDISBL (блокировка внешнего сброса)

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

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

Я полагаю, что RSTDISBL реализован по соображениям безопасности, чтобы остановить перепрограммирование чипа или загрузку прошивки.

При программировании RSTDISBL время запуска (SUT1 SUT0) увеличивается до 14CK + 4,1 мс, чтобы обеспечить возможность входа в режим программирования.

По умолчанию значение RSTDISBL = 1 (не установлено).

DWEN (включение debugWIRE)

Микросхемы

ATmega имеют встроенные средства отладки, которые по умолчанию отключены. Предохранитель DWEN используется для их включения.

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

Чтобы использовать отладку на кристалле, вам понадобится совместимый программатор, например AVR Dragon. Поскольку я никогда не пользовался AVR studio и у меня нет подходящего программатора, я никогда не использовал и не знаю, как использовать отладку. Если вы хотите узнать больше, есть хорошая статья на http: // www.hilltop-cottage.info/blogs/adam/debugging-arduino-using-debugwire-atmel-studio-and-an-avr-dragon/, чтобы вы начали.

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

Если вы только начинаете, оставьте DWEN не заданным. Ведь сброс очень полезен.

SPIEN (включить последовательное программирование и загрузку данных)

Микросхемы

ATmega могут быть запрограммированы с использованием последовательного программирования.Последовательное программирование используется для программирования на борту с использованием последовательного протокола через ISP (встроенный последовательный программатор) или UART (универсальный асинхронный приемник / передатчик).

Обычный метод программирования микросхем ATmega – через интерфейс SPI с использованием контактов SCK (часы), MOSI (вход) и MISO (выход). Если вы отключите последовательное программирование, вы больше не сможете использовать SPI для программирования чипа. Вы также можете отключить последовательное программирование с помощью битов блокировки.

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

По умолчанию SPIEN включен, SPIEN = 0.

Предохранители RSTDISBL, SPIEN и DWEN могут заблокировать микросхему ATmega или, по крайней мере, затруднить ее повторное использование. Для общего использования, особенно если вы только начинаете программировать автономные микросхемы, вам не следует изменять эти настройки предохранителей. Вам также следует дважды убедиться, что вы не меняете их, когда вы переписываете другие настройки предохранителя.

WDTON (сторожевой таймер всегда включен)

Сторожевой таймер – это, по сути, таймер, который вызывает сброс микросхемы, если он не получает сигнал ОК в определенное время.

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

Когда сторожевой таймер включен, в случае сбоя или зависания скетча таймер истечет по таймауту и ​​сбросит микросхему, вызывая перезапуск, аналогичный нажатию кнопки сброса при работающем Arduino.

Сторожевой таймер можно активировать программно, поэтому настройки предохранителя не требуется. По умолчанию сторожевой таймер выключен, WDTON = 1.

На форуме Arduino по адресу ttp: // forum есть прекрасное мини-руководство по сторожевому таймеру от za_nic.arduino.cc/index.php/topic,63651.0.html
У Пола Мартинсена есть руководство по использованию сторожевого таймера для обнаружения зависаний на http://www.megunolink.com/how-to-detect-lockups-using- Ардуино-сторожевой таймер /

EESAVE (сохранить память EEPROM)

При программировании микросхемы ATmega память стирается непосредственно перед загрузкой нового кода. В нормальных условиях стирается память eeprom, а также память программ. Предохранитель EESAVE может использоваться, чтобы сказать микросхеме не стирать EEPROM.Это полезно, если вы хотите обновить код, но сохранить пользовательские настройки, хранящиеся в EEPROM.

Значение по умолчанию – EESAVE = 1, не установлено, и память EEPROM стирается во время цикла стирания чипа при программировании.

Я привык ставить этот предохранитель; EEPROM имеет ограниченный жизненный цикл, поэтому чем меньше вы напишете на него, тем лучше. Стирание eeprom не влияет на загрузку нового кода, и в большинстве моих проектов память eeprom не используется, поэтому не стирать ее – не проблема.DropController хранит настройки и время сброса в eeprom, поэтому я установил EESAVE для сохранения данных при загрузке новых версий кода.

BOOTSZ1 & BOOTSZ0 (Размер загрузчика)

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

Загрузчик хранится в памяти программ, той же памяти, которая используется для пользовательского приложения, и, поскольку загрузчик может быть разного размера, вы можете указать микросхеме ATmega, сколько места следует зарезервировать. Обычный (старый) загрузчик Arduino имеет размер 2 килобайта (КБ), но более новый Optiboot (используемый в UNO) составляет всего 0,5 КБ (512 байтов). Если вы используете Optiboot и соответственно устанавливаете размер загрузчика, вы получаете дополнительно 1.5 КБ для вашей собственной программы. 1,5 КБ – это много места, поэтому я начал программировать автономные микросхемы ATmega в первую очередь из-за нехватки места для программ. Код dropController стал слишком большим для обычного Arduino, поэтому я удалил загрузчик.


Загрузчик хранится в верхней части памяти программ

Если у вас есть загрузчик, то BOOTSZ необходимо использовать вместе с BOOTRST. BOOTRST сообщает микросхеме ATmega адрес памяти, с которой запускается загрузчик.Если BOOTRST не установлен, то пользовательское приложение может использовать всю память независимо от настроек BOOTSZ.

Конфигурация размера загрузки для 328 / 328P

Обратите внимание, что указанные выше размеры указаны в словах (слово – 2 байта), а 256 слов – это 512 байтов.
По умолчанию для новых чипов BOOTSZ1 = 0 BOOTSZ0 = 0, что означает, что у них 4 КБ зарезервировано для загрузчика.

BOOTRST Выбрать вектор сброса

Микросхемы

ATmega могут использовать загрузчик, это небольшая программа, которая запускается при перезагрузке микросхемы.Если у вас есть загрузчик, вам нужно сообщить MCU, и это делается с помощью настройки предохранителя BOOTRST. Когда установлен BOOTRST Fuse, при сбросе устройство перейдет к адресу загрузчика. Если не установлен, микросхема перейдет к стартовому адресу программы 0x0000.

Значение по умолчанию – BOOTRST = 1 (не задано).

Если BOOTRST не установлен (нет загрузчика), предохранители BOOTSZ игнорируются.

Удлиненные биты предохранителя

Удлиненные предохранители используются только для установки уровня обнаружения обесточивания (BOD).

Чипы ATmega могут стать нестабильными или ненадежными при использовании с недостаточным напряжением. Например, 328 / 328P может безопасно работать на частоте 16 МГц, если он имеет как минимум 4 В. Все, что ниже 4 В, означает, что микросхема может неправильно себя вести. Это было бы проблемой, если бы устройство использовалось с датчиками для измерения или полагалось на точное время.

Для обеспечения достаточного входного напряжения микросхемы можно установить минимальный уровень напряжения. Если напряжение упадет ниже этого уровня, микросхема перезагрузится.Это называется уровнем детектора потемнения. Обычно, если подаваемое напряжение ниже BOD, микросхема сохраняет низкий уровень сброса.


Значения по умолчанию для новых микросхем: BODLEVEL2 = 1 (не установлено), BODLEVEL1 = 1 (не установлено), BODLEVEL0 = 1 (не установлено).

Настройки предохранителя по умолчанию

Новый чип ATmega 328P.

Новые микросхемы 328 / 328P обычно имеют следующие настройки предохранителей:

Низкий предохранитель = 0x62 (B01100010)
Высокий предохранитель = 0xD9 (B11011001)
Расширенный предохранитель = 0xFF (B11111111)

Arduino Duemilanove или Nano с настройками предохранителя по умолчанию для ATmega328

Низкий предохранитель = 0xFF (B11111111)
Высокий предохранитель = 0xDA (B11011110)
Расширенный предохранитель = 0x05 (B00000101)

Загрузчик Optiboot

Если вы загружаете загрузчик Optiboot, то старший байт предохранителя должен быть установлен как 0xDE (B11011110).Единственное отличие – это место, отведенное для загрузчика.

Полный список настроек предохранителей по умолчанию для различных Arduinos см. На странице «Кодирование с помощью Cody Arduino Default Fuse Settings».

Биты замка

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

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

Я постараюсь более подробно осветить биты замка в одной из следующих статей.

Фактическое программирование предохранителей

Для программирования автономных чипов ATmega я использовал Arduino Nano в качестве программиста, увидел Arduino Nano в качестве ISP-программиста и обнаружил, что самый простой способ установить предохранители – это записать загрузчик (предохранители устанавливаются как часть процесса). Затем загрузчик можно будет перезаписать позже, когда вы загрузите скетч. Отредактировав файлboards.txt в папке установки Arduino, вы можете использовать любые значения предохранителей.

Вот запись, которую я добавил в файлboards.txt для использования с макетной платой Arduinos. Он имеет предохранитель младшего байта на 0xFF, предохранитель высокого байта на 0xDF, расширенный предохранитель на 0x05 и использует загрузчик Optiboot. Значения битов блокировки были скопированы из записи Arduino Uno.

 
atmegasa16.name = ATmega328P Stand Alone (Arduino в качестве интернет-провайдера)
atmegasa16.upload.protocol = stk500
atmegasa16.upload.maximum_size = 32768
atmegasa16.upload.speed = 115200
atmegasa16.upload.using = arduino: arduinoisp
atmegasa16.bootloader.low_fuses = 0xff
atmegasa16.bootloader.high_fuses = 0xdf
atmegasa16.bootloader.extended_fuses = 0x05
atmegasa16.bootloader.path = optiboot
atmegasa16.bootloader.file = optiboot_atmega328.hex
atmegasa16.bootloader.unlock_bits = 0x3F
atmegasa16.bootloader.lock_bits = 0x0F
atmegasa16.build.mcu = atmega328p
atmegasa16.build.f_cpu = 16000000L
atmegasa16.build.core = arduino
atmegasa16.build.variant = arduino: стандартный
  

Полезные ссылки

На сайте Ника Гаммона есть много действительно полезной информации о создании собственного Arduino и загрузке загрузчиков:
Как сделать минимальную плату, совместимую с Arduino (похожую на мою).
Решение проблем с загрузкой программ в ваш программатор загрузчика Arduino
ATmega.

Моя собственная Arduino на макетной плате объясняет, как настроить автономный чип ATmega, а «Использование Arduino Nano для программирования чипа ATmega328P» объясняет, как использовать Arduino в качестве программиста ISP.

Техническое описание ATmega 328P можно загрузить с веб-сайта Amtel по адресу http://www.atmel.com/Images/doc8161.pdf

http://eleccelerator.com и http://www.engbedded.com имеют калькулятор предохранителей, где вы выбираете, какие параметры вы хотите, и на странице представлены настройки предохранителей, которые нужно использовать.

Добавить комментарий

Ваш адрес email не будет опубликован.