Компютри Windows интернет

Описание на предпазител atmega8. Микроконтролери ATMEL. Предпазители. Предпазители. Основни правила за начинаещи

Какво е ПРЕДПАЗИТЕЛбитове? Думите изглеждат познати, но много хора всъщност не знаят предназначението им, поставят отметки в квадратчетата и ги флашват, устройството работи и това е добре. Искам да ви разкажа малко за тези битове FUSE.

ПРЕДПАЗИТЕЛбитове ( предпазители) – казано по-просто, те конфигурират определени параметри на микроконтролерите, това е един вид инструмент за фина настройка, като предпазителите включват или конфигурират параметри като:
- честота на генератора, външен или вътрешен генератор
- забрана за четене на фърмуера на микроконтролера
- активиране или деактивиране на таймери
- честотно деление на кристален осцилатор
- EEPROOM защита срещу изтриване
…и така нататък. Всеки микроконтролер има свои собствени предпазители, различните микроконтролери имат различен списък от предпазители, например ATmega8 няма предпазител CKOUT, но той присъства в ATtiny2313. Всички тези предпазители са описани в спецификациите за микроконтролери.

ОсновенПравилото при работа с предпазители е да не бързате да ги поставяте, освен ако не сте напълно сигурни в правилността на вашите действия.

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

CKSEL, има само четири такива предпазителя с различни букви, това е група CKSEL 0,CKSEL 1CKSEL 2 иCKSEL 3, определят честотата на тактовия генератор и неговия тип импулси са необходими за работата на почти всеки микроконтролер. Много микроконтролери имат вътрешен осцилатор, но можем да свържем външен и да настроим предпазителите да работят от външен осцилатор. Към щифтовете е свързан външен кварцов резонатор XTAL 1И XTAL 2, освен това са запоени чифт ~20pf кондензатори, единия край към кварца, другия към минуса. Ако направите грешка при инсталирането на тези предпазители, тогава микроконтролерът може да бъде „заключен“, за да възстановите контролера, в момента се изпраща сигнал на часовника към крака XTAL1, изобретени са доста схеми за възстановяване на контролери заключена по този начин. Този генератор може да бъде направен от почти всяка логика или дори от таймер 555.

Има прости схеми, използващи 1 транзистор, чифт резистори и кварцов резонатор, и по-сложни, използващи чипове като K155LA3. Тези методи 100% съживяват контролери с такъв дефект

Група предпазители SUT1И SUT0- битове за предпазители, които контролират режима на стартиране на тактовите генератори на MK, а също така задават стартовата скорост на MK след подаване на захранване. Свързани с предпазители CKSEL,именно CKSEL0.

CKOPT- бит, определя работата на вградения осцилатор за работа с кварцови резонатори, задава "амплитудата" на трептенията на часовниковия сигнал върху кварца. Този бит се програмира доста често.

RSTDISBL– много опасен предпазител, неправилна настройка може да деактивира изхода RESET, след което възможността за програмиране на ISP програмиста ще изчезне. малко RSTDISBLобръща изхода НУЛИРАНЕкъм I/O порта.

SPIEN– предпазител, който позволява на МК да работи през SPI интерфейс. Всички микроконтролери се пускат с вече инсталиран бит SPIEN. Смята се за опасен синтез.

EESAVE- Удобно за четене като EEPROOM SAVE, буквално означава „запазване на EEPROOM“, този предпазител предпазва EEPROM от изтриване. Например, когато следващия път качите фърмуера на контролера, можете да зададете EESAVE = 0, а при изтриване MK EEPROOM ще остане недокоснат.

БОТУШИ, се състои от група битове BOOTSZ1И BOOTSZ0, определя размера на областта на паметта на записаните програми, свързани с бита BOOTRST.

BOOTRST,определя адреса, от който ще започне изпълнението на програмата. Ако битът е зададен, т.е. Ако BOOTRST=0, тогава програмата ще стартира от адреса на зоната за зареждане.

БОДЕН- бит, който, когато е зададен ( BODEN=0), ще контролира захранващото напрежение, микроконтролерът може да се рестартира, да се повреди и т.н. Свързан с НИВО НА БЕДЛЕСТ.

НИВО НА БЕДЛЕСТ. - определя момента, в който се задейства детекторът за ниво на захранващото напрежение; когато захранващото напрежение падне под нивото, контролерът ще се "рестартира".

SELFPRGEN- бит, който позволява ( SELFPRGEN=0) или забранява ( SELFPRGEN =1) програмата записва в паметта.

OCDEN– този предпазител позволява или забранява четенето на програма от паметта на контролера.

Веднъж споменах в статиите си, че в някои програми предпазителите са настроени огледално. Помня програмиран предпазител=0 , А Не програмиран=1 . В програмите Конструктор на алгоритъм, Унипрофпредпазителите се настройват по един начин и в програмите PonyProg,CodeVisionAVR, AVR Studio, SinaProgи някои други, предпазителите трябва да бъдат настроени по огледален начин в сравнение с предишния списък с програми.

