Arduino ISP программатор для ATmega328, Минимальная Arduino

image

Всем привет!

А теперь по теме: я заметил, что некоторые участники направляют свои минусометы на пост «вопросов и ответов» по неизвестным мне причинам.. Но я догадываюсь, что скорее всего это происходит потому, что пост не несет им какой-либо полезной нагрузки и я их, конечно же, понимаю, но от помощи, пока есть люди, которым она нужна, мы отказаться тоже не можем, поэтому, по возможности, вместе с картинкой из рубрики я буду иногда добавлять под нее что нибудь полезное. Итак, попробуем..

Зачастую бывает ситуация когда вам нужно поставить в плату Arduino новый микроконтроллер ATmega328P, купленный, например, в Китае или радиомагазине. Но просто вставить чистый мк в плату нельзя, точнее можно, но пользы от него будет как с козла молока — загрузить какой-нибудь код через Arduino IDE как ни пытайся, не получится. А дело тут в том, что помимо самого мк, для Arduino нужно что бы в этом мк уже был зашит специальный код — так называемая программа-загрузчик (bootloader), более подробно о которой можно почитать, например, здесь: http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-boo…

И тут встает вопрос прошивки чистого мк этой самой программкой, для последующего использования его в связке с Arduino..

К счастью, сделать это очень просто — вам понадобится сама плата Arduino, заметьте, с уже вставленным в неё «хорошим» оригинальным мк (на картинке отсутствует), кварцевый резонатор на 16МГц, макетная плата, чистый мк и 6-8 проводков.

По сути, плата Arduino будет выполнять роль обычного ISP-программатора.

Далее по пунктам:

1. Выбираем В«Файл>>Примеры>>Arduino ISPВ»

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

image

7. В меню сервис выбираем В«Записать загрузчикВ».

Arduino начнет мигать лампочками и через некоторое время порадует нас сообщением об успешной загрузке bootloader-а в наш чистый мк. Все готово, теперь можно вынуть оригинальный мк из платы и вставить туда наш «свежеиспеченный» микроконтроллер, ну а оригинальный можно использовать, например, уже в конкретном проекте, где громоздкая отладочная плата Arduino больше не понадобится. Только перед этим, конечно, нужно не забыть обвязать этот мк необходимыми компонентами, схем подключения которых в сети большое количество.

На этом все, надеюсь кому-то эта информация будет полезной, всем добра и удачных компиляций! 🙂

Материал для поста был взят с сайта http://bigbarrel.ru/

Вот и постигла меня печальная участь. Спалил свой транзистор-тестер, он же ESR метр. Палится очень просто — не разряженным конденсатором, т.к. входы тестера напрямую приходят в микроконтроллер. Выглядит мой экземпляр вот так: На плате обозначение: WEI_M8_NLG_TST_V1.10 Штука это незаменимая в работе. Последнее время я совсем обленился и стал ей всецело доверять проверку элементов при разного рода ремонтах. Например: надо проверить полевичок, подцепляем, если тестер показывает картинку — значит целый. Померить ESR конденсатора — запросто. А тут такая беда — сгорел. Надо чинить. Тестер построен на микроконтроллере ATMega328p, точно на таком же как Arduino nano/mini. Ну вы поняли мысль? 🙂 У меня как раз завалялась одна китайская Arduino pro-mini, которая быстренько этого контроллера лишилась. Осталась одна платка: Запаиваем в наш тестер, предварительно сняв экран: Остаётся всего-то залить прошивку и можно пользоваться. И вот тут я подзастрял надолго. И так, структурирую свой тернистый путь долгих поисков и освоения магии прошивки этого чуда прибора. Суть сводится к следующим действиям: 1. Скомпилировать прошивку, с нужными опциями под свою версию платы тестера. 2. Прошить ATMega328p 3. Profit! Из статьи товарища 2. Распаковать скачанный дистрибутив «transistortester-trunk.tar.gz» в каталог, например С:Trunk (кирилицу в обозначении имени каталога не использовать). 3. Из каталога C:Trunkdefault удалить всё,кроме каталога «dep«. 4. Скопировать в каталог C:Trunkdefault соответствующий процессору файл «makefile«. Вот тут нужна ремарочка. В моей плате, которая WEI_M8_NLG_TST_V1.10, используется дисплей st7565, в дистрибутиве прошивок есть каталог mega328_wei_st7565 — это как раз наш вариант. Файлик «makefile» можно взять прямо оттуда. Ну или из каталога mega328, но тогда придётся проверять и править больше опций. Дисплейчик st7565 (разрешением 128×64): Дальше нужно пробежаться по большому списку опций, проверить, что всё выставлено верно. Перечень опций можно найти в инструкции Версия 1.12k в разделе Конфигурирование Тестера (стр. 50). В файле «makefile«, который мы взяли в каталоге mega328_wei_st7565 я поменял только 3 опции: Захотелось что-то меню на русском, а остальное стояло, на мой взгляд верно 🙂 В принципе можно поиграть со шрифтами, например вместо CFLAGS += -DFONT_8X12thin поставить помельче CFLAGS += -DFONT_8X16thin но меня вполне устраивает и первый вариант. 5. Запустить редактор WinAVR (C:WinAVR-20100110pnpn.exe) 6. Открыть Makefile. 7. Скомпилировать Makefile, для этого выполнить команды меню: Tools-Make All. 8. Если компиляция завершилась удачно — получаем код выхода равный 0 (Process Exit Code:0). Скомпилированные файлы прошивки «TransistorTester.eep» и «TransistorTester.hex» будут находиться в том же каталоге C:Trunkdefault. Для корректной компиляции в среде Win10 необходимо заменить одну библиотеку по адресу: %каталог с установленным WinAVR%utilsbinmsys-1.0.dll Библиотека прилагается в архиве в конце этой статьи. Скомпилировали, получили два файлика: «TransistorTester.eep» и «TransistorTester.hex«. Теперь нужно как-то прошить нашу ATMega328p. У кого под рукой есть программаторы типа: TL866, USBasp или даже китай типа: дальше будет не интересно. Но у меня ничего подобного не водится, зато водится FTDI FT232RL, который прекрасно справится с ролью прошивки нашего контроллера:

И тут опять мне помогла статья про программатор из FT232R  А разгадка такая: Распиновочка из таблички 2.1 официальной PDF-ки FTDI: Тут я уже отметил пины, которые использовал, красным цветом. Оказывается, в FT232RL можно переназначать выводы произвольным образом, что как раз и указывается в конфиге avrdude.conf. В моей платке имеются выводы CTS, TX, RX и DTR (их отметил красным в столбце Pin Number, который соответствует реальной-физический распиновке FT232RL). Вот на них и будем назначать выводы для программирования нашего контроллера (я назначил выводы, как в столбце Signal, но их можно перетасовать как угодно).
Исходя из таблички, мой конфиг будет выглядеть следующим образом: Так, с FT232RL разобрались, теперь надо понять, куда подключаться на нашей плате. Ну тут уже проще. Впаял разъёмчик на 6 пинов начиная с самого правого: Подключаем к этим пинам наш адаптер FT232RL и запускаем AVRDUDE. Кстати, рекомендую использовать GUI AVRDUDESS, лично мне так гораздо нагляднее и удобнее работать: Тут я уже выставил все необходимые настроечки и фьюзы — fuses. Пару слов о fuses. Есть хорошая статья про них на сайте easyelectronics.ru (сайт всячески рекомендую к просмотру, там много чего интересного имеется). Рекомендую также пользоваться калькулятором фьюзов для AVR. Конкретно для моей платы WEI_M8_NLG_TST_V1.10 фьюзы расчитаны так: Extended Fuse установлены как 0xFF не просто так. Обычно там ставится 0xFC, но на стр. 27 инструкции Версия 1.12k есть информация о том, что может происходить сброс процессора из-за короткого провала напряжения «Brown Out», и, чтобы убрать обнаружение этих провалов, нужно сделать небольшую доработку платы или поставить Extended Fuse на 0xFF Всё, фьюзы поставили, можно прошивать. После прошивки, тестер попросит сделать калибровочку, после чего можно пользоваться: Архив с готовыми прошивками и софтом — тут.
Главная Программирование AVR AVR УРОК 38. Atmega 328p Pro Mini

&nbsp

&nbsp

&nbsp

    Урок 38

Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера  Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь за 2,7 $. В видеоверсии данного урока я описании дам ссылку на распаковку и первоначальное тестирование данной платы, а также и на продавца, у которого я её приобретал.

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

Мы же пойдём другим путём и применим данную плату уже как полноценную отладочную плату для создания приложений под управлением привычной для нас среды программирования Atmel Studio. Соттветственно, в качестве программатора мы также возьмём привычный нам народный программатор, который мы применяем во всех наших занятиях и подключим его к шине SPI.

Я думаю, будет лишним перечисление всех достоинств контроллера Atmega328p по сравнению с контроллером Atmega 8A. Здесь и оперативной памяти больше и памяти под прошивку больше, и также здесь две шины USART по сравнению с одной в восьмой серии.

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

Теперь подключим программатор Для подключения программатора я спаял вот такой переходничок

Распиновка нашей платы совпадает со стандартом Arduino UNO R3. Приводить я её здесь не буду во избежание нарушения прав. Найти данную распиновку не представляет никаких трудностей. Согласно распиновки разъём к плате подключаем следующим образом:

Получится вот так

Подключим к разъёму программатор и проверим обнаружение платы. Для этого запустим программу avrdude, выберем там контроллер ATmega328P и нажмем кнопку «чтение». Программатор и контроллер должны будут обнаружиться и должны будут считаться калибровочные ячейки

Также считаем фьюзы, чтобы потом установить подобные в протеусе для корректной работы эмуляции, ну и также для того, какие именно фьюзы надо и куда устанавливать, а то ведь фьюзы – это дело такое… Для этого переходим на закладку «Fuses» и жмем там кнопку «Чтение». После этого фьюзы расставятся так, как они уже выставлены в контроллере

Теперь также подключим для тестирования 10 светодиодов. У меня, как вы знаете из моих уроков, есть 10-диодная матрица. Не забываем про токоограничивающие резисторы. Так как я данную матрицу использую ещё в тестах на контроллерах stm32, в которых граничный ток портов ниже, то резисторы там установлены на 680 ом. Менять я их не стал, светодиоды работают и с ними, возможно только светятся не так ярко, но это не страшно. Вот такая вот плата с матрицей

К отладочной плате светодиоды мы подключим следующим образом (нажмите на картинку для увеличения изображения)

Согласно стандарту Arduino соединения получатся следующие

Светодиоды – отладочная плата

GND – GMD

D1 – 2

D2 – 3

D3 – 4

D4 – 5

D5 – 6

D6 – 7

D7 – A0

D8 – A1

D9 – A2

D10 – A3

Теперь создадим проект в Atmel Studio 7 стандартным образом, выбрав в качестве контроллера Atmega 328P, Назовём проект LIGHTS.

Добавим в файл main.c объявление частоты процессора и библиотеки для задержки

#define

F_CPU 16000000L

#include

#include

В функции main() настроим порты

int

main

(

void

)

