Программирование Arduino с помощью ISP программатора

в 9:07, , рубрики: arduino, atmel studio

Программировать 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.9V.

Нажимаем 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

Автор: Boniface

Источник


  1. releyshic:

    Можно ли превратить Arduino в программатор для AtmelStudio?

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js