От дълго време в интернет се появиха така наречените „калкулатори на предпазители“; това са специални приложения, предназначени да помогнат при конфигурирането на микроконтролер. Приложението е интуитивно, мисля, че ще го разберете, в списъка с контролери избираме MK, от който се нуждаем, след това избираме необходимите функции, а отдолу се поставят отметки в кутиите с предпазители, всичко е много просто.

Тези приложения са много удобни, защото... например напоследък много често авторите на своите проекти пишат стойностите на предпазителите с неразбираеми букви или цифри или с думи, които начинаещият не разбира какво означава това и какви предпазители трябва да бъдат зададени (често можете да намерите коментар на статия „кои предпазители трябва да се настроят?“). Калкулаторът за предпазители ни помага много в това отношение.

Мисля, че сега, ако ви попитат „какво са предпазителите и защо са необходими?“, Ще можете да обясните тяхната цел на човек, но засега това е всичко!

В предишни статии ви посъветвах да не се намесвате в тези битове. И имаше причини за това, тъй като чрез неправилна настройка на тези битове можете да блокирате завинаги контролера за по-нататъшно мигане или каквато и да е употреба изобщо.

Но без да знаете тази функция на контролера, няма да стигнете далеч. Така че ще напиша всичко по ред. Различните версии на контролерите имат различен брой предпазители, някои може да липсват, но основните винаги са там. Да минем през тях.

Конфигурационните битове се намират в специална област на паметта и могат да се променят само с помощта на програмиста при писане на контролера. Има висок байт и нисък байт. Малкият байт обикновено отговаря за честотата, а високият байт за всички видове дрънкулки.

И така, основното нещо:

Atmel AVR приема следната нотация: битът на предпазителя, нулиран на нула, се счита за активен, т.е. включени.

ПримерБитът RSTDSBL, както подсказва името, е RESET DISABLE. Ако активирате тази опция, вашият RESET крак се превръща в I/O порт, но за това губите възможността да актуализирате контролера чрез ISP.

Така че, за да изключите RESET (и да получите голяма грешка с фърмуера в замяна на малък съвет под формата на допълнителен крак), трябва да напишете 0 на този бит.

От една страна е нелогично и криво. Сякаш нотацията, която е приета по целия свят, е, че нулата е изключена, но тук, знаете ли, е обратното. От друга страна това им е контрольорът, те си правят каквото си искат. Спомнете си веднъж и това е. И като цяло в електрониката често приемат нула като сигнал.


Контролерите обаче се правят от електронни инженери, а фърмуерните програми се правят от програмисти. Колко логично. И така тези програмисти отидоха и направиха адска бъркотия с квадратчетата за отметка. Трябва ли веднъж завинаги да приемат за стандарт отметката да е 1, а не ON (което, да напомня, е нула). И следователно в някои мигащи програми отметката означава, че опцията е активирана (в FUSE битът е написан 0), в други, обикновено написани от инженери по електроника, отметката означава едно. Тези. точно обратното.

Какво се случва, ако го смесите? И ще бъде МНОГО зле. Контролерът ще влезе в грешен режим и може да се заключи за постоянно. Тези. Поисках го веднъж и това е. Пристигна.

Не, можете да го запазите, но за това ще ви трябват допълнителни трикове под формата на високоволтов програмист, JTAG адаптер или тактов генератор. Всичко зависи от това в какъв режим сте задали контролера с вашите неправилни настройки.

За начинаещ обикновено е по-лесно да отидете и да купите нов MK, отколкото да съживите блокиран. Но не бързайте да го изхвърляте в кошчето. Маркирайте го и го оставете настрана за бъдещето, ще го разберете и ще го съживите.

Конфигурация на часовника
По подразбиране всички AVR контролери (с изключение на по-старите серии AT90S2313, AT90S8535 и т.н.) са конфигурирани да работят от вътрешен източник на часовник. Тези. Всичко, което трябва да направите, е да подадете захранване към тях и те започват да работят. Нищо повече не е необходимо.

Битовете са отговорни за източника на часовника CKSEL
Като ги настроите правилно, можете да изберете честотата на контролера, както и източника на часовниковия сигнал.

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

Тези. Към входа XTAL1 се подават правоъгълни импулси. Това понякога се прави в синхронни системи, когато няколко контролера работят от един генератор.

Техническо отклонение
Често влизат в този режим, когато се опитват да настроят контролера да работи от външен кварц (CKSEL=1111), но или бъркат нотацията, или поради шега с обратната нотация на битове във всякакви извратени мигащи програми . След като кристалът беше блокиран. Но всъщност е невъзможно кристалът да се блокира плътно с помощта на CKSEL. Обикновено всичко се решава със запояване на кварц и започване от този кварц. Най-лошото, което може да се случи е, че ще имате нужда от външен тактов генератор. Което би съживило кристала. Прави се за пет минути от всеки TTL логически чип, например от K155LA3 - има много схеми в интернет. Или на таймер 555, или можете да вземете втори MK и да напишете проста програма върху него, която дръпва крака. И ако имате осцилоскоп, тогава можете да получите сигнала на управляващия генератор от него - терминалът му трябва да е на всеки осцилатор. Земята осцилира към земята на контролера, а изходът на генератора към XTAL1.

Но какво да направите, ако сърбежът е непоносим, ​​контролерът е заключен и няма чип за реанимация под ръка? Понякога методът на пръстите работи тук. Смешното е, че много готино прицелване с честота от приблизително 50 Hz е насочено към човешкото тяло. Всеки, който е хващал сондите на осцилоскоп с ръце, помни какви глупости веднага се появяват на екрана - това е! Защо не използвате това ръководство като часовников сигнал? Така че запоявате проводник към щифта XTAL1, хващате го с ръка и натискате четене или запис на контролера :) Предупреждавам ви веднага, методът работи като каша, не за първи път, отнема много време за четене и понякога с грешки, но отнема известно време, за да пренапише FUSE битовете на правилната една страна, трябва да е достатъчно. Успях този трик няколко пъти.

CKSEL3…0 = 0100 – 8 MHz от вътрешния осцилатор (обикновено те са по подразбиране)
За повечето AVR, тази CKSEL конфигурация означава тактова честота от вътрешния осцилатор на 8 MHz, но може да има вариации. Така че в този случай внимателно разгледайте листа с данни. Към табелата с режимите на работа на вътрешния калибриран RC осцилатор

Понякога е необходимо да имате външен клок генератор, например, за да може да се настройва без да пречи на фърмуера. За да направите това, можете да свържете RC верига, както е показано на диаграмата, и да изчислите честотата с помощта на формулата f = 1/3RC, където f ще бъде честотата в херци, а R и C, съответно, съпротивлението на резистора и капацитета на кондензатора в ома и фаради.

  • 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; други MK могат да се различават. Проверете листа с данни за подробности!

Проблемът с вътрешния осцилатор и външните 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 MHz с CKOPT=0)

И ако CKOPTе равно на 0, тогава със същите стойности на CKSEL можете да зададете кварц от 1 до 16MHz.

Разбира се, 16MHz кварц може да се инсталира само на Mega без индекса "L". (Въпреки че, както показва практиката, Lku също може да бъде овърклокнат доста добре. Моят ATMega8535L работеше на 16 MHz, но имаше странни ефекти в операцията. Затова не го извратих толкова много и премахнах овърклокването). Отново, всичко по-горе точно отговаря само на Mega 16; други може да се различават леко.

малко CKOPTопределя люлеенето на часовниковия сигнал. Тези. амплитуда на трептения на изхода от кварц. Когато CKOPT = 1, диапазонът е малък, поради което се постига по-ниска консумация на енергия, но устойчивостта на смущения е намалена, особено при високи скорости (и максимумът, съдейки по горната таблица, изобщо не може да бъде постигнат. Повече точно може да започне, но никой не дава надеждни гаранции). Но ако CKOPT е активиран и в него е записано 0, тогава люлеенето на сигнала веднага ще се промени от 0 на мощност. Това ще увеличи консумацията на енергия, но ще увеличи устойчивостта на смущения, а оттам и максималната скорост. При овърклок на MK е още по-необходимо да настроите CKOPT на 0.

Също така си струва да се спомене битът SCKDIV8, който не присъства в Atmega16, но често се среща в други AVR контролери. Това е часовников делител. Когато е инсталиран, т.е. при нула, тогава честотата, зададена в битове CKSEL0...3, се дели на 8, което е това, на което Длинни се заби по едно време, опитвайки се дълго време да разбере защо не работи за него. Красотата е, че този делител може да бъде деактивиран програмно чрез записване на желания коефициент на разделяне, например единица, в регистъра CLKPR. Цялата шега е, че SCKDIV8 е активен по подразбиране! Така че внимавай!

SUT битовезадайте началната скорост на MK след премахване на RESET или прилагане на захранване. Стойността там варира от 4ms до 65ms. В цялата си практика все още не съм имал възможност да използвам тази опция - няма нужда. Затова го настроих на максимум 65ms - ще е по-надеждно.

малко RSTDISBLспособен да обърне линия Нулиранев един от крачетата на порта, което понякога е много необходимо, когато някой малък Tiny няма достатъчно крака за всички задачи, но трябва да помним, че ако деактивирате Reset, възможността за флашване на контролера с помощта на пет проводника автоматично пада. И за да прекачите, ще ви трябва високоволтов паралелен програмист, който струва няколко хиляди и е проблематично да се направи на колене, въпреки че е възможно.

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

WDTONотговаря за Dog Timer, известен още като Watch Dog. Този таймер рестартира процесора, ако не се нулира периодично - предотвратявайки замръзване. Ако WDTON е настроен на 0, тогава кучето изобщо не може да бъде изключено.

НИВО НА БЕДЛЕСТИ БОДЕН- Това е режим на контрол на напрежението. Факт е, че при определен праг на напрежението, под критично ниво, контролерът може да започне да става много бъг. Може спонтанно да повреди, например EEPROM или нещо друго. Е, какво си помисли, ако не те нахраня няколко седмици, и ти ще започнеш да бъгваш :)

И така, за да разреши този проблем, AVR има вграден контролер на мощността. Той се уверява, че напрежението не е под адекватното ниво. И ако няма достатъчно напрежение, тогава той просто натиска RESET и не позволява на контролера да стартира. Тези два предпазителя управляват тази функция. БОДЕНвключва и НИВО НА БЕДЛЕСТви позволява да изберете едно от две критични нива. Който? Няма да го разкривам, вижте в листа с данни (секция за контрол на системата и нулиране).

JTAGEN— Активиране на JTAG. Активен по подразбиране. Тези. JTAG активиран. Поради това MEGA16 (както и 32 и други, които имат JTAG) не могат да използват щифтове на порт C, отговорни за JTAG. Но можете да свържете JTAG дебъгер и да го използвате, за да влезете в мозъка на контролера.

EESAVE— EEPROM защита срещу изтриване. Ако включите това нещо, тогава, когато MK е напълно нулиран, EEPROM зоната няма да бъде изтрита. Полезно, например, ако някакви ценни данни се записват в EEPROM по време на работа.

BOOTRST— прехвърляне на началния вектор в областта на зареждащия механизъм. Ако това поле за отметка е активирано, тогава MK започва не от адрес 00000, а от адреса на сектора за зареждане и първо изпълнява зареждащия механизъм. Повече подробности за това са написани в статията за фърмуера чрез товарач.

БОТУШКИZ0..1— група от битове, които определят размера на сектора за зареждане. Вижте листа с данни за повече подробности. Те се различават от контролер до контролер.

Заключващи битове
Това всъщност няма нищо общо с предпазителите. Това са битове за сигурност. Задаването на тези битове деактивира четенето от кристала. Или флаш, или EEPROM, или и двете едновременно. Необходимо е само ако продавате вашите устройства. Така че злите конкуренти да не изтекат фърмуера и да поръчат повече от 9000 клонинга на вашето устройство от Китай, оставяйки ви без панталони. Те не представляват опасност. Ако блокирате кристала с тях, тогава извършете пълно изтриване и няма да има проблем.

Характерна особеност на инсталираните lock битове е, че фърмуерът е четим - в него байтовете са подредени. Тези. 00,01, 02, 03, 04... FF, 00... Виждали ли сте такива глупости? Така че не е вашата съдба да откраднете фърмуера - той е защитен =)

Мерки за безопасност
А основното правило при работа с битове FUSE е ВНИМАНИЕ, ВНИМАНИЕ и ПАК ВНИМАНИЕ! Никога не настройвайте FUSE, без да проверите листа с данни, дори ако ги копирате от доверен източник.

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

Ако размитите битове са посочени с две числа - най-значими и най-малко значими битове, тогава те се задават както в листа с данни. Където 0 е разрешено.

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

ПЪРВО ЧЕТЕМЕ ТЕЗИ, КОИТО ИМАМЕ, СЛЕД ТОВА ПИШЕМ ТЕЗИ, КОИТО НИ ТРЯБВАТ

Прочетете - Променете - Пишете. Единствения начин. Защо? Да, просто често се случва така: отворих раздела FUSE, но програмистът беше глупав и не ги преброи. В резултат на това имате празни клетки навсякъде. Доволен, зададох само тези, които ви трябват SKSEL, и след това натиснах WRITE. Това е мястото, където обикновено идва човекът. защото Не само тези, които променяте, но и цялата секция се записват в контролера. Със същите празни клетки. Представете си каква бъркотия ще бъде там. Същото нещо! И тогава те тичат да се оплакват в коментари и форуми, казвайки, че не съм докосвал нищо подобно - просто е там. Да, точно сега!

И така, още веднъж - Четете, променяйте, пишете!

улика:
Как можете да определите с един поглед какъв тип (директни или обратни) битове за предпазители има в непозната мигаща програма?
Дедуктивен метод: Натиснете read Fuses и вижте състоянието на бита SPIEN, който винаги е активен и ако бъде нулиран, програмистът дори няма да може да открие контролера. Ако SPIEN е 1, това означава, че предпазителите са обратни, както в PonyProg. Ако е нула, това означава според нотацията на Atmel.

Задаването на Fuse и Lock битове (битове за конфигуриране и блокиране) на микроконтролери (MCU) от фамилията AVR, особено за начинаещи, е доста трудна задача и често може да причини объркване при настройване и програмиране на MCU. Ако сте пропуснали малко или сте го задали неправилно, това може да доведе до неправилна работа на програмата или, дори по-лошо, до невъзможност за програмиране на MK в схемата чрез серийния интерфейс.

Въпреки факта, че техническата документация за всеки MK предоставя изчерпателна информация за битовете Fuse и Lock, начинаещите често се чувстват малко несигурни, преди да изпълнят командата за запис на конфигурация и битове за заключване. В статията ще разгледаме основните характеристики на конфигурационните битове на AVR семейството MK.

Предпазител и заключващи битове

Преди да навлезем в детайлите на конфигурационните битове, има едно нещо, което трябва да разберете и запомните:

  • Бит предпазител = 1, означава, че е непрограмиран (изчистен, неактивен);
  • Бит предпазител = 0 означава, че е програмиран (настроен, активен).

Това е един от основните източници на объркване при програмирането на битове Fuse и Lock. Свикнали сме да мислим, че задаване на стойност на параметър означава да напишем 1, нали? При AVR Fuse битовете е обратното, настройката на който и да е бит означава писане на 0 и това трябва да се помни.

Конфигурационните битове се намират в отделна област на енергонезависима памет. Например, MK има четири конфигурационни байта, които трябва да бъдат програмирани за правилна работа. Един от тези байтове съдържа заключващите битове, останалите три (често наричани висок, нисък и разширен) съдържат конфигурационни битове. Този набор от битове задава първоначалните настройки на MCU: източник на часовник, област за зареждане, операция за нулиране на хардуера, таймер за наблюдение и т.н. Първо ще разгледаме битовете за заключване (Фигура 1).

В зависимост от типа AVR микроконтролер, броят на заключващите битове може да варира, но двата най-малко значими бита винаги присъстват. битове LB1 и LB2 се използват за блокиране на достъпа до вградената флаш памет. Вероятно знаете, че разработчиците на всякакви устройства почти винаги блокират четенето на фърмуера на MK, за да защитят своята интелектуална собственост и да предотвратят създаването на дубликати и фалшификати. Четенето на заключен микроконтролер е като бонбон за хардуерните хакери, но това е друга тема. Така че, ако трябва да защитите вашия фърмуер от копиране, трябва да заключите съдържанието на паметта на микроконтролера, в противен случай оставете битовете непроменени. Други блокиращи битове ( BLB01, BLB02, BLB11 и BLB11 ) може да се използва за блокиране на запис/четене към/от флаш памет, както от областта на приложението, така и от секцията за зареждащо устройство. Блокиращите битове рядко се програмират (в зависимост от спецификата на приложението), няма да се спираме на тях. Дори ако програмирате някой от тях, заключващите битове се нулират (настройват се на 1) по време на командата Chip Erase.

Тези, от които най-много се интересуваме, са конфигурационните части; ще трябва да се справяте с тях много често, независимо дали ви харесва или не. Местоположението на определени битове на Fuse в трите конфигурационни байта се различава в зависимост от използвания MCU. Например ще разгледаме ATmega328P, който има три конфигурационни байта (Фигура 2).

Фигура 2. Състав на конфигурационните байтове и началните стойности на битовете Fuse на микроконтролера ATmega328P.

Вижте състава на ниския байт. Виждате група от 4 еднакви бита CKSEL0, CKSEL1, CKSEL2, CKSEL3 . Те се използват за избор на типа източник на часовник за микроконтролера MK. По подразбиране (фабрични настройки), микроконтролерът е конфигуриран да работи от вътрешен 8 MHz RC осцилатор. Логично това е най-безопасният вариант за работа с микроконтролер. Но, както знаете, устройствата от семейството AVR могат да работят от различни източници на тактова честота:

  • калибриран вътрешен RC осцилатор (по подразбиране 8 MHz);
  • външен RC осцилатор;
  • външен керамичен или кварцов резонатор;
  • външен нискочестотен кварц;
  • външен източник на часовник.

За всеки от представените режими на часовник има набор от настройки на битовете на Fuse CKSEL0..3 , които се използват за управление на честотата на тактовия генератор и времето за връщане на микроконтролера в работен режим от режим на ниска мощност. Тези битове са тясно свързани с битовете SUT0 и SUT1 , които всъщност контролират времето за стартиране на микроконтролера след подаване на захранване. Забавянето на задействането е необходимо за стабилизиране на генерирането на керамични резонатори и кристали. Точните стойности на времето за достигане на работен режим на микроконтролера са посочени в техническата документация.

Конфигурационен бит CKOUT разрешава/забранява изхода на тактовата честота към един от пиновете MK; за ATmega328P към pin PORTB0 (за клокване на други устройства), независимо кой MK източник на часовник се използва. Ако битът е програмиран, основните и алтернативните функции на порта PB0 не са достъпни за потребителското приложение.

Последният бит в ниския байт е CKDIV8 . По подразбиране този бит е зададен, което означава, че 8 MHz делител на честота с коефициент 8 е свързан към вътрешния RC осцилатор, така че системната тактова честота на MK в този случай ще бъде равна на 1 MHz. Ако имате нужда от 8 MHz тактова честота, малко CKDIV8 трябва да се нулира.

Сега нека се съсредоточим върху конфигурационния байт от висок ред.

Първо малко - BOOTRST , което е изчистено по подразбиране. Ако този бит е зададен, след подаване на захранване към микроконтролера или след нулиране, микроконтролерът ще започне да изпълнява програмата от сектора за зареждане. Просто казано, ако дадено приложение изисква функции за зареждане от флаш памет, тогава този бит трябва да бъде програмиран. Ако просто трябва да програмирате микроконтролера чрез вътрешносхемния интерфейс, тогава можете да оставите този бит недокоснат.

Когато използвате буутлоудър, битовете стават важни BOOTSZ0 и BOOTSZ1 . Те определят областта на флаш паметта за буутлоудъра. Ако кодът на буутлоудъра на вашето приложение е малък, можете да използвате конфигурационни битове, за да разпределите по-малка област от флаш паметта за буутлоудъра и да оставите останалото за приложението.

Следваща част EESAVE . Ако е програмирано (0), съдържанието на енергонезависимата EEPROM памет ще остане непокътнато по време на процедурата за изтриване на чипа. В повечето случаи това е полезна функция, например когато EEPROM съхранява важни данни или параметри за калибриране и фърмуерът трябва да се актуализира, тогава програмирайте бита, преди да смените фърмуера EESAVE .

След настройка на бита WDTON Таймерът за наблюдение на микроконтролера се включва веднага след подаване на захранване и не може да бъде изключен от софтуера. В този случай таймерът за наблюдение постоянно ще изпълнява функцията си за периодично нулиране на микроконтролера, освен ако в програмния код не бъде изпълнена специална команда за нулиране на таймера за наблюдение. Ако малко WDTON не е инсталиран, таймерът за наблюдение е активиран/деактивиран от софтуера.

малко SPIEN предназначен да деактивира интерфейса за серийно програмиране на микроконтролера. Всъщност не можете да промените състоянието на този бит чрез серийния интерфейс (микроконтролерите AVR поддържат още два паралелни режима на програмиране), но са известни случаи на промяна на състоянието на бита SPIEN в случай на неправилна работа или повреда на вътрешносхемния програматор.

Подобна ситуация с бита RSTDSBL - използва се за деактивиране на функцията за нулиране на хардуера, с други думи, щифтът за нулиране на MK се използва като I/O порт. В някои ситуации (MCU с малък брой I/O линии) това е много удобно, но като цяло не се препоръчва. Неправилна настройка на битовете RSTDSBL може да ви лиши от възможността да програмирате микроконтролера през SPI, тъй като наличието на сигнал за нулиране е предпоставка за активиране на режима на програмиране.

малко ДУЕН използва се за активиране на специален интерфейс за отстраняване на грешки DebugWire за AVR микроконтролери. Промяна на битовото състояние SPIEN, RSTDSBL и DWEN чрез сериен интерфейс не е възможно; това ще изисква паралелен програматор с поддръжка за режим на програмиране с високо напрежение или връзка чрез интерфейса DebugWire.

Още нещо, което си струва да се отбележи CKOPT в старшия байт на конфигурацията ( липсва в ATmega328P, но присъства в други AVR MK), управлява режима на работа на усилвателя на тактовия генератор. Ако битът е програмиран (0), тогава изходният сигнал на тактовия генератор има колебание (амплитуда), равно на захранващото напрежение. Тази опция може да се използва, когато микроконтролерът ще работи в среда с високо ниво на шум, а също и когато планирате да свържете друг микроконтролер към пин XTAL2. В други случаи този режим трябва да бъде деактивиран ( CKOPT=1 ), тъй като консумацията на енергия на микроконтролера се увеличава и това не е добре дошло в устройства, захранвани с батерии.

Последен конфигурационен байт (разширен). За микроконтролера Atmega328P той съдържа три бита: BODLELEL0, BODLELEL1, BODLELEL2 . Тези битове са предназначени да зададат прага за веригата на детектора на захранващото напрежение: когато захранващото напрежение достигне зададеното ниво, микроконтролерът ще се нулира.

Калкулатор за стойност на бита на предпазителя

Когато трябва да програмирате нов MK, можете да използвате техническото описание на микроконтролера, за да зададете битовете Fuse. Но има по-удобен и по-прост начин - Fuse-bit calculator - онлайн инструмент, разработен от Марк Хамерлинг (Фигура 3). Вие независимо избирате типа микроконтролер и активирате/деактивирате необходимите опции, а конфигурацията на битовете на Fuse ще се актуализира автоматично.

Освен това можете индивидуално да зададете битовете на Fuse в отделна форма, стойностите на ниските, високите и разширените байтове на конфигурацията също ще се актуализират автоматично (Фигура 4), докато командите се генерират за програмиста AVRDude.

Ако имате мобилен телефон или таблет с Android, можете да използвате безплатното приложение AVR Fuse Calculator, което изпълнява същите функции и генерира команди за програмиста AVRDude. В базата данни на програмата има 144 AVR MK.

Основни правила за начинаещи:

  • Никога не променяйте състоянието на битовете DWEN, SPIEN и RSTDSBL. Всъщност няма достъп до тях чрез интерфейса за серийно програмиране;
  • Проверете отново CKSEL битовете. Неправилната настройка на типа часовник причинява много проблеми;
  • Ако не произвеждате търговски продукти, не променяйте състоянието на заключващите битове;
  • Ако не сте сигурни в правилната настройка на битовете Fuse, по-добре е да се обърнете към техническата документация или да зададете въпрос на специалисти във форума.

Публикувана на 16.07.2012 г

Предпазителите са няколко специални байта, които могат да се мигат само и отговарят за различни настройки на микроконтролера. Предпазителите може да са различни за различните микроконтролери. Затова вижте документацията за по-подробна информация. Тъй като това се прави последно, тук ще дам кратко описание на предпазителите и ще изброя най-честите грешки при работа с предпазители.

Бих искал да отбележа, че битът, който е нулиран на 0, се счита за зададен за начинаещи, това често причинява объркване при работа с различни програми за фърмуер.
Тъй като отметката срещу предпазителя не винаги е ясно 1 или 0 (в смисъл на набор). Разработчиците на софтуера имаха предвид, че ако има отметка, битът се счита за зададен (т.е. =0).

семейство
ATtiny
семейство
ATmega
2313 25 /
45/
85
13 26 261 /
461/
861
8 16 48 /
88/
168
128 169 329 8515 8535

ЗАПАЗЕН
М103С+ S8515СS8535С
OCDEN + + + +
JTAGEN + + + +

SELFPRGEN
+ + + + +
ДУЕН+ + + + + +

EESAVE
+ + + + + + + + + + + + +

SPIEN
+ + + + + + + + + + + + +

WDTON
+ + + + + + + + + + +

BODLEVEL2
+ + + + +

BODLEVEL1
+ + + + + + +

НИВО НА ТЕЛЕФОН 0
+ + + БПК
НИВО
+ БПК
НИВО
БПК
НИВО
+ БПК
НИВО
+ + БПК
НИВО
БПК
НИВО

БОДЕН
+ + + + + +
RSTDISBL+ + + + + + + +

CKDIV8
+ + + + + + +

CKOUT
+ + + + + +
SUT1+ + + + + + + + + + + + +
SUT0+ + + + + + + + + + + + +
CKOPT + + + + + +
CKSEL3+ + + + + + + + + + + +
CKSEL2+ + + + + + + + + + + +
CKSEL1+ + + + + + + + + + + + +
CKSEL0+ + + + + + + + + + + + +

PLLCK
+
BOOTRST + + + + + + + +

BOOTSZ1
+ + + + + + + +

BOOTSZ0
+ + + + + + + +

На масата предпазител-късчета от популярно AVR. Заглавия отляво предпазител-битове според листа с данни, първите два реда изброяват семействата и типовете на конкретни MK, а в пресечната точка на редове и колони има знак плюс , ако е дадено предпазител-bit присъства в този MK или е посочен Име , различна от стандартната. Ако битът липсва, няма нищо в съответната клетка на всеки бит за предпазител на AVR: ЗАПАЗЕН- този бит е запазен за някои цели, неизвестни на простосмъртните от компанията Atmel. При никакви обстоятелства не се препоръчва да се променя състоянието му (т.е. трябва да се остави така, както е инсталирано при производството на MK). В този ред
Има битове с различни имена, като правило това са битове за активиране на режима на съвместимост с остарели типове микроконтролери, които са заменени с нови. Обикновено в края на заглавието предпазител-bit има символ СЪС- от СЪВМЕСТИМ(съвместим).

OCDEN- предпазител активира веригата на вътрешния дебъгер ( Он ° Схип д ebug ENспособен). Не оставяйте този бит в търговски продукти! В противен случай вашата програма може да бъде прочетена от паметта на MK.

JTAGEN- битът за предпазител позволява интерфейса за програмиране и отстраняване на грешки JTAG . В сравнение с SPI- интерфейс, JTAGима разширени възможности. Не се препоръчва да оставяте този бит без необходимост, тъй като в този случай токът, консумиран от MK, се увеличава.

SELFPRGEN- бит, който позволява на програмата MK да записва в програмната памет, т.е. да извършва самопрограмиране.

ДУЕН- предпазител, позволяващ работа DebugWire– Това е еднопроводен интерфейс за отстраняване на грешки. Не се препоръчва да го оставяте инсталиран в търговски продукти.

EESAVE- бит за предпазител, след настройването на който, при изтриване на паметта на MK, съдържанието EEPROMДанните ще бъдат запазени непокътнати, т.е. няма да бъдат изтрити.

SPIEN- бит за предпазител, който позволява работата на интерфейса за вътрешносхемно програмиране MK SPI. Този бит може лесно да бъде нулиран с помощта на паралелен програмист (или JTAG, ако е разрешено и е налично в MK). Всички MK се произвеждат с инсталиран бит SPIEN, премахнете го от интерфейса SPI невъзможен .

WDTON- бит за предпазител, след настройването на който таймерът за наблюдение WDTсе включва веднага след подаване на захранване и не може да бъде деактивиран от софтуер. Ако битът не е зададен, тогава включване и изключване WDTможе да се контролира от софтуер.

група битове на предпазители НИВО НА БЕДЛЕСТ. Може да има един такъв бит или няколко, тогава те се номерират, започвайки от нула. Стойността на тези битове на предпазителя определя прага на задействане на веригата БПК- детектор за ниво на захранващото напрежение, когато захранващото напрежение падне под това ниво, МК ще се "нулира".

БОДЕН- бит за предпазител, който включва веригата на хардуерния детектор за недопустимо ниво на захранващо напрежение, т.е. диаграма БПК.

RSTDISBL- бит за предпазител, който изключва външния сигнал за нулиране от щифта на микроконтролера и свързва веригата на I/O порта към него. Този бит е наличен само в тези микроконтролери, чийто щифт за нулиране на хардуера RESET е комбиниран с един от I/O портовете. Неправилната настройка на този бит на предпазителя може да деактивира RESET и повече няма да можете да флашвате чрез ISP. Не задавайте този бит, ако възнамерявате да продължите да работите с MCU с помощта на серийни програмисти. „Съживете“ MK с инсталиран RSTDISBLСтава само с паралелен програматор и не за всички МК.

CKDIV8- бит за предпазител, който включва предварително разделяне на честотата на кварцов (или друг съществуващ) тактов генератор на 8. Тоест, когато този бит е включен и се използва 8 MHz кварцов резонатор, действителната тактова честота на MK ще да бъде 1 MHz.

CKOUT- бит за предпазител, позволяващ извеждане на тактовата честота към един от пиновете MK (за тактиране на други устройства).

SUT1И SUT0- битове за предпазители, които контролират режима на стартиране на тактовите генератори MK. Свързани с описаните по-долу битове, които определят типа и честотата на тактовия генератор, връзката е много трудна и объркваща. Ако са инсталирани неправилно, ситуациите могат да доведат до нестабилно стартиране на генератора или многократно нулиране на MC по време на процеса на захранване към него.

CKOPT- бит, който определя режима на работа на вградения тактов генератор за работа с кварцови резонатори. Наистина променя усилването на вградения инвертор във веригата на генератора и следователно изходното напрежение на крака XTAL2. Неправилната инсталация може да доведе до нестабилно стартиране на кварцовия осцилатор, до неговото възбуждане при грешен хармоник. (заради товаКварцовият бит стартира или само когато MK е захранван с напрежение не по-високо от 3,6 V, или само след докосване на щифта XTAL1 с пинсети)

Битова група CKSEL0CKSEL3- стопяеми битове, чиято комбинация определя вида и честотата на работния тактов генератор. Общо са възможни до 16 комбинации, но не всички са определени за всички видове MK. Неправилната настройка на комбинацията от тези битове може да направи MK „мъртъв“ - той няма да работи във веригата без подаване на часовников сигнал към щифта XTAL1.

PLLCK- fuse bit, позволяващ използването на вградения честотен синтезатор за клокване на MK ядрото.

BOOTRST- бит за предпазител, който определя адреса, от който ще започне изпълнението на програмата след нулиране - ако битът е зададен, тогава програмата ще започне не от адрес 0000h (както обикновено), а от адреса на зоната за зареждане (Boot Loader).

група битове на предпазители БОТУШИ- два бита предпазител, които определят размера на областта на програмната памет, разпределена за буутлоудъра ( Boot Loader). Комбинацията от тези битове, по-специално, определя точката, в която започва изпълнението на програмата след нулиране, ако битът е зададен BOOTRST.

Най-честите грешки при настройка на предпазители:

1. Монтаж на предпазител RSTDISBL. Неправилната настройка на този бит на предпазителя деактивира НУЛИРАНЕ, и вече няма да можете да флашвате интернет доставчик. Това ще изисква сериен програмист или нещо подобно.

2. Неправилен монтаж CKSEL0, CKSEL1, CKSEL2, CKSEL3. Тези предпазители определят източника на часовник на микроконтролера. Ако случайно изберете грешна честота на вътрешния RC осцилатор, това не е фатално. Програмиране чрез интернет доставчикще бъде възможно и ще можете да коригирате ситуацията. И ако случайно зададете клокване от външен източник, RC верига или кварцов резонатор и нямате такъв във вашата схема, тогава програмирайте от интернет доставчиксъщо ще стане невъзможно. По същество микроконтролерът ще чака часовник от несъществуваща верига. Как да излезем от тази ситуация? Много е просто - дайте на микроконтролера източник на часовник и коригирайте предпазителите. Най-често инсталиран CKSELвсички нули – клокване от външен генератор. В този случай можете да сглобите верига, която генерира меандър (честотата не играе специална роля, основното е, че тя е в рамките на възможностите на микроконтролера) и я приложете към крака си XTAL1. След което микроконтролерът може да бъде флашнат чрез интернет доставчик. Първото нещо, което трябва да направите, е да върнете предпазителите към фабричните настройки. Ако CKSELвсички са настроени на 1 – часовник от външен кварц. Закачете кварца и след това микроконтролерът отново ще бъде достъпен чрез интернет доставчик.