Програмування Arduino з допомогою ISP програматора

Програмувати Arduino Uno на «чистому» C або на Асемблері не набагато складніше, ніж з використанням стандартного мови програмування для Arduino. При цьому ви можете сильно виграти в продуктивності і скоротити розмір вашої програми. Далі мова піде про те, як перепрошити Arduino Uno R3 з використанням ISP програматора і AVR Studio 6.2.

Отже, нам знадобиться Arduino Uno R3, будь ISP програматор сумісний з Atmel Studio 6, один світлодіод і резистор, наприклад, на 250 Ом. Для програмування Arduino я використовую універсальний програматор Atmel ICE. Як я вже говорив, ви можете використовувати будь-програматор ISP для програмування Arduino. Список підтримуваних програматорів ви можете подивитися прямо в Atmel Studio.

Всі знають, що в Arduino Uno R3 використовується мікроконтролер ATmega328P-PU. Саме його ми і будемо програмувати. Фактично після запису нашої програми у нас буде вже не Arduino, а просто мікроконтроллер з обв'язкою. Так як ми зітремо завантажувач Arduino.

На жаль, мікроконтролер ATmega328P-PU не підтримує «просунуту» налагодження через JTAG. Ви, звичайно, можете дебажити свій Arduino Arduino Micro з точками останова і висновком значень output (потрібно явно запитувати, що хочете отримати), але такий підхід не завжди зручний, до того ж у Atmel Studio є значно більш досконалі засоби налагодження (перегляд станів регістрів, моніторинг пам'яті, тощо). З цього ми обмежимося тим, що будемо просто прошивати наш контролер з ISP.

Відкрийте Atmel Studio і виберіть проект GCC C Exacutable Project, так як показано на малюнку.

image

Відмінно, проект створений. Тепер потрібно підключити наш програматор. Я використовую Atmel ICE. Це універсальний програматор, який підходить для більшості мікроконтролерів AVR і ARM від Atmel. Підключаємо програматор до комп'ютера, потім в Atmel Studio вибираємо пункт Tools -> Device Programming. Важливо! Якщо у вас російська Windows не працюйте в моїх документах і взагалі з папках з російською назвою. Краще створіть на диску окрему папку з назвою без кирилиці, наприклад D:\myprog. Так само не забудьте запустити студію з правами адміністратора.

image

У вікні вибираємо наступні опції: Tool — пристрій для програмування\налагодження в даному випадку Atmel ICE, Device — мікроконтролер, який збираємося програмувати, Interface — інтерфейс через який наш програматор буде прошивати\налагоджувати мікроконтролер, в даному випадку доступний тільки ISP.

Натискаємо кнопочку Read для отримання ідентифікатора пристрою і його робочої напруги. Якщо Arduino підключена правильно, то ви повинні отримати номер пристрою, наприклад 0x1E950F і напруга 4.9 V.

Натискаємо Apply. Після цього повинні з'явиться налаштування для програматора так як показано на малюнку нижче.

image

Далі виконуємо такі дії. Міняємо ISP Clock на 250. Потім переходимо в розділ Memories і натискаємо кнопку Erace now. Важливо! Після цього ви не зможете використовувати свій Arduino спільно з Arduino IDE, так як завантажувач буде видалено.

image

Тепер у нас все готово для програмування. Давайте напишемо невелику програму для миготіння світлодіодом.
Вставте в макетну плату світлодіод і підключіть його через струмообмежуючий резистор. Позитивну лапку світлодіода з'єднайте з цифровим виходом на 5 Arduino.

Тепер потрібно розібратися яка ніжка мікроконтролера відповідає висновку на платі. Для цього нам знадобиться datashit.

image

Так як ми хочемо керувати світлодіодом з допомогою 6-го виведення на Arduino ми будемо використовувати регістр PORTD і 5-й біт який подасть напругу на 11 ніжку нашого мікроконтролера.

Помістіть наступний код у файл з кодом проекту.

#include <avr/io.h>
#define F_CPU 16000000UL //16MHz
#include <util/delay.h>
int main(void) {
DDRD |= 1<<6;
PORTD &= ~1<<6;
while(1) {
PORTD |= 1<<6;
_delay_ms(100);
PORTD &= ~1<<6;
_delay_ms(100);
}
}

Натискаємо Ctrl + Alt + F5» або вибираємо в меню пункт Debug -> Start Without Debugging. Світлодіод блимає!

Ось, власне, і все… Зверніть увагу на швидкість прошивки і на розмір програми. Даний приклад займає близько 186 байт, що становить 0.6% від обсягу пам'яті контролера.

image

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.