fuseВопрос, который давно требует пояснений — что же такое fuse bit (далее фьюзы) и как их использовать. Для простоты понимания, назовем их настройкой для микроконтроллера, которую можно изменить только при прошивке.

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

f1

CKSEL0-3 — отвечают за выбор источника тактирования микроконтроллера. В даташите есть таблица из нее прикинуть конфигурацию битов. f2

Например, хотим работать от внешнего кварца на 8МГц, для CAVR смело убираем галочки CKSEL0-3 (т.е их значения будут 1111). Схема для подключения кварца. Конденсаторы 12-22 пФ.

f4

Или хотим работать от внутреннего генератора на 8МГц, видим диапазон значений для CKSEL, крутим вниз даташит и видим подробное описание:

f3

Т.е. в нашем случае подойдет последний вариант, смело заносим в CKEL0-3=0010 и радуемся супер скорости.

Если вы случайно установили тактирование от внешнего источника, а у вас его нет, то — увы микроконтроллер становится не доступным для чтения и программирования. Но расстраиваться не стоит, стоит подцепить внешний кварц и atmega снова оживет.

CKOPT — используется только совместно с битами CKSEL, позволяет включить «режим усиления». Микроконтроллер в таком режиме имеет повышенное энергопотребление, однако более помехозащищен. Установка данного бита позволяет работать на частотах выше 8МГц, если сам микроконтроллер поддерживает такие частоты.

SUT0-SUT1 — эти биты отвечают за задержку, перед началом работы микроконтроллера. Насколько я понял из даташита, рекомендации в отношении этих битов касаются в основном питания и в том числе бита BODEN

BODEN — при установке бита, микроконтроллер контролирует напряжение питания. При снижении напряжения ниже определенного уровня, микроконтроллер сбрасывается.

BODLEVEL — определяет тот самый уровень напряжения, если фьюз установлен, то нижний предел питания 4В, если не установлен 2,6В.

BOOTRST — позволяет начать выполнение программы не с начала, а с определенной области BOOTLOADER.

BOOTSZ0-BOOTSZ1 — также относятся к бутлоадеру, определяют размер памяти отведенный загрузчика.

EESAVE — если бит установлен, то во время выполнения команды Erase Chip, EEProm память не будет стерта.

WDTON — позволяет использовать сторожевой таймер.

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

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

Настоятельно рекомендую перед изменением фьюзов, прочитать уже установленные фьзы: Tools-Chip Programmer-Read-Fuse Bit, так меньше шанс ошибиться.

Для внешнего кварца на 8МГц
fuses 8mhz

Для внешнего кварца 8-16МГц
16mhz

Для внутреннего на 8МГц
8internal

76 комментариев: Fuse bit в AVR микроконтроллерах

  • Другого нет контроллера подкинуть?

  • проверяйте схему еще раз, чудес не бывает, конденсаторы ставьте керамику

  • Все, уф, разобрался. С такой конфигурацией фьюзов на атмеге 128 нужен был внешний RC. Собрал, рассчитал, перепрошил. Виноват был калькулятор фьюзо — зря я ему поверил. Надо курить даташиты. Сори за беспокойство))

  • Кто подскажет, как и где найти специалиста по переводу прошивки с Атмега88 в ATxmega16A4U ?

  • можете на electronix поспрашать, там большой форум

  • Спасибо.

  • здравствуйте. ув админ у меня программа AVRDUDEPROG. я сделал так, как «Для внешнего кварца на 8МГц». убил 2 мега32, 1 мега16 и 4 мега8 🙁 вопрос: почему они сдохли? заранее спасибо!

  • да там есть лажа. дело в том, что в CAVR фьюзы инверсные, т.е. 0 = галка стоит = это прошито, т.е. 000 на самом деле = 111, т.е. по факту вы прошили скорее всего на внешний генератор. в общем то это не проблема, подключите генератор вместо кварца, восстановите фьюзы.

  • спасибо за внимание. а что за генератор? я просто новичек. и какую прогу советуете, avrdude или khazama?

  • у вас скорее всего USBASP, я уже писал, что у меня нет этого программатора, поэтому не могу проверить как шьет avrdude или khazama, я шью AVRISP из под avr studio.

  • Здравствуй админ, проблемка у меня, хотел atmega16 переключить на внешний кварц на 16 мегагерц, в даташите почему-то указано только о CKSEL3..1 = 111, а по поводу CKSEL0 ничего не сказано, я его и не включили, также включил CKOPT, по итогу чип стоит…((
    Когда дошло до того что уже не знал что ему делать начал заниматься фигнёй и штрыкал в кварц коротя его ножки и чип начал делать такты…
    Подскажите, можно ли исправить ситуацию? Может его как-то тактировать другим чипом?..
    Ну и как быть с CKSEL0?

  • Если прошить RSTDISBL без галочки — как показано, то получите труп. Зачем такое выкладывать и учить других «убивать» контроллеры?!

  • Ярослав, если чип не прочитать то надо смотреть на что вы его настроили. Да беда CAVR в том что он инверсно показывает фьюзы, уже об этом писали много раз.
    Олег, мне уже конечно трудно вспомнить потому что давно с атмегами не ковыряюсь, но на картинке показано что галка RSTDISBL = 0 не установлена, т.е. фьюз не прошит, так что все ок.

  • Ну я установил CKSEL3..0 = 1110, просто в даташите про CKSEL0 ничего не сказано там где описуют источником тактирования внешний кварц, я этот бит не включил…((
    Прошиваю с помощью ProgISP.
    Скажите что с этим битом нужно было делать?
    В меня то ещё один чип остался, не хочу и его запороть…

  • Что то вы меня обманываете если смотреть на даташит, то все хорошо расписано что и откуда

    Если все как вы говорите, то сейчас настроено на внешний кварц 3-8МГц. CKSEL0 и SUT1:0 влияют только на время включения контроллера и ни на что больше. В итоге камень стоять может по двум причинам: либо кварц не подцеплен физически — т.е. косяк в схеме, либо прошиты фьюзы isp prog или rst disable. Ну и нельзя исключать момент, что спалили камень. Даже если предположить что вы фьюзы инверсно прошили, то это все равно бы не повлияло, достучаться программатором все равно можно было бы. Проверь 10 раз правильно ли подаются питания и подключен ли кварц, правильные ли кондеры 22пФ.

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

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

  • можете материть меня, это заслуженно!
    Я еще не видел ваш коммент и тоже заменил конденсаторы, которые кстати были новыми, и все получилось…
    Извините и спасибо за терпение!
    Думаю подобных проблем уже у меня не возникнет…

  • Ляпа какая-то получается.
    Несоответствие описания в тексте рисункам внизу…

  • Никакой ляпы, читайте внимательнее

  • Ну как же нет?
    Вот Вы пишите:
    «Или хотим работать от внутреннего генератора на 8МГц, видим диапазон значений для CKSEL, крутим вниз даташит и видим подробное описание… смело заносим в CKEL0-3=0010 и радуемся супер скорости.»
    На рисунке внизу у Вас три галки стоят, а одна сброшена. Вопросов нет.
    Однако чуть выше у Вас есть такой текст:
    «Например, хотим работать от внешнего кварца на 8МГц, выставляем смело CKSEL0-3 в 0000.»
    Чисто по аналогии с первым примером у Вас должно стоять 4 галки (ибо ноль — галка стоит, судя по первому примеру).
    У Вас же все сброшены. И они правильно сброшены.
    Так в чём дело?
    А в том, что фраза должна быть такой:
    «Например, хотим работать от внешнего кварца на 8МГц, выставляем смело CKSEL0-3 в 1111.»

  • Я понял в чем вопрос. Есть три понятия, которые перемешались, 1. это даташит. В нем когда фьюз прошит = 1, если не прошит = 0, 2. Окно прошивальщика CAVR в нем галочка может стоять может не стоять. 3. Собственно значения этих галочек, если галка установлена, то фьюз прошит и он = 0, если не стоит значит фьюз = 1. Поправил в тексте если так понятнее.

  • админ у меня вопрос .Я уже не один день бьюсь над одной проблемой.У меня есть программа прошитая в мега16.Она работает хорошо.В симуляторе и в реальности.Но без нагрузки.У меня коммутирует нагрузку реле.А нагрузкой является пускатель.Кстати я и на лампочке проверял.контроллер работает с перебоем.Неправильно работает.Что делать? Не знаю.В чём может быть проблема?Поставил Свадебную цепочку пролема не решилась.Стало лучше устройство работать.Но всё равно с перебоями.

  • Подскажите какие варианты ещё есть.Без нагрузки работает стабильно.Такое ощущение что идут какие то помехи.

  • Тут вариантов миллион, начните с проверки правильности сборки и питания.

  • я отчасти добился результата.На выходе поставил MOC3063 и симистор.но есть маленький недостаток если на всей схеме длительное время нет питания то при появления питания симистор (8часов) открывается.При реле такого не было.Буду далше думать.Но зато схема работает стабильно.Без перебоев.

  • А симистор открывается на 0.5 сек.

  • Потом закрывается.

  • Я понял учител.Я проексперементировал с включаной вилкой и выключенным автоматом .Включаю автомат.Пускатель молчит.Не срабатывает.Спаибо учител.

  • Мне сложно уследить за вашей мыслью 🙂 но раз работает значит норм

  • Спасибо огромное за таблички фьюзов при внешнем кварце… 1000 лет искал в инете, хотел полетать на 16 MHz, но все просто умничают что фьюзы изменяют частоту. Несколько контроллеров залочено и сейчас уже не знаю, может даже правильно выставлены CKSEL0-3, но только в вашей статье доходчиво написано, что для 16 MHz надо еще обнулить (поставить галочку) CKOPT. Вот этой «мелочи» не хватало для полного счастья и МК на 16 MHz просто переставали работать. Приходилось довольствоваться внутренними 8 MHz. Выход конечно, и АЖ на несколько мА дешевле по току… но это все равно, что ездить ездить на феррари по городу на 76 бензине…

  • Здравствуйте вопрос по прошивке Atmega 328P автор указал фьюзы с внешним кварцем 16 Mц ( BOOTSZ1 BOOTSZ0 BODLEVEL1 BODLEVEL0 ) но не указал какой программой шил Я собираюсь прошить AVRDUDE 33 но никак не могу как с ней разобратся именно с фьзами Интернет наполнен разными обьяснениями но нет конкретики по работе с программой Да самое худшшее связатся ни с автором да и другими знатоками невозможно рассказывают многие но не в тему Люди говорят самое больное в этой программе -фьзы никто незнает как в ней они выставляются Есть прямые и инверсные как узнать когда стоят галочки допустим в инверсном режиме что они означают активный или нет ноль или еденица Некоторые говорят когда программа запущена без контроллера но выбран тип фьзы стоят по умолчанию как в калькуляторе так ли это Попробуйте растолковать именно по этой фунции данной програмы

  • возьмите другую прошивайку если не нравится эта, например khazama.

  • Извените я не сказал что она мне ненравится к сожалению и русский язык и функций достаточно Вы можете рассказать хотя бы коротко о fuse именно этой программы как узнать когда стоит галка это ноль или еденица как в прямом так инверсном режиме

  • Фьюз может быть прошит или не прошит. Если прошит это значит что он == 0. Для инверсных фьюзов, галка стоит == фьюз прошит == 0. Однако есть способ — прочитать фьюзы заводские, с чистого камня на нем 1мгц RC. Или забиваете в калькуляторе http://www.engbedded.com/fusecalc/ нужные генераторы и смотрите не на галки, а именно на HEX значения, они не могут быть прямыми или инверсными, они всегда одинаковые. И именно по HEX ориентируетесь когда выставляете галки

  • Для лучшего понимания я бы объяснил так, как мне когда-то объяснили.
    ИНВЕРСНЫЕ и ПРЯМЫЕ — это вид, в котором состояние фьюз-битов отображается в программе- прошивальщике.
    ИНВЕРСНЫЕ — это где СТОИТ галка, то этот фьюз «прошит»,»активен», «установлен», «запрограммирован», «используется».
    Т.Е. нужно использовать это значение фьюза — ставь галку, не нужно — снимай галку.
    ПРЯМЫЕ — это все наоборот — где НЕТ галки, то то этот фьюз «прошит», «активен», «установлен», «запрограммирован», «используется».
    В популярном прошивальщике avrdudeprog33 можно использовать любой вариант (есть переключатель на вкладке «Fuses» ).
    Наиболее понятен вариант»ИНВЕРСНЫЕ» — необходимые отметил галками, остальные снял.
    Если неизвестно, какой вариант использован, например на скриншоте, посмотрите на отображение фьюза SPIEN. Он
    практически всегда «прошит», «активен», «установлен», «запрограммирован», «используется».
    Если он отмечен галкой — значит ИНВЕРСНЫЕ.
    Если нет — отображение фьюзов ПРЯМОЕ.
    И в завешении, что значит состояние фьюза 0 и 1.
    Исторически так сложилось, что если фьюз равен:
    0 – значит, запрограммирован / прошит / активен
    1 – значит, НЕ запрограммирован / НЕ прошит / Не активен

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика