Программатор своими руками на ардуино

Добавил пользователь Валентин П.
Обновлено: 04.09.2024

Как то понадобилось мне позаливать скетч из Arduino IDE в мелкий восьминогий ATTiny85, как правило, для этого используется Arduino с соответствующим скетчем ArduinoISP. Несколько китайских клонов Arduino Nano у меня имелось, поэтому и использовал их. Все бы хорошо, но мне не недоставало одного вывода. Точнее он имеется у тини (вывод RESET), но чтобы задействовать его как цифровой вход, нужно запрограммировать соответствующий фьюз. С помощью ArduinoISP это можно сделать только один раз, и последующие попытки заливки скетчей с помощью этого и других программаторов ISP становятся невозможными, поскольку вывод с функцией RESET становится не доступным. Если дальнейшей модификации скетча (программы) не требуется, то и проблем нет, но в процессе разработки какого то устройства требуется неоднократная перепрошивка мк. Выход из этой ситуации один – использование высоковольтного программатора. Для AVR контроллеров с выводами 8, 14 используется высоковольтное последовательное программирование, а для мк с выводами 20 и больше – высоковольтное параллельное. Я озадачился поиском подобного программатора, но для меня было принципиально важно, чтобы он был на основе Arduino и работал из под Arduino IDE. Рассматривал вариант использования восстановителя фьюзов для тини, но уж очень хлопотная получается перепрошивка. Это нужно сначала восстановить фьюз, затем перепрошить мк, затем фьюз и т.д. В силу своих скромных способностей в программировании, вариант самому написать скетч для высоковольтного программатора на Arduino отпадал. А вот поиск в инете увенчался успехом. Спасибо парню по имени Matthias Neerache, который создал для нас этот уникальный софт для ардуино.

ScratchMonkey использует расширенную версию протокола STK500v2. Он реализует следующие методы программирования:

- ISP (In-Sistem Programming) внутрисхемное программирование использует 4х проводный протокол SPI для программирования и поддерживается почти всеми AVR мк. Главный недостаток – при определенных установках фьюзов может быть не пригодным для использования. В ISP режиме ScratchMonkey работает аналогично встроенному в IDE ArduinoISP программатору. Однако, ScratchMonkey немного более универсальный, поддерживает микроконтроллеры с более чем 128КБ флэш-памяти, и может работать с различными настройками фьзов определяющих режим генератора тактовой частоты мк. Имеет дополнительный выход XTAL (сигнал тактовой частоты), что позволяет запрограммировать мк с настройкой фьюзов на внешний генератор. Кроме того, ScratchMonkey может эмулировать SPI (на те же пины) на более низкой частоте чем аппаратный SPI (Limp Mode), что позволяет программировать мк с внутренним генератором тактовой частоты, настроенным на 128 кГц.

- HVSP (High Voltage Serial Programming) высоковольтное последовательное используется для программирования мк 8 и 14 пин и не зависит от состояния фьюзов. Требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

- HVPP (High Voltage Parallel Programming) высоковольтное параллельное используется для программирования мк от 20 пин и выше, не зависит от состояния фьюзов. Также требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

- TPI (Tiny Programming Interface) Тини программный интерфейс для мк семейства ATtiny4/5/9/10 (SOT23-6 package). ТПИ использует только 3 вывода, и может работать либо в режиме низкого напряжения или в режиме высокого напряжения. RESET пин может использоваться как обычные линии ввода/вывода.

Более чем достаточно функций для моих целей. Для начала тестирования составил простейшую схему (рис.1) на основе диаграммм из мануала ScratchMonkey и изготовил на макетке типа шилда для Arduino Nano (клона), Рис.2,3 (только ISP и HVSP режимы). Транзистор любой n-p-n.

02.jpg

03.jpg

Для начала этот программатор нужно “прописать” в ArduinoIDE . Делаем так: в папке ScratchMonkey/hardware/scratchmonkey , находим и открываем файл programmers.txt , копируем из него строки:

Вставляем эти строки в аналогичный файл IDE: arduino-1.6.12/hardware/arduino/avrp/rogrammers.txt. Добавляем к этим строчкам еще по 3 строки (выделены на рис.4), без них не работает. Открываем ArduinoIDE и видим, что добавились два программатора ScrstchMonkey (Рис.5).

04.jpg

05.jpg

06.jpg

Что бы сделать действительно универсальный программатор AVR микроконтроллеров из Arduino родилась такая схема, Рис.7, реализующая все возможности ScratchMonkey.

Как видим схема гораздо проще, по сравнению с программаторами с аналогичными возможностями. На линии портов установлены ограничительные резисторы 1кОм, с целью предотвращения кз на этих линиях при неблагоприятных условиях. DD2 – dc/dc конвертер на микросхеме ME2149F 5/12V c Aliexpres Рис.8.

09.jpg

Или самодельный на MC34063, Рис.9. Рис.9

11.jpg

12_pre.jpg

При параллельном программировании к разъему HVPP контроллеры подключаются согласно таблице 1 и даташиту.

Чтобы работали индикаторы и программатор TPI, как заявляет автор, необходимо пропатчить исходники avrdude, заново собрать и скомпилировать.

Кому интересно как это делается можно посмотреть здесь , но сначала нужно пропатчить ( внести изменения в исходники avrdude). Patch –файл можно найти в папке ScratchMonkey - avrdude.patch.

Пропатченные и скомпилированные файлы avrdude.exe и avrdude.conf вставляются в папки ArduinoIDE вместо штатных файлов. В файл programmers.txt вставляются строки:

Готово. В списке программаторов IDE должны добавиться три программатора:

При программировании должны работать индикация и TPI программирование.

Arduino как ISP программатор

Arduino отличный старт в изучении микроконтроллеров, но как обычно это бывает, хочется идти дальше, а для этого возникает другая ситуация, когда хочется уже прошить наконец свой микроконтроллер. Первый шаг бывает крайне тяжелым, даже не понимаешь, в какую сторону смотреть, не говоря уже про то, что именно надо делать. В основном речь идет о том, что надо бы использовать специальные устройства — программаторы, но так же в сети есть много сложных и не очень схем, в которых используются другие МК для прошивки и разной сложности способы. Но можно сказать с уверенностью, что самым простым способом является способ прошивки с платой Arduino. Нельзя сказать, что это самый лучший способ, но то, что он самый простой — это по праву.

Для начала давайте соберем не очень сложную схему. Нам будет помогать сама Arduino IDE. File->Examples->11.ArduinoISP->ArduinoISP этот пример является базовым, так что оттуда можно взять некоторую информацию

Заливаем скетч ArduinoISP на Arduino и в общем программатор готов. Осталось подключить наш МК к программатору.

Кроме этого подключаем диоды
9 — зеленый, сигнальный, показывает когда программатор работает
8 — красный, горит, когда что-то пошло не так
7 — синий, моргает когда программатор работает в режиме закачки прошивки


Недавно у меня появился Arduino UNO пробовал писать программки но как то что то это дело у меня не идёт. Решил применить ардуино в качестве достойного программатора для AVR. В интернете на ткнулся вот на эту статью У Вас есть Arduino? Значит у Вас есть программатор!. В этой статье автор реализует универсальный программатор AVR используя несколько планок.
Так как у меня давно валяется панелька ZIF28 решил собрать универсальный программатор на ней. Также воспользовался для реализации своего проекта вот этим ресурсом ArduinoISP Zif28 MOd.
Разработал плату в соей любимой программе DipTrace.

Вот собственно что и получилось.



С помощью данного устройства можно прошить Atmega8/48/88, Attiny13/45/85.

Комментарии 39


Ахах, что тут происходит? Че вы все взъелись на ардуин? Нужно же с чего то начинать, тем более человек не готовый вариант а сам делает, уже саморазвитие идет, потом соберет и напишет чтот посерьезней:)


А программа написанная есть ?






Что прям так без проблем шёт все PIC, AVR, Max и другие МК?


Allegator90

да он дорогой зараза. Есть же китайские версии типа 886. И зачем вообще автономное программирование?


Allegator90

Вобщем то цимус программаторов не в том чтобы прошить камень(у стм достаточно для этого rs232, и не заморачиваться), а отладка на железе(usbasp, на ардуине этого не позволяют, насколько я понимаю). А прошить можно или на 5 проводках, или же на Громове.


А может выкинуть нафиг эти все дурины, и перейти напрямую к работе с железом(МК)?


А чем дуина не железо? Вполне себе железяка. А прошивку можно писать не только в виде скотчей, но и на нативном ассемблере и заливать дудкой… или на сях…


Тогда уж сразу покупать какую нибудь банану. Двухядерный проц, гиг рамы, ГПИЫ выведены — можно светиками мыргать.


можно, но дуина дешевле вроде как… :) ИМХО не стоит сравнивать доширак и спагетти болоньезе… И то и другое — макароны, но разные как по времени приготовления так и по вкусу…

PS. seamen73 всяко молодец, раз взял и сделал…


А чем дуина не железо? Вполне себе железяка. А прошивку можно писать не только в виде скотчей, но и на нативном ассемблере и заливать дудкой… или на сях…

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


Ардуино … программатор…
мда эта ардуда отрабатывает своё хорошо… цель ардуиды превратить обратно человека в обезьяну!
уж ели стали как программатор использовать её … нуглухо.(


Странная на мой взгляд точка зрения. Вы наверное программист высокого уровня, занимающийся программированием микропроцессоров. А я вот познакомился с МК года 2 назад, именно с ардуино. И да я исплльзую ардуино в качемтве программатора.


Ну пишу потихоничку, не высокого уровня конечно… есть ещё чему учиться… век живи, век учись.)))
Когда я учился программированию никакого ардуино ещё не было тогда, и слава богу. )
Каждый раз читая про этот ардуино, и про новое созданное извращение на нём… я не понимаю… ПОЧЕМУ? для ЧЕГО? для чего его использовать ?
Я конечно могу понять, , начинающему интересно поморгать светодиодами, а тут уже скетч готовый, бери и моргай… надоесть изучай дальше тему… интересуйся… развивайся.
Но зачем так глубоко залазить по уши в эту … ардуино? Так глубоко что даже как программатор использовать её, есть же нормальные, доступные программаторы.
Зачем создавать какие то непонятные проекты на ардуине ? Можно взять любой контроллер, написать программу на СИ и будет она работать так как надо.
Люди сидящие на ардуино и представления не имеют, что такое контроллер, как он работает, что такое эффективные алгоритмы.
ардуино это путь в некуда ! чем глубже залезешь, тем меньше представления имеешь по теме этой.

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

Вы и другие пользователи врять ли поймёте про что я говорю. если повезёт, если слезете когда нибуть с ардуине и начнёте сами создавать, писать свои проекты, оглянётесь гез годик назад, когда под ардуиной сидели, и сразу всё поймёте. )))


Посмотрите в мой БЖ. БК я сделал на ардуино, потому что я не программист, я самоучка, а в сети есть библиотеки и описания по ардуино в большом количестве, чего не скажешь о других МК. Было желание, получил возможность с помощью ардуино ее реализовать. Согласен с мнением что среди ардуинщиков мого ничего не понимающих людей, занимающихся копированием вставкой, но когда этого перестанет хватать человек начнет осваивать МК глубже, а если не станет то скорее всего просто забросит это занятие.
"Люди сидящие на ардуино и представления не имеют, что такое контроллер, как он работает, что такое эффективные алгоритмы."
Фраза из разряда: Люди ездящие на машинах и понятия не имеют что такое опережение зажигания и стехиометрическая смесь.


