Дополнение к статье «Делаем ISP-программатор из Arduino»


Заметка-отчет о проверке работоспособности «ArduinoISP» не имеющего на борту чипа FT232RL от FTDI. Я не открою ничего нового, лишь поделюсь своим личным опытом использования.


В качестве предисловия хочется сказать что с AVR8 знаком уже давно еще с техникума (в 2004 году AT90S8535 помните? :)), но при этом работал с ними не много, учеба в институте не позволяла уделять достаточное кол-во времени. Ну и естественно много того что знал благополучно забыл. Жизнь внесла свои коррективы и увела в web-разработку, разобравшись с принципами работы которого захотелось большего. И пару лет назад, пришла 3я волна увлечения МК и я собрал себе новую макетку на ATmega32 … и ведь западло, если раньше легко можно было шиться через LPT «пятью проводками», то теперь дома уже не нашлось такого интерфейса 🙁 зато завелся Arduino Uno, точнее кЫтайская поделка.

После покупки Uno первым делом стал прикидывать как же заставить его прошивать хотя-бы Arduino-совместивые камешки (ATmega8, ATmega168, ATmega328 …) и прочие АВРки ну не совать же в финальное устройство целый Arduino, расточительно однако! Да и не всегда же барахтаться в «Wiring» хочется вспомнить Си, а теперь еще и понять C++ на котором пишут и написаны библиотеки для Arduino.

Конечно я планирую взять себе адаптер на FT232RL и шиться по рецепту DI Halt’a, но позже. И тут счастье то какое! нахожу этот замечательный сайт (низкий поклон администрации и авторам за ваш Труд) и статью Делаем ISP-программатор из Arduino. И ураааа! Но позже фак … на Uno ведь вместо FT232RL стоит мега8U!

Немного позже, скачав arduino-1.0.1 нахожу скетч ArduinoISP, и собираю:

Комментировать схему нет смысла, т.к. она повторяет все что написано в комментарии к скетчу ArduinoISP. Но все же следует упамянуть что желтый светодиод это т.н. «Heartbeat» — который пульсируя, говорит что программатор готов к работе. А белый — это на самом деле два светодиода (красный и зеленый) в одном корпусе с общим катодом, которые сигнализируют «Error» и «Programming» об ошибке и процессе загрузки прошивки в целевой контроллер. Сверху справа, вы можете видеть мою самодельную макетку с ATmega32, ST232BN (аналог MAX232) и обвязкой. Несмотря на то, что на целевой макетке есть свой стабилизатор питания я запитал ее от Uno.

А вот теперь давайте попробуем настроить софт-программатора и собственно прошить/прочесть. Естественно, для прошивки будем использовать avrdude, но мне впадлу использовать консоль 🙂 «…хочется открывать окна мищькой…» и я по совету DI Halt’a решил использовать SinaProg. Итак скачал запустил в комбо Device выбрал целевой камень, в Programmer — AVRISP (потому что данный программатор работает по протоколу AVRISP MkI), выбираю пустой файл для сохранения прошивки, жму Flash -> Read и первые грабли:

Т.к. у меня виндоуз (Win 7 x64) стоит уже довольно долго, и при установке дров, Arduino стал аж на COM23, но в SinaProg в комбо боксе с выбором порта программатора максимум СOM9:

Лечится очень легко, добавлением соответствующего порта в файл Port.txt в папке с SinaProg:

Default.
[COM1	com1
COM2	com2
COM3	com3

...

COM9	com9
COM23	com23
LPT1	lpt1
LPT2	lpt2
LPT3	lpt3]

STK500 v2.
[USB	avrdoper]
....

В принципе структура этого файла интуитивно понятна, но хочется обратить внимание что COM23 заглавными это название порта, а сам «адрес» указывается через табуляцию строчными.

Ок! Пробуем снова ииии вторые грабли:

Получаю ошибку Can’t open port и ответ

avrdude -C avrdude.conf -c avrisp -P com23 -b 9600 -p m32 -U flash:r:"D:\Dropbox\AVR\dnl.hex":i -q


avrdude: ser_open(): can't open device "com23":

