Сразу признаюсь, что заголовок призван привлекать внимание — конечно, за
$3 полноценную Arduino-плату не собрать, но минимальное решение вполне
можно.
Поддержка новых плат и 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:
// 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
в приложеном zip-архиве присутствует неоднозначность в вопросе "правильных" фузов. Так, в файле boards.txt указано:
ОтветитьУдалитьatmega8noxtalfast.bootloader.low_fuses=0xe4
atmega8noxtalfast.bootloader.high_fuses=0xc2
при этом в Makefile указаны
FUSE_L = 0xdf
FUSE_H = 0xca
Вопрос к автору: какие значения fuse-битов правильные? (и в чём их неправильность в исходной статье)
Фьюзы из 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/
-> Bootloader занимает ~900Кб
ОтветитьУдалитьнаверное 900б... а то 1Мб это круто.
Неправильно указаны параметры avrdude (нужны пробелы).
ОтветитьУдалитьПрошил таким образом Mega8L.
ОтветитьУдалитьПочему-то прошивка загрузчика прошла очень быстро (секунд 5-10). Но не ясно что дальше делать: вставил прошитую микруху в arduino плату, но при попытке что-то залить в IDE пишется:
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Как посмотреть эту сигнатуру и какая она должна быть?
Сообразил посмотреть в 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.
Т.е. выходит у микрухи стерлась сигнатура и теперь я с ней ничего не смогу сделать?
> наверное 900б... а то 1Мб это круто.
ОтветитьУдалитьДа, конечно, 900б, а не кб.
> Неправильно указаны параметры avrdude (нужны пробелы).
работает и так, кроме того среда Arduino запускает именно без пробелов (можно включить детальный вывод вот так:
http://snippets.crisp-studio.com/view/109/vklyuchenie-detalnyx-soobshhenij-kompilyatora-i-avrdude-v-arduino-ide
Разобрался почему не работала плата с прошитой микрухой.
ОтветитьУдалитьОказывается avrdude который идет с Arduino IDE не просто старая версия, а патченная версия, которая игнорирует сигнатуру чипа.
Т.е. не забудьте вернуть родной avrdude после того как будет зашит загрузчик.
> Т.е. не забудьте вернуть родной avrdude после того как будет зашит загрузчик.
ОтветитьУдалитьСтранно, я использую WinAVR с родным avrdude для прошивки через ардуиновский бутлоадер и через ArduinoISP -- работает нормально, сигнатуру говорит. Да, фьюзы будут показаны нулевыми, если прошивать через бутлоадер. А где можно почитать про то, что именно там пропатчено?
Кстати, Mega8L на 8Mhz работает от встроенного RC-осциллятора?
Что-то про reset function.
ОтветитьУдалитьДа, от внутреннего осциллятора, все по инструкции с этой страницы.
На Windows использую avrdude 5.10 из WinAVR 20100110 -- ресетит вроде бы нормально, если указать "-c arduino" нужно будет как-нибудь покопаться...
ОтветитьУдалитьСобрал, попробовал - все отлично работает.
ОтветитьУдалитьЕсть пара проблем.
Шью через RS232-TTL преобразователь на MAX232.
1. Если использовать RX, TX, GND, то момент для "старта" загрузки скетча выбрать крайне тяжело - приходится давить ресет и БЫСТРО нажимать кнопку загрузки
2.Если подать еще сигнал DTR на Reset через емкость - все шьется, но для старта скетча нужно пнуть Reset (вроде как на Freeduino все само стартовало) - может так и должно быть ? Ресет дернуть не трудно, но хотелось бы разъяснений =)
И еще - раз уж такое устройство "позиционируется" как основа для реальной "железки", не могли бы Вы опубликовать статью, как шить Arduino-скетчи без бутлоадера. Чтобы не было задержки после подачи питания - в случае с минимальным ардуино задержка маленькая, но все равно.
Заранее спасибо!
Adruino-скетчи без bootloader-а? Тут потребуется программатор... Какой программатор Вы предпочитаете? ;)
ОтветитьУдалить> 1. Если использовать RX, TX, GND, то момент для "старта" загрузки скетча выбрать крайне тяжело - приходится давить ресет и БЫСТРО нажимать кнопку загрузки
ОтветитьУдалитьВ моём случае я подключал RESET целевой ATmega8 к RESET'у на Arduino Duemilanove с вытащенным контроллером, таким образом за RESET в нужный момент отвечал конденсатор на одной из линий FT232 (как на обычной Duemilanove). Всего соединялось 4-мя проводами: RESET, GND, RX, TX.
> И еще - раз уж такое устройство "позиционируется" как основа для реальной "железки", не могли бы Вы опубликовать статью, как шить Arduino-скетчи без бутлоадера. Чтобы не было задержки после подачи питания - в случае с минимальным ардуино задержка маленькая, но все равно.
Без программатора тут не получится. В качестве программатора можно использовать ArduinoISP (который в этой статье использовался для прошивки бутлоадера). Скомилированный скетч (hex для прошивки) придётся выковыривать откуда-то из временных файлов (зависит от версии IDE).
Скомпилированный скетч обычно лежит hex-файлом в подкаталоге applet, в папке скетча.
ОтветитьУдалить> Скомпилированный скетч обычно лежит hex-файлом в подкаталоге applet, в папке скетча.
ОтветитьУдалитьНа Windows насколько помню ничего не создаётся в папке скетча, точно на 0022?
Да понятно, что придется использовать программатор. Скетчи, кстати, складываются на Linux/MacOS в /tmp. Тут весь вопрос с fuses (нужно ли их менять) и командах avrdude правильных.
ОтветитьУдалитьВедь, насколько я понимаю, fuse-бит еще и задает размер бутлоадера. А тут, если бутлоадера нет, то и fuse должен быть другой ? Вроде на arduino.cc была статья, но я лично мало что понял из нее.
> Ведь, насколько я понимаю, 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
Коллеги! Я правильно понимаю, что алгоритм такой примерно:
ОтветитьУдалить1. Выковыриваем hex
2. Даем программатору команду "стирать флеш" - фузы не трогаем
3. Даем программатору команду "писать флеш" - фузы не трогаем.
4. В идеале, после подачи питания, стартовать должна прошивка сразу.
Если размер прошивки для ATmega8 меньше чем 7168 байт (или сколько там получается), то всё вроде бы верно.
ОтветитьУдалитьп.2 и 3. делаются одновременно обычно (вернее, avrdude сам выполнит стирание перед прошивкой, если не указано обратное).
Спасибо, буду пробовать в скором времени...
ОтветитьУдалитьВсе получилось!
ОтветитьУдалитьСпасибо за поддержку...
Еще бы ликбез по fuses бы =)
Классно, что получилось :)
ОтветитьУдалитьПо фьюзам у DI HALT'а есть:
http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html
Для конкретного контроллера можно проверить этим калькулятором:
http://www.engbedded.com/fusecalc/
Ну вот, собственно финальное (почти) описание устройства. 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/
ОтветитьУдалитьФотки готового изделия будут позднее - допиливаю.
Привет!
ОтветитьУдалитьДай знать, когда фотки будут :) Я правильно помню, что у Dingoo есть ТВ-выход и в итоге проекта может получиться полноценный аркадный автомат? :)
Да, и многие так и делают, но я сделал нано-вариант - используется сам экран, а тв-аут выведен на тюльпаны сзади, впрочем покажу
ОтветитьУдалитьЕсли бы не эта статья, ничего бы не получилось.
ОтветитьУдалитьhttp://a320.emulate.su/2011/02/27/fallout-mod/
Да, штука зачётная и стильная получилась :)
ОтветитьУдалитьУважаемые, а можно чайнику небольшое пояснение?
ОтветитьУдалитьВыковырили HEX, а как будет выглядеть команда заливки оного в атмегу8 через ArduinoISP?
Максим, правильно ли я понял, имеется в виду как использовать ArduinoISP чтобы залить произвольный HEX-файл в произвольный контроллер подключенный ISP-проводаками?
ОтветитьУдалитьЕсли я всё понял правильно, то чтобы прошить, например attiny45, подключенный к ArduinoISP нужно следующее
avrdude -v -p attiny45 -c stk500v1 -P COM10 -b19200 -U flash:w:my_hex_file_here.hex
Целевым контроллером в данном случае является то, что подключено к ArduinoISP.
Спасибо, Артем!
ОтветитьУдалитьВ принципе уже дошло, но я лучше переспрошу :)
Все получилось! Спасибо автору статьи и за развернутые комментарии.
ОтветитьУдалитьblink.hex прекрасно залился и сразу заработал.
Классно, что всё получилось, а какой был целевой контроллер?
ОтветитьУдалитьatmega8A-PU
ОтветитьУдалитьЯ в небольшом сметении...
ОтветитьУдалитьПодскажите, а что никакой особой обвязки ненужно??? Ну разве что кроме двух резистора и двух перемычек? (я смотрю по схеме товарища ZNO http://a320.emulate.su/wp-content/uploads/2011/02/board.png)
Зачем тогда так много всего на самой ардуине?
Я так понимаю это остальное все USB, и внутрисхемный программатор.
Если все так, то получается отличный девайс - так сказать простой старт.
И еще вопрос: можно ли так прошивать те же atmega168, atmega328?
ОтветитьУдалитьПодскажите, а что никакой особой обвязки ненужно???
ОтветитьУдалить> Ну разве что кроме двух резистора и двух перемычек?
По хорошему нужно поставить пару конденсаторов на питание, чтобы сгладить помехи, но по минимуму запустится и так. Подробнее тут: 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с :)).
Подскажите в чем проблема:
ОтветитьУдалить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 ""
Спасибо! Все отлично получилось! В команде не хватает пробелов:
ОтветитьУдалитьavrdude -v -p atmega8 -c stk500v1 -P COM4 -b 19200
Странно, должно и так понимать, правда я использовал avrdude из WinAVR, а вы судя по этому "Version 5.4-arduino" из Arduino?
ОтветитьУдалитьу меня версия из ардуино не работала совсем :-(.
ОтветитьУдалитьзабыл написать, что для этого я заменил из winavr.
И то даже она почему-то обнаружила со второго запуска той же самой комманды
Этот комментарий был удален автором.
ОтветитьУдалитьВсе оказалось на много проще и не понятнее. Достаточно из во фридуино воткнуть USB в два этапа, т.е. сначала немного, потом еще чуть дальше и все скетча нет.
ОтветитьУдалитьНа макетке собрал девайс. Когда питаю всю схему от Freduino - работает хорошо. Как только запитал от зарядки с мобильного (5.2В, 0,7А) - все скетч пропал.
Исходя из этих двух наблюдений я так понимаю налицо проблемы с питанием, как решать?
И самый главный вопрос - как может питание (может действительно не правильное...) лишать меня залитого скетча????
> у меня версия из ардуино не работала совсем :-(.
ОтветитьУдалитьСудя по куску вывода запускается именно Arduino'воская версия. Не напутал с путями?
> И то даже она почему-то обнаружила со второго запуска той же самой комманды
Это глюк ArduinoISP, о нём на форумах писали и я его пару раз ловил. Обычно ничего страшного, вторая прошивка или ресет Arduino-программатора помогает.
> Теперь дело дошло до сбора уже прошитой Atmega8A-PU на макетной плате. Собираю - не работает,
>вставляю в FreeDuino - работает. Заново собираю схему - не работает.
Как сконфигурированы фьюзы на этой ATmega8? Возможно, сконфигурировано на работу с внешним кварцем, на макетке его нет, а на FreeDuino -- есть?
> Повторная заливка скеча - опять работает. Пока не поместишь на макетную плату.
> С чем связаны такие приключения? как решать?
Можно глянуть на фотку макетки и на фьюзы меги (они выводятся при прошивке).
И ещё: почему бы не оставить мегу на макетке и там же её и шить, не вынимая?
>Судя по куску вывода запускается именно Arduino'воская версия. Не напутал с путями?
ОтветитьУдалитьНет это я после комментария пробовал
Как выяснилось проблема вовсе не в моей макетной плате.
Проблема вот в чем. Скетчь теряется даже в самой Freeduino если не правильно вставить USB. А именно: вставлять в два этапа сначала немного без усилия, потом до конца. В результате скетч потерян. На сколько я помню такого небыло 328 чипом. Может я над ним не так издевался..
Возможно, дело в маленькой задержке у модифицированного бутлоадера -- он успевает "схавать" какой-то мусор во время инициализации USB-TTL и запрограммировать его в себя.
ОтветитьУдалитьНа Freeduino какой USB-TTL чип?
Во фридуино FT232RL
ОтветитьУдалитьВ том то и дело если вставить до конца сразу резким движением, то такого сброса не происходит.
Тоже самое наблюдалось когда подключал питание не от платы а от зарядного с мобилки. Но когда обвесил конденсаторами - на макетке баг пропал.
Если баг пропадает в том случае, если к TX\RX ничего не подключено -- скорее всего бутлоадер. Эта версия по описанию не так устойчива к мусору во время загрузки.
ОтветитьУдалитьТут у меня еще один неудобный момент обнаружился. А можно ли как-то сделать так, чтобы скетч в atmega8 заливать без постоянного перемещения в саму arduino. Может можно вывести какие пины и соеденить непосредственно с платой. Может ещ какие варианты. т.е. что-то вроде внутрисхемног опрограмматора
ОтветитьУдалить> А можно ли как-то сделать так, чтобы скетч в atmega8 заливать без постоянного перемещения в саму arduino.
ОтветитьУдалить1. Нужно выдернуть чип из Arduino
2. Соединить GND, RESET, TX, RX от Arduino с соотв. пинами на ATmega8.
3. Заливаться будет так, как будто Atmega8 вставлена в ардуину.
P.S. Питание ATmega8 желательно, чтобы совпадало с ардуино, т.е. 5В и там и там.
> 1. Нужно выдернуть чип из Arduino
ОтветитьУдалитьУточнени:
Имеется в виду вытащить штатный для твоей Arduino контроллер (ATmega328 скорее всего) и отложить в сторону, чтобы в раъёме DIP-28 ничего не было. После этого Arduino-плата превращается в переходник USB-TTL с автоматическим передёргиванием линии RESET при заливке скетча.
по уарту сам не работает.. не заливает..
ОтветитьУдалитьподскажите про кварц. у меня на 8мгц. не хочет работать... а на програматоре на 12 мгц от него работает нормально... вывод. поставить на 12
А что именно не работает и как собрано\подключено? Если цель сделать как в статье -- то кварц не нужен (вообще на 8 заработает, но если фьюзы поменять, а для 12 нужно как минимум бутлоадер пересобирать).
ОтветитьУдалитьКоллеги, в чем может быть проблема?
ОтветитьУдалитьИмею:
- 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.
Alex.
ОтветитьУдалитьЭта ошибка означает, что программатору не удалось перевести прошиваемый мк в режим программирования. Тут может быть что угодно - неправильное соединение прошиваемого мк к программатору, неисправность мк или неисправность выводов программатора.
У меня часто бывает, что устройства не могут подключиться друг к другу, если питание на прошиваемый контроллер идет от другого источника. Тогда я перед прошивкой отключают программатор и питание, потом подключаю программатор и питание и запускаю прошивку. Т.е. нужно чтоб и программатор и питание были "свежевключенными". Почему так происходит - я так и не понял.
Но первые разы, когда я пробовал прошивать этим программатором, то ошибался в неправильном или некачественном соединении программатора и программируемого мк. Прозвони соединения между ними, попутно сверяясь с даташитами на устройства.
build_your_web,
ОтветитьУдалитьРазводка по схеме - ОК
Скетч/проц пины - ОК
Работоспособность выводов на Arduino - ОК
Пробовал с тестить ATmega88, та же ситуация.
Ума не приложу в чем дело, как-то можно проверить микруху?
Попробуйте использовать avrdude напрямую.
ОтветитьУдалитьAvrdude есть в одной из подпапок Program Files/arduino.
Если не заработает, скачайте свежую версию с официального сайта, установите в отдельную папку, попробуйте подключится используя новую версию.
Судя по ответу на команду:
ОтветитьУдалитьavrdude -v -patmega8 -cstk500v1 -PCOM3 -b19200
Программатор из Ардуины отзывается, целевой контроллер -- нет. Наиболее частая причина -- неправильное подключение. Можно фотографию подключения? Кстати, земли программатора и целевого контроллера соединены? От чего питается целевой контроллер?
Автору респект!
ОтветитьУдалитьСделал все как описано в статье, FUSE не менял, оставил как в прошивке.
Все работает.
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, а результат остался старый. Очевидно делаю что-то не так...(
Смотри, для программирования используется 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
Отпиши плз, получится или нет.
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
Спасибо, добавил примечание в статью выше.
ОтветитьУдалитьПри попытке запустить загрузчик на Atmege8 выдает ошибку
ОтветитьУдалитьarduino-0023\hardware/tools/avr/etc/avrdude.conf:383 unrecognized character: "u"
> При попытке запустить загрузчик на Atmege8 выдает ошибку
ОтветитьУдалитьВ ответ на какую команду такое отвечает?
Arduino Uno не поддерживается скетчем ArduinoISP, нажаль у меня Arduino Uno. Не заметил этот момент в статье сразу.
ОтветитьУдалитьУстановите ArduinoIDE 0023
ОтветитьУдалитьArduino Uno поддерживается скетчем ArduinoISP
не вводите читателей в заблуждение.
Экспериментировал с 8A-PU и 8L-8PU, "reset" вручную. Использовал Arduino Uno
isaak, спасибо за информацию! Автор никого специально не вводит в заблуждение, просто статье уже скоро как год, а arduino 0023 вышла всего-то неделю назад ;)
ОтветитьУдалитьАвтор даже отмазался на этот счёт "на момент написания заметки новая Arduino Uno не поддерживается скетчем ArduinoISP".
ОтветитьУдалитьЕсли серьезно, то добавил в статью примечание + упомянул о том, что новый optiboot можно тоже попробовать.
Приношу свои извинения автору, но я имел ввиду комментарий Rodot
ОтветитьУдалитьАвтор не обижается и даже рад, что кто-то проверил на Arduino Uno! :)
ОтветитьУдалитьДля того чтобы создать hex файл Arduino IDE во время Upload скетча, зажмите Shift, файл в Windows 7 находится путь c:\Users\rodot\AppData\Local\Temp\....
ОтветитьУдалитьВзято с http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1287332515
простите я совсем новичок, расскажите как можно подробнее как сделать чтобы скетчи можно было заливать с первой попытки не подгадывая каких-то особых моментов? я так понимаю подключить к компьютеру не 3-мя проводами а 4-мя включая DTS? Я пытаюсь сделать автономное устройство, так чтобы его можно было использовать отдельно от "настоящей" arduino.
ОтветитьУдалитьЕсли есть "настощая" Arduino плата и отдельно контроллер с бутлоадером (дальше буду называть "цель"), то достаточно сделать следующее:
ОтветитьУдалить1. Вытащить (физически, пальцами) контроллер из настоящей Arduino.
2. Подключить от Arduino к цели следующее:
Arduino <-> Цель
GND <-> GND
RX <-> TX
TX <-> RX
RESET <-> RESET
Подключение RESET'а цели к выводу RESET на Arduino задействует механизм сброса.
Позразумеваю, что:
- У цели есть своё питание 5В (если цель питается от 3.3В (например, пары АА батареек), нужно согласование уровней).
- В цель уже прошит бутлоадер с помощью программатора или описанного в этой статье способа
ардуино то у меня есть но МЕГА, и контроллер в нее впаян ) я использую преобразователь уровней ST232BN, но с резетом как-то не все понятно из 10 попыток удалось залить скетч только один раз.
ОтветитьУдалитьМожешь кинуть ссылку -- какая именно Мега у тебя, чтобы я чего-попало не насоветовал.
ОтветитьУдалитья, конечно, не совсем мега-нуб, но кто мне объяснит: почему такое простое дело - прошить бут-лоадер в атмега8 - это такая огромная проблема для начинающего???
ОтветитьУдалитьпочему сам прощивальщик бутов а пакете Ардуино не может это всё за нубов сделать грамотно, с нужными фьюзами
сам не ожидал, что меня остановят в самом начале фьюзы...
хе-хе вроде как разобрался сам)
ОтветитьУдалитьнужно сигнал DTR из COM порта компьютера завести на ножку RESET, НО только не напрямую конечно же, а вначале через преобразователь уровней ST232BN (например нога 8 -> нога 9) а потом через конденсатор 0,1 мкф. И все заработало как часики!!!!!
фьюзы определяют конфигурацию кварца, необходимую для старта.
ОтветитьУдалитьардуина не может знать какой кварц используется в вашей схеме.
установил в программатор USBasp читую Atmega8a;
ОтветитьУдалитьзапустил оболочку Ардуино;
указал, что буду работать с Atmega8 в разделе Board;
указал, что программировать буду через USBasp;
нажал "прошить бутлоадер";
прошило!
закрыл оболочку Ардуино;
открыл программу USBASP_AVRDUDE_PROG;
решил её там прочесть, прощупать;
откликалось и читалось "на ура";
потом решил поумничать и выставить с её помощью фьюзы;
всё! после этого Atmega8 перестала откликаться;...
Все и есть просто для тех конфигураций, которые идут в стандартной поставке (например, ATmega8 + внешний кварц на 16МГц). Если нужно что-то нестандартное (например, как в этой статье), то нужно добавлять записи в boards.txt и все сразу опять становится просто -- все можно делать из среды arduino.
ОтветитьУдалить> потом решил поумничать и выставить с её помощью фьюзы;
ОтветитьУдалить> всё! после этого Atmega8 перестала откликаться;...
А причём тут среда Arduino, если фьюзы были выставлены вручную в неправильные значения? :)
т.е. не нужно было умничать, а только прошить бутлоадер из среды Ардуино?
ОтветитьУдалитьне трогая фьюзы вообще?
ArduinoIDE в процессе прошивки бутлоадера шьет и фьюзы тоже.
ОтветитьУдалить> А причём тут среда Arduino, если фьюзы были выставлены вручную в неправильные значения? :)
ОтветитьУдалитьесли всё сама грамотно ставит среда Ардуино при прошивке бутлоадер, откуда тогда в Сети так много шума и болтовни по поводу грамотной установки фьюзов???
Лучшее - враг хорошего.
УдалитьОтдельно шить фьюзы не нужно, если бутлоадер шьется из среды Arduino. При прошивке из среды снача снимаются лок-биты, затем шьются фьюзы, потом прошивка с бутлоадером, потом опять прошиваются лок-биты, насколько помню.
ОтветитьУдалитьа будут тут добрые подсказки: как теперь Атмегу оживить обратно?..
ОтветитьУдалитьА кто-нибудь знает как теперь залить скетч из новой 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.
> а будут тут добрые подсказки: как теперь Атмегу оживить обратно?..
ОтветитьУдалитьПроблемы с неправильными фьюзами могут быть двух видов :
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) Заперещено программирование по SPI, тогда нужен высоковольтный (HV) программатор, чтобы заново прошить фьюзы с такими значениями, при которых прошивка по SPI включена.
Удалить> 2) Установлен "неправильный" источник тактовой частоты -- например, внешний генератор.
спасибо за подсказки; надеюсь на 2-й пункт :)
хороший у вас форум
Да, разумеется обновлю! ;)
УдалитьА по поводу запрещения программирования SPI: фьюз SPIEN можно переключать только в высоковольтном режиме, т.е. дело не в нем. Чаще всего люди попадаются на RSTDISBL - разрешение использования пина, назначенного RESET в качестве обычного DIO. Увы, программирование в режиме ISP начинается именно со сброса :(. Чтобы его восстановить, нужен программатор с поддержкой режима параллельного программирования (в случае с ATmega8).
Ну и по факту - лезть без особого понимания во фьюзы не очень разумно, но если уж пришлось - сначала их надо прочесть, выписать на бумажку, сравнить с новыми значениями и ТРИ раза подумать о правильности изменений (я сам всегда так делаю ;)
К сожалению стало еще хуже - теперь даже не компилируется и в старой и в новой 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
- Какая выбрана плата в настройках?
Удалить- Куда положен boards.txt из архива?
Плата выбрана: ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)
УдалитьФайл лежит в C:\Users\Например Андрей\Documents\Arduino\hardware\arduino-addons\ но только не из архива с содержанием как в Вашем посте выше.
Если выбрать любую другую плату, скетч собирается?
Удалитьда
УдалитьЕсли убрать всё из "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
собирается?
Компилируется, но все равно не заливается:
Удалить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.
Ок, значит это уже другая (следующая) проблема. Судя по сообшению -- либо неправильно подключена целевая плата, либо бутлоадера в ней нет. Начнём с подключения. Что и как подключено?
УдалитьЭтаже плата прекрасно работает с версией 0.22, в неё даже залит скетч и прекрасно работает! А скетч общается через COM1 с встроенным сериал монитором. У меня одновременно на комьютере лежат две папки с IDE версии 0.22 и 1.0 и в из старой заливается скетч а из новой - нет (
УдалитьА попробуй вот такие настройки в 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
Этот последний вариант хорошо заработал и компилируется и заливается, но ТОЛЬКО если эта конфигурация записана в ОСНОВНОМ файле ардуины.
УдалитьКак вариант:
Удалить- "C:\Users\Например Андрей\Documents\Arduino\" -- имя пользователя тут на русском? Если указать File -> Preferences Arduino IDE -> Sketchbook на какую-то другую папку, поближе к корню диска и без русских символов в названии.
- Какая структура папок внутри папки Sketchbook?
тут ещё вопрос назрел по ходу моих изысканий;
ОтветитьУдалитьдело в том, что решил быстро сам спать Ардуино-совместимую плату;
если прошить и установить Atmega8L, то можно без кварца? т.е. на 8 Мгц?
будет работать сама и с Ардуино?
Судя по этому: http://www.atmel.com/Images/doc2486.pdf
Удалитьбез кварца на 8МГц работают и оригинальные 8 и 8L, смысл ATmega8L в том, что она может работать при более низком напряжении питания, а обычная ATmega8 -- нет. Более новая ATmega8A является заменой обоих в "модельном ряду". У нас (Украина) продаются только ATmega8A, остальных уже давно нет.
тоже из Украины;
ОтветитьУдалитькупил тут Atmega8a, но запорол, похоже; писал про это выше;
Atmega8L-8UI вытянул из платы сигнализации; стояла там без кварца;
потестил её на живучесть в программаторе; прошил в неё штатный бутлоадер;
мой вопрос был больше про 8 Мгц и работу без кварца в моей самодельной Ардуино;
в оригинальной же стоит 16 Мгц;
в моём варианте 8 и без кварца тоже всё будет фурычить?
Штатные бутлоадеры, насколько помню все на 16Мгц, т.е. их прошить можно и они прошьются, но работать не будут. Собственно по этой же причине и писал этот пост -- ATmega8A на 8МГц.
УдалитьЕщё неплохой вариант -- поставить таки кварц на 16МГц, тогда можно будет прошить новый optiboot, который всего 512 байт занимает и поддерживает высокий битрейт при заливке. Все необходимое уже есть в комплекте Arduino IDE, нужно только boards.txt подправить, вот тут я писал: http://snippets.crisp-studio.com/view/160/nastrojki-arduino-ide-dlya-atmega8a-s-optiboot
привет!
ОтветитьУдалитьотличная подсказка таки на 16Мгц его!
собрал Ардуино своими руками на Атмега8;
подключил его через КОМ-порт (обычная схема на 2-х транзисторах)
а теперь не могу понять как Ардуино настроить;
установка КОМ-порта есть; а какой программатор выбрать чтобы Ардуино заливала откомпилированные скетчи?...
Если у тебя схема согласования уровней RS232 -> TTL, то скорее всего тебе нужно будет ещё подтянуть ресет к DTR (не уверен, нужно по схеме проверить). Либо выбрать бутлоадер с большей задержкой при старте и ресетить вручную.
Удалитьну вот такую я собрал на макетной плате
ОтветитьУдалитьавтосброс не подпаял
это важно?
при попытке UPLOAD, в самом конце выдаёт "avrdude: stk500_getsync(): not in sync: resp=0x00"
Если ресет ни к чему не подключен, то нужно ресетить вручную в нужный момент.
УдалитьДобрый день всем! Подскажите новичку, пожалуйста:
ОтветитьУдалитьВзял 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
Что я сделал не так и как сделать работающую версию?
Выбрать нужно эту плату "ATmega8A (8MHz int. RC osc, short bootloader delay, 38400 baud rate)", а не "Arduino NG or older w/ ATmega8"
УдалитьМинимальная Arduino-конструкция за $3.5
ОтветитьУдалитьATmega8 замена на ATmega328, как сделать ?
Этот комментарий был удален автором.
УдалитьВ случае варианта с optiboot'ом и внешним кварцем на 16МГц, то нужно просто зашить бутлоадер от Arduino Uno, он как раз для ATmega328 и 16МГц кварца
УдалитьУ меня скетчи так не захоели компилироваться в IDE 1.0 (получал ошибку о том что файл Arduino.h не найден). Решил проблему добавление содержимого boards.txt из архива в "родной" boards.txt в папке с IDE.
ОтветитьУдалитьАга, проблему смог повторить (на чистой инсталляции), попытаюсь найти причину и выложить обновление
УдалитьЭтот комментарий был удален автором.
УдалитьПривет!
УдалитьПроблему описал вот тут:
http://arduino.cc/forum/index.php/topic,106029.0.html
Решения пока не нашел.
Вобщем подтверждаю такой же косяк.
УдалитьЯ конечно рад, что 16 мгц увеличивает цену всего лишь на полбакса, но как представлю, что надо за этим всем идти/ехать - сразу пропадает желание ковыряться дальше.
Пытался запустить всю музыку через последний ArduinoIDE, если arduino-addons отдельно - не работает. Если перенести в основной boards.txt (что опасно при апгрейдах, на маке например - где все тупо перезапишется) - компилируется и пытается шиться.
То, что не шьется - это уже третья история, то ли java у меня обновилась, то ли система и драйвера pl2303 "вышли из себя" (я использую pl2303+max232) - вобщем ни на старом, ни на новом ArduinoIDE прошиться больше не получается :-(
> Я конечно рад, что 16 мгц увеличивает цену всего лишь на полбакса
УдалитьСтарое решение никто не отменял же...
> Пытался запустить всю музыку через последний ArduinoIDE,
> если arduino-addons отдельно - не работает.
Точно использовал последнюю версию из архива из этого поста? Она несколько раз обновлялась, текущая должна работать без добавления чего-либо в boards.txt
> вобщем ни на старом, ни на новом ArduinoIDE
> прошиться больше не получается :-(
Показывай вывод ошибок, тогда можно будет сказать, кто виноват.
Так, дело было не в бобине.
УдалитьВиноваты были дрова 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, отпишу по результатам
Вобщем докладываю.
УдалитьИспользуемое железо - безкварцевый клон.
ArduinoIDE -последний на сегодня.
Взял архив из поста для 1.0 и выше и подложил
Все компилируется
При прошивке - Invalid signature
Заменил протокол - было stk500, заменил на arduino - все взлетело. Огромное спасибо.
Скажите, там действительно должен быть stk500 ? Или нужно таки исправить на arduino и перезалить архив ? :-)
Спасибо за репорт, да, должен быть arduino, обновлю архивы.
УдалитьВам спасибо.
УдалитьНа самом деле, использование очень дешевых микросхем и минимума деталей - правильный и единственный пусть. Если скетч занимает больше 6 килобайт полезной нагрузки - пора творцу задуматься либо о более навороченной плате, либо о вырастании из "штанов" ардуино и переходе на хардкор авр девелопмент :-) - а для простых поделок - атмега8 и 8мгц - хватит надолго.
На самом деле "хадркор авр девелопмент" не такой уж и хардкор и гораздо интереснее Arduino, хотя да, навыков потребует больше.
УдалитьФайлы я обновил, заодно перенёс на github и добавил настройки для optiboot в общий архив.
Исправил проблему и обновил файлы, теперь должно работать.
ОтветитьУдалитьНи кто не подскажет, почему после всех манипуляций описанных в статье, уже после заливки скетча (например blink из примеров), то после подачи напряжения питания всегда проходит всегда ровно 12 секунд прежде чем светодиод подключенный к 13 цифровому пину (ножка 19) начнет мигать?
ОтветитьУдалитьЗаливал бутлоадер Arduino NG or older w/ ATmega8, кварц и 2 конденсатора по 22 пкф тоже подключены. может что-то упустил? или так и должно быть?
Кто-то подскажет :)
УдалитьНе тот бутлоадер был залит (у того, который залит пауза гораздо больше):
См. выше:
"Нужно запустить 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.
Действительно если выбрать для заливки бутлоадера пункт ATmega8 (optiboot, 16Mhz XTAL), то задержки при включении нет вообще никакой, и мне даже показалось что и скетч работает более стабильно.
УдалитьНа стабильность работы основной программы выбор бутлоадера врядли повлияет, а вот места под скетч на 1,5 Кб больше стало :)
УдалитьНестабильность работы была вызвана тем что я экспериментировал с приемниками ИК сигнала TSOP4836, а они "глючили" от моей настольной лампы дневного света. А бутлаодер я залил и испробовал уже утром (когда лампа была выключена) вот мне и показалось что бутлоадер влияет на стабильность :)))).
ОтветитьУдалитьНо у меня возник еще вопросик: а как можно перевести микроконтроллер на частоту в 4 МГц? И будут ли на такой частоте работать мои скетчи? (Те которые не используют сторонние библиотеки и те которые используют)?.
Теоретически, чтобы перевести МК на частоту 4 МГц, достаточно поправить определение платы в boards.txt - банально изменить 16000000 на 4000000. Но вот как это скажется на сторонних библиотеках - сказать трудно. Если написаны без привязки к тактовой частоте и потактовому выполнению - то будут.
УдалитьБольшое спасибо!
ОтветитьУдалитьВсе получилось. Но сначала бутлоадер не хотел шиться из-за того, что в ArduinoIDE был выбран Программатор -> AVR ISP и я все прошил SinaProg+avrdude с последующей прошивкой фьюзов и локов. Но позже сменил локи и фьюзы в дефолт SinaProg+avrdude следом выбрав в ArduinoIDE Программатор -> Arduino as ISP перезалил бутлоадер, проверил фьюзы/локи .. все ОК!
Вынул камень из UNO, подключил к меге 8 на макетке и дергая reset вручную передал Blink. Также пробовал, как вы советовали, подключить целевой ресет к ардуине с вынутым камнем - шьет, но после прошивки не отдает ресет, все равно приходится отключать ресет.
Arduino IDE 1.0.1
Arduino UNO
ATmega8A-PU
Спасибо большое за репорт, значит у кого-то все-таки получается повторить ):
УдалитьОшибка в 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 становится и работает отлично!
Спасибо, поправил в коммите:
Удалитьhttps://github.com/artvolk/electronics-minimal-arduino/commit/c2451bd2b95c69b9b91787b7a4eca707e6368168
А не подскажите как и из atmega 328 сделать Ардуинку. Ну Там Фьюсы Подпрпвить Или Можно Ее "представить" Для Иде Любой Ардуиной С Такимже МК На Борту. А Если Захочится Без Кварца Запустиь На 8 мгц. Как Тогда?
ОтветитьУдалитьoptiboot для обоих вариантов есть в комплекте свежей Arduino IDE, там же и правильные фьюзы. Итого -- максимум, что нужно -- добавить запись в boards.txt.
УдалитьСтранное дело, добавил запись в boards.txt, в которой только изменил значение low fuses с 0xFF на 0xE2, что вроде как соответствует только изменению с внутренней частоты 16 мгц внешнего кварца, на 8 мгц внутренней RC цепочки. Прошил бутлоадер с такими настройками, и хотя теперь скетч заливается и работает в таком МК, но заливается он только через пункт меню программы "Файл"->"Загрузить с помощью программатора". А вот через выводы Com порта самой микросхемы ну никак не хочет, хотя мониторинг Com порта видит сообщения которые приходят от этого же МК. Бьюсь уже второй день - не пойму в чем причина, пробовал даже не Optiboot заливать а "старый/обычный" загрузчик.
ОтветитьУдалитьКроме смены фьюзов нужно прописать версию бутлоадера под эту частоту. К сожалению под рукой нету установленной IDE, чтобы посмотреть как он называется.
УдалитьТак ну хоть раз сам отвечу на свой вопрос:
УдалитьПрочитав отличную статью на 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
Если оформите это в виде, пригодном для закидывания в sketchbook установленной Arduino IDE, то можем включить в набор из этой статьи. Он живёт тут (там же и пример):
https://github.com/artvolk/electronics-minimal-arduino