У попередніх частинах ми розібралися що вдає із себе контролер, як він працює і як написати для нього програму. Наступне, що нам потрібно зробити - це залити отриману програму в пам'ять контролера (або ще кажуть «прошити контролер»). Для цього існують спеціальні інструменти - програматори.
Програматор складається з апаратної частини (зазвичай в побуті саме цю апаратну частину і називають программатором, тому ми теж надалі сузим термін «програматор» тільки до його апаратної частини) і програмної частини. Апаратна частина призначена для фізичної організації необхідних для програмування сигналів (з правильними рівнями і фронтами). Програмна частина призначена для управління апаратною частиною, вона реалізує правильні алгоритми (послідовності і затримки включення і виключення різних сигналів апаратної частини), необхідні для запису програми в пам'ять контролера. Найчастіше програмна частина робиться у вигляді комп'ютерної програми, а управління апаратною частиною вона здійснює через будь-якої комп'ютерний інтерфейс, до якого підключається апаратна частина (зазвичай RS-232, LPT або USB).
Отже, в мікроконтролерах PIC, фірми Microchip, зазвичай реалізовано програмування по послідовному інтерфейсу. При цьому дві ноги контролера використовуються для організації самого інтерфейсу (сигнали clock - тактирование і data - дані) і ще одна або кілька ніг використовуються для перекладу контролера в режим програмування і утримання його в цьому режимі (Vpp, PGM ...).
Розрізняють два основні методи програмування: високовольтне (HVP - high voltage programming) і низьковольтне (LVP - low voltage programming). У першому методі для перекладу контролера в режим програмування додатково використовується більш висока напруга (Vpp - напруга програмування) в порівнянні з робочим (Vdd). У другому методі ніяких додаткових напружень використовувати не потрібно. У контролерах, в залежності від моделі, можуть бути реалізовані обидва методи відразу, а може бути реалізований тільки якийсь один з методів.
В обох методах існують різні алгоритми перекладу контролера в режим програмування (знову ж таки, в залежності від конкретної моделі). Більш того, в контролері може бути закладено відразу кілька таких алгоритмів.
Далі я спробую описати найбільш поширені алгоритми перекладу контролерів PIC в режим програмування з обох методів.
1. High Voltage Programming, «Vpp-first». Суть методу: спочатку на спеціальну ногу подається напруга програмування (Vpp), потім, не раніше, ніж через певний проміжок часу (T1), подається харчування (Vdd). Через певний проміжок після цього (T2) контролер перейде в режим програмування і можна буде починати обмін даними (використовуючи лінії clock і data). На початковому етапі, все той час, поки контролер переводиться в режим програмування, на інтерфейсних ногах повинен бути нульовий рівень. Нижче подано діаграму сигналів, що відповідає цьому алгоритму:
2. High Voltage Programming, «Vdd-first». Суть методу: спочатку подається робоча напруга (Vdd), потім, не раніше, ніж через певний проміжок часу (T1), на спеціальну ногу подається напруга програмування (Vpp). Через певний проміжок після цього (T2) контролер перейде в режим програмування і можна буде починати обмін даними (використовуючи лінії clock і data). Так само, як і в попередньому алгоритмі, на початковому етапі (все той час, поки контролер переводиться в режим програмування) на інтерфейсних ногах повинен бути нульовий рівень. Нижче представлена відповідна діаграма сигналів:
3. Low Voltage Programming, «Special Sequence». Суть методу: через певний проміжок часу (T1) після подачі робочої напруги (Vdd), контролера надсилається спеціальний 32-х бітний ключ, після чого контролер переходить в режим програмування. При цьому нога MCLR / Vpp повинна бути притягнута до загального проводу. Другий варіант цього ж алгоритму (якщо робоча напруга вже докладено до контролера) полягає в наступному: нога MCLR / Vpp притягається до загального проводу, через певний час (T2) після цього контролера надсилається спеціальний 32-х бітний ключ, після чого контролер переходить в режим програмування. Нижче представлені відповідні діаграми сигналів:
4. Low Voltage Programming, «Special Pin». Суть методу: при установці в слові конфігурації спеціального біта (LVP) один з висновків (PGM) контролера починає використовуватися для перекладу контролера в режим програмування (відповідно, використовувати цей пін як цифрового входу / виходу вже не можна). Так ось, в цьому випадку переклад контролера в режим програмування здійснюється подачею високого рівня (Vdd) на ногу PGM і через деякий час після (T1) цього подачею високого рівня (Vdd) на ногу (MCLR / Vpp). Нижче представлені відповідні діаграми сигналів:
При уважному розгляді видно, що деякі алгоритми (2,3,4) дозволяють перейти в режим програмування не знімаючи з контролера робоча напруга живлення. При спеціальної розводці плати ці алгоритми дозволяють програмувати контролер, що називається, «на льоту». Спосіб, при якому контролер програмується прямо в готовому виробі називається ICSP - in circuit serial programming (по-російському звичайно говорять просто - внутрішньосхемне програмування).
На цьому, мабуть, і все. Ось тут можна знайти таблицю контролерів PIC фірми Microchip, в якій зазначено, які алгоритми перекладу в режим програмування підтримують конкретні моделі контролерів, а також допустимі діапазони значень Vpp (для контролерів, які підтримують HVP).