Наша свежеслепленная ардуина, как и компьютер без софта – просто железо. Чтобы плата ожила и начала делать хоть что-нибудь нужна программа или как часто говорят – прошивка. Написать её под ардуину можно на разных языках — ассемблере, си, паскале, хоть на бейсике, но, обычно, пишут на Wiring’е, из под личной ардуиновской среды разработки — ArduinoIDE и загружают (прошивают) оттуда же.
Как писать прошивки (у ардуино они называется – скетчи) нам подробно рассказал уважаемый admin, а тем кто захочет разобраться с физическим процессом запихивания нашего виртуального творчества в плату поможет (надеюсь) эта серия статей.
Загрузить прошивку в МК семейства Mega (а именно такая стоит в ардуине) можно разными способами:
Последовательным программатором по интерфейсу SPI
Через интерфейс JTAG
Параллельным («высоковольтным») программатором.
Во всех этих случаях необходим программатор, который надо либо делать, либо где-то покупать (стоят они все прилично), а в ардуино всё шьётся обычным USB-шнурком (ну или com как в случае с хоуммейдовой платой), как же так?! Нет разработчики не стали запихивать на каждую плату по программатору, а использовали одну удобную функцю МК Atmega под названием «самопрограммирование». Если в определённую область памяти программ атмеги прошить специальную программу-загрузчик( далее бутлоадер) то можно заставить её (атмегу) прошивать саму себя по любому имеющемуся на борту интерфейсу – I2C, UART или SPI. В ардуино используется именно UART(com порт практически) — в USB-шных версиях плат стоит преобразователь USB-to-COM (обычно ft232), а на COM-овских — преобразователь уровней COM-to-TTL (max232 или на дискретных транзисторах)
Работает всё это следующим образом – когда Arduino перезагружается — запускается бутлоадер (если он есть). Он посылает импульсы на цифровой вывод 13 (к данному выводу подключён светодиод — он будет мигать) — это означает, что бутлоадер установлен и работает.
Далее бутлоадер ждёт команды или данные от компьютера. Обычно, это скетч, который бутлоадер записывает в flash-память МК. Затем, бутлоадер запускает свежезагруженную программу на выполнение.
Если никаких данных не поступает — бутлоадер запускает предыдущую программу, которая была загружена в микроконтроллер.
Если же никакой программы нет, то бутлоадер запускает себя снова (цикл повторяется).
Плату мы сделали, загрузчик прошили, посмотрим что можно в неё загрузить.
Для загрузки скетчей нужен прямой COM-шнурок папа-мама т.е. просто удлинитель — фактически можно воткнуть плату прямо в COM-порт(без шнурка=)
Запускаем ArduinoIDE (кто не в курсе — запускать надо файл run.bat из папки arduino-0015, свежую ArduinoIDE можно скачать здесь)
Выбираем тип нашей платы
.
.
.
Выбираем COM-порт
.
.
.
.
Выбираем скетч из примеров, например блинк — будем мигать светодиодом- стандартный для МК способ сказать хело волд =)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Будем хоть немного оригинальны — изменим код=) Помигаем внешним светодиодом (13 пином и так бутоладер мигает)
int ledPin = 11; // светодид подключим к 11 выходу void setup() // запускается единожды когда стартует скетч { pinMode(ledPin, OUTPUT); // конфигурируем 11 пин как выход } void loop() // будет крутиться в бесконечном цикле { digitalWrite(ledPin, HIGH); // включим светодиод delay(500); // подождём пол секунды digitalWrite(ledPin, LOW); // выключим светодиод delay(500); // подождём пол секунды }
скомпилируем всё это дело — жмём на стрелку, ждём, смотрим на надпись внизу — 790байт из 7168байт, доступных для нашего скетча
подадим питание, воткнём шнурок в плату и COM-порт,
.
.
.
.
.
.
.
.
.
жмём загрузить
Ждем…Загрузилось=)
Втыкаем светодиод в землю и в 11 пин, жмём резет, ждём пока бутлоадер потупит в ожидании нового скетча…мигает!
далее: Практическое программирование Arduino/CraftDuino — начало
Ссылки
http://arduino.cc/en/Tutorial/Bootloader
По теме
Программирование Arduino — статьи.
Книги про Arduino
книга на русском языке: Блокнот программиста Arduino (PDF 1.3 Mb)
Шпаргалка по Arduino
8 комментариев на «“Программирование Arduino — Физика процесса”»
Полезная темка для начинающих, но с ошибочкой. Да, я придираюсь, но все-же… На скрине с кодом миганий (точнее, на листинге) первый Delay на включение с задержкой 500 мс, а второй на 1 сек. В комментах «подождем пол секунды» оба раза.
можно уточнить, а как бутлоадер стартует не с 0-го адреса (по нулевому программа пользователя ведь)?
Не бутлоадер а МК, наверно, да?;)
Потому что прошит фьюз соответствующий (внизу):
Загрузка прошла успешно. Но светодиод не моргает… Хотя во время загрузки мигали RX и TX. При перезагрузке мигает светодиод L. В чем проблема может быть? Столько времени и сил потратил, жаль если не работает.
Если RX/TX моргали и сообщений об ошибке не было — бутлоадер на месте (о том же говорит промыргивание L при резете) и скетч загрузился.
8я мега? Там бутлоадер ждёт скетча дооолго.
Только после ***цати секунд скетч начинает выполнятся.
Может просто не дождались=))
Доброго времени суток. Прошил бутлоадер, светодиод L13 мигает быстро 3 раза каждые 10 сек., при попытке загрузить скетч среда разработки выдала ошибку stk500_getsync(): not in sync: resp=0x00, вроде всё грузит светодиод L0 мигает три раза, а потом ошибка, гуглил, не могу ничего дельного найти >_< может кто посоветует что, камень Atmega8A-PU, ардуинка собственного изготовления. ЗЫ человек в этой сфере новый, сильно не ругайтесь=) ЗЫЫ заранее спс
Эта ошибка говорит что: не прошит бутлоадер /неправильные фьюзы / МК не перезагрузился и не готов принять скетч /неправильно выбрали контроллер в среде.robocraft.ru/blog/arduino/19.html
С первой парой пунктов, вроде, порядок — L мигает правильно, насчёт перезагрузки при заливке — тут не совсем ясно — попробуйте вручную сбросить плату перед самой заливкой.
Почитайте каменты тут
Контроллер выбираю Arduino NG or older w/Atmega8 версия среды 1.0.5, сбрасывал плату, тыкал ресет, ничего, порт настроен на 19200 шнура под ком порт нет, втыкаю сразу плату, во время загрузки скетча, бутлоадер продолжает моргать, нормально ли это?