Так, как это! Порт доступен, другие приложения открывают, а ты не можешь! И вспоминаю об сообщениях о разных версиях avrdude и о странностях в их работе. Ну ладно, копирую avrdude.exe из arduino-1.0.1\hardware\tools\avr\bin\ в каталог с SinaProg, заменяя тот что был внутри, пробую прочесть и снова ошибка, но уже другая:

avrdude -C avrdude.conf -c avrisp -P com23 -b 9600 -p m32 -U flash:r:"D:\Dropbox\AVR\dnl.hex":i -q


error at avrdude.conf:364 unrecognized character: "s"

Что-то в структуре в конфига avrdude. Далее я пытался править, подменять, очищать avrdude.conf и ничего не получалось! Или порт не может быть открыт или не нравятся символы в конфиге…

НО проблему я все же решил, скопировав файлы avrdude.exe и avrdude.conf из папки bin\ свежей версии WinAvr (WinAVR-20100110). Подобрав рабочую связку «дудки» и его конфига, пробую читать очередной раз получаю грабли три:

avrdude -C avrdude.conf -c avrisp -P com23 -b 9600 -p m32 -U flash:r:"D:\Dropbox\AVR\dnl.hex":i -q


avrdude: stk500_getsync(): not in sync: resp=0xff

avrdude done.  Thank you.

И ошибку на светодиоде «Error»

На видео запечатлен процесс прошивки (точнее чтения) завершившийся не удачно.
Также на целевой макетной плате вы можете видеть ряд зеленых светящихся и красных не светящихся светодиодов. Эти диоды стоят на старшей тетраде (биты 4-7) порта A и при выводе «0» на соответствующем выводе загорается зеленый, а при «1» — красный. При высоком импедансе — светятся оба но тускло. И еще немного левее, желтый светодиод это «Сеть».

Возвращаясь к предмету заметки, пробуем понять что же все таки значит not in sync: в ошибке дудки. А значит это то, что мы по сути работаем через USART — асинхронный UART и у нас на лицо рассинхронизация. Тьфу ты! Подумал я и вспомнил про баудрейт (скорость передачи через порт) и выставил 19200 в комбобоксе скорости. И в итоге настроенная SinaProg стала выглядеть так:

На группу Fuses не обращайте внимание, это значение там было сразу же после первого запуска SinaProg и пока вы не нажмете Programm фьюзы не прошьются, так что просто игнорируем.

Жму Flash Read и смотрю на железо:

Урааа! Заработало! Теперь было бы не плохо прошить. Для этого в Atmel Studio 6 (бывшая AVRStudio) набросал такую программку

/*
 * Arduino_ISP.cpp
 *
 * Created: 20.08.2012 12:44:57
 *  Author: TRAHOMOTO
 */

#define F_CPU 16000000L

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRA = 0xff;

    while(1)
    {
		PORTA = 0xff;
		_delay_ms(1000);
		PORTA = 0x00;
		_delay_ms(5000);
    }
} 

Мигаем всем портом. А если точнее, то выставляем пины порта A в «1» ждем 1с сбрасываем пины в «0» ждем 5с и повторяем снова.

Компилирую и загружаю полученный hex в целевой контроллер:

Вот, собственно, теперь я получи вполне себе удобный USB программатор для AVR’ок. Нужно будет купить комплект ATmega8/168/328 прошить фьюзы, бутлоадер и спрятать в пенале с прочей мелочью, на всякий случай как резервную копию 🙂

Для скачивания:
SinaProg с которой я работал в заметке

У меня всё, спасибо за внимание. Если что не точно/не понятно укажите в комментариях, исправлю/дополню.
С ув.


0 комментариев на «“Дополнение к статье «Делаем ISP-программатор из Arduino»”»

    • Если про ссылку на программу, то судя по скринам автор работал с той же версией SinaProg что ханится у нас.

    • Здравствуйте Владимир!

      К сожалению все файлы сейчас остались на сервере в ЛНР. И вся информация была удалена с них. Поэтому ссылки поправить не чем :(. Однако вы с легкостью можете повторить пути описанные в заметке и получить прошивалку.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение