Можно ли писать в Arduino IDE скетчи для других микроконтроллеров ?

RunovS
Offline
Зарегистрирован: 04.12.2012

Например у меня валяется ATmega16-16PU. Можно ли ее превратить в какую-нибудь ардуину ?

P.S. Получилось какбы два вопроса, вопрос темы и вопрос в теме, но ответы интересны на оба.(Парни помогите старичку въехать в тему :)

RunovS
Offline
Зарегистрирован: 04.12.2012

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

Нужно чтоб мне ктонибудь объяснил как ATmega16-16PU превратить в ардуину с минимальной обвязкой, на внутреннем генераторе. Питание от переходника USB-COM на ftdi. В основном интересует где взять/поправить/написать программу бутлодер. Ну и как это все собрать вместе. Или это нереально по причине не возможности использовать Arduino IDE на вновь испеченной платформе? Может кто уже сталкивался с вопросом?

Если вопрос глуповатый - извиняйте, я только только начал вникать в тему.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вот, например, здесь есть информация http://robocraft.ru/blog/arduino/19.html
Если поискать, то можно найти, всё давно есть в интернете

RunovS
Offline
Зарегистрирован: 04.12.2012

там копируют существующую платформу. С этим все понятно. Я же спрашиваю, можно ли использовать arduino IDE на отличных от стандартных контроллерах. 

Дурачёк
Дурачёк аватар
Offline
Зарегистрирован: 25.11.2012

Не правильный вопрос, скетчи пишутся в Arduino, назвать её IDE язык не поворачивается, а сами по себе микроконтроллеры про Arduino ничего не знают. 

Язык процессинг в дурине, по сути сишная обёртка, для отдельных представителей семейства ATmega8, однако ничего не мешает обернуть в процессинг любой другой микроконтроллер. Что собственно и было сделано для ATiny-ек. А так же для STM и PIC. Всё это вне рамок проекта Arduino естественно, существует ввиде форков, например pinguino.cc

krikus
Offline
Зарегистрирован: 22.07.2011

Вот - http://www.polesite.ru/?p=69 Прикрутили Ардуино ИДЕ к Atmega32 (к 16 тоже подойдет)

Еще - http://todbot.com/blog/2011/03/22/blinkm-smart-led-as-the-smallest-arduino/ К Attiny

RunovS
Offline
Зарегистрирован: 04.12.2012

Вот спасибо, потихоньку начал въезжать.  По поводу неправильного вопроса :),так откудажправильному то взяться если в теме не разбираешься. 

Ссылка на мегу 32 помогла въехать особо, там как раз написан правильный ответ:"Обычно программы для avr пишут на C. Но для тех, кто хочет программировать на wiring, есть решение."

Теперь пожалуй смогу правильно задать вопрос.  Если я хочу писать на вайринге или процессинге(или это одно и тоже?), но не под ардуино, а просто под АВРы существует ли такая возможность кроме плясок с бубном вокруг ардуино иде?

Я с начала сунулся изучать курс 123 и кодевижн, но после двухдневного чтения и написания програмульки для связи с компом, захотелось надеть шапку, чтоб мозг не порвало, не одел - мог вскипеть. Не на столько мне это и надо). Зато с ардуинкой разобрался за 5 минут. В ардуино бесит что выходы не совпадают с выходами мк, что hex доставать из опы надо, что частоту кварца не задать, что мк 2с половиной штуки. Но простата написания кода и доступность информации радует неимоверно.

На сколько я понял, бутлодер не обязательно зашивать, если через ISP программировать, ошибок не будет? 

Куда надо чего вписать, если например 328ю хочу на внутреннем генераторе запустить? 

 

 

 

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

ошибки будут если не правильно соберешь.

А в остальном - не будет. Сам пишу в текстовом редакторе (vim), компилю в ардуине (можно еще arvdude сделать и автоматизировать компиляцию с прошивкой, но это надо мануал читать а то - лениво), а шью через ISP. Все работает исправно

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

Рекомендую минимальную длину проводов (если LPT-программатор, то всего если COM- то только от порта до микросхемы) и экранирование что бы ошибок не было.

Потом прошей фьюзы. можно понипрогом, можно unniprof'ом, может еще чем найдешь. Контроллер начнет работать как ты ему задашь.

 

А про обвязку - статей много, есть схема на arduino.cc - с кварцем и без кварца. Гугл в помощь.

 

