CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Дополнение к статье "Делаем 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 с которой я работал в заметке

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

Комментарии (3)

RSS свернуть / развернуть
+
0
Вот еслиб ссылку поправить. Цены бы не было этим дополнениям к статье.
avatar

vovanj4

  • 28 марта 2015, 09:05
+
0
Если про ссылку на программу, то судя по скринам автор работал с той же версией SinaProg что ханится у нас.
avatar

Zoltberg

  • 31 марта 2015, 13:19
+
0
Здравствуйте Владимир!

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

TRAHOMOTO

  • 1 апреля 2015, 08:35

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.