- Що таке запобіжники в AVR - докладне пояснення
- Біти запобіжників в Arduino
- Компоненти, необхідні для перевірки запобіжників в AVR
- Схема тестування запобіжників в AVR
- Тестування запобіжників в AVR
У цьому підручнику ми поговоримо про запобіжники. Ще коли я навчався в коледжі і дізнавався про всі круті речі в електроніці, я вперше почув термін запобіжник в AVR, моя початкова думка на цю тему була: о! всередині AVR є щось, що буде дути, якщо я зробив щось не так. Тоді в Інтернеті було небагато доступних ресурсів. Я досить довго шукав, щоб дізнатися, що ці запобіжники стосуються якихось особливих бітів всередині мікроконтролера AVR. Ці біти схожі на крихітні перемикачі всередині AVR, і, вмикаючи / вимикаючи їх, ми можемо вмикати / вимикати деякі особливі функції AVR. Увімкнення та вимкнення означає встановлення та скидання.
Ми збираємося скористатися цією можливістю, щоб обговорити все, що є про біти запобіжника в AVR. Для простоти ми візьмемо приклад плати Arduino, на якій розміщений популярний мікроконтролер ATmega328P. Тут ви дізнаєтесь, як встановити ці запобіжники для включення та вимкнення деяких із цих функцій, що дуже зручно у реальних програмах. Отже, давайте прямо в це.
У попередніх публікаціях ми створили багато проектів мікроконтролерів AVR, таких як модуль взаємодії GSM з мікроконтролером AVR та взаємодія HC-05 з мікроконтролером AVR. Ви можете перевірити їх, якщо хочете дізнатись більше про ці проекти.
Що таке запобіжники в AVR - докладне пояснення
Як ми вже обговорювали раніше, запобіжники в мікроконтролері схожі на маленькі перемикачі, які можна вмикати та вимикати, щоб увімкнути та вимкнути різні функції мікроконтролера AVR. Це частина, де виникає наше наступне запитання, так як же ми встановлюємо або скидаємо ці запобіжники? Відповідь на це запитання проста: ми робимо це за допомогою реєстрів запобіжників.
У мікросхемі ATmega328P загалом є 19 бітів запобіжників, і вони розділені на три байти запобіжника. Вони визначаються як “Розширений байт запобіжника”, “Байт із високим запобіжником” та “Байт із низьким запобіжником”.
Якщо ви подивитесь на таблицю-27 таблиці даних ATmega328 / P Rev: 7810D – AVR – 01/15, ви зможете дізнатись усі дрібні подробиці про біти запобіжників. Але зображення нижче дасть вам краще уявлення про розділ запобіжників у таблиці даних.
Тепер, коли ви трохи дізналися про розрядники запобіжників, давайте пройдемося по таблиці та з’ясуємо всі необхідні деталі про цю мікросхему.
Розширені запобіжники:
Після того, як ви клацнете на вкладці Fuse Bits і прокрутите трохи вниз, ви знайдете таблицю 27-5: в якій показано таблицю для «Розширеного байта запобіжника», широко відомого як « EFUSE». На зображенні нижче показано саме це.
У цій таблиці є лише три корисні біти, а інші три зарезервовані. Ці три біти мають справу з рівнем виявлення Brownout. Як ви можете бачити в примітці, якщо ми подивимося на таблицю 28-5, ми можемо знайти більше деталей про неї.
Як ви можете бачити у наведеній вище таблиці, у нас є таблиця для виявлення вибуху. Виявлення відключення - це функція, яка скидає мікроконтролер, коли напруга живлення падає нижче певного рівня напруги. В мікросхемі ATmega328P ми можемо повністю вимкнути виявлення відключення або встановити його на рівні, показані у наведеній вище таблиці.
Байти високого запобіжника:
Як ви можете бачити на малюнку нижче, таблиця 27-6: таблиці даних показує біти вищих запобіжників мікросхеми ATmega328P.
Запобіжник високого справу з різними завданнями всередині ATmega328 мікроконтролера. У цьому розділі ми поговоримо про вищі запобіжники та їх роботу. Почнемо з бітів BOOTRST, BOOTSZ0 та BOOTSZ1. Ці три біти відповідають за встановлення розміру завантаження; Розмір завантаження стосується обсягу пам'яті, зарезервованого для встановлення завантажувача.
Завантажувач - це спеціальна програма, яка працює над мікроконтролером і керує різними завданнями. Але у випадку з Arduino завантажувач використовується для завантаження ескізу Arduino всередину мікроконтролера. В одній з наших попередніх статей ми показали вам, як записати завантажувач в ATmega328P за допомогою Arduino. Ви можете перевірити це, якщо вас цікавить тема. Повертаючись до нашої теми, цілі інших бітів у старшому байті стають досить зрозумілими, біт EESAVE - це збереження пам'яті EEPROM під час циклу стирання мікросхеми. Біт WDTON призначений для ввімкнення або вимкнення сторожового таймера.
Сторожовий таймер - це спеціальний таймер в мікросхемі ATmega328P, який має окремий годинник і працює самостійно. Якщо таймер сторожового таймера ввімкнено, вам потрібно очистити його протягом певного періоду, інакше сторожовий таймер скине мікроконтролер. Це корисна функція, яка є у багатьох мікроконтролерах, якщо процесор застряє; сторожовий собака скине його, щоб запобігти пошкодженню кінцевої програми.
Біт DWEN є для включення дроту налагодження; це підготовчий протокол, який внутрішньо вбудований в їх обладнання, який використовується для програмування та налагодження процесорів. Якщо цю функцію ввімкнено, ви можете прошивати та налагоджувати процесор одним підключеним дротом. Але для його використання вам знадобиться спеціальне обладнання, яке готується до Atmel.
Решта два біти - це ті біти, яких вам потрібно уникати, якщо ви точно не знаєте, що робите. Це біт RSTDISBL-7 та біт-5 SPIEN. RSTDISBL (External Reset Disable), як випливає з назви, відключає зовнішній штифт скидання апаратного забезпечення, а біт SPIEN використовується для вимкнення інтерфейсу програмування SPI. Вимкнення будь-якого з цих двох бітів може повністю змусити ваш AVR; тож залишити їх самих - це гарна ідея.
Байти з низьким запобіжником:
Як ви можете бачити на зображенні нижче, таблиця 27-7: таблиці даних показує біти нижнього запобіжника мікросхеми ATmega328P.
Цей байт запобіжника відповідає за налаштування джерела тактової частоти та деяких інших параметрів годинника всередині AVR. У цьому розділі ми дізнаємось про все це.
7-й біт або прапор CKDIV8 можна встановити, щоб розділити джерело тактової частоти на 8, це дуже зручно, і ви, мабуть, вже знали, якщо самі пробували програмувати AVR. Наступний біт - це біт CKOUT, це 6-й біт у байті з низьким запобіжником. Запрограмувавши його, виводиться внутрішній тактовий сигнал на PORTB0 мікроконтролера.
Біти-5 і біт-4 SUT1 і SUT0 контролюють час запуску мікроконтролера. Це запобігає будь-яким пусковим діям, які можуть і не відбуватись до того, як напруга живлення зможе досягти допустимого мінімального рівня порогової напруги. І останні чотири біти CKSEL0 - 4 використовуються для вибору тактового джерела мікроконтролера. Таблиця, показана нижче, дає вам краще розуміння цих чотирьох бітів, які відповідають за налаштування джерела тактової частоти; цю таблицю ви можете знайти в розділі Джерело годинника у таблиці даних.
Тепер, перед тим, як продовжувати далі, є ще одна річ, через яку я повинен пройти, це таблиця затримки запуску генератора. Під затримкою запуску ми маємо на увазі біти 4 і 5 нижчого байта запобіжника. Затримки потрібно встановлювати залежно від умови роботи ланцюга та типу осцилятора, який ви використовуєте. Значення за замовчуванням встановлені для повільного зростання потужності з 6 тактовими циклами, коли виконується послідовність включення або відключення живлення. Далі існує ще одна затримка на 14 тактових циклів із затримкою 65 Мс після запуску.
Фу! Це було багато інформації для перетравлення. Але перш ніж продовжувати далі, закінчимо цей розділ короткими примітками.
Примітка:
Якщо ви уважно розглянули таблицю даних, ви, напевно, помітили, програмування біта запобіжника означає встановлення його низького значення, тобто 0 (нуль), що протилежне тому, що ми зазвичай робимо, щоб зробити порт високим або низьким. Ви повинні пам’ятати про це під час налаштування запобіжників.
Біти запобіжників в Arduino
У наведеному вище розділі ми вже багато говорили про запобіжники, але в цьому розділі давайте поговоримо про те, як їх налаштувати і як записати в мікроконтролер. Для цього нам знадобиться інструмент під назвою Avrdude. Це інструмент, який можна використовувати для читання, запису та модифікації пам'яті в мікроконтролерах AVR. Він працює з SPI і має довгий список підтримки для різних типів програмістів. Ви можете завантажити інструмент за посиланням, наведеним нижче. Крім того, ми будемо використовувати наш улюблений мікроконтролер Arduino.
- Завантажте Avrdude версії 6.3 Windows-ming32
Тепер, коли у вас є Avrdude, вам потрібно його витягти та відкрити командне вікно в цій папці. Крім того, якщо ви плануєте використовувати його пізніше, ви можете додати шлях до папки до розділу змінної середовища Windows. Але я поставлю його на свій робочий стіл і відкрию там командне вікно. Після цього ми підключимо програміст USBasp до нашого ПК і переконаємось, що у нас є відповідний драйвер для нашого програміста USBasp. Після того, як ми це зробимо, ми готові піти і спочатку прочитаємо значення запобіжника за замовчуванням. Для цього вам потрібно виконати таку команду.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Якщо все правильно, ця команда прочитає байти запобіжників і помістить їх у три окремі текстові файли. Зображення нижче дасть вам краще уявлення про процес.
Як бачите, Avrdude прочитав розрядники запобіжника на Arduino nano і записав їх у три окремі текстові файли. Тепер ми відкрили їх і отримали три значення; для EFUSE: 0xFD, для HFUSE: 0XDA, для LFUSE: 0xFF. Це було значення запобіжника за замовчуванням, яке ми отримали для нано Arduino. Тепер, давайте перетворимо ці біти у двійкові та порівняємо їх із значенням за замовчуванням з таблиці. У таблиці нижче показано саме це.
Для зручності біти запобіжника записуються у шістнадцяткові значення, але якщо ми перетворимо їх у двійкові значення та порівняємо з таблицею даних, ми будемо знати, що відбувається. Почнемо з нижнього байта запобіжника. Як ви можете бачити з наведеного вище рядка, для нього встановлено значення 0XFF, а двійкове значення має бути 0B11111111.
Порівняння нижчих байтів запобіжника із Arduino:
Байт із низьким запобіжником |
Біт No |
Значення за замовчуванням у AVR |
Значення Arduino за замовчуванням |
CKDIV8 |
7 |
0 (запрограмовано) |
1 (незапрограмований) |
РЕЗУЛЬТАТ |
6 |
1 (незапрограмований) |
1 (незапрограмований) |
SUT1 |
5 |
1 (незапрограмований) |
1 (незапрограмований) |
SUT0 |
4 |
0 (запрограмовано) |
1 (незапрограмований) |
CKSEL3 |
3 |
0 (запрограмовано) |
1 (незапрограмований) |
CKSEL2 |
2 |
0 (запрограмовано) |
1 (незапрограмований) |
CKSEL1 |
1 |
1 (незапрограмований) |
1 (незапрограмований) |
CKSEL0 |
0 |
0 (запрограмовано) |
1 (незапрограмований) |
Для байта вищого запобіжника встановлено значення 0XDA у двійковій системі, тобто 0B11011010.
Більший байт запобіжника в двійковій системі:
Байт високого запобіжника |
Біт No |
Значення за замовчуванням у AVR |
Значення Arduino за замовчуванням |
RSTDISBL |
7 |
1 (незапрограмований) |
1 (незапрограмований) |
ДВЕН |
6 |
1 (незапрограмований) |
1 (незапрограмований) |
ШПІЕН |
5 |
0 (запрограмовано) |
0 (запрограмовано) |
WDTON |
4 |
1 (незапрограмований) |
1 (незапрограмований) |
ЗБЕРІГТИ |
3 |
1 (незапрограмований) |
1 (незапрограмований) |
ЗАПУСК1 |
2 |
0 (запрограмовано) |
0 (запрограмовано) |
BOOTSZ0 |
1 |
0 (запрограмовано) |
1 (незапрограмований) |
ЗАПУСК |
0 |
1 (незапрограмований) |
0 (запрограмовано)) |
Установка для розширеного байта запобіжника встановлена на 0XFD, у двійковому - 0B11111101.
Розширений байт запобіжника в двійковому файлі:
Розширений байт запобіжника |
Біт No |
Значення за замовчуванням у AVR |
Значення Arduino за замовчуванням |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (незапрограмований) |
1 (незапрограмований) |
BODLEVEL1 |
1 |
1 (незапрограмований) |
0 (запрограмовано) |
BODLEVEL0 |
0 |
1 (незапрограмований) |
1 (незапрограмований) |
Тепер це закінчує цей розділ. На даний момент ми дізналися багато нового про мікроконтролер AVR та його запобіжники. Отже, давайте завершимо цю статтю, випробувавши нашу теорію, змінивши та експериментуючи з деякими бітами запобіжників в Arduino Nano.
Компоненти, необхідні для перевірки запобіжників в AVR
Ми говорили багато про запобіжники у вищезазначеній частині. Але щоб продовжити далі в статті, нам потрібні деякі апаратні компоненти та деякі програмні засоби. У цьому розділі ми поговоримо про них. Список необхідних компонентів із зображеннями наведено нижче.
- Макет - 1
- Arduino Nano - 1
- Програміст USBasp AVR - 1
- Кабель USB - 1
- AVR 10-контактний в 6- контактний перетворювач - 1
- Avrdude (програмний інструмент для програмування AVR)
- Світлодіод - 1
- Резистор 330R - 1
- Кабелі-перемички
Схема тестування запобіжників в AVR
Налаштування тестування апаратного забезпечення наведено нижче. Ми підключили Arduino Nano до ПК за допомогою USB-кабелю, а також підключили програмер USBasp до ПК. Метою цієї статті є програмування бітів запобіжників в AVR. З цієї причини ми підключили програміст USBasp до Arduino. Малюнок нижче дасть вам краще уявлення про налаштування.
Тестування запобіжників в AVR
Налаштування тестування показано нижче. Як бачите, ми підключили Arduino та програміст USBasp до USB мого ноутбука.
Тепер давайте відкриємо IDE Arduino і завантажимо базовий ескіз блимання. Зміст основного ескізу моргання є зрозумілим, тому я не вказував жодних деталей щодо нього.
На відео ви побачите, що світлодіод на штифті № 13 блимає як слід. Тепер налаштуємо запобіжник і встановимо його значення за замовчуванням. І як ми вже бачили у таблиці; EFUSE є 0xFF; HFUSE - D9; LFUSE: 62. А тепер давайте налаштуємо його за допомогою Avrdude, спалахнемо і подивимось, що станеться. Код, який ми будемо використовувати -
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Як тільки я це зроблю, ви побачите, що світлодіод буде блимати надзвичайно повільно, тому що ми розрахували та запрограмували значення для тактової частоти 16 МГц, а тепер після спалювання запобіжників це лише внутрішній пульт дистанційного керування 1 МГц. Ось чому світлодіод блимає так повільно. Тепер спробуємо ще раз завантажити ескіз. Ми побачимо, що Arduino видає помилку, і код не завантажується. Оскільки, змінивши запобіжники, ми також зіпсували налаштування завантажувача. Ви можете побачити це на зображенні нижче.
Щоб виправити це і повернути Arduino назад, як це було раніше, нам потрібно просто спалити завантажувач знову для Arduino. Для цього перейдіть до Інструменти -> Програміст - USBasp , і як тільки ми це зробимо, ми знову зможемо перейти до інструментів, і ми можемо натиснути на опцію запису завантажувача. Це знову спалить основний завантажувач на вашому Arduino, і все повернеться до того, що було раніше.
Після того, як завантажувач було повернуто до Arduino, він повернувся до початкового стану, і останнє зображення показує миготливий світлодіод після повторного спалення завантажувача.
І на цьому ця стаття закінчується. Сподіваюся, вам сподобалась стаття і ви дізналися щось нове. Якщо у вас є які-небудь запитання щодо статті, не соромтеся розміщувати коментар нижче.