AVR. Учебный Курс. Конфигурация FUSE бит

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

Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.
 

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

Итак, главное:

В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.
 

Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.
 

Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.
 

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

 

Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками. Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем). И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.
 

А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.
 

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

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

Конфигурация тактового сигнала
По умолчанию все контроллеры AVR (кроме старых серий AT90S2313, AT90S8535 итд) сконфигурированы так, чтобы работать от внутреннего источника тактов. Т.е. стоить подать на них питание и они начинают работать. Ничего больше и не нужно.
 

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

  • CKSEL3…0 = 0000 — Внешний источник сигнала.

Т.е. на вход XTAL1 подаются прямоугольные импульсы. Такое иногда делают в синхронных системах, когда несколько контроллеров работают от одного генератора.
 

Техническое отступление
В этот режим часто попадают, когда пытаются выставить контроллер на работу от внешнего кварца (CKSEL=1111), но либо путают нотацию, либо из-за прикола с обратной нотацией битов во всяких извратских прошивающих программах. Раз и кристалл заблокировался. Но, на самом деле, наглухо, с помощью CKSEL, заблокировать кристалл нельзя. Обычно все решается напайкой кварца и запуском от этого кварца. Худшее же что может случиться — потребуется внешний генератор тактов. Который бы оживил кристалл. Делается он за пять минут из любой микросхемы ТТЛ логики, например из К155ЛА3 — схем в инете навалом. Или на таймере 555, либо можно взять второй МК и на нем написать простую программку, дрыгающую ножкой. А если есть осциллограф, то с него можно поиметь сигнал контрольного генератора — его клемма должна быть на любом осциле. Землю осцила на землю контроллера, а выход генератора на XTAL1.
 

Но что делать если зуд нестерпимый, контроллер залочен, а никакой микросхемы для реанимации под рукой нету? Тут иногда прокатывает метод пальца. Прикол в том, что на тело человека наводится весьма нефиговая наводка частотой примерно 50Гц. Всякий кто хватался за щупы осциллографа руками помнит какие шняги тут же возникают на экране — вот это оно! А почему бы эту наводку не заюзать как тактовый сигнал? Так что припаиваешь к выводу XTAL1 провод, хватаешься за него рукой, и жмешь на чтение или запись контроллера :) Предупреждаю сразу, метод работает через жопу, далеко не с первого раза, читает долго и порой с ошибками, но на перезапись FUSE битов в нужную сторону должно хватить. Пару раз у меня такой фокус получался.

CKSEL3…0 = 0100 – 8 MHz от внутреннего генератора(обычно по умолчанию стоят такие)
Для большинства AVR такая конфигурация CKSEL означает тактовку от внутреннего генератора на 8Мгц, но тут могут быть варианты. Так что в этом случае втыкай внимательно в даташит. В табличку Internal Calibrated RC Oscillator Operating Modes
 

Иногда нужно иметь внешний тактовый генератор, например, чтобы его можно было подстраивать без вмешательства в прошивку. Для этого можно подключить RC цепочку, как показано на схеме и подсчитать частоту по формуле f = 1/3RC, где f будет частотой в герцах, а R и С соответственно сопротивлением резистора и емкостью конденсатора, в омах и фарадах.

  • CKSEL3…0 = 0101 – для частот ниже 0.9 MHz
  • CKSEL3…0 = 0110 – от 0.9 до 3 MHz
  • CKSEL3…0 = 0111 – от 3 до 8 MHz
  • CKSEL3…0 = 1000 – от 8 до 12 MHz

Данная табличка справедлива только для ATmega16 у других МК может отличаться. Уточняй в даташите!
 

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

  • CKSEL3…0 = 1001 — низкочастотный «часовой» кварц.

На несколько десятков килогерц.
Используется в низкоскоростных устройствах, особенно когда требуется точная работа и низкое потребление энергии.
 

Для обычных кварцев ситуация несколько иная. Тут максимальная частота кварца зависит также и от бита CKOPT когда CKOPT = 1 то:

  • CKSEL3…0 = 1010 или 1011 — от 0,4 до 0.9 MHz
  • CKSEL3…0 = 1100 или 1101 — от 0,9 до 3 MHz
  • CKSEL3…0 = 1110 или 1111 – от 3 до 8 MHz (либо от 1 до 16Мгц при CKOPT=0)

А если CKOPT равен 0 то при тех же значения CКSEL можно поставить кварц от 1 до 16MHz.
 

Разумеется, кварц на 16MHz можно поставить только на Мегу без индекса ”L”. (Хотя, как показывает практика, Lку тоже можно неслабо разогнать. У меня ATMega8535L заработала на 16Мгц, но были странные эффекты в работе. Поэтому я не стал так извращаться и разгон снял). Опять же, все выше сказанное в точности соответствует только Меге 16, у других может незначительно отличаться.
 

Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца. Когда CKOPT = 1 то размах маленький, за счет этого достигается меньшее энергопотребление, но снижается устройчивость к помехам, особенно на высоких скоростях (а предельной, судя по таблице выше, вообще достичь нельзя. Точнее запуститься то он может запустится, но вот надежность никто не гарантирует). А вот если CKOPT активизировать, записать в него 0, то размах сигнала сразу же станет от 0 до питания. Что увеличит энергопотребление, но повысит стойкость к помехам, а значит и предельную скорость. При оверклокинге МК тем более надо устанавливать CKOPT в 0.
 

Также стоит упомянуть бит SCKDIV8 которого нет в Atmega16, но который часто встречается в других контроллерах AVR. Это делитель тактовой частоты. Когда он установлен, т.е. в нуле, то частота выставленная в битах CКSEL0…3 делится на 8, на чем в свое время прилично застрял Длинный, долго пытаясь понять чего это у него западло не работает. Вся прелесть в том, что этот делитель можно отключить программно, записав в регистр CLKPR нужный коэффициент деления, например один. Весь прикол в том, что SCKDIV8 активен по дефолту! Так что внимательней!

 

Биты SUT задают скорость старта МК после снятия RESET или подачи питания. Величина там меняется от 4ms до 65ms. Мне, за всю практику, пока не довелось эту опцию использовать — незачем. Так что ставлю на максимум 65ms — надежней будет.
 

Бит RSTDISBL способен превратить линию Reset в одну из ножек порта, что порой очень нужно когда на какой-нибудь крошечной Tiny не хватает ножек на все задачи, но надо помнить, что если отрубить Reset то автоматически отваливается возможность прошивать контроллер по пяти проводкам. И для перешивки потребуется высоковольтный параллельный программатор, который стоит несколько тысяч и на коленке сделать его проблематично, хотя и возможно.
 

Второй заподлянский бит это SPIEN если его поставить в 1, то у тебя тоже мгновенно отваливается возможность прошивать по простому пути и опять будет нужен параллельный программатор. Впрочем, успокаивает то, что сбросить его через SPI невозможно, по крайней мере в новых AVR (в старых, в AT90S*** было можно)
 

WDTON отвечает за Собачий таймер, он же Watch Dog. Этот таймер перезагружает процессор если его периодически не сбрасывать – профилактика зависаний. Если WDTON поставить в 0, то собаку нельзя будет выключить вообще.
 

BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь :)
 
Так вот, для решения этой проблемы есть у AVR встроенный супервизор питания. Он следит, чтобы напруга была не ниже адекватного уровня. И если напруги не хватает, то просто прижимает RESET и не дает контроллеру стартовать. Вот эти два фуза и рулят этой фичей. BODEN включает, а BODLEVEL позволяет выбрать критический уровень, один из двух. Какие? Не буду раскрывать, посмотри в даташите (раздел System Control and Reset).
 

JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.
 

EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.
 

BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер. Подробней про это было написано в статье про прошивку через лоадер.
 

BOOTSZ0..1 — группа битов определяющая размер бут сектора. Подробней смотри в даташите. От контроллера к контроллеру они отличаются.
 

Lock Bits
Это, собственно, и к фузам то отношения не имеет. Это биты защиты. Установка этих битов запрещает чтение из кристалла. Либо флеша, либо ЕЕПРОМА, либо и того и другого сразу. Нужно, только если ты продаешь свои устройства. Чтобы злые конкуренты не слили прошивку и не заказали в китае более 9000 клонов твоего девайса, оставив тебя без штанов. Опасности не представляют. Если ты заблокируешь ими кристалл, то выполни полное стирание и нет проблемы.
 

Характерной особенностью установленных лок битов является считываемая прошивка — в ней байты идут по порядку. Т.е. 00,01, 02, 03, 04… FF, 00… Видел такую срань? Значит не судьба тебе спереть прошивку — защищена =)
 

Техника безопасности
И главное правило при работе с FUSE битами — ВНИМАНИЕ, ВНИМАНИЕ и ЕЩЕ РАЗ ВНИМАНИЕ! Не выставляйте никогда FUSE не сверившись с даташитом, даже если срисовываете их из проверенного источника.
 

Мало ли в какой нотации указал их автор, в прямой или инверсной. Так что если повторяете какую-либо конструкцию, то перед тем как ставить фузы, проверьте то ли вы вообще ставите!
 

Обязательно разберитесь что означает галочка в прошивающей программе. Ноль или единицу. Включено или выключено! Стандарта нет!!!
 

Если фуз биты задаются двумя числами — старший и младший биты, то выставляются они как в даташите. Где 0 это включено.
 

Неплохой FUSE калькулятор
 

Второе, железное, правило работы с FUSE. Запомните это навсегда и не говорите, что я не учил.
 

ВНАЧАЛЕ ЧИТАЕМ ТЕ ЧТО ЕСТЬ, ПОТОМ ЗАПИСЫВАЕМ ТЕ КОТОРЫЕ НАДО НАМ
 

Чтение — модификация — запись. ТОЛЬКО так. Почему? Да просто часто бывает как — открыл вкладку FUSE, а программатор попался тупой и сам их не считал. Как результат — у тебя там везде пустые клеточки. Довольный, выставил только те, что тебе надо SKSEL, а потом нажал WRITE. Тут то и наступает, Обычно, кабздец. Т.к. в контроллер записываются не только те, что ты изменишь, а ввобще вся секция. С теми самыми пустыми клеточками. Представь какой трешняк там будет. То то же! А потом бегут жаловаться по комментам и форумам, мол я ничего такого не трогал — оно само. Ага, щаз!
 

Так что, еще раз — Чтение, Модификация, Запись!

 

Подсказка:
Как с одного взгляда определить какого типа (прямые или инверсные) fuse биты в незнакомой прошивающей проге?
Дедуктивный метод: Нажмите чтение Fuses и посмотрите на состояние бита SPIEN Этот бит всегда активен, а если он будет сброшен, то программатор контроллер даже определить не сможет. Если SPIEN в 1 — значит фьюзы инверсные, как в PonyProg. Если ноль — значит по нотации Atmel.

191 thoughts on “AVR. Учебный Курс. Конфигурация FUSE бит”

  1. Во-первых, респект за фокус с тактовой наводкой с тела!

    > Второй заподлянский бит это SPIEN

    На случай отключения этой заразы есть JTAGEN, который обычно активен по умолчанию — хотя надо признать, джитаговые средства тоже не так просты, как СПИ.

    По поводу установки фузов вообще. В AVR Studio есть отличное окошко, где можно натыкать фузы визуально, а потом проверить байтовые значения — и наоборот, ввести байтовые значения, и посмотреть, что из этого получилось.

    А вообще, дома очень полезно иметь вот такую штуку — STK500

    Она работает со всеми AVR в DIP корпусах, и решает следующие из вышеописанных проблем:

    1. Имеет разводку для высоковольтного программирования — чип практически невозможно залочить насмерть (если конечно вообще его не убить)

    2. Имеет встроенный и управляемый генератор тактовых импульсов от 0 до 3.6864 МГц — неважно, что ты натворил с битами тактования, вариант запуска чипа найдется. Есть также набортный слот для внешнего кварца.

    Из вкусностей:

    1. Имеет встроенный управляемый источник питания чипов — любой вольтаж от минимума питания до 5 с лишним вольт. Причем референсный вольтаж для ADC может управляться отдельно, или вообще отсоединяться.

    2. Цепляется к компу по СОМ-порту, и управляется из бесплатно доступного AVR Studio — включая установки вольтажа питания чипа, все его фузы (причем визуально, через чекбоксы), настройки бортового тактового генератора, итп.

    3. Встроенная защита от КЗ по питанию — ага, ее можно перемкнуть, и оно просто начнет мигать лампочкой (сам не пробовал, но документация говорит, что можно).

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

    5. Набортная разводка чипового UARTа на отдельный СОМ-разъем, ессно через МАХ.

    Стоит все это счастье что-то в районе 2500 руб, и обычно доступно вот тут

    Они принимают оплату только по безналу (что элементарно решается через Сбербанк), зато доставляют в любой регион России. Пишется письмо на shop@efo.ru с указанием, чего надо, в каком количестве, и куда отправить (надо еще указать, что заказ на физ. лицо). Получаешь счет, оплачиваешь его в сбере или еще где, и ждешь железку. Ребята работают ультра-надежно, и у них к слову обычно в наличии масса вкусного Атмеловского добра, включая чипы, которые в том же ЧиД ни за что не найти. Я там не работаю — просто это чуть ли не единственная контора, которая продает отладочные комплекты по вменяемым ценам.

    Как человек, который в свое время намаялся без СТК-шки, рекомендую всем — вместо очередной мобилы потратьте 2.5-3 тысячи, и облегчите себе жизнь на порядок. Минус только один — после этого захочется уйти и дальше — тогда прямая дорога на отладчик JTAG ICE MkII, и когда он вам наконец придет, все башевские баяны про линейку ночами и проваленную сессию будут вам попросту смехотворны :)

      1. Да, добраться туда можно только через то, что поддерживает хотя бы протокол STK500 — но он открыт для всех, и я видел наколенные программаторы, которые поддерживают этот протокол. Чипы для них тоже надо прошивать, но это можно сделать через Pony Prog и иже с ним. Вот пример:

        http://www.obdev.at/products/avrusb/avrdoper.html

        Но конечно проще и надежнее потратиться один раз на СТК.

      2. Блин, я совсем забыл, что в Студии есть такая кнопочка «Disconnected mode». Tools->Program AVR->Connect, потом ту кнопку, и получаем тот же калькулятор на вкладках Fuses и Security, только без возможности считывания/прописывания этих битов в чип. Не забыв выбрать нужный чип на первой вкладке, натыкиваем нужную конфигурацию на своей вкладке, и смотрим значение байт внизу окна.

      1. А в чем собственно проблема? Если стирать по ISP, то всех коннектов — только 6-ногий кабель подцепить. Если ISP отключен или вылетел, то HVSP — там сходу не опишешь, но в доке на стк500 все есть весьма подробно. PDF доки есть на Atmel.com. В студии просто открывается интерфейс программатора, выбирается чип, способ общения с ним (ISP или HVSP), кликается Verify Signature (чтобы проверить, что студия его видит), потом кликается Erase Memory. Все :)

        1. ну там определенным образом нужно провода подсоединить
          я вроде делаю все правильно но эффекта нет
          в режим программирования не входит грит failed
          вот думаю где я ошибся
          насчет сигнатуры он считать ее не может
          пишет одни 00

  2. У нас народ делает и продает в треть цены от STK500 вот такие штуки:

    Тот же STK500 но без слотов с FTDI’евским чипом и без возможности HV программирования. Т.е. они просто самым наглым образом содрали кусок STK500 и добавили опторазвязку + usb. Логично, что прошивается он той же прошивкой, что и STK500.

    1. Не зря. Вот такая вот штука лежит передо мною))))) У меня не было другого выхода — ноутбук, соответственно никаких LPT, COM. А прошивать у друга с «возможностью» спалить порт я не рискую. Думаю для новичка который вообще ничего не прошивал — купить такой программатор правильный выбор!

  3. Кстати, есть неплохой программатор(и очень простой),позволяющий в AVRках восстанавливать RSTDSBL,SPIEN(т.н.высоковольтное программирование).Я себе сделал,проверил.Работает,несколько раз выручал.Особенно АTTiny2313.Главное ,что он мегу8 поддерживает.Для начинающих — самое то .Автору- почет и уважение.
    Ссылка:pol-sem.narod.ru/paraprog/paraprog.htm
    А может этот программатор уже всем известен…тада звиняйте

  4. «В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным. С одной стороны нелогично и криво»

    Это как раз логично. Что такое fuse? это как проволока. Когда бит не запрограммирован, то проволока целая и проводит (единица). Как только ее разорвали, то значение переходит в 0.

    Так работают все фьюзы, с которыми мне приходилось иметь дело.

    Кстати, NAND Flash работает на таком же принципе (erase state = 1)

    1. Согласен, технологической точки зрения тут все верно. Я совсем и забыл про методику стирания флеша.

      Но Мы же рассматриваем конфигурацию кристалла, а в таком деле все должно быть логично с точки зрения человеческого восприятия, а тут оно как раз наизнанку. И если нельзя изменить способ стирания флеша, то вполне можно было изменить его отображение. Например, назови фуз SPIEN наоборот — SPIDSBL и смысл был бы сразу иным — поставил галку, заблокировал spi. Что видим то и получаем. А так имеем противоречие того что видим — галки нет и того что есть — SPIEN. Все юзеринтерфейсы, всех компов к которым мы привыкли построены на этом принципе — 1 это включено, 0 выключено. Это окружает нас с детства, от выключателей на стене до навороченного софта и тут такая подстава.

      А по поводу проволочки… тут мне вообще аналогия непонятна. Почему FUSES? Это ведь не предохранитель, как они его назвали, а биты конфигурации! Они самопроизольно же не меняются и ни от чего кристалл не предохраняют. ПОчему не CONFIG?

      Никто же не называет предохранитель в телевизоре конфигурацией включения.

      1. Согласен что с человеческой точки зрения это не логично и вполне можно было или назвать эти биты по-другому или поставить внутренние инверторы.
        А насчет FUSEs — есть технология (мы ее тоже используем) по которой транзистор физически пережигается. Это много дешевле и эффективнее флеша. А так же более отвечает требованиям security.

    2. все кто занимается цифровой электроникой долгие годы — что называется с молоком матери всосали —
      отсутствие сигнала — ЕСТЬ 1.
      в ТТЛ логике даже нормой считалось — оставлять входы не подключенными — в них по умолчанию 1 была.
      когда пришла ТТЛШ — начали подтягивать резисторами.
      так что это для новичков нет сигнала значит 0.
      а для ветеранов нет сигнала значит 1.
      даже линии связи так — 1 долго значит линия свободна , ноль долго — обрыв линии.

      1. Вообще это и сейчас используется в какой-то мере… тот же ввод с кнопок на МК обычно делается «active low» — т.е. если 0 — то активен. Опять же UART так работает (на TTL уровне), линии стробов на LCD экранах, итп.

  5. Афтору мега-респект за происходящее на этом сайте и за логи киберсатаниста!!

    Поделюсь своим опытом. Я всегда путаюсь с PonyProg, немогу запомнить всегда мозг напрягаю неподецки, у меня ещё плюс ко всему планар идёт. Ща работаю с Мегой 128 в Студио. Непомню правда но помоему там по человечески, галку ставишь значит активный, а так ежели чё ориентируюсь на галку Джитаг (он по умолчанию активен) от этого отталкиваюсь. не есть гуд канешна.
    Пони падла, мозг запудрила. У меня в серию идут тиньки 23-и я сделал распечатку где какие галки стоят в Пони и храню как синицу ока.
    Не знаю мож поможет кому, ведь когда микрухи «голые» в них записано $FF (1111 1111 B) програмная память и расширенная(если есть). Также и фузы 1 — неактивен, 0 — активен.

  6. Раз пошла такая пьянка, расскажу про еще одну штуку, мимо которой могли пройти уважаемые коллеги — Atmel AVR Dragon

    Стоит около 50 уе, преспокойно программирует большинство чипов с размером флэша до 32Кб — причем как по SPI, так и по High-Voltage, а кроме этого — еще и по JTAG с debugWire. Да-да, это самый что ни на есть форменный эмулятор/отладчик! Работает с AVR Studio, и минус у него только один — нет никаких кроваток, так что приходится руками кидать все проводки для программирования/отладки. Но за такую цену… :) Я юзал его для отладки ATmega16. Искать можно тут:

    http://shop.efo.ru/cgi-bin/shop.pl?category=&description=AVRDragon&mh=50&a=1

  7. я в своей жизни эти фьюзы юзал только смены частоты )

    у меня много знакомых, которые «около программирования». все говорят «будь осторожен с фьюзами!».
    а когда я начинаю в шутку расспрашивать про это, то сразу никто ничего не знает )

    зы! кстати, я забыл пароль, а новый мне на почту не приходит ( пишет «функция mail не действительна». как бы его снова поиметь для удобства? )

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

  9. DI HALT, я хотел у меги8535 выставить частоту работы от кварца 12 МГц. Пользовался uniprof. Считал fuse-биты, SPI был снят (как ты и учил :) )… нашел в даташите, что 0 — programming. Т.е. сделал вывод — по даташиту 0 — снята галочка, 1 — стоит… В даташите нашел External Crystal/Ceramic Resonator 1111 — 1010 (для CKSEL3..0)
    Далее нашел таблицу, в которой написано было CKSEL3..1. Для частоты 1-16МГц стояли занчения 111, 110, 101. И CKOPT 0. Изначально галочка CKOPT стояла. Я снял ее, и выставил CKSEL3, CKSEL2. CKSEL0 трокать не стал. В результате МК перестал видеться прогой uniprof.
    Подскажи, пожалуйста, где я накосячил и как это теперь исправить. Пробовал танцы с бубном типа припаивания на XTAL1 проводка и держась за него — не помогает…

    1. Эээ чет не понял что ты там куда выставил? Напиши четко какие галки на CKSEL ты выставил.

      Для унипрофа, на 12мгц кварц выставить надо было так:
      CKSEL=1111 (или 1110 монопенисуально, так запускаться будет чуть быстрей на пару милисекунд, но нужен более качественный кварц)

      CKOPT=0 хотя я никогда ее не трогал у меня и на CKSEL=1111 CKOPT=1 Lмодификация Меги8535 (8мгц максимум) запустилась на 16МГЦ %)

      Теперь о косяках. Какие ты выставил конденсаторы? Рекомендуется от 12-22pF

      Флюс смыл? Дело в том, что если ноги кварца загажены остатками флюса, то он может и не запуститься. Тщательно промой плату. ПРоверь все пайки.

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

      1. Фузы выставил так:
        CKSEL3 — галка
        CKSEL2 — галка
        CKSEL1 — нет галки
        CKSEL0 — по умолчанию (не помню, кажется там была галка)
        CKOPT — нет галки

        По поводу кондеров и кварца. Я прошивал МК в простяцком программаторе на COM-порт с твоего сайта, а в нем нету ниче «лишнего». Т.е. втыкаю МК в панельку программатора, подключаю к компу, запускаю uniprof, а тот мне выдает, что ничего не видит на COM1 (до этого все виделось)… Попробую прошить в устройстве, там стоит кварц на 12МГц и кондеры по 22пФ. Просто получается, что если я выставил внешний источник тактовых импульсов (ну RC цепочку или Кварц), то в программаторе я им уже рулить не смогу без этого источника импульсов?

  10. Люди!
    Те,кто ПОНИМАЕТ….
    посмотрите вот эту програмку для LPT
    http://valery-us4leh.narod.ru/dlpt.html
    …там, на вкладке TEST есть 50Гц генератор от ножки LPT
    как вы думаете,можно ли его попробовать в качестве оживлятора,а?
    …. это ж всё-таки не палец….
    хотя…..
    пальцев у нас 20(у некоторых 21),а LPT чаше всего один….
    вдруг сгорит ещё….

    1. Да, потянет. Частота правда сильно мала. Будет меееееееееедлееееенно. Но зато стабильней пальца :) Главное питание возьми с компа, а землю возьми от LPT порта. Вообще у меня в компе земля везде одна, но тут товарищи говорят, что это не всегда так. Поэтому лучше не рисковать.

  11. Я с AVR не работал, но вот как думаю по поводу фьюзов и их активного уровня. Тут ведь всё зависит от описания. Вообще fuse по-английски — это предохранитель или, если более точно, то «плавкая вставка». Соответственно если в описании написано (а что там написано я не знаю), что такой-то фьюз отрубает к чертям такую-то фичу, то вполне логично, что активный уровень у него ноль. Ведь если предохранитель выдернули (ноль), то то, что через него включено и не должно работать. А если он на месте (единица), то и оборудование (фича) функционирует.

    А вот если в описании написано, что по нулю фича наоборот включатся, тогда действительно не логично.

    Но это так, мысли вслух…

  12. Приветствия всем присутствующим

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

    у меня SPIEN и RSTDISBL в сером состоянии тоесть не меняются и галочка отсутствует (пользуюсь PonyProg и LPT прошивателем )

    как сказано в о-писании отсутствие галочки соответствует активному состоянию тоесть бит=1 , тоесть как надо.
    Но я не знал о свойствах PonyProg и воспользовался кнопной выделить все что привело к расстановке галочек везде даже в «серых местах»
    в итоге устройство не видится больше программатором — но при втыкании говорит что он USBasp хотя прога для его юзания сее устройство не узнает даже после скармливания ей дров.
    я выковырял из панельки контроллер и вставил туда другой чистый — но программатор не узнал его
    — каков диагноз????????????????
    1) выбросить порт или прошиватель и сваять другой
    2) вылечить кривые руки и таки оживить незаслуженно удаленный из устройства зашитый контроллер
    3) Ваш вариант

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

      Если ты в понипроге выставил все галочки, то скорей всего ты 1) выставил SPIEN в 1 (он и так был в единице, по Поневской нотации) и отрубил RESET, а вот это ЖОООПА! и тут тебе тока высоковольтный программатор поможет.
      2) скорей всего ты спалил порт. Раз чистый МК не видится.

      Вот зря народ ведется на легкость 5ти проводков. Крайне вредный программатор.

      3) можешь поменять пины в LPT порту и прошить UniProf ом.

  13. С помощью (метода пальца) удалось запустить Attiny 2313, после неправильной прошивки фуз…, а от Atmega 8 и 16 не получается, думаю что с помощью генератора получится, может кто схемку подкинет???

    1. Позырь у меня в готовых устройствах регулятор скорости вращения вентилятора на 555 таймере. Оторви силовой транзистор, запитай от 5 вольт и поставь скважность 50% — вот тебе и генератор.

  14. Доброго времени суток)
    По своей невнимательности поставил в 1 второй заподлянский бит — SPIEN. И теперь через SPI (по простому) не могу прошить свою 16-ти МГц-ную 8-ую мегу.
    Кто что скажет по этому поводу? — Есть ли способ реанимировать мк?
    Заранее спасибо :)

    1. Отложи его пока в коробочку до лучших времен. Для реанимации этого МК нужен высоковольтный программатор. Схему его я все же наверное скоро выложу. МОжешь сам поискать в инете пока. Зовется HVprog и Paraprog

      1. доброго времени суток
        я тут еще интереснее учудил, выставил:
        цксел=0011 сут=10 цкдив8=0
        теперь мой мигальник работает ооооооочень меееееееедленно
        и дудкой не видится
        пробовал снижать скорость -Б
        не помогает
        может есть какой вариант его прочитать или проще новый мучать?

  15. в тему stk500
    http://www.der-hammer.info/hvprog/index_en.htm Advanced version (v0.5)
    просьба оценить ибо посоветовали собрать именно его а не например парапрог
    объясните пожалуйста чем отличается от реального стк500 чем лучшехуже, чего нехватает в отличии от оригинала стк500

  16. Доброго времени суток
    Нечайно выставил CKSEL3…0 = 1000
    Подскажите что делать?
    «Пальцевым методом» не помогло.
    Контроллер Mega 8535. Смотрел даташит, CKSEL биты выставляются так же, как и в табличке выше.
    Если надо RC генератор делать, то не подскажите что куда цеплять?

      1. кстати у меня похожая траббла с тини2313.
        висит на кварце 16МГц. ошибся с этими фьюзами, шил естессно такой, где всё «наоборот» с пони — uniprof )

        за все годы работ с аврами — реально первый такой случай )
        как это на самом деле лечится?

          1. что поставил — не помню, т.к. отвлекли.
            вроде 0101.

            размеры маленькие, поверх ничего вставить не получается. пока что с отпаянным и запаянным кварцем — не пашет. про RC — ещё не ставил.

    1. И не поможет.

      А в даташит поглядеть на предмет того что же ты там выставил не судьба? У тебя щас «External RC Oscillator» вешай вместо кварца RC цепочку и будет тебе счастье. В даташите все есть на этот счет.

  17. Мужики покупайте программатор «WizardProg77USB» горя знать небудете.И извращайтесь с фузами как вам угодно.Стоимость около 3500р.Дорого! ,но он того стоит.С ним идёт диск с собственным ПО .

        1. Это для ремонтников хорошо.
          Обычно из этих сотен видов МК ты в продаже найдешь только самые популярные, а они шьются запросто и схемами аля 5 резисторов да один диод. Кстати, он умеет шить семейство микроконтроллеров ST7 ?

  18. Ребята помогите оживить 16 мегу! беда в том что не помню фьюзов CKSEL3-0 :)
    Помню дерево! и мужик) вобщем трогались только эти 4 фьюзы, CKOPT по умолчанию. А эти в uniprof были сняты галки. (теоретически) :)
    Контроллер видится методом пальца через раз, изменить фьюзы не удается, читает их один раз из 10 и то все врем по разному :) вобщем лагает. Пробовал кварц на 10мгц, на 16 мгц, внешний такт от тестера (кстати когда одну ногу тестера на ноль а генерирующую частоту на XTAL1 и подаешь питание — тестер умерает :) ) Помагает только метод пальца и то в очень редких случаях.. кто знает варианты — помогите плз.. Походу еще не пробовал режим 3-8 мгц.. но разве на 10 не запустилось бы? еще RC цепочка.. как рассчитывать 1/(3RC) ? какие порядки, герц = 1 / 3*Омы*нанофорады? Тыкните в схему генератора простого на счетчике..
    Спасибо!

    1. Если 0000 то это внешний генератор. Тем более пальцем заводится хоть и через раз. Что подтверждает это.

      Генератор можно сделать на чем угодно хоть на 555 таймере, хоть на К155ЛА3 была тема про создание ШИМ наиболее простым способом.
      http://easyelectronics.ru/prakticheskaya-zadachka.html

      там в комментах генераторов вагон.

  19. Благодарю, еси заведется — отпишусь ) Если стоит режим 3-8мгц, от кварца 10мгц стартануть должно? (спрашиваю для уменьшения вариантов) :) Еще по поводу РЦ цепочки, все правильно с определением частоты? резюк и кондер расчитываются в омах и нанофарадах и получаем частоту в герцах?

  20. Доброго времени суток всем присутствующим! Мужики, помогите пожалуйста!
    По «незнанке» забил в свою Мегу8-16PU фузы как для PonyProg2000, забивал с помощью UniProf (Соответственно получилось всё с точностью до наоборот), в итоге программатор (5 проводов) не видит Мегу!Внешний кварц на 8МГц не помог! Подскажите пажалуйста реально ли её оживить? Что такое «Метод пальца» и RC цепочка и как их реализовать?

    1. Тебе надо на XTAL1 подать тактовый сигнал, простой прямоугольный сигнал.

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

      1. Спасибо за быстрый ответ! Т.е. нужно просто к ноге XTAL1 подпаять проводок, вставить Мегу в программатор и дотронуться до провода рукой? В итоге программатор должен увидеть Мегу? я правильно Вас понял?

        1. Может увидит, а может нет. Метод пальца это экстремальный способ. Не факт что получится, работает через раз и очень медленно.

          У меня таким способом удается вернуть обратно фуз биты один раз из 10 случаев.

          Лучше собери генератор из другого контроллера который просто будет выдавать на ножку сигнал с частотой где то 1мгц.

          Если же у тебя зашилось на RC цепочку то в даташите есть подробное описание какие номиналы резистора и конденсатора тебе надо будет поставить, а также как это все подключить. Раздел даташита. ЕМНИП Clock Sources

          1. Спасибо за пояснение! На счёт «генератора из другого контролёра» — у меня в наличие только эта Мега8, за другим контролёром надо на «Митино» пилить, а туда 150км (Раз уж всё равно придётся ехать, проще новую Мегу купить и не заморачиваться с генератором).

              1. На «Митино» съездить не удалось (Машину «Хлопнул»), заказал две Меги8 по почте — первую из них благополучно «убил» почти тем же способом — при попытке задать 8МГц от внутреннего генератора отключил бит «SCOPT»(=1), а биты CKSEL3…0 выставил 0100. После чего контроллер перестал определяться 5-ю проводками.
                Подскажите как его теперь запустить, внешним кварцем или другим генератором, если генератором, то киньте ссылку на тот что полегче!

  21. Ди, то что ты написал CKSEL=1111 — это значит в юнипрофе галочки Должны стоять?
    если это так — добавь в статью, так как я например не понял связи между «запрограммирован/не запрограмиирован «, галочкой и битом, который указыватеся.
    н-да, залочил-таки мегу.

      1. А зачем снимал не разобравшись наверняка как надо?

        Я всегда говорю, что беру биты по даташиту. Т.е. в точности как там. Т.к. даташит это святое. Мог бы и сравнить с даташитом, т.к. у разных мег по разному биты CSEL выставляются на одну и ту же опцию. А в унипрофе с даташитом совпадают галки.

  22. Отличный сайт, всегда находил ответы на все вопросы, которые у меня возникали! Но тут до меня чего то не доходит(
    А что делать если кварц нужен на частоту большую, чем 16 МГц?
    Мне например требуется запустить Мегу 16 от кварца 19,6608МГц (официально она поддерживает 20 вроде), как мне правильно выставить фюзы? Если не трудно, можно сразу в хексе и пнуть туда где написано как программировать эти фюзы через avrdude.

  23. Сдуру прошил тини2313 (неродной батник запустил)
    CKSEL=0111
    в даташите написано что
    External Clock — 0000
    Calibrated Internal RC Oscillator 4MHz -> 0010
    Calibrated internal RC Oscillator 8MHz -> 0100
    Watchdog Oscillator 128kHz -> 0110
    External Crystal/Ceramic Resonator -> 1000 — 1111
    Reserved -> 0001/0011/0101/0111
    Принудительное тактирование непомогает, все остальные фьюзы по дефолту.

    Есть советы кроме выбросить? =)

  24. Что-то случилось, и мой программатор Громова сдулся. Сначала начал подвисать на прошивке, на 41%(debian/avrdude)
    Раза с десятого прошивался, но грохался на верификации. Пробовал setserial’ом скорость ком порта до 9600 урезать(меньше не дает) — не помогло. В итоге, аврдьюд мне сказал — оппа, чето не так с lfuse, вернуть как было? Я тыкнул йес, но не помогло. Теперь мк вобще не определяется, с флагом -F кодовое число 0x0000
    Пробовал другой мк, тотже 0x0000.
    До этого все было норм. Что могло случится? Программатор весь прозвонил, на десять раз проверил на непропаи, вроде все ок. Так и не успел для USBAsp мк прошить:)
    Вобщем нужна помощь, что мне в этом случае делать? Может я компорт спалил? И если да, то как проверить?

    1. Некропостинг — но Буду отвечать везде, пока Ди не вставит примечание в статью про программатор Громова. Может, увидит кто нуждающийся.

      Для стабильной работы в линуксе avrdude с Громовым надо ОТОРВАТЬ ПРОВОД ОТ 2 ВЫВОДА COM-порта. Без этого именно такие симптомы и есть — подвисает на прошивке/чтении и не проходит верификацию. Уже несколько линуксоидов на эту тему отписались.

  25. Приветствую всех!Не знаю точно,фьюзы это или нет ,но — у меня МК работает как то криво.Первый раз такое -не работает кварц! Вообще.Как ни тыкай CKSEL в uniprof-e ,CKOPT -пофиг.На случай рядом генератор всегда стоит (4 Мгц) если чего не так- тыкаю его в XTAL2 и оживляю. Но не работает внешний кварц.А это и смешно и грустно-есть две меги 16 и 32,и парочка at90s2313.Есть также макетка для них со всем необходимым.Пишу прогу-но (!!!) работает как то не так,как нужно.Т.е. программлю таймер 1 (и нулевой пробовал) пишу в cvavr-таким образом ,что делитель максимум ,вызывающий прерывание — 11 с лишним кГц.Код таков
    —начало прерывания таймера—
    {
    X++;
    PORTB=X++;
    }
    получаем простое приращение,и младший разряд должен мигать с частотой в 2 раза меньшей чем 11 кГц (Кварц кстати — 12 Мгц).мигает…на глаз где то три раза в секунду,что ну НИКАК не килогерцы!
    на всех МК такая же картина
    по поводу этой программы. делал еще напрямую,без предделителя таймера- получается неизвестно что,кГц 2-8,не больше.ступор…
    менял конденсаторы,ставил другие кварцы — не помогает.причем интересно так работает-кварц вытаскиваешь — программа останавливается.вставляешь — поехала дальше.на кандеры не реагирует ну никак.Скорость ее работы не зависит от номинала кварца — пробовал 14,10,8,5,1 мГц — абсолютно также все.Конденсаторы выпаиваешь — работает.кварц выпаиваешь-остановилось.А УАРТ почему-то работает нормально хоть и асинхронник,с компом туда-обратно без ошибок идет на 19200.Осцилом меряю на обоих XTAL — 3.5 вольта постоянки,вообще тупо стоит на месте.Перепробовал и кондеры разные — от 15 пф до 30 — нифига!Не пашет и все тут.И фьюзы не помогают.сижу 3 день…
    Разозлился и сделал ВТОРУЮ такую ж макетку-может,емкости проводников или ошибка монтажа,в общем самые короткие проводники на xtal1,2 и все заоптимизировал ,чтоб емкости минимальные были,все тестером тщательно промерил на предмет ошибок-идеально все.Впаиваю(на этот раз новый кварц на 12 и кондеры на 22 пф) и светодиод с резистором 300 ом на порт(дабы видеть работу).Также!И кварцы опять менял потом и кандеры,и даже Мк новых пару мег16 купил…Что бы это могло быть,а?Фузы???

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

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

        1. От касания щупа генерация _кажется_ не срывается.Счетчик как считал так и считает(т.е. прога видимо пашет).А активный щуп из какой нибудь буферной микрухи можно самому сделать?В ДШ прописано,что можно через буфер забирать с xtal тактовый сигнал куда нибудь для других целей.

      1. Подскажите плиз!
        По умолчанию в меге8 фьюзы стоят (CKSEL3…0=0100)т.е.8мгц от внутреннего
        генератора).Мне собственно нужно то же самое.Вопрос в УНИПРОФЕ при прошивке
        нужно выставлять фьюзы или будет работать с заводской установкой???
        И всетаки в УНИПРОФЕ совпадает 0 и галка с даташитом при установке фьюзов
        а то я чот совсем запутался (если мне нужно =0100 то выствлять =0100 ,а не
        =1011 в хелпе Унипрофа толком не нашел)

  26. А у меня вопрос. Допустим я делаю коммерческое устройство. И хочу чтобы никто не мог выдрать прошивку из МК. Я выключаю spi интерфейс. Но ведь кто то может высоковольтным программатором оживить МК и выдрать прошивку? Ножки что ли MISO и MOSI отламывать? Это ж по варварски. Может есть метод более щадящий?

  27. Доброго всем времени суток.
    Возникла такая проблема. Начал новый проект на Tiny85. При первом программировании (CodeVision), выбрал свой МК настроил фьюзы, залили прошу. И только при попытке второго программирования заметил что этот долбаный Вижн мне выставил все LockBits. Все попытки стирания через эту же прогу окончиваются одинаково: Ничем, грит, не могу помочь, LB0=0 LB1=0.
    Как можно их сбросить?

  28. Нечаянно прошил фусы не так… оказывается на внешную RC сделал… восстановил)

    понравилась еще вот эта штука, как GUI к avrdude, которым прошиваю. Есть версия и под винду и под линукс. Хорошая штука. DI, gui которую ты описывал, только под винду к сожалению…
    PS: для 5-проводков надо в папочке conf указать stk200, по умолчанию стоит stk500, порт указать /dev/parport0 и запускать через gksu, от имени root, иначе пишет запрещен доступ к порту.

  29. Нечаянно прошил ATtiny2313-20 CKSEL=0000 SUT=10 и CKDIV8=1. Пробовал оживить её кварцами на 2,8,16Мгц, пальцем =) и потом воспользовался тактовым генератором от ftbb программатора. Подсоединил его к ноге XTAL1 и… ничего. Может я что-то не так делаю, или же придется паять генератор? У меня есть генератор на 50 гц на мультиметре, но я не знаю, как его юзать.
    Шил вот эти фузы -U lfuse:w:0xe0:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m .
    Заранее спасибо.

  30. Всем привет. Столкнулся я тут с такой бедой… По криворукости прошил фьюзы меги1280 CKSEL30 в [ 0100 ]. Это как я понял на внешний часовой кварц 32,768КГц. Купил в местном ларьке из спичечного коробка соответствующие деталюхи ( без маркировки и видно что не 1ой свежести ). Из 3х 2а оказались рабочими. Поставил, включил, работает, только в разы медленнее. А надо то мне всего-то переставить фьюзы. Использую мастеркитовские bm9010 и bm9009. Оба выдают ошибку аля «error entering in program mode». Пробовал программаторами из CodeVisionAVR, ПониПрогом, АВРеалом… Вижу как ресетится камень. Пробоввал шить другие камни — все ок. мега1280 покупал в дочерней плате BIGAVR MCU CARD. стоит оно 1,5к руб. Жалко очень. Где я неправ? с какой стороны еще подступиться? паралельного программатора в наличии нет.
    Пожалуйста, помогите!

    1. Просто твой программатор ломится в кристалл на большей частоте чем тот может переварить. ПОпробуй поискать там опции настройки частоты прошивки и выставить как можно ниже.

  31. Привет народ! В синапрог и в аврпрог при выборе источника тактирования возле времени старта есть еще загадочные циферки и буквы например:

    1K CK +0 ms
    1K CK +4 ms
    1K CK +64 ms
    16K CK +0 ms
    16K CK +4 ms
    16K CK +64 ms
    258K CK +0 ms
    258K CK +4 ms
    258K CK +64 ms

    Что это за 258К СК, 16К? В тексте вроде как об этом не говориться.

    1. Это задержка запуска после ресета. Т.е. ресет сняли (или питание подали), а мк ждет тикая счетчиком заданое количество СК и только потом стартует. Полезно когда надо дождаться инициализации всякой периферии, окончания переходных процессов и прочее.

          1. Ну да точно это не могут быть миллисекунды. Ступил. Просто в выпадающем списке есть например:
            258K CK +64 ms или
            16K CK +64 ms или
            1K CK +64 ms
            Так скольким тактам равны все эти числа? Везде стоит 64ms но разные СК.

              1. По совету твоему открыл да посмотрел.
                258K CK, 16К СК, 1К СК, длительность задержки при выходе из режима выключения и экономичного режима.
                64ms это дополнительная задержка после сброса. Извини что напрег малек. Думал может помниш навскидку. В следующий раз буду всегда рыть сам, потом если что спрашивать.

                1. Я на вскидку никогда вообще ничего не помню. Ну может быть разве что самые самые ходовые значения, вроде битов настройки таймера, да и те по символическим именам только. Предпочитаю по быстрому в даташит глянуть (главное знать куда!). Т.к. работаю одновременно с разными контроллерами (сейчас вот авр и армы двух видов, раньше был с51 и авр) и все в голове держать только мозги засорять.

  32. Доброе ночи!
    По глупости выставил на atmega8 неправильные фьюзы (по тактированию), ставил несколько разных кварцев с конденсаторами — все бестолку. Хотел уже идти к DI HALT`у с пивом (все равно в Челябе живем), но интересно восстановить самому. Потом нашел в загашнике at90s8535 и от неё прикурил мегу — заработало и стало определяться программатором. Пользуюсь UniProf`ом, читает флэш и фьюзы, но при попытке стереть или изменить фьюзы чтобы задать тактирование от внутреннего, все вешается в ноль. В чем может быть причина?

  33. Приветствую.:)
    Хотелось бы уточнить:
    «JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.»
    Тобишь, если твердо намериваешься пользоваться Jtag-ом, то на порт С нельзя вообще вешать никакую внешнюю переферию? Только разъем Jtag?
    Или просто нельзя пользоваться внешней переферией подключенной к порту С (или где там висит Джтаг) во-время работы с Jtag-oм, т.к. оная может начать себя неадекватно при этом вести?

    1. Не совсем так. Дело в том, что пока жтаг включен то эти линии порта не отвечают вообще ни на какие команды. Т.е. словно регистры порт, пин и ДДР не про них. Не весь порт, а только четыре линии отвечающие за жтаг. Причем жтаг можно вырубить программно, сняв бит в регистре вроде бы sfior.

  34. Tiny2313
    Были такие фьюзы:
    [IMG]http://s16.radikal.ru/i190/1104/a1/8bc782bb22cb.png[/IMG]
    Напаял кварц на 20Мгц, два дисковых конденсатора. Поставил такие фьюзы:
    [IMG]http://s016.radikal.ru/i336/1104/fb/1b718a74da65.png[/IMG]
    МК не откликается. Напряжение пробовал поднимать (вплоть до 4*1.5=6 Вольт от батареек), ничего не меняется, потребление 6 мА. Это я фьюзы не правильно выставил, или в монтаже кварца косяк?

    1. А другая колонка (Fuse High)? Если ты записал в нее то, что я увидел на картинках (все нули), то ты убил кристалл. (выключил RESET) и это больше вроде бы не лечится. Т.к. в 2313 есть бага не позволяющая этот бит сбросить высоковольтным программатором.

  35. Я восстанавливаю МК после косячных фузов -без танцев с бубном собрал простой девайс *fusebit doctor* нажал кнопочку секунда и камень новенький как с магазина!

  36. Здравствуйте. Я использую программатор STK500, и среду AVR Studio, когда выставляю FUSE биты, то бит SPIEN стоит галочка в сером фоне и с красным знаком вопроса, снять галочку немогу и ето на любом микроконтролере. Хочу узнать это так должно быть или это какой глюк?
    Зарание большое спасибо….

  37. Di halt, прив! Читал даташит про FUSE, написано, что в регистре GISP бит IVSEL тоже имеет какое то отношение к конфигурированию Bootloadera.. но какое че т не вкурил(

    в кратце не расскажешь?

  38. Здравствуйте. Я тоже накололся с различием фьюзов в uniprof и ponyprog. Выставил все с точностью наоборот в ATmega128 вместо этих фьюзов http://img24.imageshack.us/img24/9305/msavrsecbitshfusec4.jpg
    Прошивку и фьюзы считать могу, а поменять их — нет. Что можно сделать в моей ситуации? Микруха в корпусе TQFP64, вряд ли мне поможет параллельный программатор…

  39. Доброго времени суток!
    Столкнулся с проблемой:
    Нужно было запустить USART на mega8, написал программу выставил скорость скорость порта
    под кварц на 4МГц, программатор AVR910USB от мастер кит, программа — AVRprog встроенная в AVR
    studio. Прошил, usart не работает, замерил частоту на выводе МК XTAL — 1МГц, залез в секцию advenced там стоит «int RCosc, Frequency 1Mhz», поставил «ext EXTAL, Medium frequency», нажал write
    После этого чип перестал откликаться, программа ругается: can t enter programming mode!.
    Попробовал другой мк, откидывал кварц и синхронизацию — всё то же. Что делать?

  40. Вопрос не совсем по фьюзам, но тем не менее: какую форму имеют колебания на выводах XTAL1-XTAL2 когда к ним подключен кварц и МК тактируется от него? Подключил часовой кварц 32768 Гц, всё работает, но смущает, что осциллограф показывает на XTAL1 практически чистую синусоиду, а на XTAL2 — немного несимметричную, с пологим подъемом и более крутым спадом. Насколько можно быть уверенным, что кварц работает именно на заданной частоте, что она не изменяется например за счет подключаемых активным фьюзом CKOPT внутренних конденсаторов по 36 пФ?

  41. Здравсвтуйте, DI halt. Буду признателен за помощь. Купил новый tiny2313, прошил ponyprog, из битов оставил только SPIEN, правильно я понимаю, что теперь прошить я его смогу только с внешним кварцем? дело в том, что прошивал я его не внутрисхемно, после прошивки установил на плату (с кварцем на 12 МГц), не заработало, решил прошить еще раз, и получилось, ведь вроде не должно было (прошиваю без кварца)? fuse проверял, стоит только SPIEN. Заранее спасибо за помощь!

      1. Да, я записал программу, после этого считал фузы, там были заводские настройки (tiny новый был), оставил только SPIEN, записал, вставил в устройство, оно не заработало. Я по неопытности решил попробывать записать еще раз программу, вытащил tiny, и смог его прошить, но кварца я при перепрошивке не использовал, ведь не должно было получиться? Вот я и понять не могу в чем дело, пробывал и sinaprog, он тоже записывает, не могу понять почему, ведь если записывает значит установки стоят на тактирование от внутренней цепочки, т.к. кварц я не использую при перепрошивке. В чем же проблема?

          1. После прошивки хекса, считал фузы, они были заводскими, т.к. тини новый, убрал все галки (в ponyprog) кроме SPIEN, то есть осталась стоять только одна: SPIEN. Записал. Потом попробывал прошить еще раз и получилось, как так? кварц я не подключал.

  42. EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.

    Сколько не пробовал — EESAVE защищает только от стирания области EEPROM во время ERASE всего чипа, т.е. это удобно если вы отлаживаете ПО и в EEPROM хранятся какие-то конфигурационные или калибровочные данные (пароли, номера или еще что-то), стер чип, FLASH обновил, а EEPROM не затерся, и можно сразу проверять работу программы, не записывая EEPROM по-новой. И в даташите вроде бы именно так смысл этого бита описан. А к затиранию области EEPROM при выкдлючении питания имеет отношение только BODEN и BODLEVEL. Поправьте, если не так.

  43. Мужики, хочу выставить частоту 4 MHz от внутреннего RC (мега8). Соответственно CKSEL 3..0 должно быть 0011. Выставляю, запускаю программировать, потом считываю… и снова вижу 0001 как и по дефолту. Программатор USBAsp от немца, программа — eXtreme burner (http://extremeelectronics.co.in/avr-tutorials/gui-software-for-usbasp-based-usb-avr-programmers/) — другого работающего сочетания под семёрку 64 бит не нашёл. Вопрос такой — есть ли какие-то биты, которые запрещают выставлять CKSEL?? Флеш пишет, а биты — нэт, зараза.

  44. Здравствуйте!
    m324pa перестал отвечать после установки фьюзов.
    avrdude -p m324pa -P usb -c avrispmkii -U lfuse:w:0xff:m -U hfuse:w:0xca:m -U efuse:w:0xff:m
    Подключен кварц на 16 мгц.
    В какой режим я вогнал контроллер и как его теперь реанимировать?

    1. Хрен знает. Я на память не помню. Открой даташит про фуз биты, переведи свои числа для Low и High битов в двоичное представление да посмотри что у тебя получилось. 1 которая получится = 1 в даташите.

  45. А ни кто не сталкивался с такой проблемой, что ATmega16A(другие не пробовал) при настройке на внутренний RC, делит его чуть больше чем на 2?
    То есть, поставил 8МГц внутренние, запрограммировал таймер на 10сек, а он заканчивает только через 24сек.
    А если поставить на внешний кварц, те же 8МГц, то все ок — 10сек отсчитывает, как и должен.

    Я сначала думал, что я просто слишком измучил микросхемку, но потом поставил новую, потом еще, еще…. все одно и то же(
    Не понятно что творится с внутренним RC.
    Зашивал и через JTAG и через SPI….

      1. Ух ты! Это я удачно на такую штуку напоролся))

        Почитал документацию и в коим-то веке меня смутило слово Calibrated в заголовке и тексте «Calibrated Internal RC Oscillator».

        Фак, и ведь правда, я макросом RAMini сносил все подчистую, в том числе и OSCCAL байт.
        Вот чего он у меня так глюкал))))

        Надо бы убрать из макроса адреса периферийные :\

  46. По поводу наводки в 50Гц — а что если брать ее не с тела, а прилепить туда провод-антенну и пустить ее вдоль какого-нибудь сетевого шнура? По идее сигнал должен быть четче гораздо в этом случае?
    И, кстати, я правильно понимаю, что у контроллера внутри стоит только один кварц на определенную частоту, а для разгона его на другие в любом случае придется цеплять внешний? Ибо 8535 у меня работает на 1МГц, хотя по шиту вроде как до 16ти…

    1. Внутри стоит RC цепочка. Фузами ее можно настраивать на 500 (не везде) 1, 4(вроде бы, не помню) и 8мгц. То что она у тебя пашет на 1мгц это дефолтная заводская настройка. Можно фузами настроить на 8мгц. Хочешь выше — лепи кварц.

  47. Помогите разобраться. Запутался в datasheet. Хочу подключить один кварц на два МК (Atmega8535 и Atmega128). К 8535 подключаю кварц по обычной схеме (через кондёры), а на XTAL1 Atmega128 подаю сигнал с XTAL2 Atmega8535. Схема правильная ведь такая?

    8535 запускается. А вот 128 не стартует. Как правильно выставить fuse у 128 чтобы он работал в такой схеме?

        1. Для меги128 самое то. Но снять тактовый сигнал с ноги кварца от 8535 не получится. Он там слишком слаб, да и помехозащищенность сразу же резко падает. Потому если нужна жесткая потактовая синхронизация, то ставится один внешний тактовый генератор, оба камня приводятся в External Clock Drive Configuration и запускаются с этого генератора.

          1. Да, спасибо. Через логику заработало. Просто хотелось сделать попроще и подешевле.
            А если попробовать усилить и развязать сигнал с XTAL2 8535 и подкинуть его для 128 чтобы она думала, что кварц находится рядом с ней. Или не получится так? Теоретически хватит пары резисторов и один кондер. А на практике так делают?

  48. Накосячил… спать хотелось. AT90USB647 поставил low-fuse в 0x41 т.е. CKSEL=1. В даташите такому режиму соответствует Reserved. Камень перестал отвечать по SPI, при втыкании в USB комп вообще не реагирует (нет Неизвестного устройства).
    Вопрос: в каком режиме все-таки функционирует камень и как его вывести из ступора?

  49. Неплохой FUSE калькулятор — http://www.engbedded.com/fusecalc/. Вот мне всегда было интересно — вот чтоб написать такой калькулятор, нужно выписывать все возможные варианты FUSE-ов из даташитов всех МК Atmel? или есть какие то закономерности в них? просто пишу щас гуй для avrdude на Ubuntu (Qt5). А копаться во всех даташитах и сравнивать еще не осмелился. И мне как то не по себе становится от этих фюзов….
    ПыСы: игрался только с 8-, 16- и 32-й мегами)))) для них вроде несложно было и похоже.

    1. По моему тупо проглядывают все. Хотя может где то лежит xml ка какая. Откуда это можно взять, но я как то не запаривался. STK500 же откуда то все это берет. Может в дебрях студии лежит? Проследи филемоном к каким файлам лезет стк500 при работе.

  50. Здравствуйте! Я вляпался… Вместо read нажал write в окошке fuse-битов и, видимо, записал вот эти вот пустые ячейки… Мега 16 теперь не отвечает. Подскажите есть ли выход из положения?… =(

        1. Открываешь даташит, раздел FUSE bit и смотришь что за что отвечает. Расставляешь то как они встали случайно, потом опять же в даташите ищешь что какие комбинации означают, и в каком режиме у тебя что работает.

      1. Если я записал все пустые ячейки, то скорее всего я записал биты таким образом: http://www.fotohost.by/show/438d459b977e51c5b4c555b836eb6038. Когда открывается окно со фьзами, все клеточки без галочки снизу. Это обозначает 0 в каждом бите, т.е. активирован. Но к L-fuse это не относиться, там все наоборот, и поэтому там все по 1, т.е. все биты отключены (чуть выше описание режима такой комбинации). Также получается активированы все lock биты. Пробовал, следуя статье, метод «чудо-пальцев» прописать новые фьюзы, но не вышло. Задумался, когда записаны все лок биты мк вообще будет читаться? Если нет, то получается мне нужно добиться дважды шанса с «пальцем»: чтобы сначала стереть чип, а потом прошить фьюзы. Лок биты сбрасываются, когда стираешь программу, ведь так? Просто как-то не приходилось еще сталкиваться с таким. Обычно как-то удачно прописывал фьюзы) Пробовал также с кварцем. У меня только оказался на 12 МГц. Так же безуспешно… Может следует взять другой частоты кварц? Подскажите, пожалуйста, еще какие-нибудь методы. Буду чрезмерно благодарен!

        1. А вот не факт. Сначала разберись с тем, что значат пустые ячейки. Это может быть как 0 так и 1, в зависимости от степени укуренности автора программатора.

          Локбиты отвечают только за блокировку чтения прошивки. Она читается, но в считанном мусор. На их счет можеШь не беспокоиться. Тебе главное чтобы не был отключен режим программирования SPIEN, не отключен ресет RSTDSBL, ну и настройки тактового генератора CSEL. Вот от них и пляши, остальное не сильно критично.

          1. Вроде разобрался. Когда открываешь окошко с фьюзами, клеточки, что означают биты, пустые. Галочка означает, что записывается 1, т.е. «unprogrammed». Проверял на SPIEN: когда ставлю галочку, в пояснении пропадает надпись «Serial program downloading (SPI) enabled; [SPIEN=0]». Выбираю в этом поясняющем окошке эту надпись (фьюзы можно проставлять как галочками в биты, так и выбором параметров из выпадающего меню), и галочка пропадает. Т.е. пустые клетки — это 0 — «programmed», галочка — 1 — «unprogrammed». Получается, что я запрограммировал все фьюз-биты и лок-биты, но я что-то не нашел у себя RSTDSBL, да и в даташите тоже. SPIEN активирован, а CSEL у меня получается настроен на External Clock. Подключал кварц на 4 МГц и 22пф конденсаторы, как написано выше, — не отвечает МК по-прежнему. Хочу собрать внешний генератор, но не совсем понимаю, какой он должен быть. Посмотрите, пожалуйста, такой подойдет?
            http://imlab.narod.ru/Electron/Generators/Gen_05.jpg

              1. Спасибо. А какой уровень сигнал должен быть на выходе генератора? И на какую ногу MK его выход отправлять XTAL1 или XTAL2? Кое-где читал, что их рекомендуют замкнуть вообще.

                1. Питание то же что и у проца. 5 вольт, например. Вроде бы на хтал1, а хтал2 при этом просто висит в воздухе. Уточни в даташите. Там написано куда подавать я точно не помню.

      2. Фуууух! Попробовал я тот генератор — не вышло. Проверил саму микросхему, на которой собирал генератор (К561ЛЕ5). Как-то она кривовато работала, а 2 лог. элемента вообще вышли из строя. Сегодня купил К555ЛА3 и на ней собрал генератор. Но по-прежнему МК не откликался. Решил попробовать тактировать МК в схеме, хорошо что программа у меня была связана с миганием светодиодов. Подключил все, и ничего. Пока проверял правильность подключения, уровни напряжения, тут светодиод как вспыхнет! Я читал, даже мб где-то в этой статье, что программатор может обращаться к МК на большей частоте, чем та, на которой МК работает. Поэтому я подобрал R и С поменьше, для повышения частоты. МК наконец начал определяться! Но как-то через раз и фьюзы не хотели прошиваться. Но даже после их удачной прошивки, как выдавало окошко, в действительности они не изменялись. Тогда повысил еще частоту, и вот уже работает без всяких сбоев! Все удачно перепрошил, лок биты стер. Радости полные штаны :D Но еще не все. Подключил я этот генератор к своей старенькой 8меге, даже и не помню когда я ее залочил, валялась как игрушка. И что вы думаете? Откликнулась! Стояла она даже, как оказалось, на внешний кварцевый резонатор, не помню я что с ней делал и почему считал убитой. Перепрошил фьюзы и мега8 тоже к работе готова! Спасибо, просто гигантское, за помощь, за статью и за весь сайт! Не первый раз он мне помогает! Еще раз премного благодарен!

  51. «Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО»

    Нет, галочка — это «ВКЛЮЧЕНО» по определению, и любому, сделавшему иначе, надо бить сапогом в лицо. Галочка — это не уровень, и не бит. Это выключатель.

    Другой вопрос, надо ли электронщикам для их хитроконтроллеров делать галочки. Написать в поле ввода «1» — никаких проблем, а уж что оно там означает… даташит его знает.

  52. Нужна помощь с перепрошивкой фьюзов!
    Купил 10-к Attiny13a-ssu. По SPI программироваться отказываются. Купил в 5 раз дороже в chip&Dip, пару, чтобы просто проверить себя — эта пара стала программироваться без проблем и требуемую задачу на них выполнил.
    Теперь решил вернуться к не читаемым МК, через высоковольтный программатор. Гугол помог в поиске и собрал на макетке простейшую схему от сюда: http://habrahabr.ru/post/249967/.
    Теперь проблема: Фьюзы читаются, но новые НЕ шьются. Получается все время вот так:
    Signature is: 9007
    LFuse: 61, HFuse: FC, EFuse: FF
    write LFuse: 6A HFuse: FF
    LFuse: 61, HFuse: FC, EFuse: FF

    «write LFuse: 6A HFuse: FF» — Это я уже сам в прошивку добавил, чтобы убедится, что он вообще пытается что-то шить…

    1. Сам же отвечаю. Вопрос задал, но поиски решил не останавливать. В параллельной теме про программатор Громова, кто-то тоже пожаловался, что ничего не шьется. DIHALT ответил, что надо сперва очистить контроллер. Помусолив datasheet добавил функцию:

      void ChipErase () {
      shiftOut(0x80, 0x4C);
      shiftOut(0x00, 0x64);
      shiftOut(0x00, 0x6C);
      }

      Вызвал ее перед перепрошивкой фьюзов:

      if (sig == ATTINY13) {
      ChipErase ();
      Serial.print("write LFuse: ");
      Serial.print(0x6A, HEX);
      writeFuse(LFUSE, 0x6A);
      Serial.print(", HFuse: ");
      Serial.println(0xFF, HEX);
      writeFuse(HFUSE, 0xFF);
      }

      Результат:

      Signature is: 9007
      LFuse: 61, HFuse: FC, EFuse: FF
      write LFuse: 6A HFuse: FF
      LFuse: 6A, HFuse: FF, EFuse: FF

      Пошел проверять SPI :)

  53. BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер.

    Что значит «галочка включена»? в Uniprof это значит, что бит не запрограммирован. И программа выполняется с нулевого адреса. Опять эта путаница.

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