Минимальный клон Arduino за $3 на ATmega8A с модифицированным bootloader'ом

Сразу признаюсь, что заголовок призван привлекать внимание — конечно, за $3 полноценную Arduino-плату не собрать, но минимальное решение вполне можно.

Платы проекта Arduino идеальны для макетирования и сборки прототипов, а для законченных устройств хотелось найти что-то более дешевое и доступное. В этой заметке будет описана минимальная Arduino-совместимая конструкция.

В качестве отправной точки использовались статьи Minimal Arduino with ATmega8 (внимание: в этой статье есть ошибка, значения fuse-битов неверны) и страница об ArduinoISP из официальной wiki. К сожалению, ни одна из этих статей в своё время не ответила на все мои вопросы, кроме того появилось желание немного «подкрутить» стандартный bootloader, но об этом ниже.

Поддержка новых плат и IDE
(дополнение от 01.05.2012
, файлы исправлены 27.05.2012)

Действия, описанные в статье, проверялись на Arduino IDE 0023 и клоне Arduino Duemilanove. С момента написания статьи были выпущены новые платы и обновлена среда. Судя по комментариям пользователей к этой записи, всё работало если в качестве платы-программатора использовались Arduino Uno и Arduino Mega 2560. Для новой версии среды Arduino IDE 1.0.1 я подготовил обновлённый архив (доступен в конце статьи), обновление необходимо из-за незначительных изменений в формате файла boards.txt
 
Минимальная Arduino-конструкция за $3.5
(дополнение от 02.05.2012) 

Этот способ является альтернативным описанному в статье ниже!
В комплекте Arduino IDE 1.0 поставляется новый бутлоадер Optiboot, который занимает всего 512 байт (бутлоадер, описанный в этой статье в два раза больше — 1 Кб) и работает на высоком бодрейте — 115200 (в статье ниже — 38400). Для работы этого бутлоадера дополнительно к описанным в статье компонентам нужен внешний кварц на 16МГц и два конденсатора на 22пФ его обвязки (этим объясняется увеличение стоимости на $0,5 :)). В комплекте с Arduino IDE 1.0 есть уже скомпилированная версия для ATmega8, достаточно только добавить в boards.txt следующее и прошить бутлоадер:
##############################################################
atmega8optiboot.name=ATmega8 (optiboot, 16Mhz XTAL)

atmega8optiboot.upload.protocol=arduino
atmega8optiboot.upload.maximum_size=7680
atmega8optiboot.upload.speed=115200

atmega8optiboot.bootloader.low_fuses=0xBF
atmega8optiboot.bootloader.high_fuses=0xCC
atmega8optiboot.bootloader.path=optiboot
atmega8optiboot.bootloader.file=optiboot_atmega8.hex
atmega8optiboot.bootloader.unlock_bits=0x3F
atmega8optiboot.bootloader.lock_bits=0x0F

atmega8optiboot.build.mcu=atmega8
atmega8optiboot.build.f_cpu=16000000L
atmega8optiboot.build.core=arduino:arduino
atmega8optiboot.build.variant=arduino:standard
 
В версии файлов к статье от 14.07.2012 настройки для этого способа добавлены в состав архива, поэтому править главный boards.txt больше нет необходимости.


Внимание! Автор не несёт никакой ответственности за возможные последствия следования инструкциям в этой статье.

Что будет нужно:
  • Arduino-совместимая плата (я использовал китайский клон Arduino Duemilanove, на момент написания заметки новая Arduino Uno не поддерживается скетчем ArduinoISP. Обновление: по сообщениям пользователей ArduinoISP из Arduino 023 поддерживает Arduino Uno). Плата будет использоваться в качестве программатора для прошивки bootloader'а и в дальнейшем как USB-TTL конвертер;
  • Arduino IDE версии 0022 (последняя на момент написаний статьи);
  • Микроконтроллер в корпусе DIP-28 ATmega8 или ATmega8A (функционально они идентичны, версия с буквой «A» имеет более низкое энергопотребление). Для тактирования будет использоваться внутренний RC-осциллятор с максимальнй для него частотой 8Mhz.
  • Провода для соединения всего этого на время прошивки bootloader'a (я использовал беспаечную макетную плату и набор зачищенных проводов к ней)
Опциональные компоненты:
  • 1 светодиод и токоограничительный резистор на 220-500 Ом (подключается к пину №19 (PB5), это тот же выход Digital pin 13, к которому на большинстве Arduino-совместимых плат подключен светодиод L);
  • 1 резистор на 10 кОм (подключается от RESET'а микроконтроллера к +5V для предотвращения произвольного сброса);
  • 1 конденсатор 100 нФ (подключается между плюсом и минусом питания для фильтрации помех).
Пригодится также распечатанная схема соответствия пинов контроллера и их Arduino-названий:


Выбор именно ATmega8(A) объясняется очень просто: в местных магазинах радиотоваров не было никаких других контроллеров, поддерживаемых средой Arduino. С одной стороны, это сильно ограничило меня в объёме кода, с другой — именно благодаря тому, что код моего проекта на Arduino не поместился в память контроллера, я был вынужден разобраться с WinAVR и переписать проект под AVR-GCC. Времени на вспоминание C и чтение datasheet'ов ушло довольно много, но код получился раз в пять компактнее и, пожалуй, к программированию в среде Arduino я врядли вернусь :).
Подготовка IDE

Скачайте архив с настройками и bootloader'ом и разархивировать его в папку Sketchbook (путь можно посмотреть в пункте меню File -> Preferences Arduino IDE). После перезапуска Arduino IDE в меню Tools -> Board должен появиться новый пункт ATmega8(A) (8MHz int. RC osc, short bootloader delay, 38400 baud rate).

В архиве находится следующее:
  • Модифицированный bootloader для ATmega8 от проекта Arduino. Оригинальный исходный код можно найти в папке hardware\arduino\bootloaders\atmega8. Этот bootloader занимает всего 1 Кб (512 слов) в памяти контроллера, в отличие от более нового hardware\arduino\bootloaders\atmega, который используется для плат на основе ATmega168 и ATmega328. Отличия от оригинальной версии заключаются в следующем: уменьшено время ожидания скетча при сбросе микроконтроллера, скорость загрузки поднята до 38400;
  • Файл boards.txt, в котором описана конфигурация нового типа платы (с более высокой скоростью загрузки и fuse-битами для работы от внутреннего RC-осциллятора на частоте 8Mhz).
Превращение Arduino-совместимой платы в программатор

В Arduino нужно загрузить скетч ArduinoISP (File -> Examples -> ArduinoISP), после этого Arduino может играть роль ISP-программатора практически для любых AVR чипов (я проверял на ATmega8 и ATtiny45).

Подключение «программатора» к контроллеру

Схема подключения описана на странице об ArduinoISP из официальной wiki, будет использоваться такой вариант подключения (без внешнего осциллятора):



Схема продублирована в тексте скетча ArduinoISP:

// this sketch turns the Arduino into a AVRISP
// using the following pins:
// 10: slave reset
// 11: MOSI
// 12: MISO
// 13: SCK

Обновление от 30.10.2011: Для Arduino Mega назначение выводов другое:

// 50 (MISO)
// 51 (MOSI)
// 52 (SCK)
// 53 (slave reset)

Дополнительно можно подключить светодиоды, которые будут перемигиваться при прошивке (их наличие или отсутствие на функциональность не влияет):

// Put an LED (with resistor) on the following pins:
// 9: Heartbeat - shows the programmer is running
// 8: Error - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave

Проверка подключения

Arduino использует для компиляции скетчей avr-gcc, штатной утилитой для прошивки в котором является программа avrdude (расположен в этой папке: \hardware\tools\avr\bin\). Прежде чем предпринимать что-либо дальше необходимо проверить, правильно ли мы подключили контроллер с помощью следующей команды:

avrdude -v -patmega8 -cstk500v1 -PCOM10 -b19200

Назначение параметров:
  • -v — выводить больше информации
  • -patmega8 — тип контроллера (для ATmega8A нужно всё равно указывать atmega8)
  • -cstk500v1 — тип программатора (ArduinoISP эмулирует STK500)
  • -PCOM10 — номер COM-порта (можно посмотреть в меню Tools -> Serial Port в Arduino IDE)
  • -b19200 — скорость обмена, скетч ArduinoISP работат на этой скорости
Если всё подключено правильно, контроллер должен радостно ответить примерно следующее:

AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as E1
avrdude: safemode: hfuse reads as D9
avrdude: safemode: lfuse reads as E1
avrdude: safemode: hfuse reads as D9
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
Важно! Если всё подключено правильно, а всё равно не работает, возможно, проблема в версии avrdude. На одной из моих тестовых плат возникла следующая ситуация: avrdude из ArduinoIDE плату-«программатор» с ArduinoISP не видит, а avrdude из WinAVR работает отлично. Решение этого непонятного бага довольно простое — на время прошивки bootloader'a заменить файл \hardware\tools\avr\bin\avrdude.exe на более новую версию из WinAVR. Bootloader может прошиться не с первого раза, а со второго — жалоб о таком поведении на форумах тоже хватает. После прошивки bootloader'а можно восстановить оригинальную версию avrdude.

Прошивка bootloader'a

Самая простая часть. Нужно запустить Arduino IDE, выбрать в пункте меню Tools -> Board следующую плату: ATmega8(A) (8MHz int. RC osc, short bootloader delay, 38400 baud rate). Здесь указывается целевая плата, поэтому нужно выбрать именно этот пункт, а не модель Arduino-совместимой-платы, которая работает ISP-программатором.

После этого нужно запустить процесс прошивки bootloader'а командой Tools -> Burn Bootloader -> w/ Arduino as ISP. Процесс прошивки занимает 1–2 минуты.

Что же получилось в итоге

После прошивки bootloader'а и установки fuse-битов новая ATmega8A будет работать от встроенного RC-осциллятора на частоте 8Mhz. Программы в флеш-памяти контроллера ещё нет, поэтому bootloader будет запускаться снова и снова, о чём будет свидетельствовать постоянное помигивание светодиода L.

Bootloader ждет команд по UART около половины секунды после сброса микроконтроллера. Для заливки прошивки в контроллер можно использовать:
  • USB-TTL конвертер (его можно собрать или купить);
  • Arduino-совместимая плата со снятым контроллером.
Зачем нужен bootloader, если есть ArduinoISP?
  • использование bootloader'a обеспечивает совместимость и с Arduino IDE, и с AVR Studio;
  • меньше проводов для подключения (вместо линий ISP только UART). При этом UART часто используется для отладки, поэтому его все равно приходится подключать.
Скачать
Архив с bootloader'ом и настройками для Arduino IDE всех версий
Проект на GitHub
  1. в приложеном zip-архиве присутствует неоднозначность в вопросе "правильных" фузов. Так, в файле boards.txt указано:
    atmega8noxtalfast.bootloader.low_fuses=0xe4
    atmega8noxtalfast.bootloader.high_fuses=0xc2

    при этом в Makefile указаны
    FUSE_L = 0xdf
    FUSE_H = 0xca

    Вопрос к автору: какие значения fuse-битов правильные? (и в чём их неправильность в исходной статье)

    ОтветитьУдалить
  2. Фьюзы из Makefile'а будут использоваться, если вы будете прошивать бутлоадер через make program (или как там настроено в makefile'е), при прошивке bootloader'а через Arduino используется boards.txt.

    В оригинальной статье:
    atmega8noxtal.bootloader.low_fuses=0xe4
    atmega8noxtal.bootloader.high_fuses=0xc4

    У меня:
    atmega8noxtalfast.bootloader.low_fuses=0xe4
    atmega8noxtalfast.bootloader.high_fuses=0xc2

    Разницу можно увидеть с помощью калькулятора:
    http://www.engbedded.com/fusecalc/

    С4 = 256 слов на бутлоадер (512 байт)
    С2 = 512 слов на бутлоадер (1024 байт)

    Bootloader занимает ~900Кб, поэтому нужно С2. При неправильных фьзах бутлоадер прошьётся, но не будет работать. Можно посмотреть мой и другие комментарии под статьёй

    http://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/

    ОтветитьУдалить
  3. -> Bootloader занимает ~900Кб
    наверное 900б... а то 1Мб это круто.

    ОтветитьУдалить
  4. Неправильно указаны параметры avrdude (нужны пробелы).

    ОтветитьУдалить
  5. Прошил таким образом Mega8L.
    Почему-то прошивка загрузчика прошла очень быстро (секунд 5-10). Но не ясно что дальше делать: вставил прошитую микруху в arduino плату, но при попытке что-то залить в IDE пишется:

    avrdude: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.

    Как посмотреть эту сигнатуру и какая она должна быть?

    ОтветитьУдалить
  6. Сообразил посмотреть в Avrdude:

    Programmer Type : STK500
    Description : Atmel STK500 Version 1.x firmware
    Hardware Version: 2
    Firmware Version: 1.18
    Topcard : Unknown
    Vtarget : 0.0 V
    Varef : 0.0 V
    Oscillator : Off
    SCK period : 0.1 us

    avrdude.exe: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.10s

    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.


    avrdude.exe done. Thank you.

    Т.е. выходит у микрухи стерлась сигнатура и теперь я с ней ничего не смогу сделать?

    ОтветитьУдалить
  7. > наверное 900б... а то 1Мб это круто.
    Да, конечно, 900б, а не кб.

    > Неправильно указаны параметры avrdude (нужны пробелы).
    работает и так, кроме того среда Arduino запускает именно без пробелов (можно включить детальный вывод вот так:

    http://snippets.crisp-studio.com/view/109/vklyuchenie-detalnyx-soobshhenij-kompilyatora-i-avrdude-v-arduino-ide

    ОтветитьУдалить
  8. Разобрался почему не работала плата с прошитой микрухой.
    Оказывается avrdude который идет с Arduino IDE не просто старая версия, а патченная версия, которая игнорирует сигнатуру чипа.

    Т.е. не забудьте вернуть родной avrdude после того как будет зашит загрузчик.

    ОтветитьУдалить
  9. > Т.е. не забудьте вернуть родной avrdude после того как будет зашит загрузчик.
    Странно, я использую WinAVR с родным avrdude для прошивки через ардуиновский бутлоадер и через ArduinoISP -- работает нормально, сигнатуру говорит. Да, фьюзы будут показаны нулевыми, если прошивать через бутлоадер. А где можно почитать про то, что именно там пропатчено?

    Кстати, Mega8L на 8Mhz работает от встроенного RC-осциллятора?

    ОтветитьУдалить
  10. Что-то про reset function.

    Да, от внутреннего осциллятора, все по инструкции с этой страницы.

    ОтветитьУдалить
  11. На Windows использую avrdude 5.10 из WinAVR 20100110 -- ресетит вроде бы нормально, если указать "-c arduino" нужно будет как-нибудь покопаться...

    ОтветитьУдалить
  12. Собрал, попробовал - все отлично работает.
    Есть пара проблем.
    Шью через RS232-TTL преобразователь на MAX232.
    1. Если использовать RX, TX, GND, то момент для "старта" загрузки скетча выбрать крайне тяжело - приходится давить ресет и БЫСТРО нажимать кнопку загрузки
    2.Если подать еще сигнал DTR на Reset через емкость - все шьется, но для старта скетча нужно пнуть Reset (вроде как на Freeduino все само стартовало) - может так и должно быть ? Ресет дернуть не трудно, но хотелось бы разъяснений =)

    И еще - раз уж такое устройство "позиционируется" как основа для реальной "железки", не могли бы Вы опубликовать статью, как шить Arduino-скетчи без бутлоадера. Чтобы не было задержки после подачи питания - в случае с минимальным ардуино задержка маленькая, но все равно.
    Заранее спасибо!

    ОтветитьУдалить
  13. Adruino-скетчи без bootloader-а? Тут потребуется программатор... Какой программатор Вы предпочитаете? ;)

    ОтветитьУдалить
  14. > 1. Если использовать RX, TX, GND, то момент для "старта" загрузки скетча выбрать крайне тяжело - приходится давить ресет и БЫСТРО нажимать кнопку загрузки
    В моём случае я подключал RESET целевой ATmega8 к RESET'у на Arduino Duemilanove с вытащенным контроллером, таким образом за RESET в нужный момент отвечал конденсатор на одной из линий FT232 (как на обычной Duemilanove). Всего соединялось 4-мя проводами: RESET, GND, RX, TX.

    > И еще - раз уж такое устройство "позиционируется" как основа для реальной "железки", не могли бы Вы опубликовать статью, как шить Arduino-скетчи без бутлоадера. Чтобы не было задержки после подачи питания - в случае с минимальным ардуино задержка маленькая, но все равно.
    Без программатора тут не получится. В качестве программатора можно использовать ArduinoISP (который в этой статье использовался для прошивки бутлоадера). Скомилированный скетч (hex для прошивки) придётся выковыривать откуда-то из временных файлов (зависит от версии IDE).

    ОтветитьУдалить
  15. Скомпилированный скетч обычно лежит hex-файлом в подкаталоге applet, в папке скетча.

    ОтветитьУдалить
  16. > Скомпилированный скетч обычно лежит hex-файлом в подкаталоге applet, в папке скетча.

    На Windows насколько помню ничего не создаётся в папке скетча, точно на 0022?

    ОтветитьУдалить
  17. Да понятно, что придется использовать программатор. Скетчи, кстати, складываются на Linux/MacOS в /tmp. Тут весь вопрос с fuses (нужно ли их менять) и командах avrdude правильных.
    Ведь, насколько я понимаю, fuse-бит еще и задает размер бутлоадера. А тут, если бутлоадера нет, то и fuse должен быть другой ? Вроде на arduino.cc была статья, но я лично мало что понял из нее.

    ОтветитьУдалить
  18. > Ведь, насколько я понимаю, fuse-бит еще и задает размер бутлоадера. А тут, если бутлоадера нет, то и fuse должен быть другой ? Вроде на arduino.cc была статья, но я лично мало что понял из нее.

    Насколько помню, секция бутлоадера размещается в конце памяти контроллера, поэтому если прошить контроллер прошивкой, меньшей по размеру чем "размер флеша минус установленный размер бутлоадера", то при ресете контроллер стартанёт с адреса бутлоадера (там будет пусто) и не найдя его начнёт с начала прошивки.

    Насколько помню, пробовал шить программатором не меняя фьюзы будтлоадера, работало.

    Правильнее конечно будет поменять фьюзы и заодно lock-биты для красоты. :)

    Илья, поправьте если я не прав...

    P.S. Ещё один вариант, чтобы не выковыривать скетчи -- использовать другую IDE, но используя Arduino'вские библиотеки:

    Eclipse:
    http://habrahabr.ru/blogs/arduino/111908/

    Visual Studio:
    http://habrahabr.ru/blogs/arduino/111321/

    Ну и тут уже один шаг остаётся до программирования на чистом AVR-GCC :)

    http://snippets.crisp-studio.com/view/114/ispolzovanie-netbeans-s-winavr

    ОтветитьУдалить
  19. Коллеги! Я правильно понимаю, что алгоритм такой примерно:
    1. Выковыриваем hex
    2. Даем программатору команду "стирать флеш" - фузы не трогаем
    3. Даем программатору команду "писать флеш" - фузы не трогаем.
    4. В идеале, после подачи питания, стартовать должна прошивка сразу.

    ОтветитьУдалить
  20. Если размер прошивки для ATmega8 меньше чем 7168 байт (или сколько там получается), то всё вроде бы верно.

    п.2 и 3. делаются одновременно обычно (вернее, avrdude сам выполнит стирание перед прошивкой, если не указано обратное).

    ОтветитьУдалить
  21. Спасибо, буду пробовать в скором времени...

    ОтветитьУдалить
  22. Все получилось!
    Спасибо за поддержку...
    Еще бы ликбез по fuses бы =)

    ОтветитьУдалить
  23. Классно, что получилось :)

    По фьюзам у DI HALT'а есть:
    http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html

    Для конкретного контроллера можно проверить этим калькулятором:
    http://www.engbedded.com/fusecalc/

    ОтветитьУдалить
  24. Ну вот, собственно финальное (почти) описание устройства. http://a320.emulate.su/2011/02/24/dingoo-a320-arduino-%d1%87%d0%b0%d1%81%d1%82%d1%8c-%d0%b2%d1%82%d0%be%d1%80%d0%b0%d1%8f/

    Фотки готового изделия будут позднее - допиливаю.

    ОтветитьУдалить
  25. Привет!

    Дай знать, когда фотки будут :) Я правильно помню, что у Dingoo есть ТВ-выход и в итоге проекта может получиться полноценный аркадный автомат? :)

    ОтветитьУдалить
  26. Да, и многие так и делают, но я сделал нано-вариант - используется сам экран, а тв-аут выведен на тюльпаны сзади, впрочем покажу

    ОтветитьУдалить
  27. Если бы не эта статья, ничего бы не получилось.
    http://a320.emulate.su/2011/02/27/fallout-mod/

    ОтветитьУдалить
  28. Да, штука зачётная и стильная получилась :)

    ОтветитьУдалить
  29. Уважаемые, а можно чайнику небольшое пояснение?
    Выковырили HEX, а как будет выглядеть команда заливки оного в атмегу8 через ArduinoISP?

    ОтветитьУдалить
  30. Максим, правильно ли я понял, имеется в виду как использовать ArduinoISP чтобы залить произвольный HEX-файл в произвольный контроллер подключенный ISP-проводаками?

    Если я всё понял правильно, то чтобы прошить, например attiny45, подключенный к ArduinoISP нужно следующее

    avrdude -v -p attiny45 -c stk500v1 -P COM10 -b19200 -U flash:w:my_hex_file_here.hex

    Целевым контроллером в данном случае является то, что подключено к ArduinoISP.

    ОтветитьУдалить
  31. Спасибо, Артем!
    В принципе уже дошло, но я лучше переспрошу :)

    ОтветитьУдалить
  32. Все получилось! Спасибо автору статьи и за развернутые комментарии.
    blink.hex прекрасно залился и сразу заработал.

    ОтветитьУдалить
  33. Классно, что всё получилось, а какой был целевой контроллер?

    ОтветитьУдалить
  34. Я в небольшом сметении...
    Подскажите, а что никакой особой обвязки ненужно??? Ну разве что кроме двух резистора и двух перемычек? (я смотрю по схеме товарища ZNO http://a320.emulate.su/wp-content/uploads/2011/02/board.png)
    Зачем тогда так много всего на самой ардуине?
    Я так понимаю это остальное все USB, и внутрисхемный программатор.
    Если все так, то получается отличный девайс - так сказать простой старт.

    ОтветитьУдалить
  35. И еще вопрос: можно ли так прошивать те же atmega168, atmega328?

    ОтветитьУдалить
  36. Подскажите, а что никакой особой обвязки ненужно???
    > Ну разве что кроме двух резистора и двух перемычек?
    По хорошему нужно поставить пару конденсаторов на питание, чтобы сгладить помехи, но по минимуму запустится и так. Подробнее тут: http://easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html

    > Зачем тогда так много всего на самой ардуине?
    На arduino стоит USB-TTL преобразователь, регулятор на 5В, схема выбора питания (от DC-джека или от USB)

    > Я так понимаю это остальное все USB, и внутрисхемный программатор.
    Программатора на Arduino нет, только USB-TTL преобразователь, предварительно зашитый внутрь контроллера бутлоадер прикидывается программатором и принимает прошивку.

    > И еще вопрос: можно ли так прошивать те же atmega168, atmega328?
    Да, можно. Кроме этого ArduinoISP прошивает любые другие контроллеры ATmel, которые программируются по ISP. Из популярных (кроме названных): ATtiny13, ATtiny2313. Единственное "но" программатор USBtinyISP, например, делает это раза в два быстрее (10с против 2-3с :)).

    ОтветитьУдалить
  37. Подскажите в чем проблема:

    avrdude -v -patmega8 -cstk500v1 -PCOM4 -b19200

    В ответ получаю:

    avrdude: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
    Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

    System wide configuration file is ""
    avrdude: can't open config file "": Invalid argument
    avrdude: error reading system wide configuration file ""

    ОтветитьУдалить
  38. Спасибо! Все отлично получилось! В команде не хватает пробелов:
    avrdude -v -p atmega8 -c stk500v1 -P COM4 -b 19200

    ОтветитьУдалить
  39. Странно, должно и так понимать, правда я использовал avrdude из WinAVR, а вы судя по этому "Version 5.4-arduino" из Arduino?

    ОтветитьУдалить
  40. у меня версия из ардуино не работала совсем :-(.
    забыл написать, что для этого я заменил из winavr.
    И то даже она почему-то обнаружила со второго запуска той же самой комманды

    ОтветитьУдалить
  41. Этот комментарий был удален автором.

    ОтветитьУдалить
  42. Все оказалось на много проще и не понятнее. Достаточно из во фридуино воткнуть USB в два этапа, т.е. сначала немного, потом еще чуть дальше и все скетча нет.
    На макетке собрал девайс. Когда питаю всю схему от Freduino - работает хорошо. Как только запитал от зарядки с мобильного (5.2В, 0,7А) - все скетч пропал.
    Исходя из этих двух наблюдений я так понимаю налицо проблемы с питанием, как решать?

    И самый главный вопрос - как может питание (может действительно не правильное...) лишать меня залитого скетча????

    ОтветитьУдалить
  43. > у меня версия из ардуино не работала совсем :-(.
    Судя по куску вывода запускается именно Arduino'воская версия. Не напутал с путями?

    > И то даже она почему-то обнаружила со второго запуска той же самой комманды
    Это глюк ArduinoISP, о нём на форумах писали и я его пару раз ловил. Обычно ничего страшного, вторая прошивка или ресет Arduino-программатора помогает.

    > Теперь дело дошло до сбора уже прошитой Atmega8A-PU на макетной плате. Собираю - не работает,
    >вставляю в FreeDuino - работает. Заново собираю схему - не работает.
    Как сконфигурированы фьюзы на этой ATmega8? Возможно, сконфигурировано на работу с внешним кварцем, на макетке его нет, а на FreeDuino -- есть?

    > Повторная заливка скеча - опять работает. Пока не поместишь на макетную плату.
    > С чем связаны такие приключения? как решать?
    Можно глянуть на фотку макетки и на фьюзы меги (они выводятся при прошивке).

    И ещё: почему бы не оставить мегу на макетке и там же её и шить, не вынимая?

    ОтветитьУдалить
  44. >Судя по куску вывода запускается именно Arduino'воская версия. Не напутал с путями?

    Нет это я после комментария пробовал

    Как выяснилось проблема вовсе не в моей макетной плате.
    Проблема вот в чем. Скетчь теряется даже в самой Freeduino если не правильно вставить USB. А именно: вставлять в два этапа сначала немного без усилия, потом до конца. В результате скетч потерян. На сколько я помню такого небыло 328 чипом. Может я над ним не так издевался..

    ОтветитьУдалить
  45. Возможно, дело в маленькой задержке у модифицированного бутлоадера -- он успевает "схавать" какой-то мусор во время инициализации USB-TTL и запрограммировать его в себя.

    На Freeduino какой USB-TTL чип?

    ОтветитьУдалить
  46. Во фридуино FT232RL
    В том то и дело если вставить до конца сразу резким движением, то такого сброса не происходит.

    Тоже самое наблюдалось когда подключал питание не от платы а от зарядного с мобилки. Но когда обвесил конденсаторами - на макетке баг пропал.

    ОтветитьУдалить
  47. Если баг пропадает в том случае, если к TX\RX ничего не подключено -- скорее всего бутлоадер. Эта версия по описанию не так устойчива к мусору во время загрузки.

    ОтветитьУдалить
  48. Тут у меня еще один неудобный момент обнаружился. А можно ли как-то сделать так, чтобы скетч в atmega8 заливать без постоянного перемещения в саму arduino. Может можно вывести какие пины и соеденить непосредственно с платой. Может ещ какие варианты. т.е. что-то вроде внутрисхемног опрограмматора

    ОтветитьУдалить
  49. > А можно ли как-то сделать так, чтобы скетч в atmega8 заливать без постоянного перемещения в саму arduino.

    1. Нужно выдернуть чип из Arduino

    2. Соединить GND, RESET, TX, RX от Arduino с соотв. пинами на ATmega8.

    3. Заливаться будет так, как будто Atmega8 вставлена в ардуину.

    P.S. Питание ATmega8 желательно, чтобы совпадало с ардуино, т.е. 5В и там и там.

    ОтветитьУдалить
  50. > 1. Нужно выдернуть чип из Arduino
    Уточнени:
    Имеется в виду вытащить штатный для твоей Arduino контроллер (ATmega328 скорее всего) и отложить в сторону, чтобы в раъёме DIP-28 ничего не было. После этого Arduino-плата превращается в переходник USB-TTL с автоматическим передёргиванием линии RESET при заливке скетча.

    ОтветитьУдалить
  51. по уарту сам не работает.. не заливает..
    подскажите про кварц. у меня на 8мгц. не хочет работать... а на програматоре на 12 мгц от него работает нормально... вывод. поставить на 12

    ОтветитьУдалить
  52. А что именно не работает и как собрано\подключено? Если цель сделать как в статье -- то кварц не нужен (вообще на 8 заработает, но если фьюзы поменять, а для 12 нужно как минимум бутлоадер пересобирать).

    ОтветитьУдалить
  53. Коллеги, в чем может быть проблема?
    Имею:
    - Arduino MEGA2560 (оригинальный)
    - IDE Arduino 0022
    - ATmega 8A-PU

    Выполняю:
    - Подключил все по указанной здесь схеме.
    - Прошил Arduino скетчем ArduinoISP (очевидно прошилось успешно, т.к. стал плавно помигивать диод Heartbeat на 9-й ноге).
    - Далее выбираю Tools->Board->ATmega8A и Tools->Burn Bootloader->w/ Arduino as ISP
    Через несклько секунд 2 раза мигает Error диод и появляется сообщение об ошибке: avrdude: stk500_getsync(): not in sync: resp=0x00
    - Проверяю avrdude -v -patmega8 -cstk500v1 -PCOM3 -b19200
    avrdude: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
    Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

    System wide configuration file is "D:\arduino-0022\hardware\tools\avr\bin\avrdude.conf"

    Using Port : COM3
    Using Programmer : stk500v1
    Overriding Baud Rate : 19200
    avrdude: stk500_getsync(): not in sync: resp=0x00

    avrdude done. Thank you.

    - Проверяю с самой последной версий avrdude -v -patmega8 -cstk500v1 -PCOM3 -b19200
    avrdudenew: Version 5.10, compiled on Jan 19 2010 at 10:45:23
    Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
    Copyright (c) 2007-2009 Joerg Wunsch

    System wide configuration file is "D:\arduino-0022\hardware\tools\avr\bin\avrdude.conf"

    Using Port : COM3
    Using Programmer : stk500v1
    Overriding Baud Rate : 19200
    AVR Part : ATMEGA8
    Chip Erase delay : 10000 us
    PAGEL : PD7
    BS2 : PC2
    RESET disposition : dedicated
    RETRY pulse : SCK
    serial program mode : yes
    parallel program mode : yes
    Timeout : 200
    StabDelay : 100
    CmdexeDelay : 25
    SyncLoops : 32
    ByteDelay : 0
    PollIndex : 3
    PollValue : 0x53
    Memory Detail :

    Block Poll Page Polled
    Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
    ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
    eeprom 4 20 128 0 no 512 0 0 9000 9000 0xff 0xff
    flash 33 10 64 0 yes 8192 64 128 4500 4500 0xff 0x00
    lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
    hfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
    lock 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00
    calibration 0 0 0 0 no 4 0 0 0 0 0x00 0x00
    signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

    Programmer Type : STK500
    Description : Atmel STK500 Version 1.x firmware
    Hardware Version: 2
    Firmware Version: 1.18
    Topcard : Unknown
    Vtarget : 0.0 V
    Varef : 0.0 V
    Oscillator : Off
    SCK period : 0.1 us

    avrdudenew: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
    avrdudenew: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.

    avrdudenew: stk500_disable(): protocol error, expect=0x14, resp=0x51

    avrdudenew done. Thank you.

    ОтветитьУдалить
  54. Alex.

    Эта ошибка означает, что программатору не удалось перевести прошиваемый мк в режим программирования. Тут может быть что угодно - неправильное соединение прошиваемого мк к программатору, неисправность мк или неисправность выводов программатора.

    У меня часто бывает, что устройства не могут подключиться друг к другу, если питание на прошиваемый контроллер идет от другого источника. Тогда я перед прошивкой отключают программатор и питание, потом подключаю программатор и питание и запускаю прошивку. Т.е. нужно чтоб и программатор и питание были "свежевключенными". Почему так происходит - я так и не понял.

    Но первые разы, когда я пробовал прошивать этим программатором, то ошибался в неправильном или некачественном соединении программатора и программируемого мк. Прозвони соединения между ними, попутно сверяясь с даташитами на устройства.

    ОтветитьУдалить
  55. build_your_web,

    Разводка по схеме - ОК
    Скетч/проц пины - ОК
    Работоспособность выводов на Arduino - ОК
    Пробовал с тестить ATmega88, та же ситуация.

    Ума не приложу в чем дело, как-то можно проверить микруху?

    ОтветитьУдалить
  56. Попробуйте использовать avrdude напрямую.

    Avrdude есть в одной из подпапок Program Files/arduino.
    Если не заработает, скачайте свежую версию с официального сайта, установите в отдельную папку, попробуйте подключится используя новую версию.

    ОтветитьУдалить
  57. Судя по ответу на команду:
    avrdude -v -patmega8 -cstk500v1 -PCOM3 -b19200

    Программатор из Ардуины отзывается, целевой контроллер -- нет. Наиболее частая причина -- неправильное подключение. Можно фотографию подключения? Кстати, земли программатора и целевого контроллера соединены? От чего питается целевой контроллер?

    ОтветитьУдалить
  58. Автору респект!
    Сделал все как описано в статье, FUSE не менял, оставил как в прошивке.
    Все работает.

    ОтветитьУдалить
  59. Artem Volk.

    Arduino отзывается, но по прежнему прошивать отказывается, ошибка - avrdude: stk500_getsync(): not in sync: resp=0x00
    Arduino питается от USB компа с которого прошиваю.
    Фотки тут: http://c64-alex.blogspot.com/2011/10/arduino.html

    P.S. Для чистоты эксперимента купил новый чип ATmega8A, а результат остался старый. Очевидно делаю что-то не так...(

    ОтветитьУдалить
  60. Смотри, для программирования используется SPI интерфейс, номера его пинов в скетче ArduinoISP показаны для плат на Atmega328. На твоей судя по всему нужно использовать вместо 10,11,12,13 вот эти:

    SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). These pins support SPI communication using the SPI library.

    Взял тут:
    http://arduino.cc/en/Main/ArduinoBoardMega2560

    Отпиши плз, получится или нет.

    ОтветитьУдалить
  61. Artem Volk - мой респект!

    Для решения вопроса с Arduino Mega нужно:
    1. Перекинуть пины:
    10 -> 50 (MISO)
    11 -> 51 (MOSI)
    12 -> 52 (SCK)
    13 -> 53 (SS)
    2. Скачать последнюю версию ArvDude
    3. Прошивать avrdude -v -c stk500v1 -P com3 -p atmega8 -b 19200 -U flash:w:ATmegaBOOT.hex

    ОтветитьУдалить
  62. Спасибо, добавил примечание в статью выше.

    ОтветитьУдалить
  63. При попытке запустить загрузчик на Atmege8 выдает ошибку

    arduino-0023\hardware/tools/avr/etc/avrdude.conf:383 unrecognized character: "u"

    ОтветитьУдалить
  64. > При попытке запустить загрузчик на Atmege8 выдает ошибку

    В ответ на какую команду такое отвечает?

    ОтветитьУдалить
  65. Arduino Uno не поддерживается скетчем ArduinoISP, нажаль у меня Arduino Uno. Не заметил этот момент в статье сразу.

    ОтветитьУдалить
  66. Установите ArduinoIDE 0023
    Arduino Uno поддерживается скетчем ArduinoISP
    не вводите читателей в заблуждение.
    Экспериментировал с 8A-PU и 8L-8PU, "reset" вручную. Использовал Arduino Uno

    ОтветитьУдалить
  67. isaak, спасибо за информацию! Автор никого специально не вводит в заблуждение, просто статье уже скоро как год, а arduino 0023 вышла всего-то неделю назад ;)

    ОтветитьУдалить
  68. Автор даже отмазался на этот счёт "на момент написания заметки новая Arduino Uno не поддерживается скетчем ArduinoISP".

    Если серьезно, то добавил в статью примечание + упомянул о том, что новый optiboot можно тоже попробовать.

    ОтветитьУдалить
  69. Приношу свои извинения автору, но я имел ввиду комментарий Rodot

    ОтветитьУдалить
  70. Автор не обижается и даже рад, что кто-то проверил на Arduino Uno! :)

    ОтветитьУдалить
  71. Для того чтобы создать hex файл Arduino IDE во время Upload скетча, зажмите Shift, файл в Windows 7 находится путь c:\Users\rodot\AppData\Local\Temp\....
    Взято с http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1287332515

    ОтветитьУдалить
  72. простите я совсем новичок, расскажите как можно подробнее как сделать чтобы скетчи можно было заливать с первой попытки не подгадывая каких-то особых моментов? я так понимаю подключить к компьютеру не 3-мя проводами а 4-мя включая DTS? Я пытаюсь сделать автономное устройство, так чтобы его можно было использовать отдельно от "настоящей" arduino.

    ОтветитьУдалить
  73. Если есть "настощая" Arduino плата и отдельно контроллер с бутлоадером (дальше буду называть "цель"), то достаточно сделать следующее:

    1. Вытащить (физически, пальцами) контроллер из настоящей Arduino.

    2. Подключить от Arduino к цели следующее:

    Arduino <-> Цель
    GND <-> GND
    RX <-> TX
    TX <-> RX
    RESET <-> RESET

    Подключение RESET'а цели к выводу RESET на Arduino задействует механизм сброса.

    Позразумеваю, что:
    - У цели есть своё питание 5В (если цель питается от 3.3В (например, пары АА батареек), нужно согласование уровней).
    - В цель уже прошит бутлоадер с помощью программатора или описанного в этой статье способа

    ОтветитьУдалить
  74. ардуино то у меня есть но МЕГА, и контроллер в нее впаян ) я использую преобразователь уровней ST232BN, но с резетом как-то не все понятно из 10 попыток удалось залить скетч только один раз.

    ОтветитьУдалить
  75. Можешь кинуть ссылку -- какая именно Мега у тебя, чтобы я чего-попало не насоветовал.

    ОтветитьУдалить
  76. я, конечно, не совсем мега-нуб, но кто мне объяснит: почему такое простое дело - прошить бут-лоадер в атмега8 - это такая огромная проблема для начинающего???

    почему сам прощивальщик бутов а пакете Ардуино не может это всё за нубов сделать грамотно, с нужными фьюзами
    сам не ожидал, что меня остановят в самом начале фьюзы...

    ОтветитьУдалить
  77. хе-хе вроде как разобрался сам)
    нужно сигнал DTR из COM порта компьютера завести на ножку RESET, НО только не напрямую конечно же, а вначале через преобразователь уровней ST232BN (например нога 8 -> нога 9) а потом через конденсатор 0,1 мкф. И все заработало как часики!!!!!

    ОтветитьУдалить
  78. фьюзы определяют конфигурацию кварца, необходимую для старта.
    ардуина не может знать какой кварц используется в вашей схеме.

    ОтветитьУдалить
  79. установил в программатор USBasp читую Atmega8a;
    запустил оболочку Ардуино;
    указал, что буду работать с Atmega8 в разделе Board;
    указал, что программировать буду через USBasp;
    нажал "прошить бутлоадер";

    прошило!

    закрыл оболочку Ардуино;
    открыл программу USBASP_AVRDUDE_PROG;
    решил её там прочесть, прощупать;
    откликалось и читалось "на ура";

    потом решил поумничать и выставить с её помощью фьюзы;
    всё! после этого Atmega8 перестала откликаться;...

    ОтветитьУдалить
  80. Все и есть просто для тех конфигураций, которые идут в стандартной поставке (например, ATmega8 + внешний кварц на 16МГц). Если нужно что-то нестандартное (например, как в этой статье), то нужно добавлять записи в boards.txt и все сразу опять становится просто -- все можно делать из среды arduino.

    ОтветитьУдалить
  81. > потом решил поумничать и выставить с её помощью фьюзы;
    > всё! после этого Atmega8 перестала откликаться;...
    А причём тут среда Arduino, если фьюзы были выставлены вручную в неправильные значения? :)

    ОтветитьУдалить
  82. т.е. не нужно было умничать, а только прошить бутлоадер из среды Ардуино?
    не трогая фьюзы вообще?

    ОтветитьУдалить
  83. ArduinoIDE в процессе прошивки бутлоадера шьет и фьюзы тоже.

    ОтветитьУдалить
  84. > А причём тут среда Arduino, если фьюзы были выставлены вручную в неправильные значения? :)

    если всё сама грамотно ставит среда Ардуино при прошивке бутлоадер, откуда тогда в Сети так много шума и болтовни по поводу грамотной установки фьюзов???

    ОтветитьУдалить
  85. Отдельно шить фьюзы не нужно, если бутлоадер шьется из среды Arduino. При прошивке из среды снача снимаются лок-биты, затем шьются фьюзы, потом прошивка с бутлоадером, потом опять прошиваются лок-биты, насколько помню.

    ОтветитьУдалить
  86. а будут тут добрые подсказки: как теперь Атмегу оживить обратно?..

    ОтветитьУдалить
  87. А кто-нибудь знает как теперь залить скетч из новой IDE версии 1?
    у меня сначала была ошибка In file included from Blink.cpp:8:
    D:\arduino-1.0\hardware\arduino\cores\arduino/Arduino.h:212:26: error: pins_arduino.h: No such file or directory
    потом я подсунул ей этот файл - pins_arduino.h
    НО теперь стала подновляться другая ошибка и я уже не знаю что с ней делать:
    avrdude: Device signature = 0x000000
    avrdude: Yikes! Invalid device signature.
    Double check connections and try again, or use -F to override
    this check.

    ОтветитьУдалить
  88. > а будут тут добрые подсказки: как теперь Атмегу оживить обратно?..
    Проблемы с неправильными фьюзами могут быть двух видов :

    1) Заперещено программирование по SPI, тогда нужен высоковольтный (HV) программатор, чтобы заново прошить фьюзы с такими значениями, при которых прошивка по SPI включена.

    2) Установлен "неправильный" источник тактовой частоты -- например, внешний генератор.

    Детальнее вот: http://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atmega-fusebit-doctor/

    По поводу проблемы со сборкой проекта на 1.0. Верни pins_arduino.h где был и попробуй вот такой boards.txt вместо того, что в архиве (основной трогать не нужно!)

    ##############################################################

    atmega8noxtalfast.name=ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)

    atmega8noxtalfast.upload.protocol=stk500
    atmega8noxtalfast.upload.maximum_size=7168
    atmega8noxtalfast.upload.speed=38400

    atmega8noxtalfast.bootloader.low_fuses=0xe4
    atmega8noxtalfast.bootloader.high_fuses=0xc2
    atmega8noxtalfast.bootloader.path=atmega8a
    atmega8noxtalfast.bootloader.file=ATmegaBOOT.hex
    atmega8noxtalfast.bootloader.unlock_bits=0x3F
    atmega8noxtalfast.bootloader.lock_bits=0x0F

    atmega8noxtalfast.build.mcu=atmega8
    atmega8noxtalfast.build.f_cpu=8000000L
    atmega8noxtalfast.build.core=arduino
    atmega8noxtalfast.build.variant=standard

    После этого скетчи должны собираться.

    Илья, я подготовлю обновлённый для 1.0 архив, обновишь?

    ОтветитьУдалить
    Ответы
    1. >1) Заперещено программирование по SPI, тогда нужен высоковольтный (HV) программатор, чтобы заново прошить фьюзы с такими значениями, при которых прошивка по SPI включена.

      > 2) Установлен "неправильный" источник тактовой частоты -- например, внешний генератор.

      спасибо за подсказки; надеюсь на 2-й пункт :)

      хороший у вас форум

      Удалить
    2. Да, разумеется обновлю! ;)

      А по поводу запрещения программирования SPI: фьюз SPIEN можно переключать только в высоковольтном режиме, т.е. дело не в нем. Чаще всего люди попадаются на RSTDISBL - разрешение использования пина, назначенного RESET в качестве обычного DIO. Увы, программирование в режиме ISP начинается именно со сброса :(. Чтобы его восстановить, нужен программатор с поддержкой режима параллельного программирования (в случае с ATmega8).

      Ну и по факту - лезть без особого понимания во фьюзы не очень разумно, но если уж пришлось - сначала их надо прочесть, выписать на бумажку, сравнить с новыми значениями и ТРИ раза подумать о правильности изменений (я сам всегда так делаю ;)

      Удалить
  89. К сожалению стало еще хуже - теперь даже не компилируется и в старой и в новой 1.0 версии IDE, на каждое ключевое слово ругается, а вывод примерно такой:
    waterMachine003_Alpha_Small.cpp:21:22: error: Arduino.h: No such file or directory
    waterMachine003_Alpha_Small.cpp: In function 'void setup()':
    waterMachine003_Alpha_Small.pde:-1: error: 'OUTPUT' was not declared in this scope
    waterMachine003_Alpha_Small.pde:-1: error: 'pinMode' was not declared in this scope

    ОтветитьУдалить
    Ответы
    1. - Какая выбрана плата в настройках?
      - Куда положен boards.txt из архива?

      Удалить
    2. Плата выбрана: ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)
      Файл лежит в C:\Users\Например Андрей\Documents\Arduino\hardware\arduino-addons\ но только не из архива с содержанием как в Вашем посте выше.

      Удалить
    3. Если выбрать любую другую плату, скетч собирается?

      Удалить
  90. Если убрать всё из "C:\Users\Например Андрей\Documents\Arduino\" и добавить вот это прямо в boards.txt в инсталляции Arduino IDE:

    ##############################################################

    atmega8noxtalfast.name=ATmega8A for test

    atmega8noxtalfast.upload.protocol=stk500
    atmega8noxtalfast.upload.maximum_size=7168
    atmega8noxtalfast.upload.speed=38400

    atmega8noxtalfast.bootloader.low_fuses=0xe4
    atmega8noxtalfast.bootloader.high_fuses=0xc2
    atmega8noxtalfast.bootloader.path=atmega8a
    atmega8noxtalfast.bootloader.file=ATmegaBOOT.hex
    atmega8noxtalfast.bootloader.unlock_bits=0x3F
    atmega8noxtalfast.bootloader.lock_bits=0x0F

    atmega8noxtalfast.build.mcu=atmega8
    atmega8noxtalfast.build.f_cpu=8000000L
    atmega8noxtalfast.build.core=arduino
    atmega8noxtalfast.build.variant=standard


    собирается?

    ОтветитьУдалить
    Ответы
    1. Компилируется, но все равно не заливается:
      avrdude: Device signature = 0x000000
      avrdude: Yikes! Invalid device signature.
      Double check connections and try again, or use -F to override
      this check.

      avrdude: Send: Q [51] [20]
      avrdude: Recv: . [14]
      avrdude: Recv: . [10]

      avrdude done. Thank you.

      Удалить
    2. Ок, значит это уже другая (следующая) проблема. Судя по сообшению -- либо неправильно подключена целевая плата, либо бутлоадера в ней нет. Начнём с подключения. Что и как подключено?

      Удалить
    3. Этаже плата прекрасно работает с версией 0.22, в неё даже залит скетч и прекрасно работает! А скетч общается через COM1 с встроенным сериал монитором. У меня одновременно на комьютере лежат две папки с IDE версии 0.22 и 1.0 и в из старой заливается скетч а из новой - нет (

      Удалить
    4. А попробуй вот такие настройки в boards.txt (старые нужно удалить), есть одно подозрение...

      ##############################################################

      atmega8noxtalfast.name=ATmega8A for test

      atmega8noxtalfast.upload.protocol=arduino
      atmega8noxtalfast.upload.maximum_size=7168
      atmega8noxtalfast.upload.speed=38400

      atmega8noxtalfast.bootloader.low_fuses=0xe4
      atmega8noxtalfast.bootloader.high_fuses=0xc2
      atmega8noxtalfast.bootloader.path=atmega8a
      atmega8noxtalfast.bootloader.file=ATmegaBOOT.hex
      atmega8noxtalfast.bootloader.unlock_bits=0x3F
      atmega8noxtalfast.bootloader.lock_bits=0x0F

      atmega8noxtalfast.build.mcu=atmega8
      atmega8noxtalfast.build.f_cpu=8000000L
      atmega8noxtalfast.build.core=arduino
      atmega8noxtalfast.build.variant=standard

      Удалить
    5. Этот последний вариант хорошо заработал и компилируется и заливается, но ТОЛЬКО если эта конфигурация записана в ОСНОВНОМ файле ардуины.

      Удалить
    6. Как вариант:

      - "C:\Users\Например Андрей\Documents\Arduino\" -- имя пользователя тут на русском? Если указать File -> Preferences Arduino IDE -> Sketchbook на какую-то другую папку, поближе к корню диска и без русских символов в названии.

      - Какая структура папок внутри папки Sketchbook?

      Удалить
  91. тут ещё вопрос назрел по ходу моих изысканий;
    дело в том, что решил быстро сам спать Ардуино-совместимую плату;
    если прошить и установить Atmega8L, то можно без кварца? т.е. на 8 Мгц?
    будет работать сама и с Ардуино?

    ОтветитьУдалить
    Ответы
    1. Судя по этому: http://www.atmel.com/Images/doc2486.pdf
      без кварца на 8МГц работают и оригинальные 8 и 8L, смысл ATmega8L в том, что она может работать при более низком напряжении питания, а обычная ATmega8 -- нет. Более новая ATmega8A является заменой обоих в "модельном ряду". У нас (Украина) продаются только ATmega8A, остальных уже давно нет.

      Удалить
  92. тоже из Украины;
    купил тут Atmega8a, но запорол, похоже; писал про это выше;
    Atmega8L-8UI вытянул из платы сигнализации; стояла там без кварца;
    потестил её на живучесть в программаторе; прошил в неё штатный бутлоадер;

    мой вопрос был больше про 8 Мгц и работу без кварца в моей самодельной Ардуино;
    в оригинальной же стоит 16 Мгц;
    в моём варианте 8 и без кварца тоже всё будет фурычить?

    ОтветитьУдалить
    Ответы
    1. Штатные бутлоадеры, насколько помню все на 16Мгц, т.е. их прошить можно и они прошьются, но работать не будут. Собственно по этой же причине и писал этот пост -- ATmega8A на 8МГц.

      Ещё неплохой вариант -- поставить таки кварц на 16МГц, тогда можно будет прошить новый optiboot, который всего 512 байт занимает и поддерживает высокий битрейт при заливке. Все необходимое уже есть в комплекте Arduino IDE, нужно только boards.txt подправить, вот тут я писал: http://snippets.crisp-studio.com/view/160/nastrojki-arduino-ide-dlya-atmega8a-s-optiboot

      Удалить
  93. привет!
    отличная подсказка таки на 16Мгц его!

    собрал Ардуино своими руками на Атмега8;
    подключил его через КОМ-порт (обычная схема на 2-х транзисторах)

    а теперь не могу понять как Ардуино настроить;
    установка КОМ-порта есть; а какой программатор выбрать чтобы Ардуино заливала откомпилированные скетчи?...

    ОтветитьУдалить
    Ответы
    1. Если у тебя схема согласования уровней RS232 -> TTL, то скорее всего тебе нужно будет ещё подтянуть ресет к DTR (не уверен, нужно по схеме проверить). Либо выбрать бутлоадер с большей задержкой при старте и ресетить вручную.

      Удалить
  94. ну вот такую я собрал на макетной плате
    автосброс не подпаял
    это важно?

    при попытке UPLOAD, в самом конце выдаёт "avrdude: stk500_getsync(): not in sync: resp=0x00"

    ОтветитьУдалить
    Ответы
    1. Если ресет ни к чему не подключен, то нужно ресетить вручную в нужный момент.

      Удалить
  95. Добрый день всем! Подскажите новичку, пожалуйста:
    Взял ATmega8-16PU
    прошил бутлоадер с помощью платы Arduino UNO и arduino 0023 по статье
    вынул из UNO мк и поставил ATmega8: 13 пин миагет (означает, что там бутлоадер есть, если я все правильно понимаю)
    вернул прежний avrdude в папку arduino, выбрал в IDE Arduino NG or older w/ ATmega8 и попроовал прошить выдало

    Binary sketch size: 826 bytes (of a 7168 byte maximum)
    avrdude: stk500_getsync(): not in sync: resp=0x00
    avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

    Что я сделал не так и как сделать работающую версию?

    ОтветитьУдалить
    Ответы
    1. Выбрать нужно эту плату "ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)", а не "Arduino NG or older w/ ATmega8"

      Удалить
  96. Минимальная Arduino-конструкция за $3.5

    ATmega8 замена на ATmega328, как сделать ?

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. В случае варианта с optiboot'ом и внешним кварцем на 16МГц, то нужно просто зашить бутлоадер от Arduino Uno, он как раз для ATmega328 и 16МГц кварца

      Удалить
  97. У меня скетчи так не захоели компилироваться в IDE 1.0 (получал ошибку о том что файл Arduino.h не найден). Решил проблему добавление содержимого boards.txt из архива в "родной" boards.txt в папке с IDE.

    ОтветитьУдалить
    Ответы
    1. Ага, проблему смог повторить (на чистой инсталляции), попытаюсь найти причину и выложить обновление

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. Привет!

      Проблему описал вот тут:
      http://arduino.cc/forum/index.php/topic,106029.0.html

      Решения пока не нашел.

      Удалить
    4. Вобщем подтверждаю такой же косяк.
      Я конечно рад, что 16 мгц увеличивает цену всего лишь на полбакса, но как представлю, что надо за этим всем идти/ехать - сразу пропадает желание ковыряться дальше.
      Пытался запустить всю музыку через последний ArduinoIDE, если arduino-addons отдельно - не работает. Если перенести в основной boards.txt (что опасно при апгрейдах, на маке например - где все тупо перезапишется) - компилируется и пытается шиться.
      То, что не шьется - это уже третья история, то ли java у меня обновилась, то ли система и драйвера pl2303 "вышли из себя" (я использую pl2303+max232) - вобщем ни на старом, ни на новом ArduinoIDE прошиться больше не получается :-(

      Удалить
    5. > Я конечно рад, что 16 мгц увеличивает цену всего лишь на полбакса
      Старое решение никто не отменял же...

      > Пытался запустить всю музыку через последний ArduinoIDE,
      > если arduino-addons отдельно - не работает.
      Точно использовал последнюю версию из архива из этого поста? Она несколько раз обновлялась, текущая должна работать без добавления чего-либо в boards.txt

      > вобщем ни на старом, ни на новом ArduinoIDE
      > прошиться больше не получается :-(
      Показывай вывод ошибок, тогда можно будет сказать, кто виноват.

      Удалить
    6. Так, дело было не в бобине.
      Виноваты были дрова Prolific, которые я почему-то заменил на opensource'ные. Вернул на место - все взлетело.
      Значит все прекрасно работает, если писать в boards.txt и настройки вот эти
      ##############################################################

      atmega8noxtalfast.name=ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)

      atmega8noxtalfast.upload.protocol=arduino
      atmega8noxtalfast.upload.maximum_size=7168
      atmega8noxtalfast.upload.speed=38400

      atmega8noxtalfast.bootloader.low_fuses=0xe4
      atmega8noxtalfast.bootloader.high_fuses=0xc2
      atmega8noxtalfast.bootloader.path=atmega8a
      atmega8noxtalfast.bootloader.file=ATmegaBOOT.hex
      atmega8noxtalfast.bootloader.unlock_bits=0x3F
      atmega8noxtalfast.bootloader.lock_bits=0x0F

      atmega8noxtalfast.build.mcu=atmega8
      atmega8noxtalfast.build.f_cpu=8000000L
      atmega8noxtalfast.build.core=arduino
      atmega8noxtalfast.build.variant=standard

      Сейчас попробую взять из архива поста и сделать arduino-addons, отпишу по результатам

      Удалить
    7. Вобщем докладываю.
      Используемое железо - безкварцевый клон.
      ArduinoIDE -последний на сегодня.
      Взял архив из поста для 1.0 и выше и подложил
      Все компилируется
      При прошивке - Invalid signature
      Заменил протокол - было stk500, заменил на arduino - все взлетело. Огромное спасибо.
      Скажите, там действительно должен быть stk500 ? Или нужно таки исправить на arduino и перезалить архив ? :-)

      Удалить
    8. Спасибо за репорт, да, должен быть arduino, обновлю архивы.

      Удалить
    9. Вам спасибо.
      На самом деле, использование очень дешевых микросхем и минимума деталей - правильный и единственный пусть. Если скетч занимает больше 6 килобайт полезной нагрузки - пора творцу задуматься либо о более навороченной плате, либо о вырастании из "штанов" ардуино и переходе на хардкор авр девелопмент :-) - а для простых поделок - атмега8 и 8мгц - хватит надолго.

      Удалить
    10. На самом деле "хадркор авр девелопмент" не такой уж и хардкор и гораздо интереснее Arduino, хотя да, навыков потребует больше.

      Файлы я обновил, заодно перенёс на github и добавил настройки для optiboot в общий архив.

      Удалить
  98. Исправил проблему и обновил файлы, теперь должно работать.

    ОтветитьУдалить
  99. Ни кто не подскажет, почему после всех манипуляций описанных в статье, уже после заливки скетча (например blink из примеров), то после подачи напряжения питания всегда проходит всегда ровно 12 секунд прежде чем светодиод подключенный к 13 цифровому пину (ножка 19) начнет мигать?
    Заливал бутлоадер Arduino NG or older w/ ATmega8, кварц и 2 конденсатора по 22 пкф тоже подключены. может что-то упустил? или так и должно быть?

    ОтветитьУдалить
    Ответы
    1. Кто-то подскажет :)

      Не тот бутлоадер был залит (у того, который залит пауза гораздо больше):

      См. выше:

      "Нужно запустить Arduino IDE, выбрать в пункте меню Tools -> Board следующую плату: ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate). Здесь указывается целевая плата, поэтому нужно выбрать именно этот пункт, а не модель Arduino-совместимой-платы, которая работает ISP-программатором."

      Кстати, если кварц на 16Мгц уже все равно есть, то можно сделать как описано выше в разделе "Минимальная Arduino-конструкция за $3.5 (дополнение от 02.05.2012)" и получить бутлоадер optiboot.

      Удалить
    2. Действительно если выбрать для заливки бутлоадера пункт ATmega8 (optiboot, 16Mhz XTAL), то задержки при включении нет вообще никакой, и мне даже показалось что и скетч работает более стабильно.

      Удалить
    3. На стабильность работы основной программы выбор бутлоадера врядли повлияет, а вот места под скетч на 1,5 Кб больше стало :)

      Удалить
  100. Нестабильность работы была вызвана тем что я экспериментировал с приемниками ИК сигнала TSOP4836, а они "глючили" от моей настольной лампы дневного света. А бутлаодер я залил и испробовал уже утром (когда лампа была выключена) вот мне и показалось что бутлоадер влияет на стабильность :)))).
    Но у меня возник еще вопросик: а как можно перевести микроконтроллер на частоту в 4 МГц? И будут ли на такой частоте работать мои скетчи? (Те которые не используют сторонние библиотеки и те которые используют)?.

    ОтветитьУдалить
    Ответы
    1. Теоретически, чтобы перевести МК на частоту 4 МГц, достаточно поправить определение платы в boards.txt - банально изменить 16000000 на 4000000. Но вот как это скажется на сторонних библиотеках - сказать трудно. Если написаны без привязки к тактовой частоте и потактовому выполнению - то будут.

      Удалить
  101. Большое спасибо!

    Все получилось. Но сначала бутлоадер не хотел шиться из-за того, что в ArduinoIDE был выбран Программатор -> AVR ISP и я все прошил SinaProg+avrdude с последующей прошивкой фьюзов и локов. Но позже сменил локи и фьюзы в дефолт SinaProg+avrdude следом выбрав в ArduinoIDE Программатор -> Arduino as ISP перезалил бутлоадер, проверил фьюзы/локи .. все ОК!

    Вынул камень из UNO, подключил к меге 8 на макетке и дергая reset вручную передал Blink. Также пробовал, как вы советовали, подключить целевой ресет к ардуине с вынутым камнем - шьет, но после прошивки не отдает ресет, все равно приходится отключать ресет.

    Arduino IDE 1.0.1
    Arduino UNO
    ATmega8A-PU

    ОтветитьУдалить
    Ответы
    1. Спасибо большое за репорт, значит у кого-то все-таки получается повторить ):

      Удалить
  102. Ошибка в boards.txt

    Сейчас:
    ##############################################################
    atmega8optiboot.name=ATmega8(A) (16Mhz XTAL, optiboot)
    ...
    atmega8optiboot.build.f_cpu=16000000L
    atmega8noxtalfast.build.core=arduino:arduino
    atmega8noxtalfast.build.variant=arduino:standard

    А нужно:
    ##############################################################
    atmega8optiboot.name=ATmega8(A) (16Mhz XTAL, optiboot)
    ...
    atmega8optiboot.build.f_cpu=16000000L
    atmega8optiboot.build.core=arduino:arduino
    atmega8optiboot.build.variant=arduino:standard


    Если поправить, то optiboot становится и работает отлично!

    ОтветитьУдалить
    Ответы
    1. Спасибо, поправил в коммите:
      https://github.com/artvolk/electronics-minimal-arduino/commit/c2451bd2b95c69b9b91787b7a4eca707e6368168

      Удалить
  103. А не подскажите как и из atmega 328 сделать Ардуинку. Ну Там Фьюсы Подпрпвить Или Можно Ее "представить" Для Иде Любой Ардуиной С Такимже МК На Борту. А Если Захочится Без Кварца Запустиь На 8 мгц. Как Тогда?

    ОтветитьУдалить
    Ответы
    1. optiboot для обоих вариантов есть в комплекте свежей Arduino IDE, там же и правильные фьюзы. Итого -- максимум, что нужно -- добавить запись в boards.txt.

      Удалить
  104. Странное дело, добавил запись в boards.txt, в которой только изменил значение low fuses с 0xFF на 0xE2, что вроде как соответствует только изменению с внутренней частоты 16 мгц внешнего кварца, на 8 мгц внутренней RC цепочки. Прошил бутлоадер с такими настройками, и хотя теперь скетч заливается и работает в таком МК, но заливается он только через пункт меню программы "Файл"->"Загрузить с помощью программатора". А вот через выводы Com порта самой микросхемы ну никак не хочет, хотя мониторинг Com порта видит сообщения которые приходят от этого же МК. Бьюсь уже второй день - не пойму в чем причина, пробовал даже не Optiboot заливать а "старый/обычный" загрузчик.

    ОтветитьУдалить
    Ответы
    1. Кроме смены фьюзов нужно прописать версию бутлоадера под эту частоту. К сожалению под рукой нету установленной IDE, чтобы посмотреть как он называется.

      Удалить
    2. Так ну хоть раз сам отвечу на свой вопрос:
      Прочитав отличную статью на http://arduino.cc/forum/index.php?action=printpage;topic=124879.0
      Сделал все как там описано и все получилось. Если коротко, то перекомпилировал бутлоадер с пониженной скоростью загрузки скетча равной 38400(скачать можно тут http://rghost.ru/41547541 (не понял как вложить файл в комментарий)), и добавил в boards.txt:

      ##############################################################

      atmega328_384_8.name=ATmega328 Optiboot @ 38,400baud w/ 8MHz Int. RC Osc.

      atmega328_384_8.upload.protocol=arduino
      atmega328_384_8.upload.maximum_size=30720
      atmega328_384_8.upload.speed=38400

      atmega328_384_8.bootloader.low_fuses=0xE2
      atmega328_384_8.bootloader.high_fuses=0xDE
      atmega328_384_8.bootloader.extended_fuses=0x05
      atmega328_384_8.bootloader.path=optiboot
      atmega328_384_8.bootloader.file=optiboot_atmega328_384_8.hex
      atmega328_384_8.bootloader.unlock_bits=0x3F
      atmega328_384_8.bootloader.lock_bits=0x0F

      atmega328_384_8.build.mcu=atmega328p
      atmega328_384_8.build.f_cpu=8000000L
      atmega328_384_8.build.core=arduino:arduino
      atmega328_384_8.build.variant=arduino:standard

      Удалить
    3. Если оформите это в виде, пригодном для закидывания в sketchbook установленной Arduino IDE, то можем включить в набор из этой статьи. Он живёт тут (там же и пример):
      https://github.com/artvolk/electronics-minimal-arduino