У цьому розділі буде розглянута така цікава особливість AVR, як самопрограмування (мається у багатьох моделей ATtiny і у всіх моделях ATmega). Суть її полягає в можливості змінювати вміст FLASH-пам'яті безпосередньо з призначеної для користувача програми. Мікроконтролери Atmel були одними з перших в світі, в яких з'явилося це нововведення. У розділі наведено приклад завантажувача, що використовує апаратний інтерфейс USART, і керуючої програми високого рівня на мові Delphi.
Галузь застосування
Які ж вигоди надає здатність самопрограмування? Спочатку може здатися, що така можливість дає AVR такі ж переваги, якими, наприклад, володіє будь-який процесор з Принстонской архітектурою. Це, по-перше, здатність змінювати власні алгоритми роботи і, по-друге, можливість вести налагодження додатка, не вдаючись до додаткових апаратних засобів. Але на практиці ресурсів 8-розрядного мікроконтролера абсолютно недостатньо для побудови "самообучающихся" інтелектуальних систем. А що стосується налагодження, то сама структура FLASH-пам'яті тут зводить нанівець всі достоїнства самопрограмування (можливість розміщувати коди програм у швидкій пам'яті SRAM у AVR відсутня). Крім того, переписувати на ходу секцію робочого коду, що раніше робилося тільки за допомогою програматорів, - досить ризикована справа. Будь-яка неточність тут відразу призведе до збою. І навіть наявність самого апаратного вузла, що відповідає за зміну "прошивки", потенційно знижує надійність пристрою. Якщо прикладна програма може змінювати FLASH-пам'ять, то це може статися і мимоволі в результаті якої-небудь помилки.
Однак, з часом виявилося, що все не так вже й погано. Самопрограмування дозволяє успішно використовувати FLASH-пам'ять, як альтернативу EEPROM. Робочий ресурс FLASH, виробленої за сучасною технологією, становить ≈10000 циклів стирання / запису. Це показник хоч і на порядок менше, ніж у EEPROM, але все одно дуже високий. Завдяки цьому у FLASH-пам'яті можна зберігати таблиці, списки, поправочні коефіцієнти, а також будь-яку іншу інформацію, що вимагає періодичного не дуже частого оновлення.
Але, напевно, найголовнішою перевагою самопрограмування, є можливість створення практично будь-якого інтерфейсу, для оновлення програмного забезпечення. Найбільше практичне значення мають комп'ютерні COM і USB. Останній з них в спрощеному вигляді може бути реалізований програмним способом. Процесом програмування з боку AVR повинна при цьому управляти спеціальна програма-завантажувач boot-loader. Багато сучасні мікроконтролери (а також нові моделі AVR) поставляються з самого початку "зашитим" на заводі загрузчиком, що дає можливість використовувати дуже прості програматори, лише трохи втративши в швидкості програмування.