{

  DDRD

|= 0b11111100;

  PORTD

&= ~(0b11111100);

  DDRC

|= 0b00001111;

  PORTC

&= ~(0b00001111);

  while

(1)

Также добавим код в бесконечный цикл

while

(1)

{

  PORTD

|=

0b00000100;

  _delay_ms

(100);

  PORTD

&=

~(0b00000100);

  PORTD

  _delay_ms

(100);

  PORTD

  PORTD

  _delay_ms

(100);

  PORTD

  PORTD

  _delay_ms

(100);

  PORTD

  PORTD

  _delay_ms

(100);

  PORTD

  PORTD

  _delay_ms

(100);

  PORTD

  PORTC

  _delay_ms

(100);

  PORTC

&=

~(0b00000001);

  PORTC

  _delay_ms

(100);

  PORTC

  PORTC

  _delay_ms

(100);

  PORTC

  PORTC

  _delay_ms

(100);

  PORTC

}

Соберём код, перейдём сначала в протеус. Схему я уже показывал, файл протеуса будет в архиве вместе с проектом для студии. Добавим прошивку в настройики проекта в протеусе и настроим там микроконтроллер следующим образом:

Запустим проект. Огни в матрице должны побежать.

Теперь вернёмся в проект, так как программировать микроконтроллер мы будем опять напрямую из Atmel Studio.

Только для 328-го контроллера мы добавим другую строку в сервис. Зайдём таким же образом, как и на прошлом занятии, в меню в пункт «Сервис -> Новые инструменты». добавим там ещё один пункт, назовем его Atmega 328p, только строчку с параметрами добавим следующую

«-p m328p -c usbasp -P usb -U flash:w:$(ProjectDir)Debug$(TargetName).hex:a»

Добавляем, конечно, без кавычек. Теперь Нажимаем на наш новый пункт Сервис -> Atmega 328p и таким образом контроллер наш должен прошиться, а светодиоды по очереди будут светиться, создавая эффект бегущего огня.

Исходный код

Приобрести плату Atmega 328p Pro Mini можно здесь.

Программатор (продавец надёжный) USBASP USBISP 2.0

Смотреть ВИДЕОУРОК (нажмите на картинку)

Это набор компонентов (см. спецификацию) Номенклатурный номер: 9000328146 Артикул: Arduino ISP программатор для ATmega328 Производитель: DIY

Спецификация набора

Описание

Arduino это просто, быстро, а самое главное удобно для реализации идей. Но когда всё отлажено и схема, и код настает момент, когда избыточность плат просто не нужна. Идею то можно реализовать значительно дешевле и компактнее. Без горы проводов. Для того чтобы избавиться от ненужных примочек в готовом устройстве предлагаем прошить ваш код непосредственно в микроконтроллер. Ниже описан пример, где в качестве программатора используется Arduino Nano, а прошивать будем микроконтроллер ATmega328.

В зависимости от того какая версия Arduino IDE у вас установлена скачайте один из архивов breadboard-1-6-x.zip, Breadboard1-5-x.zip or Breadboard1-0-x.zip. В папке со скетчами создайте папку «hardware». Размещение папки со скетчами можно узнать, выбрав «Файл – Настройки».

Распакуйте скаченный файл в папку «hardware». Должно получиться примерно так: «C:Usersимя пользователяDocumentsArduinohardwarebreadboard».

Перезапустите Arduino IDE.

Если сделали все правильно, в списке плат появиться строка «ATmega328 on a breadboard (8 MHz internal clock)».

Чтобы запрограммировать микроконтроллер, нужен программатор. Программатор можно сделать из Ардуино Нано. Для этого в нее нужно загрузить скетч ArduinoISP из имеющихся примеров.

Подключите Arduino Nano к ПК. В Arduino IDE выберите плату Arduino Nano, процессор ATmega328, нужный COM-порт.

Выберите «Скетч – Загрузка». Начнется загрузка программы.

Дождитесь окончания загрузки. Программатор готов.

Подключите программируемый микроконтроллер к Ардуино, как показано на рисунке.

Теперь в Arduino IDE выберите программируемый микроконтроллер.

COM-порт остается без изменений.

Например, так:

Выберите используемый программатор, в нашем случае «Arduino as ISP».

Сначала нужно записать загрузчик.

Теперь в микроконтроллер можно загружать «рабочую» программу. Откройте скетч, который хотите загрузить, и выберите «Скетч – Загрузить через программатор». Начнется загрузка. Дождитесь окончания загрузки программы.

Техническая документация

breadboard zip, 3 КБ breadboard zip, 5 КБ Мы рекомендуем Arduino совместимые контроллеры Печатные платы Источники питания Усилители НЧ Class D Световые эффекты    Ранее я писал, что большую и дорогую Arduino Uno можно заменить на малюсенький и дешёвый микрочип Atmega328 или даже Atmega8

      Я покажу как прямо из среды программирования Arduino прошить микроконтроллеры Atmega328 и Atmega8. Первый у меня имеется в DIP корпусе, а второй в TQFP.     Для программирования я использую программатор USBasp. Купил его на ebay.com, стоит он в пределах 150р. image   Первая проблема с которой столкнутся пользователи Windows8 и Windows10 — установка драйвера для USBasp. image      Проблема в том, что эти операционные системы просят, что бы у драйвера была какая-то цифровая подпись, а у драйверов для USBasp на сегодняшний день её нет. Проблема решается отключением проверки этих цифровых подписей. Для этого перезагружаем компьютер с нажатой клавишей Shift. Появляется экран, на котором выбираем «Диагностика» image Далее — «Дополнительные параметры» image Далее — «Параметры загрузки» image Далее — «Перезагрузить» image На следующем экране появляется список действий, которые мы можем сделать. Выбираем на нём «Не проверять цифровые подписи драйверов», жмём цифру 7 image После этого драйвер для USBasp устанавливается без проблем. image    Подключим наш программатор к микрочипу. Для удобства я купил макетную плату и соединительные проводки. Соединяем микрочип с программатором согласно схеме У Atmega8 в TQFP корпусе выводы располагаются следующим образом К 9 и 10 выводу микроконтроллера присоединяем кварцевый резонатор.    Здесь стоит пояснить значение этого резонатора.Скорее всего в купленном вами микроконтроллере выставлены настройки (fuses) на работу от внешнего тактового генератора, т.е. от кварца. Поэтому, что бы его прошить, нужно что бы он был подключён к этому самому кварцу. Для перепрошивки кварц можно взять любой попавшийся вам под руку. Я когда впервые перепрошивал просто выпаял его из какого-то сломанного устройства, вот он маленький на фото.      Его хватило что бы микроконтроллер перепрошился. Если же ваш микроконтроллер изначально настроен на работу от внутреннего тактового генератора, то для прошивки кварц вам не нужен, можно обойтись и без него.      Для того, что бы можно было прошивать микрочип прямо из среды разработки Arduino, нужно залить на чип ардуиновский загрузчик. Для этого воспользуемся программой avrdude и онлайн конструктором загрузчиков для ардуино. На странице онлайн конструктора загрузчиков переходим в самый низ и видим конструктор 1. Выбираем «Внутренний генератор» если не хотим использовать кварцевый резонатор, либо выбираем «Внешний генератор» если хотим увеличить скорость работы чипа. 2. Выбираем модель микроконтроллера (в нашем случаем Atmega328) 3. Нажимаем «Создать HEX» Появляется такое окно:    Первое что мы делаем — скачиваем наш загрузчик в виде hex файла. Если конструктор по какой-то причине не работает, можно скачать загрузчик для atmega328 для внутреннего генератора здесь.        Ниже мы видим блок файла boards.txt для Arduino IDE. Я долго пытался подключить этот блок, что бы в среде ардуино появился выбор платы, но мне это почему-то не удалось, в итоге обошёлся без этого.      Ещё ниже мы видим подсказку как залить загрузчик через программу avrdude и программатор USBasp. Я делаю следующим образом: -Подключаю программатор к компьютеру через USB. -Копирую HEX файл в папку avrdude -Создаю bat файл в папке avrdude и копирую в bat эту строку avrdude -c usbasp -p atmega328p -U flash:w:a328p_8MHz_e2_de_5.hex -U lfuse:w:0xe2:m -U hfuse:w:0xde:m -U efuse:w:0x5:m @echo This batch file @pause -Запускаю bat файл. Если лень создавать bat файл, можете скачать его здесь. Если всё сделано правильно, вы увидите что-то подобное    Это значит, что всё прошло хорошо и на наш микроконтроллер залился загрузчик ардуино. Теперь мы сможем прошивать его прямо из среды программирования Arduino.    Если вы где-то накосячили и что-то сделали не правильно, можете увидеть такое сообщение:     Тут могут быть разные причины: -Возможно вы не правильно соединили программатор с микрочипом. Проверьте соединения. -Возможно вы не подключили кварцевый резонатор, а ваш микроконтроллер настроен на работу от него. Тогда подключите любой кварцевый резонатор, хоть из китайских наручных часов выпаяйте. -И третий вариант о котором я не сказал, но с которым тоже столкнулся, когда прошивал Atmega8. На каком-то форуме мне подсказали, что микрочип работает на пониженной частоте и чтобы прошить его, нужно на программаторе замкнуть перемычку JP3. Что собственно мне и помогло.    Если проблем у вас не возникло и загрузчик Arduino успешно записался на чип, то переходим к прошивке чипа через среду программирования Arduino.     Во-первых, если вы в онлайн конструкторе загрузчика выбирали  «Внутренний генератор», то кварцевый резонатор можно убрать из схемы.    Откроем среду разработки Arduino и запустим классический пример моргания светодиодом:      Видим, что в примере указан цифровой выход 13. На микрочипе он соответствует ножке 19     Т.к. этот вывод у нас сейчас подключен к программатору под вывод SCK, то изменим в программе 13 вывод на 5. И подключим к нему светодиод. Выбираем в Инструментах плату, чип и программатор Нажимаем Скетч — загрузить через программатор.     Программа скомпилируется и загрузится на наш микроконтроллер. Светодиод замигает.     С какой задержкой будет мигать светодиод если в программе указано 1 секунда? Зависит от того использовали ли вы внутренний тактовый генератор или внешний. Если внутренний, а частота его 8MHz, то программа будет работать в 2 раза медленней, т.к. в Arduino UNO стоит кварц на 16MHz.      Если вы использовали внешний кварц, то задержка моргания светодиодом будет зависить от частоты вашего кварца. При частоте 16MHz светодиод будет моргать через 1 секунду как и полагается по программе.     Убедимся, что микроконтроллер прошит и работает самостоятельно. Отключим его от программатора и подключим к нему питание 5 вольт. Увидим, что светодиод моргает, программа, залитая в чип, работает!

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий