Саморобний програматор для PIC-контролерів.

Розповісти в:
Своє знайомство з мікроконтролерами, з незрозумілої зараз причини, я постійно намагався відкласти на потім. Можливо, думка про використання модулів цифрової техніки створювала необгрунтовані страхи в голові новачка, який жодного разу не намагався заглянути за межі аналогової електроніки. Однак, разом з тим, я дуже чітко розумів, які можливості нададуть мені навіть найдешевші мікроконтролери. І ось, одного разу, я все таки зважився розібратися в цій на перший погляд складної, але і дуже цікавої теми.

Починати було логічно з вивчення теорії та збірки якого-небудь чужого проекту з використанням мікроконтролера (далі МК). Про перше розповідати я думаю не варто - в інтернеті і так повно статей на цю тему. Що ж стосується другого, то вибір мій упав ось на цей пристрій. Схема його досить проста для повторення і загострювати увагу на збірці так само буде зайвим, з цього перейдемо відразу до прошивці МК.

Програматор ExtraCheapПосле нетривалих пошуків в інтернеті було знайдено досить багато схем програматорів, але більшість з них були досить складними пристроями, призначеними для прошивки декількох типів МК. Мені ж хотілося зібрати схему конкретно для PIC12F629. Витративши ще трохи часу я нарешті то знайшов те що шукав - програматор ExtraCheap з проекту WiiFree.

Для передачі даних використовується COM порт. Схема харчується від 5 вольт які можна взяти від портів USB або PS / 2.
Кілька фотографій зібраного пристрою:

Для роботи з програматором рекомендується використовувати програму IC-Prog.

Налаштування IC-ProgСкачіваем з офіційного сайту програми архіви з останніми версії IC-Prog Software, NT / 2000 driver, Helpfile in Russian language і розпаковуємо їх в одну й ту ж саму директорію.
Тепер необхідно встановити драйвер програматора, для чого запускаємо icprog.exe (якщо з'являться повідомлення про помилки, то просто ігноруємо їх) і вибираємо пункт «Options» в меню «Settings». Відкриваємо вкладку «Programming» і встановлюємо галочку напроти пункту «Verify during programming». Далі в розділі «Misc» потрібно активувати опцію «Enable NT / 2000 / XP Driver», зберегти настройки натиснувши на кнопку «ОК» і перезапустити програму.

Змінити мову інтерфейсу можна в розділі «Language». Для того, щоб вказати програмі тип нашого вибору програм, натискаємо F3, у вікні вибираємо «JDM Programmer» і вказуємо COM порт, до якого підключений.

На цьому попередню настройку програми можна вважати закінченою.

Прошивка МКIC-Prog дозволяє працювати з великою кількістю МК, але нам потрібен тільки PIC12F629 - вибираємо його в списку, що випадає, розташованим у правому верхньому кутку програми.
Для читання прошивки з МК виконуємо команду «Читати мікросхему» (значок із зеленою стрілкою або F8).

По закінченню процесу читання, у вікні програмного коду відобразиться прошивка МК в шістнадцятковому вигляді. Слід звернути увагу на останню комірку пам'яті за адресою 03F8 - там зберігається значення константи OSCCAL, яке встановлює виробник при калібрування чіпа. У кожного МК воно своє, так що непогано було б його куди-небудь переписати (я, наприклад, дряпають його голкою на зворотному боці PICа) для полегшення процесу відновлення (хоча це не обов'язково), якщо під час прошивки ця константа була випадково переписана.


Для того, щоб «залити» прошивку з * .hex файлу в МК, її необхідно відкрити в програмі ( «Файл» -\u003e «Відкрити Файл ...» або Ctrl + O) і виконати команду «Програмувати мікросхему» (значок з жовтою блискавкою або F5). Відповідаємо «Yes» на перше питання.


А ось на наступне питання необхідно відповісти «Ні», інакше перезапише константа OSCCAL, про яку говорилося раніше.


Після цього почнеться процес прошивки. По закінченню програма виведе інформаційне повідомлення про його результати.