RunovS
Offline
Зарегистрирован: 04.12.2012

С программированием ISP и фьюзами у меня особых трудностей нет. 

Меня больше интересует как Ардуино ИДЕ объяснить,например, что скетч нужно скомпилировать для АТмега328 работающей на частоте 1МГц?

Я так вижу это дело. Заходишь в бордс.тхт копируешь строки для нано, обзываешь мега328 1МГц и меняешь там частоту и видимо значения фьюзов? Потом в ардуино иде выбираешь вновь созданную плату и радуешься ардуине мега328, работающей на 1МГц. Сам пока так не пробовал, руки не дошли, но если алгоритм верный прошу знающих людей подтвердить.

А вот что делать с АТмега 16 ума не приложу, в стандартных платах ее нет, и ног поболе и как быть с номерами выводов, где ацп, где шим и тп. 

usr-bin
Offline
Зарегистрирован: 04.09.2012

Вфайле /usr/share/arduino/hardware/arduino/boards.txt указываются все параметры отдельных чипов. Ты можешь указать параметры твоего (нового) чипа и он появится в выборе чипов в меню "boards" в ардуино. Там же и частота прописывается. А параметры чипа можно узнать из даташита и гугла. Сделай по аналогии с другими записями.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

RunovS пишет:

А вот что делать с АТмега 16 ума не приложу, в стандартных платах ее нет, и ног поболе и как быть с номерами выводов, где ацп, где шим и тп. 

Нужно кроме боардс еще заводить каталог в "variants" с файлом pins_arduino.h - там описание периферии, делать аналогично другим. Придется еще заглядывать в даташит и .h файл соответсвующего проца в либах avr-gcc. Эта работа самая сложная.

RunovS
Offline
Зарегистрирован: 04.12.2012

Да, это понял. Попробую разобраться с pins_arduino.h.

.h файл соответсвующего проца в либах avr-gcc. - где это? попробовал наити чето сходу не вышло.

 

 

 

step962
Offline
Зарегистрирован: 23.05.2011

RunovS пишет:

Да, это понял. Попробую разобраться с pins_arduino.h.

.h файл соответсвующего проца в либах avr-gcc. - где это? попробовал наити чето сходу не вышло.

<Arduino-Path>\hardware\tools\avr\avr\include\avr\

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

step962 пишет:

<Arduino-Path>\hardware\tools\avr\avr\include\avr\

Возможно, тут не найдется нужного. Тогда ставить с офсайта AVR-studio и выколупывать от туда.

RunovS
Offline
Зарегистрирован: 04.12.2012

а как называется этот файл для мега328? 

step962
Offline
Зарегистрирован: 23.05.2011

AlexFisher пишет:

Возможно, тут не найдется нужного. 

В этом каталоге лежат заголовочные файлы всех поддерживаемых в GCC (не в Arduino IDE) микроконтроллеров AVR.

AVR Studio, в свою очередь, также использует компилятор GCC и поддерживает те микроконтроллеры, которые определены внутри GCC.

Списки могут отличаться только по злому умыслу разработчиков Arduino IDE (например, могут быть выкинуты 90-я серия, ATXMega, ...) или при использовании различных версий (например, в Arduino 0023 используется сборка GCC с редакциями заголовочных файлов от 17.10.2008, в то время как в AVR Studio 4.19 - от 05.04.2010).

Определения для ATMega8 содержатся в файле iom8.h, для ATTiny13A - в iotn13a.h и так далее.

step962
Offline
Зарегистрирован: 23.05.2011

RunovS пишет:
а как называется этот файл для мега328?

iomx8.h - определения для ATMega48, ATMega88, ATMega168 (, ATMega328)

iom328p.h - определения для ATMega328p

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

step962 пишет:

Списки могут отличаться только по злому умыслу разработчиков Arduino IDE (например, могут быть выкинуты 90-я серия, ATXMega, ...)

...

Я именно это и имел в виду - может быть урезана сборка. Если чего-то не хватает - топаем к первоисточнику :)

 

RunovS
Offline
Зарегистрирован: 04.12.2012

iom16.h видимо для 16 меги. Только вот глянул я на эти файлы и понял, что если я разберусь что там и где поправить, то мне собственно и ардуино иде больше не нужна будет. Идея подключить мегу 16  конечно помогла мне получше разобраться в теме контроллеров, но похоже рановато. 

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

Я уверен что все что я пытаюсь сделать, уже сделано, но вот нагуглить эти решения не удается. Статьи есть, но печальные. Авторы какбы забывают рассказать до конца как все это делается.  Либо просто сами не до конца прикрутили. одно дело помигать диодом, другое обеспечить полноценную совместимость. Пока както так.

leshak
Offline
Зарегистрирован: 29.09.2011

RunovS пишет:

ну и без бутлодера конечно работать. Проще конечно нужные контроллеры купить, но что делать если у меня этот уже есть).

Э... не совсем. Основная задача бутя, конечно это загрузка, но он еще и прейскейлеры и т.п. настраивает. Шил недавно  atmega8 без внешнего кварца, на 8mHz внутреним осциляторе. Решил попробовать "а как будет без бутлоадера?". Вообщем заработало, blink замигал, но "медленно и печально" (то ли в 4-ре, то ли в 8-мь раз медленее от нормы). Прошил бутлоадер (искал именно подхаченный под 8mHz) - все заблинкало "как нужно" (хотя заливал не через бутлоадер). Так что не только заливкой он заведует :)  Ну или в setup() нужно будет заморочится, что-бы настроить переферию под текущую реальность :)

 

RunovS
Offline
Зарегистрирован: 04.12.2012

     Нужно было просто фьюзы прошить на 8МГц, по штату новый мк  вроде на 1 МГц работает.  Ну и скетч компилировать выбрав плату с частотой 8МГц. В бордс.тхт вроде можно поменять частоту, тогда и на 1МГц можно запрограммировать. Сам пока не пробовал, работы навалилось, но теоретически поменять частоту работы вроде не сложно, сложно МК другой прикрутить.

 

leshak
Offline
Зарегистрирован: 29.09.2011

RunovS пишет:

     Нужно было просто фьюзы прошить на 8МГц, по штату новый мк  вроде на 1 МГц работает.  Ну и скетч компилировать выбрав плату с частотой 8МГц. В бордс.тхт вроде можно поменять частоту, тогда и на 1МГц можно запрограммировать. Сам пока не пробовал, работы навалилось, но теоретически поменять частоту работы вроде не сложно, сложно МК другой прикрутить.

 

Все это поменял, естественно. В boards.txt .  Иначе бы вообще не завелось. Так вот один и тот же скетч, заливающийся через один и тот же програматор, используя один и тот же раздел boards.txt по размно отрабатывает функцию delay() в зависимости от того был прошил бутлоадер или нет. При отдних и тех же фьюзах.

Я специально имено это и проверял. Добивался что-бы разница была только в "есть будтлоадер или нет".  Залил скетч - мигает медленно, сделал burn bootloader, залил скетч (так же, не через бутлоадер) - мигает нормально.

step962
Offline
Зарегистрирован: 23.05.2011

leshak пишет:

Я специально имено это и проверял. Добивался что-бы разница была только в "есть будтлоадер или нет".  Залил скетч - мигает медленно, сделал burn bootloader, залил скетч (так же, не через бутлоадер) - мигает нормально.

Зайдем с другой стороны:

Проблема в том, что Atmel не предусмотрел возможности записи фьюзов программными средствами. Возможность чтения предусмотрел (раздел "25.2.2 Reading the Fuse and Lock Bits from Software" в даташите), а вот запись - только снаружи (разделы 27.7.8-27.7.10).

Да и при взгляде на внутренности бутлоадера ("hardware/arduino/bootloaders") обнаруживаются лишь секции для записи в Flash и EEPROM.

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

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

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

Причем тут "програмно нельзя установить фьюзы"? Я же специально указал что шил через програматор (ArduinoISP). То есть "снаружи". Что отличие было только в "нажал Burn bootloader" или нет.

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

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

leshak
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

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

А в итоге вы, все-таки, оказались правы. Дело во фьюзах. Но не потому что "програмно нельзя", а потому что при заливке самого скетча (на важно каким способом) их даже и не пытается устанавливать.

Включил verbose для upload и посмотрел с какими параметрами дудка дергается. Фьюзы ей сообщаются, оказывается, только при "burn bootloader", а при "upload sketch" - только имя hex файла который нужно залить. Без фьюзов.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

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

CMEXIRK
Offline
Зарегистрирован: 03.04.2015

МК PIC реально прошить Arduino IDE ? если да то если можно ссылки на загрузчики , заранее спасибо