Прошить ATmega328 загрузчиком Ардуино.
- Войдите на сайт для отправки комментариев
Пт, 19/10/2012 - 14:12
Ребят, покурил форум, но в основном это вопрос 2011 года. Изменилось что-нибудь или все по прежнему.
Купил себе UNO, сделал с ним одну наиполезнейшую для себя вещь.
Теперь надо это все дело собрать, в коробочку убрать и на стенке привязать.
Встал вопрос "А нафига мне терять модуль UNO, если в природе есть отдельно ATmega328"
Хочу расположить все на одной плате, тем более с паяльником дружу. Но беда в том, как прошить чистый микропроцессор?.
Есть по этому какие-либо новости, или курить старые темы и программировать по старому.
Я так понимаю, что через ICSP можно и мегой запрограммировать? Один черт используются рабочие ПИНы.
ВАариант: скачать прошивку и уставки фьюз с атмеги которая в UNO программатором и залить её в чистую атмегу.
Так какая разница какого года? Камень-то вы тех же готовы собрались шить (или совместимый с ним). ЗаконОма с тех пор не изменился. Чай не зимнее время, депутатам, пока, не подвласно :)
А раз форум смотрели, то наверное и про ArduinoISP уже знаете. Возмите и сделайте как в туториале на оф. сайте написанно. И как шить, и как подключать (и с кварцем и без, но я бы рекомендовал с кварцем, что-бы потом голову не выморчаивать) - все нарисованно.
В чем проблема-то состоит, не очень понятно.
ну я грешным делом подумал, что возможно что-то уже изобретено для более легкого программирования. Нет, ладно. Старое - значит проверенное.
Спасибо за консультацию.
Еще вопросик, до конца не разобрался в местном сленге.
фьюз - это что? Можете расписать или название вещиты дать полное?
О фьюзам (по английски fuse) можно почитать здесь http://avrfuse.narod.ru/ или поискать в книгах по MK AVR, через поисковик поискать ифу. Фьюзами выполняются уставки как то: частота кварца, внешний кварц или внутренний тактовый генератор, защита от копирования прошитой программы, минимальное напряжение при которм МК сбросится и другие функции. Только с уставками фьюзов надо быть осторожнее, при уставке некоторых фьюзов можно заблокировать перепрошивку МК и придётся сбразывасть уставку фьюзов на заводскую уставку паралельным прогроматорм.
ну я грешным делом подумал, что возможно что-то уже изобретено для более легкого программирования. Нет, ладно. Старое - значит проверенное.
Пардон. А куда уж легче-то? Залить готовый скетч и подключить пять проводков?
Еще вопросик, до конца не разобрался в местном сленге.
фьюз - это что? Можете расписать или название вещиты дать полное?
Может. Гугл. Так как это не "местный сленг", а вполне официальный для микроконтроллеров термин. FUSE. Откройте датишит на камень и вы там найдете этот "местный сленг" :)
Да и по "что такое фьюзы" - статей много (как и граблей :)
Если грубо - конфигурационные биты, которые можно задать только при прошивке программатором. При работе "чисто по ардуиновский" (заливая скетчи из ArduinoIDE напрямую в плату, через бутлоадер) - их менять не возможно. Частота, источник тактирования и т.д. и т.п.
Еще вопросик, до конца не разобрался в местном сленге.
фьюз - это что? Можете расписать или название вещиты дать полное?
http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html
Тут очень хорошо расписано. Да и вообще DI_Halt там хороший курс по AVR написал. Почитай.
Еще вопросик, до конца не разобрался в местном сленге.
фьюз - это что? Можете расписать или название вещиты дать полное?
http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html
Тут очень хорошо расписано. Да и вообще DI_Halt там хороший курс по AVR написал. Почитай.
Да не нужно в дебри лезть. Ну вот зачем? Не поможет штатынй "Arduino Way" тогда уж можно "разбиратся" (или "экзотики захочется"). Уже же все есть http://arduino.cc/en/Tutorial/ArduinoISP . Даже схемы читать не умея "тупо по картинке" можно все соеденить. FUSE - уже все проставлены/посчитаны в ArduinoIDE . Файлик board.txt. Но даже в нем ничего искать не нужно. Выбрать плату на 328 камне в ArduinoIDE и все. Само найдет "какие фьюзы выставить, какой бутлоадер взять".
Для "образования" конечно стоит почитать, но ведь и опытные частенько "промахиваются с фьюзами". Так что не стоит с этого начинать раз есть ардуина где это постарались от нас "спрятать".
Все понятно, спасбо большое.
Как бороться с тем, что сообщения тут отправляются с 100 попытки?
Как бороться с тем, что сообщения тут отправляются с 100 попытки?
:) Сменить браузер :) Я Оперу для этого форума юзаю.
Подскажите, а где качнуть прошивку?
Ничего качать не надо, Arduino IDE сама знает, какую прошивку лить, главное - правильный проц.
Прошился. С 8 попытки. Кондер на 10 мкф на резет почему-то подвешивал дуину. Выкинул. После седьмой попытки понял, что на дубликат не подал +5. Восьмая пролетела на ура.
Теперь 2 вопроса:
1. Реально ли, что 328 может работать на 8 мгц без кварца и мы получаем еще 2 цифровых вывода? То есть если мне хватает 8 мегагерц, то можно разжиться на выводы?
2. Прошить прошил. Теперь вопрос как скетч записать? То, что сунуть в дуину проц - это ежу понятно. Но проц через несколько минут впаяется в плату проекта. С платы я могу вытащить PD0, PD1 (по ним в дуине скетч записывается), а также сляпать порт ICSP, но как по нему залить скетч я так и не понял. Просто есть большое нежелание выдергивать проц из дуины, чтобы по PD0, PD1 заливать.
У меня вопрос по теме:
в ардуино есть такой пункт меню "прошить бутлоадер".
Это не то же самое?
Т.е. нельзя просто вытащить существующую микросхему, вставить новую, прошить средствами той же платы прототипирования и стандартным ардуино-софтом, а потом залить готовую (или написать новую) программу-скетч ?
После чего микросхему опять вытащить, обеспечить минимальным обвесом (кварц, блок питания, разьемы, изоляция от внешней среды и т.п.) и поставить на место будущей работы.
Прошить бутлоадер можно только через программатор (или через другую дуину со скетчем программатора)
Если у Вас есть программатор, то шить можно сразу hex-файл (из темпа), микропроцессор не перетыкать, а сделать на плате с ним разъем ICSP и грузить через него. Можно с помощью ардуины.
Вопрос с подвохом. Можно ли в IDE получить файл скетча (бинарник скомпилированный), а потом как-то залить в проц через D0 D1?
В темпе берешь бинарник (включить verbose для компилирования в настройках), потом командной строкой с помощью averdude.exe залить через виртуальный ком-порт (или физический - без разницы)
включить verbose для компилирования в настройках
Поясни плз этот момент. чет не вкурил где эта настройка.
включить verbose для компилирования в настройках
Поясни плз этот момент. чет не вкурил где эта настройка.
Удивительно, но в настройках :)
File/Preferences/ Show verbose output during: [X] Compilation [ ] Upload
А если включите галку и на Upload - увидите пример как дудку нужно дергать что-бы заливать бинарник без ArduinoIDE
Разобрался. У меня русский интерфейс. Вот и не вкурил сразу. Я блин таки залез в настройки, первым делом поставил 2 галки, думаю "а нефига от меня что-либо скрывать". А оказывается сделал то, что надо.
И еще вопросец.
А как вообще задаются/меняются фьюз биты? Каким образом настраиваются? Где прописываются?
А то хочу посадить атмегу на тактовый генератор, вместо кварца. Как понял, моя CKOPT.
Ну и еще один проц хотелось бы пересадить на внутреннюю генерацию 8 мгц. Там больше не надо, а току жрать поменьше будет. Тогда надо PLLCK. Верно?
И еще, есть инфа по "Группа битов CKSEL0…CKSEL3". Я вот не совсем понял. Это внутренняя настрйка генератора или для внешнего? Типа с каким кварцем будем запускать проц?
Разобрался. У меня русский интерфейс. Вот и не вкурил сразу. Я блин таки залез в настройки, первым делом поставил 2 галки, думаю "а нефига от меня что-либо скрывать". А оказывается сделал то, что надо.
Сами себе создаете сложности. Либо переключайте на английский либо готовтесь все время испытывать трудности.
А как вообще задаются/меняются фьюз биты? Каким образом настраиваются? Где прописываются?
Перечитайте ветку внимательней. Уже освещался этот вопрос. Мое сообщение #7
Равно ка и где почитать про фьюзы было выше, что какой бит значит и проч. Но статьи - это для ориентирования. Конечная истина - грызть даташит.
Сами себе создаете сложности. Либо переключайте на английский либо готовтесь все время испытывать трудности.
Равно ка и где почитать про фьюзы было выше, что какой бит значит и проч. Но статьи - это для ориентирования. Конечная истина - грызть даташит.
Ну что грызть - это понятно. Без этого на кривой лошади не уедешь. Значит говорите боард. Оккей.
Так понимаю, что нужно выставить выкроить что хочется. Переобозвать как-то это по другому, чтобы было понятно, что есть почему и зачем.
Затем лепить ISP и прошивать. А уже после лить скетч. Верно?
Понял это из темы http://arduino.ru/forum/obshchii/mozhno-li-pisat-v-arduino-ide-sketchi-d...
Я "verbose" написал, потому что не помню, как эта опция называется по-русски :) Везде по-разному переводят, а в англиском всегда одинаково :)))
Casper, по-моему, бутлоадер на вашей целевой атмеге-328 будет лишним.
Я успешно заливал скетч на кристал так.
комп -> usb -> Ардуина нано_1 c ArduinoISP-> icsp -> Ардуино нано_2.
Зачем я так делал? Просто, чтобы научиться. Отсутствие бутлойдера проверил так: ардуино IDE не видит нано_2 если подключить её по usb.
... а ещё я прошил OptiBoot бутлойдер, который не глючит с wdt.
А как залить скетч по icsp? (hex файл из temp)
На данный момент я делаю так: покупаю квадратную атмегу (smd), развожу ICSP, Rx, Tx, Reset, питание. на плату кроме мк припаиваются конденсаторы по 22 и кварц.
Теперь, если подключить ее к arduino isp программатору (допустим Nano в которую залит скетч ArduinoISP), я могу записать туда загрузчик. дальнейшие махинации по записи делаются по обычному сериалу (провода Rx, Tx, Reset) при помощи обычной кнопки upload. Возможно ли писать скетч так же как и загрузчик, по icsp, ессно без загрузчика, не троая фьюзы (раз один раз правильно поставилось туда при записи загрузчика, то на всякий пожарный уже не трогать их вовсе, оставив на настройках arduino - 16 МГц кварц)? или кроме прочего настройка под ардуино загрузчик отключает icsp?
Tools/Programmer/Arduino as ISP
File/Upload Using Programmer
Ребята. Проверьте, правильно ли я понял фьюзы и их расчет?
Даташит на чип - http://www.atmel.com/Images/doc8161.pdf 328 который
Прошивка UNO
В борде
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
Младший байт
ClockSel = 1111 - такое чуство, что 20 МГц.
StartUp = 11 - по даташиту "Зарезервировано"
ClockOut = 1 (отключен)
Делитель частоты (или все-таки встроенный 8МГц) = 1 (отключен).
Старший байт
Resrt vector = 0 (включен), кстати че это за зверь?
Размер загрузщика = 11 (самый маленький)
Сохранение ЕЕПРОМ - 1 (отключено)
Watchdog таймер = 1 (отключен)
SPI программинг = 0 (вклюен)
Линия отладки = 1 (отключена)
Отключение внешнего резета = 1 (отключено).
Дополнительный байт
BODLEVEL = 101 (2.5 вольт проц остановится)
Все ли верно? Если да, буду пробовать под себя их пересчитать.
Нет специалистов по фьюзам? Жаль.
А то до конца не могу понять что почем.
Зато есть специалисты по пользованию гуглом: калькулятор фьюзов.
На это мы и сами с усами. Что толку тыкать в калькулятор без понимания?
Почему без понимания? Я понять не могу вам сложно прочитать описание фьюз-битов? Что сложно в гугле вбить название фьза и прочитать за что он отвечает?
Resrt vector - когда он "включен" после ресета МК стартует с области бутлоудера.
maksim, вы уж простите, но после таких ответов невольно напрашивается вопрос - а форумы тогда нафига? Давайте тупо оставим один гугл. Он типа все знает.
Вы не допускате мысль, что я мог не все понять? Я почитал про фьюзы в даташите, в инете. И русское и не русское описание, но мне не все до конца понятно. Посему и вопрос на форуме. Или вы считаете, что я тупо вопросы кидаю сюда, чтобы вас занять писаниной? Ладно, больше не буду. Помолчим-с в гугл.
Если все-таки будет желание помочь, то вот еще вопрос.
SUT1 и SUT0 - биты, управляющие режимом запуска тактовых генераторов МК. Связаны с нижеописываемыми битами, определяющими тип и частоту тактового генератора, причем связь весьма хитрая и запутанная. При ошибочной их установки возможны ситуации неустойчивого запуска генератора или неодногратного сброса МК в процессе подачи на него питания.
Стоит понимать, что для тактового генератора внешнего, например KX0-V97, эти биты вообще бесполезны? Но даташит говорит иное - Start-up Times for the External Clock Selection. То есть получается нужны.
И правильно ли я понимаю, что существует куча настроек фьюзов, при которых проц вообще может не завестись?
Стоит понимать, что для тактового генератора внешнего, например KX0-V97, эти биты вообще бесполезны? Но даташит говорит иное - Start-up Times for the External Clock Selection. То есть получается нужны.
Основное назначение фьюзов SUT – определение задержки после старта. Если ваш блок питания обеспечивает качественное питание, то задержку можно выбрать самую маленькую. Качественное питание – это питание, которое очень быстро достигает рабочих значений после включения. Чаще всего так оно и есть. Задержка включения предусмотрена для тех случаев, когда питание не качественное. В любом случае переходные процессы на выходе источника питания должны полностью заканчиваться к моменту окончания выбранной вами задержки включения МК.
И правильно ли я понимаю, что существует куча настроек фьюзов, при которых проц вообще может не завестись?
Может, когда например настроили на внешний кварц или генератор, а они не подключены к МК.
И правильно ли я понимаю, что существует куча настроек фьюзов, при которых проц вообще может не завестись?
Может, когда например настроили на внешний кварц или генератор, а они не подключены к МК.
А еще отключить последовательное программирование (ICP) и отключть Ресет - кристалл можно будет записать только параллельным высоковольтным программатором.
Не, я не об этом.
Допустим 2 противоречивые опции:
EXT BYTE: BODLEVEL = 111 (BOD DISABLED)
И одновременно
LOW BYTE: SUT = 11 (BOD ENABLED)
Вот что будет? Или он по малейшему напряжению будет стараться заводиться или вовсе не заведется?
===
Если не сложно, проверьте.
LOW = 0x40
HIGH = 0xD6
EXT = 0xFE
Задача, поставленная перед процом:
Тактовый генератор. С XTAL2 снимается импульс на другой чип (тактируются одной частотой 16 МГц)
Проц должен иметь возможность загрузки ПО (скетча) по последовательному интерфейсу (D0/D1) через FT232
Задействованы все аналоговые выводы.
Используется библиотека TimerOne
Используется интерфейс SPI для связи с другим чипом (MCP2515)
===
И напоследок. Сейчас чип работает от кварца. Ну грубо в нем UNO сидит.
Теперь чтобы пересадить его на такт ген, надо сначала перезалить бут, используя новые фьюзы. Затем перекинуть на плату с генератором и продолжать издиваться уже там. Верно?
Кстати, какой прототип лучше брать? Нано? или мини про?
Не, я не об этом.
Допустим 2 противоречивые опции:
EXT BYTE: BODLEVEL = 111 (BOD DISABLED)
И одновременно
LOW BYTE: SUT = 11 (BOD ENABLED)
Вот что будет? Или он по малейшему напряжению будет стараться заводиться или вовсе не заведется?
Если не сложно, проверьте.
LOW = 0x40
HIGH = 0xD6
EXT = 0xFE
Ладно, проехали. Поищем специалистов в другом месте. Гугл чет толком сказать не может.
Ну удачи, ищите.
Ищите специалистов по несуществующим связям.
Гугл молчит по этой же причине.
Единственная связь между BOD и SUT, так это то что даташит рекомендует при SUT = 00 включать BOD.
2 Casper
Разговор глухого со слепым, однако. Если Вы ответов не поняли, это не значит, что отета не было. Мне, например, все было понятно, я ссылочку сохранил - понравилась.
Чтобы понять ответы про фьюзы, нужно иметь некоторую подготовку.
maksim, без обид. Право дело, если мы друг друга понять не можем - смысл беседы? Только ругаться. А этого я не люблю.
AlexFisher, видно не понял.
Я просил проверить, если возможно фьюзы, но человек их тупо забил в тот же калькулятор, из которого я их получил. Как результат - ответ не понятен.
Ну, я бы сделал бы то же самое - Вы просили проверить - забил-проверил.
Поставте программу, которая умеет писать чипы через программатор. (CodeVisionAVR, например) - прочитайте фузы с кристалла и поочереди изучайте. Прежде чем зашить новые фузы, следует посмотреть, какие там зашиты. Лучший вариант - прочитать, поменять только то, что не устраивает (например, отключить прескаллер и переключить на внешний кварц) и шить их в проц.
Вообще, поищите темы про программаторы AVR - там и на фузы будет много ссылок.
Да уж чего только не облазил. И на работе чела достал с этими фьюзами.
Вот еще вопросец. Для чего нужен фьюз деления тактовой частоты на 8? Что будет если отключить? Потому как мне на одну маленькую задачку хотелось бы побольше скорости, а получается, что если фьюз стоит, то кристал вообще работает на двух мегагерцах. так? Я про CKDIV8.
Я так понимаю, что все эти фьюзы не критично, если не трогать SPIEN и RSTDISBL. Условиться, что эти двое всегда будут 0 и 1. А с остальными - все, как говорится, решаемо.
avrdude не даст прочитать фьюзы?
Вроде бы avrdude -U hfuse:r должен считывать.
Еще желательно не лочить чтение программы :)
Дудка должна считывать
с завода процы идут запрограммированными на "деление на 8" и "работа от внутреннего RC-генератора" - это можно смело менять (если есть кварц)
Использовать CKDIV8 вижу смысл только в одном случае - когда нужно что бы МК работал при 1,8 вольта от
внутреннего осцилятора, то есть на 1 МГц. Кварц можно просто подобрать.
maksim, а без делителя не будет работать или будет сбоить?
Вона какие нюансы всплывают, а то все гугл гугл... Да с мозгами человеков никакой гугл не сравним.
Кстати, а ардуинь что уно - точно выставляет этот бит, даже при условии внешнего осциллирования 16 мегагерцами.
Конечно будет, но тогда частота от внутреннего осцилятора будет 8 МГц и минимальное рабочее напряжение станет 2,7 вольта.
У дуины Уно этот бит установлен в 1, то есть деление отключено. Просто не вижу смысла делить при использовании кварца, разве что под рукой не было другого. Посмотреть как установленны фьюзы у Уны, Наны и т.д. можно в файле arduino-1.0\hardware\arduino\boards.txt
Да, с уной я лопухнулся
В общем натыкался я в итоге, используя предложенный выше калькулятор фьюзов, получил ошибку.
HB = D6
LB = C0
EB = FF
Не зашивается. аврдудка ошибку выдает.
avrdude: verification error, first mismatch at byte 0x0000
0xff != 0x07
После чего чип перестал отвечать на что либо :(
Видно успел записать други фьюзы, поэтому переставил его на такт ген.
Записал остальное, прошивку и бутлодер.
File/Upload Using Programmer
в этом случае загрузчик пишется или нет, фьюзы правятся/устанавливаются на настройку Arduino? то есть, если у меня на плате пустая атмега, могу ли я записать скетч сразу или надо сначала сделать загрузчик? я так понимаю что пишет без загрузчика с настройками Arduino, тоесть я могу потом таким же способом перезаписать другой скетч, а если я хочу зашивать по обычному сериалу, то надо будет записать загрузчик.
в этом случае загрузчик пишется или нет,
Нет
фьюзы правятся/устанавливаются на настройку Arduino?
Нет, это делается при записи загрузчика
то есть, если у меня на плате пустая атмега, могу ли я записать скетч сразу или надо сначала сделать загрузчик?
Нет, можно сразу записать скетч, но фузы устанавливать придется каким-нибудь программатором или командной строкой через avrdude (команду можно подсмотреть при "включенных подробностях при записи" во время записи загрузчика.
я так понимаю что пишет без загрузчика с настройками Arduino, тоесть я могу потом таким же способом перезаписать другой скетч, а если я хочу зашивать по обычному сериалу, то надо будет записать загрузчик.
Да. Если загрузчик был записан, то он там и останется, по-новой писать его туда не надо. Но если программа перекрывает загрузчик, то нужно устанавливать фузы таким образом, чтобы проц не пытался его стартовать (иначе будет висяк) - то есть отключить загузчик вообще.
Уважаемые ГУРУ, а для чего на Arduino UNO R3 два разъема ISP - програматора?
Причем один судя по схеме подключен к МК Atmega 328, а второй к MK Atmega16U2?
Что бы прошивать эти МК.