На цьому хотілося б підвести топік до кінця. Сподіваюся дана інформація допоможе новачкам розібратися в основах програмування PIC мікроконтролерів.
Дякую за вніманіе.Файл друкованої плати (LAY) Розділ:

Розвиток електроніки йде стрімкими темпами, і все частіше головним елементом того чи іншого пристрою є мікроконтролер. Він виконує основну роботу і звільняє проектувальника від необхідності створення витончених схемних рішень, тим самим зменшуючи розмір друкованої плати до мінімального. Як всім відомо, мікро контролером управляє програма, записана в його внутрішню пам'ять. І якщо досвідчений програміст-електронник не відчуває проблем з використанням мікроконтролерів в своїх пристроях, то для початківця радіоаматора спроба записати програму в контролер (особливо PIC) може обернутися великим розчаруванням, а іноді і невеликим піротехнічним шоу у вигляді димить мікросхеми.

Як не дивно, але при всій величі мережі Інтернет в ньому дуже мало інформації про прошивці PIC-контролерів, А той матеріал що вдається знайти - дуже сумнівної якості. Звичайно, можна купити заводський програматор за неадекватну ціну і шити скільки душі завгодно, але що робити, якщо людина не займається серійним виробництвом. Для цих цілей можна зібрати нескладну і недорогу в реалізації саморобку, іменовану JDM-програматором по наведеній нижче схемі (рисунок №1):



Малюнок №1 - схема програматора


Відразу наводжу перелік елементів для тих, кому ліньки вдивлятися в схему:

  • R1 - 10 кОм
  • R2 - 10 кОм (подстроченний). Регулюванням опору даного резистора потрібно домогтися близько 13В на виводі №4 (VPP) під час програмування. У моєму випадку опір становить 1,2 кОм
  • R3 - 200 Ом
  • R4, R5 - 1,5 кОм
  • VD1, VD2, VD3, VD4, VD6 - 1N4148
  • VD5 - 1N4733A (Напруга стабілізації 5,1В)
  • VD7 - 1N4743A (Напруга стабілізації 13В)
  • C1 - 100 нФ (0,1 мкФ)
  • C2 - 470 мкФ х 16 В (електролітичний)
  • SUB-D9F - роз'єм СОМ-порту (МАМА або РОЗЕТКА)
  • Панелька DIP8 - залежить від використовуваного вами контролера

У схемі використаний приклад підключення таких поширених контролерів, як PIC12F675 і PIC12F629, Але це зовсім не означає, що прошивка інших серій PIC буде неможлива. Щоб записати програму в контролер іншого типу, досить перекинути дроти програматора відповідно до малюнком №2, який наведено нижче.



Малюнок №2 - варіанти корпусів PIC-контролерів з необхідними висновками


Як можна здогадатися, в схемі мого вибору програм використаний корпус DIP8. При великому бажанні можна виготовити універсальний перехідник під кожен тип мікросхеми, отримавши тим самим універсальний програматор. Але так як з PIC-контролерами працюю рідко, для мене вистачить і цього.

Хоч сама схема досить проста і не викличе труднощів у складанні, але вона теж вимагає поваги. Тому непогано було б зробити під неї друковану плату. Після деяких маніпуляцій з програмою SprintLayout, Текстолітів, дрилем і праскою, на світ народилася ось така заготовка (фото №3).



Фото №3 - друкована плата програматора


Завантажити исходник друкованої плати для програми SprintLayout можна за цим посиланням:
(Завантажень: 680)
При бажанні його можна змінити під свій тип PIC-контролера. Для тих, хто вирішив залишити плату без змін, викладаю вид з боку деталей для полегшення монтажу (рисунок №4).



Малюнок №4 - плата з монтажною боку


Ще трохи чаклунства з паяльником і ми маємо готове пристрій, здатний прошити PIC-контролер через COM-порт вашого комп'ютера. Ще тепленький і не відмитий від флюсу результат моїх старань показаний на фото №5.



Фото №5 - програматор в зборі


З цього моменту, перший етап на шляху до прошивці PIC-контролера, Підійшов до кінця. Другий етап включатиме в себе підключення програматора до комп'ютера і роботу з програмою IC-Prog.
На жаль, не всі сучасні комп'ютери і ноутбуки здатні працювати з даними програматором через банальну відсутність на них COM-портів, А ті що встановлені на ноутбуках не видають необхідні для програмування 12В. Так що я вирішив звернеться до свого першого ПК, Який давним-давно чекав під порохом свого зоряного часу (і таки дочекався).
Отже включаємо комп'ютер і насамперед встановлюємо програму IC-Prog. Завантажити її можна з сайту учасника або за цим посиланням:
(Завантажень: 778)
Підключаємо програматор до COM-порту і запускаємо тільки що встановлений додаток. Для коректної роботи необхідно виконати ряд маніпуляцій. Спочатку необхідно вибрати той тип контролера, який збираємося шити. У мене це PIC12F675. На скріншоті №6 поле для вибору контролера виділено червоним кольором.



Скріншот №6 - вибір типу мікроконтролера




Скріншот №7 - настройка методу запису контролера


У цьому ж вікні переходимо у вкладку " програмування"І вибираємо пункт" Перевірка при програмуванні". Перевірка після програмування може викликати помилку, так як в деяких випадках самої прошивкою встановлюються фьюз блокування зчитування СР. Щоб не морочити собі голову дану перевірку краще відключити. Коротше слідуємо скриншоту №8.



Скріншот №8 - настройка верифікації


Продовжуємо роботу з цим вікном і переходимо на вкладку " загальні". Тут необхідно встановити пріоритет роботи програми і обов'язково задіяти NT / 2000 / XP драйвер (скріншот №9). У деяких випадках програма може запропонувати установку драйвера і буде потрібно перезапуск IC-Prog.



Скріншот №9 - загальні налаштування


Отже, з цим вікном робота закінчена. Тепер перейдемо до налаштувань самого програматора. Вибираємо в меню " Налаштування "-\u003e" Налаштування програматора"Або просто натискаємо клавішу F3. З'являється наступне вікно, показане на скріншоті №10.



Скріншот №10 - вікно налаштувань програматора


Насамперед вибираємо тип програматора - JDM Programmer. Далі виставляємо радіокнопку використання драйвера Windows. Наступний крок має на увазі вибір COM-порту, До якого підключений ваш програматор. Якщо він один, питань взагалі немає, а якщо більше одного - подивіться в диспетчері пристроїв, який на даним момент використовується. Повзунок затримки введення / виведення призначений для регулювання швидкості запису і читання. Це може знадобиться на швидких комп'ютерах і при виникненні проблем з прошивкою - цей параметр необхідно збільшити. У моєму випадку він залишився за замовчуванням рівним 10 і все нормально відпрацювало.

На цьому настройка програми IC-Prog закінчена і можна переходити до процесу самої прошивки, але для початку вважаємо дані з мікроконтролера і подивимося що в нього записано. Для цього на панелі інструментів натискаємо на значок мікросхеми із зеленою стрілкою, як показано на скріншоті №11.



Скріншот №11 - процес читання інформації з мікроконтролера


Якщо мікроконтролер новий і до цього не прошивали, то все осередки його пам'яті будуть заповнені значеннями 3FFF, Крім самої останньої. У ній міститиметься значення калібрувальної константи. Це дуже важливе і унікальне для кожного контролера значення. Від нього залежить точність тактирования, яка шляхом підбору і установки цієї самої константи закладається заводом виробником. На скріншоті №12 показана та осередок пам'яті, в якій буде зберігатися константа при читанні контролера.



Скріншот №12 - значення калібрувальної константи


Повторюся, що значення унікальне для кожної мікросхеми і не обов'язково має збігатися з тим, що на малюнку. Багато через недосвідченість затирають цю константу і надалі PIC-контролер починає функціонувати належним чином, якщо в проекті використовується тактирование від внутрішнього генератора. Раджу записати цю константу і наклеїти напис з її значенням прямо на контролер. Таким чином ви уникнете безліч неприємностей в майбутньому. Отже, значення записано - рухаємося далі. Відкриваємо файл прошивки, який має як правило розширення .hex. Тепер замість написів 3FFF, Буфер програмування містить код нашої програми (скріншот №13).



Скріншот №13 - прошивка, завантажена в буфер програмування


Вище я писав, що багато затирають калибровочную константу з необережності. Коли ж це відбувається? Це трапляється в момент відкриття файлу прошивки. Значення константи автоматично змінюється на 3FFF і якщо почати процес програмування, то назад дороги вже немає. На скріншоті №14 виділена та осередок пам'яті де раніше була константа 3450 (До відкриття hex-файлу).

Багато радіоаматори початківці по початку своєї справи бояться починати роботу з мікроконтроллером.Связано це багато з чим, і основний часто страх як правильно програмувати і чим программіровать.В даній статті приведена схема простого програматора для мікроконтролера PIC.Смотрім, збираємо, запитуємо на офіційному форумі і залишаємо відгуки якщо у вас вийшло

Починати свою роботу я радив би спочатку з загальних відомостей про мікроконтролерах.

програматор ExtraCheap

В інтернеті багато різних схем програматорів.Але більшість з них дуже складні, і рідко коли можна побачити фотографії, що б підтверджувало його працездатність.

Але потрібний програматор багатьом запитам був знайдений.

Для передачі даних використовується COM порт. Схема харчується від 5 вольт які можна взяти від портів USB або PS / 2.

Ще одна фотографія цього пристрою:

Для роботи з програматором рекомендується використовувати програму IC-Prog

Налаштування IC-Prog

Качаємо з офф сайту останню версію програми IC-Prog Software, NT / 2000 driver, Helpfile in Russian language і розпаковуємо їх в одну й ту ж саму директорію.

Тепер необхідно встановити драйвер програматора, для чого запускаємо icprog.exe (якщо з'являться повідомлення про помилки, то просто ігноруємо їх) і вибираємо пункт «Options» в меню «Settings». Відкриваємо вкладку «Programming» і встановлюємо галочку напроти пункту «Verify during programming». Далі в розділі «Misc» потрібно активувати опцію «Enable NT / 2000 / XP Driver», зберегти настройки натиснувши на кнопку «ОК» і перезапустити програму.

Змінити мову інтерфейсу можна в розділі «Language». Для того, щоб вказати програмі тип нашого вибору програм, натискаємо F3, у вікні вибираємо «JDM Programmer» і вказуємо COM порт, до якого підключений.

На цьому попередню настройку програми можна вважати закінченою.

прошивка МК

IC-Prog дозволяє працювати з великою кількістю МК, але нам потрібен тільки PIC12F629 - вибираємо його в списку, що випадає, розташованим у правому верхньому кутку програми.
Для читання прошивки з МК виконуємо команду «Читати мікросхему» (значок із зеленою стрілкою або F8).

По закінченню процесу читання, у вікні програмного коду відобразиться прошивка МК в шістнадцятковому вигляді. Слід звернути увагу на останню комірку пам'яті за адресою 03F8 - там зберігається значення константи OSCCAL , Яке встановлює виробник при калібрування чіпа. У кожного МК воно своє, так що непогано було б його куди-небудь переписати (я, наприклад, дряпають його голкою на зворотному боці PIC "а) для полегшення процесу відновлення (хоча це не обов'язково ), Якщо під час прошивки ця константа була випадково переписана.


Для того, щоб «залити» прошивку з * .hex файлу в МК, її необхідно відкрити в програмі ( «Файл» -\u003e «Відкрити Файл ...» або Ctrl + O) і виконати команду «Програмувати мікросхему» (значок з жовтою блискавкою або F5). Відповідаємо «Yes» на перше питання.


А ось на наступне питання необхідно відповісти «Ні», інакше перезапише константа OSCCAL, про яку говорилося раніше.


Після цього почнеться процес прошивки. По закінченню програма виведе інформаційне повідомлення про його результати.

На цьому хотілося б підвести топік до кінця. Сподіваюся дана інформація допоможе новачкам розібратися в основах програмування PIC мікроконтролерів.

Коли я почав займатися PIC-контролерами, то, природно, насамперед постало питання про вибір програматора. Оскільки фірмові програматори справа не дешева, та й взагалі купувати програматор мені здалося спортивним, було прийнято рішення зібрати його самостійно. Облазивши простори Інтернету я завантажив схему і зібрав JDM-програматор. Він працював дуже погано: то заливав якусь фігню, то чи не заливав перші кілька байт, то взагалі нічого не заливав.

Істотним недоліком JDM-програматора є те, що він не може контролювати лінію Vdd і, як наслідок, - не може реалізувати правильний алгоритм подачі напруги при програмуванні. Якщо контролер налаштований таким чином: "Internal Oscillator", "MCLR Off", то при неправильній послідовності подачі напруги він спочатку запускається і починає виконувати раніше зашиту в ньому програму, а потім переходить в режим програмування (при цьому покажчик може вказувати куди завгодно, а нема на початок пам'яті програм). У зв'язку з цим: то, куди буде залита ваша програма, та й чи буде залита взагалі - велике питання!

Намучившись з JDM-програматором, на одному з буржуйських сайтів я знайшов схему програматора, в якому були виправлені ці недоліки. Цим программатором я користуюся донині і пропоную його схему вашій увазі:

На діодах D1 ... D4 і стабілітроні D6 виконаний найпростіший перетворювач рівнів RS232-\u003e TTL. Коли на лініях DATA, CLOCK напруга менше 0В, то вони через діоди D1, D2 підтягуються до землі, а коли напруга на цих лініях більше 5В, то вони через діоди D3, D4 підтягуються до харчування +5 В, яке задається стабілітроном D6.

Харчується цей девайс прямо від COM-порту. Стабілітрони і діоди в цій схемі цілком можна замінити вітчизняними: Д814Д, КС147А і т.д.

Яким чином реалізується правильний алгоритм подачі напруги і звідки взагалі беруться 13 Вольт напруги програмування? Все як завжди дуже просто.

При ініціалізації порту на виході TxD висить 10В. При цьому конденсатор С1 заряджається через стабілітрон D7 (який в даному випадку виявляється включений в прямому
напрямку і працює в якості діода). Тобто напруга на плюсовій нозі С1 щодо GND дорівнює нулю, але щодо TxD \u003d + 10В (або скільки там у вас напруга на виході COM-порту).

Тепер уявімо, що відбувається при зміні напруги на виході TxD з 10В до +10 В. Одночасно з ростом напруги на виводі TxD, почне рости і напруга на плюсовій нозі конденсатора С1. Заряд не може злитися на землю через D7, тому що тепер D7 включений назад, єдиний шлях - витік через PIC, але струм там мізерний. Отже, напруга на плюсовій нозі С1 (а, отже і на виведення MCLR) починає зростати. У момент, коли на TxD нуль щодо землі, на конденсаторі С1 (на його плюсової нозі, а отже і на MCLR) щодо землі як раз +10. Коли на TxD + 3В, - на С1 вже 3 + 10 \u003d 13В. Ось і все, напруга Vpp вже подано, а на лінії VDD ще тільки + 3В.

При подальшому зростанні напруги на TxD, - напруга на С1 не росте, так як починає працювати стабілітрон D7. При зростанні напруги на TxD вище +5 починає працювати стабілітрон D6.

Щоб обмежити струм розряду конденсатора C1 через стабілітрон D7, в схему включений резистор R6, відповідно, напруга на C1 не точно дорівнює напрузі стабілізації, а трохи вище: U C1 \u003d Uст + I розрив * R6. Для підстроювання напруги програмування служить опір R3. Можна поставити змінне 10КОм або підібрати постійне, так, щоб напруга програмування було приблизно 13 В (в пристрої, представленому на малюнку нижче, R3 \u003d 1,2 кОм).

Я успішно програмую цим програматором контролери PIC12F629 і PIC16F628A, Однак автор стверджував, що цим програматором (в представленому мною варіанті) можна програмувати PIC12F508 , PIC12F509 , PIC12F629 , PIC12F635, PIC12F675, PIC12F683 , PIC16F627A , PIC16F628A , PIC16F648A. Крім цих, на сайті автора feng3.cool.ne.jp є модифікації програматора для інших PIC-контролерів.

готові девайси:

Варіант програматора від Mixer.