Вопрос, который давно требует пояснений — что же такое fuse bit (далее фьюзы) и как их использовать. Для простоты понимания, назовем их настройкой для микроконтроллера, которую можно изменить только при прошивке.
Удобны тем, что достаточно один раз указать конфигурацию фьюзов и независимо от этого изменять прошивку сколько угодно раз — фьюзы останутся те же. Нужно сказать о том, что для некоторых микроконтроллеров существуют специфичные фьюзы, здесь рассматривается пример для Atmega8.
CKSEL0-3 — отвечают за выбор источника тактирования микроконтроллера. В даташите есть таблица из нее прикинуть конфигурацию битов.
Например, хотим работать от внешнего кварца на 8МГц, для CAVR смело убираем галочки CKSEL0-3 (т.е их значения будут 1111). Схема для подключения кварца. Конденсаторы 12-22 пФ.
Или хотим работать от внутреннего генератора на 8МГц, видим диапазон значений для CKSEL, крутим вниз даташит и видим подробное описание:
Т.е. в нашем случае подойдет последний вариант, смело заносим в 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, так меньше шанс ошибиться.
Можете подсказать, как сконфигурировать fuse для того что бы моя atmega 8 работала от внешнего кварца на 8mgh
External clock cksel 1111. Для CodeVision все наоборот, т.е. напротив этих фьюзов не нужно ставить галки.
извините за тупость 😳 но против каких же надо ставить галочки))
я имею ввиду в code vision
В прошивалке есть кнопка прочитать фьюзы Read Fuse. Читаете, копируете, галочки сами встанут. Убираете напротив CKSEL0-CKSEL3 и СКОРТ
Если я правильно понимаю, в CVAVR если галка напротив фьюза не стоит, то этот фьюз выставлен в «1»???? Так? То есть в вашем скриншоте для работы меги от внешнего кварца на 8 МГц фьюз «RSTDISBL» выставлен в «1», то есть после прошивки пин RESET станет обычным вводом/выводом порта и мегу нельзя будет перепрошить?
Фьюз считается прошитым когда он = 0
Почему внешний кварц это 0000?!! 0000 — это же внешние часы, кристалл это External Crystal. Или я что-то не понимаю?
Посмотрите комментарии выше
Спасибо за статью!!! Только здесь смог разобраться с fuse 🙂
а если подключать внешний кварц порты как вход настраивать?
Столкнулся с проблемой. При установке фьюзов для работы от внешнего кварца (самая верхняя картинка из 3-х), программатор пишет ошибку, контроллер становится более недоступен для внутрисхемного программирования, (испортил 5 шт.). Внутри — схемно от TL866A после сбоя также не программируется. При установке фьюзов любой комбинации для работы от внутреннего генератора, проблем нет. Если испорченную микросхему извлечь и вставить в программатор (в панель) TL866A, то перепрограммированию поддается, в схеме работает. Подскажите пожалуйста что я намудрил? Или что может быть? Использую CodeVisionAVR v3.12 драйвера от Avr Studio 4, программатор AVRISP MkII USB.
значит кварц не подключен
Огромное Спасибо!!!!!!! У вас наверно опыт огромный!!!! Дорожка в плате порвалась, сначала прозвонил, потом через лупу увидел.
Начал разбираться в фьюзах, но т.к.шил через пр.Громова то соответственно инверсно выставил фьюзы частоты — cksell3..0=1101
Какой кварцевый резонатор и конденсатор мне подключить,чтобы разблокировать мк?
берите любой кварц 8-12МГц и кондеры на 18-22пФ
Уважаемый Админ! Хочу поделиться полезной информацией.
ATMega64a и ATMega128a имеют другие пины для подключения программатора!
надо одновременно подключать:
MOSI — PE0 (RXD0/PDI) и PB2 (MOSI)
MISO — PE1 (TXD0/PDO) и PB3(MISO)
остальные – как положено:
SCK — PB1 (SCK)
RESET – к выводу (RESET)
и обязательно нужно внешнее тактирование! Сигнал нужно подать на 24 вывод (XTAL1), иначе программатор не будет видеть чип! Изначально фьюзы настроены на тактирование от кварцевого резонатора!
Надеюсь, что кому-то это поможет, так как я по незнанию убил целый день на то, чтобы обнаружить «неисправность» и перепаял четыре чипа ATmega64a…
У важаемый Админ скажите RSTDISBL на аттини 13 тоже отвечяет за ножку ресет . ? дело в том что я устанавливаю его но не пишется в мк. после а снова могу его програмировать ,а мне надо что он не прерпрошивался
Должно быть также как в других камнях, 1 — не запрограммирован, 0 — запрограммирован.
Прошу прощения, тут немного запутался. Написано: Например, хотим работать от внешнего кварца на 8МГц, выставляем смело CKSEL0-3 в 0000, а в комментариях 1111 с таким кварцем, объясните пожалуйста, где истина? Нужно запрограммировать Atmega328 с внешним кварцем на 8 МГц
в CAVR инверсные фьюзы, шейте через студию и будет вам счастье
Здравствуйте. Прочитал, но не очень понял. У меня CVAVR, Atmega88 работала с кварцем 7,3728. Fuse были следующие: CKSEL3- галочка, CKSEL2, CKSEL1 и CKSEL0- без галочки. Какие изменения сделать, что- бы Atmega88 работала от внутреннего генератора? Помогите, пожалуйста.
посмотрите на последней фотке
У меня 18 окошек, где можно ставить/убирать галочки. Самые нижние не изменять? BOOTRST= нет галочки
BOOTSZO= есть галочка
BOOTSZ1= есть галочка
прочитайте из мк текущие биты и поменяйте только cksel
Прошу прощения, но в МК Atmega88 4 cksel .
можете набрать в гугле «avr fuse calculator», заходите по первой ссылке и можете выставить галками нужные фьюзы
Программирование, фьюзы для меня что-то заоблачное, это не мое. В электронике кое- что понимаю. Работает устройство на Атмега88 с внешним кварцем, появилась необходимость освободить еще 2 вывода, программист изменил прошивку для 2 дополнительных выводов PB6 и PB7, не знаю почему, но не хочет разбираться с фьюзами, так как он живет в другой стране и у него «крутой» программатор, а у меня «5 проводков» и CodeVisionAVR V2.03.4.
Что то вы меня обманываете, у меги8 и 88 одинаковые фьюзы. Не ленитесь, уже даже скрин выложен, скопируйте.
Я не обманываю. Вот что написал программист: «это же ваш программатор, дл чего мне вникать в работу чужого железа?» Может я последовательность не соблюдаю. Уже 3 Атмеги зависли, хотя с внешним кварцем Атмегу88 прошивал многократно. Сейчас прошита и фьюзы стоят для внешнего кварца, устройство работает. Что- бы изменить фьюзы какая необходима последовательность? Ведь мне надо и прошивку изменить.
Ну и программиста можно понять, вы же выбирали чем шить, значит и проблема ваша. Последовательности и таинств никаких нет, единственная проблема это частоты, если у вас было 7,3МГц а сейчас вы перешиваете на 8МГц. Если были какие то участки кода в програме, которые были завязаны именно на 7.3МГц, например uart, то очевидно что он работать не будет.
Да, действительно, первоначально работал с кварцем 8мгц, но была необходимость работать по USB со скоростью 115200 и применили кварц 7,3. Спасибо и извините за беспокойство.
Программист написал, что с UART ни как не связано. На Вашем нижнем фото не совсем такая картинка как у меня. Как- же мне узнать какие фьюзы необходимо установить? 4-Атмега зависла или хотя- бы как вернуться к тем фьюзам, которые работали?
такое впечатление что вы не прошиваетесь и остаетесь на внешнем кварце, поэтому и не работает. подрубите внешний кварц, проверьте заведется ли с ним
Начну с начала: рабочее устройство с фьюзами на 7.3728, кварц и конденсаторы соответсвенно установлены. Читаю фьюзы и сразу делаю изменения(устанавливаю соответствующие фьюзы) для внутреннего генератора, программирую фьюзы и устройство зависает. После этого CodeVisionAVR V2.03.4. уже не видит Атмегу88. Задача простая, готов оплатить завершение проекта, но не знаю где найти специалиста.
может потому что кварц установлен, поэтому и зависает. выпаяйте его
До начала любой прошивки? Т.е. чистую, новую микросхему впаять, кварц не впаивать и установить фьюзы и затем прошивать?
Прикрепить скриншот здесь возможно?
возможно, заливайте на файлообменник, сюда ссылку.
Подскажите плиз, переделываю проект на атмеге 128 с внутреннего резонатора на внешний кварц 1 МГц, кварц на плату добавил к пинам XTAL вместе с конденсаторами, прошил фьюзами CKSEL3 0 остальные в 1 — не выставлены. Чип перестал отвечать — картина такая, будто нет тактирования. Но оно есть! Ошибок в монтаже нет, всю плату носом испахал. Метод пальца не сработал, генератора пока под рукой нет. Не подскажете, вкаком направлении рыть?