Ну если проводить аналогию с машинами…))
То ардуинщики это блондинки за рулём, в то время как другие это специалисты автомеханники.
По сути и блондинка может разобраться, понять, надо только времени немного потратить на самообразование .)) но нафига ? НЕ ОХОТА !


Ну пишу потихоничку, не высокого уровня конечно… есть ещё чему учиться… век живи, век учись.)))
Когда я учился программированию никакого ардуино ещё не было тогда, и слава богу. )
Каждый раз читая про этот ардуино, и про новое созданное извращение на нём… я не понимаю… ПОЧЕМУ? для ЧЕГО? для чего его использовать ?
Я конечно могу понять, , начинающему интересно поморгать светодиодами, а тут уже скетч готовый, бери и моргай… надоесть изучай дальше тему… интересуйся… развивайся.
Но зачем так глубоко залазить по уши в эту … ардуино? Так глубоко что даже как программатор использовать её, есть же нормальные, доступные программаторы.
Зачем создавать какие то непонятные проекты на ардуине ? Можно взять любой контроллер, написать программу на СИ и будет она работать так как надо.
Люди сидящие на ардуино и представления не имеют, что такое контроллер, как он работает, что такое эффективные алгоритмы.
ардуино это путь в некуда ! чем глубже залезешь, тем меньше представления имеешь по теме этой.

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

Вы и другие пользователи врять ли поймёте про что я говорю. если повезёт, если слезете когда нибуть с ардуине и начнёте сами создавать, писать свои проекты, оглянётесь гез годик назад, когда под ардуиной сидели, и сразу всё поймёте. )))

Как программист по образованию и характеру — абсолютно согласен!


Ардуино … программатор…
мда эта ардуда отрабатывает своё хорошо… цель ардуиды превратить обратно человека в обезьяну!
уж ели стали как программатор использовать её … нуглухо.(

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

Микроконтроллеры становятся доступными всем, как когда то компьютер, в котором могли разобраться только программисты и ученые, стал доступен для всех, и нужно сказать — он стал намного лучше и удобнее.

К тому же на Али простая платка Ардуино часто стоит дешевле чем отдельно чипы, на которых она сделана. ;)


не буду лишний раз писать одно и тоже )))) всем не объяснишь…

Не надо быть супер мего программистом чтоб писать на СИ под контроллеры, щас инфы полно, я сам обучался, самостоятельно, Научился и под ПК писать и под Смартфоны и под контроллеры…
Надо просто иметь желание…


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

Микроконтроллеры становятся доступными всем, как когда то компьютер, в котором могли разобраться только программисты и ученые, стал доступен для всех, и нужно сказать — он стал намного лучше и удобнее.

К тому же на Али простая платка Ардуино часто стоит дешевле чем отдельно чипы, на которых она сделана. ;)

Нам понадобится


Начинаем с простого скетча

Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода. Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0. Скетч содержит следующий код:

Скетчи на ATtiny84

Делаем программатор и собираем схему


Теперь надо подключить пины 10-13 к ATtiny. Чтобы узнать распиновку последней, обратимся к даташиту, который можно скачать с сайта Atmel, производителя этих контроллеров. На второй странице расположена картинка, описывающая распиновку. Основываясь на даташите и комментарии из скетча, можем составить следующую таблицу подключения:

Arduino UNO ATtiny84
Reset 10 4
MOSI 11 7
MISO 12 8
SCK 13 9

Теперь подключим светодиод и переменный резистор. Резистор необходимо подключить в пину №6 (PA7), поскольку этот пин может быть входом для аналого-цифрового преобразователя, а светодиод — к любому другому, например, к 10 (PA3).

О нумерации пинов


На сайте Arduino можно найти карту пинов. Она выглядит следующим образом:

Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:

В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП. Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.

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

Учим среду разработки

Программируем ATtiny84

В качестве кода берем уже написанный нами код для светодиода и подстроечного резистора и изменяем там номера пинов.

Результат

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


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

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International

Читайте также: