09.01.2011

Минимальный клон 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

189 комментариев:

  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

      Удалить
  105. Приветствую, Артем!

    Снова и снова возвращаюсь к наиполезнейшей статье! :)
    Обнаружил тут интересный момент. Загрузчик, получается, фьюзы не читает?

    Programmer Type : Arduino
    Description : Arduino
    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: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9307
    avrdude: safemode: lfuse reads as 0
    avrdude: safemode: hfuse reads as 0

    avrdude: safemode: lfuse reads as 0
    avrdude: safemode: hfuse reads as 0
    avrdude: safemode: Fuses OK

    avrdude done. Thank you.

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

    ОтветитьУдалить
    Ответы
    1. Рад, что статья помогла кому-то :)

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

      USBASP с бутлоадером не общается и про него не знает просто программирует контроллер по протоколу in-system программирования.

      Насколько помню, бутлоадер не только фьюзы не показывает, но ещё и не умеет EEPROM писать, лок-биты (понятное дело).

      Удалить
  106. Всецело, не важно, что бутлоадер не умеет шить EEPROM и показывать FUSEы, важно что цель за 3$ достигнута.
    Я беру атмеги8 десятками, потому они мне обходятся примерно по 40 руб. Мост cp2102 на китайских барахолках можно приобрести за те же 40 руб. Минимальный обвес уложить в 10 руб. Кусок текстолита можно найти и за так, разъем усб найти нахаляву тоже не проблема. Вот наши искомые 90 руб и получатся ;)
    Причем, это уже будет почти настоящая автономная "ардуина".

    зы: да, понятно, что не каждому под силу припаять корпуса TQFP32 и QFN28, но тут дело принципа! )))
    ... и повод прокачать уровень своих навыков :)

    ОтветитьУдалить
    Ответы
    1. Если не секрет, а куда идут самодельные платки в таких количествах? :)

      > да, понятно, что не каждому под силу припаять корпуса
      > TQFP32 и QFN28, но тут дело принципа! )))
      QFN паять паяльником не доводилось, но с первыми TQFP проблем вообще не возникло, даже учитывая мою крайнюю неаккуратность в мелких работах :) Судя по отзывам у тех кто хоть чуть-чуть имеет практики пайки, пайка относительной мелочёвки не требующей микроскопа -- вопрос хорошего флюса :)

      Удалить
  107. Про коммерческие свои устройства распространяться сильно не буду, прошу извинить :)
    В качестве мнения: атмега8 - это сейчас самая доступная универсальная микросхема широкого применения. Вместо сотен наименований разнообразных специальных микросхем, держишь в коробочке кучу атмег, набор некоторых ЛУТ-шаблонов и элементы "обвеса".

    ОтветитьУдалить
    Ответы
    1. > Про коммерческие свои устройства распространяться сильно не буду, прошу извинить :)
      Я просто думал, что это для души столько атмег используется :)

      > В качестве мнения: атмега8
      Ну Atmega88 вроде бы как должна была её заменить, но в наших (и, наверное, ваших) краях они почти не появляются, хотя в больших партиях не дороже, чем Atmega8

      В моих домашних поделках тоже в основном использую Atmega8, всё что мельче -- ненамного дешевле, а все, что старше -- мне оказывается ненужным.

      Да, STM8 серии S ещё дешевле и работают на 5В, если у вас что-то массовое.

      Удалить
  108. Для души девайсов делается тоже приличное количество. В основном коллеги по работе, подсевшие на карписи, периодически "беспокоят" разного рода задачками :)
    Что касаемо stm8, то наткнулся тут на статью и понял, что, выбрав AVR, не прогадал.
    http://speleoastronomy.org/elektro/stm/index.html

    88 и 168 стОят примерно одинаково. Изредка требуется функционал 88/168/328, тогда их применяю. 99% работ сделано на атмега8.

    ОтветитьУдалить
    Ответы
    1. По поводу статьи -- да, всё так и есть AVR -- большая история использования, куча всего уже сделанного. STM8 -- если интересно посмотреть какие ещё контроллеры бывают и на сравнении вынести для себя что-то новое (всё про домашнее использование).

      Удалить
  109. "Дискавери" заказал. Для расширения кругозора, так сказать :)

    ОтветитьУдалить
  110. А у меня такой вопрос. Вот бутлоадер прошился, а дальше не хотел шиться писал ошибку stk500_getsync(): not in sync: resp=0x00 заменил в boards на это
    atmega88.name=ATmega8

    atmega88.bootloader.low_fuses=0xE4
    atmega88.bootloader.high_fuses=0xCF
    atmega88.bootloader.unlock_bits=0x3F
    atmega88.bootloader.lock_bits=0x0F
    atmega88.upload.maximum_size=7168

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

    и всё стало нормально прошиваться (блинк заработал). Но вот в чём дело не как не могу подобрать скорость для сиреал порта, а то выводит какуето хрень я всё скорости перепробовал в serial.begin которые у них поддерживаются не помогле. В CVAVR посмотрел что у у 8ой атмеги при 8мгц погрешность 0 только при 600 но получается ide ардуинки не поддерживает ?

    ОтветитьУдалить
    Ответы
    1. Тайминги для UART'а могут уходить гораздо сильнее, чем получается по калькулятору, т.к. нет кварца. Возможно, стоит попробовать другую микросхему, чтобы исключить кривость (неоткалиброванность) RC-цепочки конкретного экземпляра.

      Кстати, в конфиге отличий не нашел, что на что менялось?

      Удалить
  111. Спасибо огромное автору за статью. Было 11 чипов Атмега8А-20PU Прошил загрузчик во все чипы по инструкции. IDE 1.03 Все мигают загрузчиком. Вроде все работает. Решил для надежности прошить Блинк во все чипы. 5 прошились, 6 с разного рода ошибками (в основном CANT COMMUNICATE WITH DEVICE) не стали шиться. Загрузчик прошивался очень быстро секунд за 10. Решил перешить загрузчик в глючные 6 чипов с большим временем ожидания (как написал автор 1-2 минуты). Хотя диод и показывает через 10 секунд, что все прошито. Опять шью БЛИНК, еще в один записался, оставшиеся 5 как не принимали скетчи, так и стоят на своем. Понять в чем проблема я так и не смог. Подключаю USBasp, Считываю фьюзы с рабочего чипа, шью в глючный (на случай если мусор забрался) опять пытаюсь шить Блинк и те же ошибки. Выбираю в IDE Arduino программатор USBasp и скетчи шьются.
    Через ArduinoISP bootloader 11 чипов = OK
    Через ArduinoISP BLInk 6 из 11 чипов = OK
    USBasp BLInk 11 из 11 чипов = OK
    Есть какие-нибудь мысли? Через AVRdude все чипы откликаются.

    ОтветитьУдалить
  112. И второй вопрос: после прошивки бутлоадера на 8мгц, пока часть чипов глючила, я решил их перешить на 16мгц и попробовать с кварцем записать скетч (просто уже не знал куда рыть, это я потом USBasp подключил и увидел, что через USBasp все чипы работают). То есть для чипа с уже зашитым загрузчиком на 8, поверх сделал ЗАГРУЗИТЬ bootloader 16мгц. Шил через ArduinoISP по инструкции и чип оказался заблокированным. Не сразу понял причину, т.к. была надпись о неверной сигнатуре, поэтому залочил еще один чип такими же действиями. Теперь их даже USBasp не читает, вернее успевает считать что все фьюзы включены и вылетает с ошибкой НЕВОЗМОЖНО ПОДКЛЮЧИТЬСЯ (уж не знаю, считывает ли он их реально или просто все галочками отмечены, т.к. не удалось подключиться) Что случилось с Атмега8 при запись, одного загрузчика поверх другого, без предварительного стирания чипа на заводские установки?

    ОтветитьУдалить
    Ответы
    1. 1. Почему часть чипов работает, а часть нет: точность встроенной RC-цепочки невелика, при повышении битрейта UART'а могут плыть тайминги и бутлоадер не будет работать. На моих экземплярах такого не было, но в теории может быть.

      2. По второму вопросу не видя что конкретно шилось сказать что-то трудно. Как вариант -- если в контроллер зашились фьюзы для использования внешнего кварца -- нужно подключить кварц и попробовать обратится программатором. 16Мгц на ATmega8 -- это только с внешним кварцем, встроенная RC-цепочка максимум 8Мгц. Если есть Arduino Duemilanove и программатор -- можно поставить Atmega8 туда, кварц на этой Arduino плате есть, если нет -- собрать на макетке: кварц и пара конденсаторов понадобится.

      Удалить
  113. Спасибо за ответ и советы. То есть мигающий диод (бутлоадера) еще не значит, что он работает? Блинк шил после загрузки бутлоадера (8мгц), вытащив атмега328 из ардуино УНО и вставив в сокет атмега8. Как уже говорил, часть прошились, часть нет. Кварц там тоже установлен, но как я понимаю при бутлоадере 8мгц кварц установленный в УНО не используется (что подтверждают часть атмега8, в которые зашился блинк). ... Дальше проблемы: все по вашей инструкции. Шью бутлоадер 8мгц, а потом выбираю 16мгц и жму прошить бутлоадер (на тот же самый чип, на который минуту назад шил 8мгц) вот так чипы и заблокировались. Вставив их в ардуино уно (где есть кварц) чипы прошитые на 16 тоже никак не распознаются и не шьются. В общем заказал высоковольтный автономный программатор-доктор буду учиться дальше и уже не бояться проводить эксперементы. http://www.ebay.com/itm/150949213306?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649 Спасибо Вам огромное за значительный толчок в нужном направлении. Вы меня неплохо сдвинули с места.
    p.s. не сочтите ссылку за рекламу, это больше ответ на вопрос КАК ВОССТАНОВИТЬ ФЬЮЗЫ и я думаю это устройство будет находкой для многих неуверенных новичков

    ОтветитьУдалить
  114. > но как я понимаю при бутлоадере 8мгц кварц установленный в УНО не используется (что подтверждают часть атмега8, в которые зашился блинк)

    Да, верно, не используется.


    > Шью бутлоадер 8мгц, а потом выбираю 16мгц и жму прошить бутлоадер (на тот же самый чип, на который минуту назад шил 8мгц) вот так чипы и заблокировались.

    Я правильно понимаю, что в этот момент к Uno прицеплен внешний программатор?

    ОтветитьУдалить
  115. Есть ли у вас статья, как дальше прошивать Atmega8(A) при помощи "Arduino со снятым контроллером"?

    ОтветитьУдалить
    Ответы
    1. Если на Arduino в качестве USB-чипа используется FT232 - вот статья про это.

      Удалить
    2. Илья немного не так понял ваш вопрос и ответил о том, как прошить "чистый" контроллер поставив его в DIP-колодку платы Arduino. Этот способ альтернативный описываемому в статье, это другой способ сделать из Arduino AVR ISP программатор.

      Вы, судя по всему, спрашиваете "Как прошить контроллер на макетке, в который уже залит бутлоадер с помощью Arduino". В этом случае все проще. От Arduino-платы нам нужен только USB-UART преобразователь. Действуем так:

      RX-pin Arduino --> TX pin контроллера на макетке
      TX pin Arduino --> RX pin контроллера на макетке
      GND Arduino --> GND контроллера на макетке

      Контроллер из Arduino платы нужно вытащить или соединить его RESET с GND, чтобы он не выходил из ресета.

      Картинки: http://www.zoobab.com/use-the-arduino-as-a-serial-adaptor

      Удалить
    3. А какие установки использовать в Arduino IDE?

      Удалить
    4. Совпадающие с тем бутлоадером, который прошит в контроллер на макетке.
      Другими словами: какой бутлоадер прошили в микросхему на макетке -- такие настройки и используете для прошивания скетчей.

      Удалить
    5. Я использовал бутлоадер из этой статьи. Просто не совсем понятно, что выбирать в arduino IDE в пунктах "board" и "programmer". И ещё... кого от чего запитывать? Есть источники 5В, 750мА и 12В, 3А.

      Удалить
    6. Вы поймите меня правильно... Меня всегда можно отправить "учить матчасть", но если я добьюсь помигивания светодиода, то мне от этого только больше захочется этим заниматься. А сейчас я в ступоре. С вами можно как-то связаться? (Почта, скайп..?)

      Удалить
    7. Ок, тогда давайте попробуем так.

      Берем в руки плату Arduino (дальше буду называть просто "Arduino"), макетку и целевой контроллер (дальше "контроллер на макетке"), все блоки питания пока откладываем в сторону. Представим, что у нас Atmega8A без кварца (все как на рисунке в статье).

      1. Кладем файлы из статьи куда нужно.

      2. Выбираем в пункте Board модель нашей Arduino (именно нашей Arduino-платы!), прошиваем скетч ArduinoISP

      3. Подключаем контроллер на макетке как показано в статье, питается он от Arduino, которая питается от того, к чему вы её подключили (USB или БП).

      4. Теперь закрываем глаза и представляем, что Arduino у нас уже не Arduino, а ISP-программатор для контроллера на макетке.

      5. В меню Board выбираем ту плату, в которую мы хотим превратить контроллер на макетке (ATmega8(A) (8MHz int. RC osc, short bootloader delay, 38400 baud rate)).

      6. Выбираем пункт Burn Bootloader -> w/ Arduino as ISP (понимать как "прошить бутлоадер куда-то используя Arduino как программатор", собственно наш случай)

      7. Если все прошло без ошибок, можно идти дальше. Если есть ошибки, ищем где неправильно подключили.

      8. Теперь снова закрываем глаза и представляем, что контроллер на макетке это уже контроллер от нашей Arduino, а не просто контроллер на макетке. Для того, чтобы по USB в него залить скетч нужно задействовать только USB-TTL переходник с Arduino (такая мелкая микросхема с кучей ног возле USB-разъема).

      9. Отключаем все провода от макетки и подключаем заново.

      RX-pin Arduino --> TX pin контроллера на макетке
      TX pin Arduino --> RX pin контроллера на макетке
      GND Arduino --> GND контроллера на макетке
      Vcc 5V Arduino --> VCC контроллер на макетке

      Дополнительно на Arduino проводом соединяем GND и RESET.
      Контроллер на макетке продожает питаться от того, к чему подключена Arduino.

      10. Что теперь получилось:
      10.1 В меню Board у нас по прежнему ATmega8(A) (8MHz int. RC osc, short bootloader delay, 38400 baud rate), т.е. тот контроллер, который на макетке
      10.2 На плате Arduino мы временно отключили контроллер, положив его в вечный RESET и из всей платы используем только USB-TTL переходник

      11. Заливаем в контроллер на макетке скетч Blink, подключаем светодиод на макетке "1 светодиод и токоограничительный резистор на 220-500 Ом (подключается к пину №19 (PB5), это тот же выход Digital pin 13, к которому на большинстве Arduino-совместимых плат подключен светодиод L);", должно мигать.

      По поводу БП:
      - От 5В можно питать контроллер на макетке, в этом случае соединять VCC Arduino и VCC контроллера на макетке ненужно (нельзя)
      - От 12В можно питать Arduino через разъем для БП или через LM7805 контроллер на макетке (напрямую нельзя)

      Удалить
    8. Мигает. Спасибо огромное автору статьи, низкий поклон!

      Удалить
    9. Таки да, если вовремя замкнуть reset внешнего контроллера (который на макетке) на землю, то он будет отлично прошиваться программками. В качестве альтернативы можно использовать reset-разъём arduino-совместимой платы, но в таком случае её родной контроллер придётся вытащить. Ещё раз огромное спасибо за подробную инструкцию, побольше бы таких статей..)

      Удалить
    10. Ну и отлично, что все заработало :)

      Удалить
  116. Ув. автор статьи! Читал я читал...
    А перед этим курил всякие иные форумы.
    Ну все вроде сделал по написанному (хочу прошить atmega8L)... И все файлы залил. Но на п.6. Вашего письма от 9 февраля все затыкается... Avrdude из 1.0.5 r2 поменян на VinAVRовский. той же версии 20100110
    Но не работает! Пишет

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

    И до замены то же самое писал.
    Где баг искать?

    Заранее спасибо

    ОтветитьУдалить
  117. В прошлый раз случайно не туда поставил резистор: после загрузки arduinoIDE закорачивал резистором на землю ресет ардуино, вместо прошиваемого контроллера. После закорачивания atmega8L теперь прога пишет следующее:

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

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

    Что можно сделать дальше?

    ОтветитьУдалить
    Ответы
    1. Если вы закорачиваете на землю ресет целевого контроллера, то он (контроллер) находится в ресете и программатору не отвечает. Если есть возможность -- покажи как что подключили (фото прямо сюда можно).

      Удалить
  118. а если надо atmega8a с кварцем на 8 мГц для работы на пониженном напряжении что тогда делать?

    ОтветитьУдалить
    Ответы
    1. Поменять FUSE-bits, этого должно быть достаточно. Калькулятор тут: http://www.engbedded.com/fusecalc
      (лишний раз напомню, что нужно быть внимательным с FUSE-битами)

      Удалить
  119. в общем так попытки ничего не дали
    1 берём файл из :ArduinoIDE\arduino-1.0.5-r2\hardware\arduino\bootloaders\atmega8\ATmegaBOOT-prod-firmware-2009-11-07.hex
    любым программатором (у меня avr ips mkll-клон)прошиваем мегу8(кварц на 16 мГц)
    ставим FUSES внимание - их надо ставить правильно
    cksel3 -снят
    cksel2 -снят
    cksel1 -снят
    cksel0 -снят(можно установлен)
    - как хотите -можете включать схему слежения напряжения ,можно не включать
    B0DEN -установить
    BODLEVEL - снят 4,5 V -установлен -2,7V
    sut0- установлен
    sut1-снят - это комбинация задержек при старте тактового (не важно)

    далее
    boоdrst -установлен
    boоdsz0-установлен
    boоdsz1-установлен
    остальное не трогать

    подключаемся к ком порту через переходник USB-RS232(FT232RL) ВЫВОД DTR на сброс через конденсатор 0,1 мкФ
    запускаем ARLUINO IDE(15)
    ищем Arduino NG or older w/ ATmega8
    в BOARDS.TXTдолжно быть
    ##############################################################

    atmega8.name=Arduino NG or older w/ ATmega8

    atmega8.upload.protocol=arduino
    atmega8.upload.maximum_size=7168
    atmega8.upload.speed=19200

    atmega8.bootloader.low_fuses=0xdf
    atmega8.bootloader.high_fuses=0xca
    atmega8.bootloader.path=atmega8
    atmega8.bootloader.file=ATmegaBOOT-prod-firmware-2009-11-07.hex
    atmega8.bootloader.unlock_bits=0x3F
    atmega8.bootloader.lock_bits=0x0F

    atmega8.build.mcu=atmega8
    atmega8.build.f_cpu=16000000L
    atmega8.build.core=arduino
    atmega8.build.variant=standard

    выставляем номер порта
    грузим набранную программку (например -блинк)
    заливаем в мегу - всё работает

    2 тоже самое но файл загрузчика я взял от
    http://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/
    поместил в папку bootloadrs

    вставил в boards.txt
    ##############################################################

    atmega8noxtal.name=ATmega8-noxtal @8MHz

    atmega8noxtal.upload.protocol=stk500(заменил на arduino)
    atmega8noxtal.upload.maximum_size=7168
    atmega8noxtal.upload.speed=38400

    atmega8noxtal.bootloader.low_fuses=0xe4
    atmega8noxtal.bootloader.high_fuses=0xc4
    atmega8noxtal.bootloader.path=atmega8_noxtal
    atmega8noxtal.bootloader.file=ATmegaBOOT.hex
    atmega8noxtal.bootloader.unlock_bits=0x3F
    atmega8noxtal.bootloader.lock_bits=0x0F

    atmega8noxtal.build.mcu=atmega8
    atmega8noxtal.build.f_cpu=8000000L
    atmega8noxtal.build.core=arduino
    добавил
    atmega8noxtal.build.variant=standard
    прошил мегу через SPI УСТАНОВИЛ fuses как и в прошлой попытке
    пишем из ARDUINO IDE - программка работает это ГУД
    НО загружаю из ARDUINO IDE следующую программку -всё ARDUINO IDE пишет
    averdude:stk500_getsync(): not sync: resp=0x00
    только перепрошивкой загрузчика спасается ,каждый раз

    в чём может быть дело ?

    ОтветитьУдалить
  120. Навскидку: внешний кварц у вас на 16МГц, первый бутлоадер собран тоже для 16МГц, поэтому он может подключиться по UART. Во втором случае вы заливаете бутлоадер который думает, что контроллер работает на 8МГц (а реально у вас кварц на 16) --> по UART Arduino IDE подключиться не может.

    Попробуйте:
    1. Поставить сразу внешний кварц на 8Мгц
    2. Поменять значения здесь на нужные вам:
    atmega8noxtal.bootloader.low_fuses=0xe4
    atmega8noxtal.bootloader.high_fuses=0xc4
    3. Прошить бутлоадер (не вашу программу, а бутлоадер, там есть отдельный пункт) с помощью вашего программатора в плату с помощью Arduino IDE

    ОтветитьУдалить
  121. во втором случае я подставлял кварц на 8 мГц
    Arduino IDE не видит мой программатор (из за драйверов)
    hex файл после записи загрузчика , и после записи программки я просматривал
    загрузчик на своём месте , в конце памяти и не изменённый
    но после заливки программ с Arduino IDE загрузчик перестаёт работать
    такого в версии на 16мГц нет
    где то что-то не так
    1 сам загрузчик ??? ему без разницы кварц или внутренний генератор - только фузы мтемега
    2 метод заливки - но что там spi что у меня spi ,,, не правильно воспринимается формат файла загрузчика - не 16 мгц работает
    может всё же в фюзах проблема всё совпадает только EESAVE но Ардуино ied туда не лезет-только посылка по порту для загрузчика
    вот именно для атмега8 на 8 мГц (даже с внутренним генератором )после первой загрузки скейча - загрузчик перестаёт откликаться совсем

    ОтветитьУдалить
  122. Ещё глупый вопрос: чтобы бутлоадер стартанул нужно, чтобы контроллер сбросился. До загрузки первого скетча программы нет и бутлоадер стартует постоянно, после загрузки скетча запускается уже ваша программа. Можно попробовать сбросить контроллер вручную в нужный момент перед заливкой скетча, а можно проще, если есть в наличии любая из плат Arduino:

    1. Выдернуть из платы "родной" контроллер
    2. Подключить UART и Reset с платы к своему контроллеру (у вас ATmega8A)

    Попробовать прошить из Arduino IDE.

    ОтветитьУдалить
  123. ответ нашёлся экспериментально
    я всё время работал на AVR согласно стандартной схемы
    - цепь сброса как в муму : 10к на питание и кондёр 10мкф на землю(это рекомендованная дешёвая цепь для гарантированного запуска при любых ситуациях ).
    Братья по разуму -которые придумали ARDUINO- решили по своему (это ведь студенты )
    - на кой ляд нам этот кондёр - причём он должен быть качественным - да и загрузку автоматом от ком порта без лишних телодвижений и бабла не получеш -
    это говорит о том что нынешние разработчики часто пропускают такие важные мелочи в работе погоней за прибылью ,и вообще как игрушка среда Ардуино -красивая но на сам деле только для ногодрыганья
    итог
    если правильно - надо перерабатывать схему сброса
    стандартная прошивка на 16 мгц работает
    остальные нет

    ОтветитьУдалить
  124. У Вас не хватает строчки в boards.txt
    atmega8noxtalfast.upload.tool=avrdude
    из за этого не грузятся скейтчи

    ОтветитьУдалить
  125. для всех версий ардуино IDE при работе ском портом нужно указывать инструмент работы - в данном случае avrdude так как ардуино завязана на него

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

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

    atmega8noxtalfast.upload.tool=avrdude
    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

    ##############################################################
    atmega8optiboot.name=ATmega8(A) (16Mhz XTAL, optiboot)

    atmega8optiboot.upload.tool=avrdude
    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
    atmega8optiboot.build.variant=arduino

    ОтветитьУдалить
  126. Я последний раз обновлял файлы для Arduino IDE 1.0, возможно, с того времени добавились новые параметры. Постараюсь проверить в скором времени на новых версиях и обновить, если будет нужно.

    ОтветитьУдалить
  127. теперь по поводу optiboot для мега8 на 8 мгц
    на сайте http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
    есть конструктор загрузчика , и он построен на этой версии (size=7680
    при работе от внутреннего генератора всё как бы нормально
    но стоит переключить на кварц (8 мгц) загрузка не происходит (в отличии от стандартной большой, там переключение на кварц не влияет на работу загрузчика )
    видимо причина в настроенных задержек старта загрузчика
    при работе от внутреннего генератора , время старта ядра 18 тактов , а при работе на кварце минимум 258 а если включить схему слежения за напряжением то все 16000.
    обойти это ,я так думаю, можно только переделав заново, с другими параметрами , сам загрузчик .
    Увы в языках высокого уровня я не мастак , мой любимый и более понятный язык - ассемблер

    ОтветитьУдалить
  128. проблему с optiboot для мега8 на 8 мгц тоже решил
    Как оказалось загрузчик ( http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik) формируется ,но косяк в настройках
    пришлось самому это сделать
    в папке optiboot (как и в atmega ) есть файл Мakefile
    в него нужно внести изменения (добавить новый процессор)
    и запустить из командной строки "omake --------" где ----- имя выводимого файла внесённого заранее в файл Мakefile
    я переработал кусок кода для 16 МГц , уменьшил скорость в два раза , ввёл частоту 8000000L и новое имя файла для вывода
    На есть проблемка это для версии 1.0.1
    В новых версиях добавлены директория(avr)
    и нужно редактировать Мakefile (пока не разобрался)
    полученный файл успешно работает как на кварце так и на внутреннем генераторе

    ОтветитьУдалить
  129. о, класс, работает!
    только помучаться пришлось, конечно, чтоб впепячить это в ардуино-иде. в новой, кстати, есть boards manager, вот было бы круто, чтоб одной строчкой можно было скачать и установить ваше ядро/бутлоадер https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.6.x-package_index.json-format-specification

    ОтветитьУдалить