Каталог
![]() |
Високовольтний програматор на основі платформи Arduino для відновлення fusebits в мікроконтролерах AVR2025-09-11 Всі статті →Останніми роками спостерігається бум в розробці нових мікроконтролерів та створення зручних для використання тестових плат на їх основі. Новітні розробки базуються на мікроконтролерах з архітектурою ARM або RISC-V. Не зважаючи на те, що новітні мікроконтролери демонструють велику швидкодію і пропонують більш розвинену периферію, мікроконтролери сімейства AVR все ще масово використовуються професійними розробниками та любителями. Це зумовлено відносною простотою програмування AVR мікроконтролерів та величезною кількістю напрацювань як для високорівневої мови С, так і для низькорівневого асемблера. Для тих, хто хоче почати вивчати програмування мікроконтролерів і зрозуміти, як все працює на рівні регістрів, мікроконтролери сімейства AVR є чудовим вибором. В мікроконтролерах сімейства AVR деякі налаштування здійснюється за допомогою так званих fusebits. Найбільш поширеним методом програмування як flash-пам’яті, так і fusebits є ISP. Реалізується цей метод програмування за допомогою простих і дешевих програматорів, типовим представником яких є загальновідомий USBASP. Проте інколи виникають ситуації, коли неуважна зміна fusebits призводить до того, що опція ISP програмування стає недоступною. В цьому випадку програмування мікроконтролера можливе лише програматорами, які підтримують HVPP або HVSP протоколи. Вартість таких програматорів суттєво перевищує вартість ISP програматорів. Аби знову повернути можливість ISP програмування, потрібно перепрограмувати певні fusebits. Але і в цьому випадку це можливо зробити лише з використанням високовольтного режиму програмування. В мікроконтролерах з малою кількістю виводів, таких як Attiny13 або 85 шляхом зміни певних fusebits можна вивід Reset зробити ще одним GPIO. Однак в цьому випадку знову ж таки втрачається можливість подальшого ISP програмування. Проте достатньо простий вихід з такої непростої ситуації з програмуванням AVRок все ж таки існує. Про нього я вам і розповім. Любителями на основі платформи Arduino були створені високовольтні програматори, які здатні як завгодно змінювати fusebits без остраху втратити можливість повернути режим ISP програмування. Достатньо вдале рішення було запропоновано інженером Jeff Keyzer (aka mightyohm) і його можна знайти за посиланням. Вдосконалена версія високовольтного програматора була запропонована на платформі Instructables. Саме вона і була обрана за основу в даній статті. За останнім посиланням можна вільно завантажити архів, який містить схему підключення мікроконтролерів, в яких потрібно змінити fusebits, до виводів плати Arduino Uno. В архіві також міститься скетч, за допомогою якого можна перетворити плати Arduino Uno, Nano чи ProMini у високовольтний програматор з HVPP або HVSP протоколами високовольтного програмування. Авторами проекту заявляється можливість зміни fusebits в мікроконтролерах Atmega328P, Attiny2313 (HVPP протокол програмування) та восьмививідних Attiny 13, 85 (HVSP протокол програмування). Проте я провів численні експерименти і з’ясував, що даним високовольтним програматором можна змінювати fusebits в більш широкій номенклатурі мікроконтролерів AVR. Вдалось успішно змінювати fusebits в мікроконтролерах Mega-серії Atmega16, Atmega32, Atmega1284, Atmega8535, Tiny-серії Attiny24, Attiny44, Attiny84, Attiny43. Великим сюрпризом для мене було з’ясувати, що навіть в мікроконтролерах clasic-серії At90S1200 та At90S2313 даним програматором можна змінювати fusebits! До речі в останніх двох зміна fusebits реалізована виключно через протокол високовольтного програмування. Робочий прототип високовольтного програматора був створений на макетній платі типу MB-102 з використанням дешевого аналогу Arduino Nano типу. Для реалізації високовольтного програмування необхідне ще джерело напруги 12В. Автор статті для цього використовує стандартну батарею А27. Я також випробував цей варіант. Для цього прийшлось змайструвати тримач батареї, який зручний для використання з макетною платою. Проте можливо більш простим і дешевшим варіантом буде використати недорогий DC-DC перетворювач з вихідною напругою 12В. Цей варіант теж було випробувано шляхом розміщення зазначеного DC-DC перетворювача на перехіднику, зручному для використання з макетною платою. На мою думку автором оригінальної статті не досить вдало вибрана схема керування подачею 12В на Reset вивід мікроконтролера, що необхідно для переведення його у режим високовольтного програмування. В авторському варіанті схема підключення буде досить швидко розряджати батарею. В своєму варіанті я дещо змінив схему керування подачею 12В. Для цього було використано стандартний і дешевий оптрон PC817. Додатково ще потрібні два резистори з опорами 330 Ом (можна спробувати і 470 Ом ) та 20-50 кОм (47 кОм цілком підійде). Для зручності нижче наведено малюнок з позначенням виводів Arduino Nano, які використовуються для високовольтного програмування мікроконтролера. Також на цьому рисунку зображена модифікована схема керування подачею 12В на вивод Reset цільового мікроконтролера. В схему добавлено світлодіод червоного кольору світіння D1, який буде сигналізувати старт режиму високовольтного програмування. Проте без зменшення функціональності цей світлодіод можна виключити зі схеми, оскільки початок режиму високовольтного програмування повинні сигналізувати світлодіоди Tx/Rx на платі ArduinoNano. На цьому малюнку виводи, які використовуються виключно для реалізації протоколу HVPP програмування, позначено фіолетовим кольором. Для реалізації протоколу HVSP програмування мікроконтролерів використовується лише чотири виводи, позначені блакитним кольором. Виводи, позначені червоним кольором, використовуються як при HVPP так і при HVSP програмуванні. Схема підключення мікроконтролерів Atmega328P, Attiny13, Attiny25-85 та Attiny2313, в яких потрібно перепрограмувати fusebits, залишилась такою самою, як описано в документації з Instructables за посиланням вище. Мікроконтролери Atmega8, Atmega48 та Atmega168 підключаються так само як і Atmega328P. Схеми підключення мікроконтролерів типу Atmega16, Atmega32, Atmega1284, Atmega8535, Attiny44, Attiny84, Attiny43 та інших будуть аналогічними. Потрібно лише з документації на дані мікроконтролери з’ясувати номери виводів, на які слід подати відповідні сигнали програмування. Слід звернути увагу, що при HVPP програмуванні мікроконтролерів Attiny43, Attiny2313, At90S1200 та At90S2313 виводи, позначені як BS2 та PAGEL не потрібно під’єднувати до виводів цільового мікроконтролера. Нижче наведена фотографія зібраного на макетній платі високовольтного програматора. За необхідності даний програматор можна використати для перепрограмування fusebits навіть у розпаяних на платах Nano чи ProMini мікроконтролерах Atmega328P.
Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Поки немає відгуків на цю статтю.
|