Как использовать ардуино в качестве программатора: Универсальный мини программатор из Ардуино Uno своими руками, прошивка ArduinoISP

Содержание

Универсальный мини программатор из Ардуино Uno своими руками, прошивка ArduinoISP

Какое-то время у меня валялась Arduino Uno. И вот нашлось ей применение. Сделал удобный шилд для прошивки ходовых контроллеров в разных корпусах. Теперь данная отладочная плата активно используется. Шилд позволяет прошивать довольно много контроллеров от ATMEL, которые все еще популярны среди самодельщиков по многим параметрам. Итак, под катом изготовление шилда для прошивки микроконтроллеров Atmega8 (168/328), Attiny13(45/85), причем, как в DIP корпусах, так и в QFP и SOIC, используя адаптеры.

Ссылку я дал на похожую отладочную плату Arduini Uno, поскольку уже и не помню где брал свою. Моя платка с закосом под оргинал (конечно же это копия — поскольку брал в Китае):


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

Конденсатор C4 позволяет не перезагружаться самой Arduino Uno во время прошивки, без него такое бывает и прошить не удается. На схеме видно два разъема для подключения контроллеров в корпусах dip28 и dip8. Для dip28 предусмотрен кварц с конденсаторами С2 и С3. Также на плате предусмотрен стандартный разъем ICSP для подключения, например, своих плат и их прошивки. Как и при типовом использовании, вывод 10 Arduino соединен с RESET программируемых контроллеров. Выводы 11, 12,13, представляющие ICSP соединены с аналогичными на подключаемых микроконтроллерах. На подключаемые контроллеры подается питание и земля от Arduino Uno. К выводам Arduino 7,8,9 через токоограничительные резисторы в 1КОм подключены индикационные светодиоды. Наш шилд позволит прошивать популярные контроллеры: Atmega8 (168/328), Attiny13(45/85), причем, как в DIP корпусах, так и в QFP и SOIC, используя адаптеры.

Платка получилась такая:


Желающие могут скачать файл платы, в формате для Sprint Layout. Также можно скачать готовые для заказа в Китае (или на местном производстве) gerber-файлы.

На плате видны две версии отверстий для dip28 в узком и широком корпусе, это сделано для подключения адаптера QFP32 в DIP28, обзор которого я делал здесь. Кроме того, если припаять разъем для узкой версии контроллера, то в отверстия для широкой версии можно припаять линейки штырьков и сразу тестировать прошитый контроллер. Для dip8 я также предусмотрел, помимо адаптера, отверстия для штырьков. Также имеются две версии ICSP разъемов широкий (10 контактов) и узкий (6 контактов), ну и все остальные детали, присутствующие на схеме. Светодиоды, резисторы и конденсаторы (22пФ) я использовал SMD 1206. Светодиоды распределил так: Зеленый — READY, Красный — ERROR, Желтый — PROG. Также предусмотрел штырьки для дополнительного питания и земли, которые могут потребоваться при тестировании прошиваемого контроллера.

Платы я заказывал в dirtypcbs.com, скорее всего я бы изготовил их ЛУТ-ом, но данный сервис разрешает панелизацию, а у меня как раз нашлось подходящее место на плате в заказе, да и спешки особой не было. Заводская плата выглядит все-таки гораздо лучше. Вот так они выглядят:



Припаиваем детали, я изготовил 2 версии, для широкого dip28:


Здесь я не стал припаивать штырьки и разъемы, так как планирую эту плату использовать для прошивки контроллеров с помощью адаптеров в корпусах SOIC и QFP.
Для узкого dip28:


Как видно из фото, для подключения микросхем в dip корпусах я использовал цанговые разъемы, мне они нравятся больше.
Адаптер QFP32 в DIP28 для подключения в широкую версию шилда:

Встает отлично:

Весь бутерброд, включая Arduino Uno:


Для узкой версии со вставленным контроллером ATtiny85:

Для прошивки контроллеров в SOIC8 корпусе я использую также адаптер:

Для того чтобы наша конструкция стала программатором, следует без шилда загрузить в Arduino Uno прошивку ArduinoISP, идущую в комплекте с любой версией Arduino IDE:

С таким шилдом стало очень удобно и быстро прошивать и тестировать контроллеры в различных корпусах, не боясь нарушить соединения как здесь:

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

Основная причина получить Arduino заключается в том, что с его помощью можно делать разные вещи.Если вы считаете себя мастером-мастером, то будете чувствовать себя как дома.

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

Arduino можно использовать для следующих проектных идей:

  • Управление освещением Philips Hue
  • Сборка роботов (см. Видео выше)
  • Проекты домашней автоматизации (освещение, гаражные ворота, даже поливочные установки)
  • Управление видеоиграми
  • Музыкальные проекты (включая соединение органических элементов)
  • Системы сигнализации

Это лишь малая часть того, что вы можете сделать с Arduino.

Только начинаете с Arduino? Начните с одного из этих простых проектов Arduino для начинающих.

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

2.Arduino: отличное введение в программирование

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

Хорошая новость в том, что код Arduino прощает ошибки. Еще предстоит научиться, но это определенно проще, чем пытаться написать код для своего первого мобильного приложения или игры.

Программирование на Arduino возможно на любом языке, но лучше всего начать с Arduino IDE (интегрированная среда разработки).Вы найдете его версии для Windows, macOS, Linux и других платформ. IDE поддерживает C и C ++ и включает библиотеки для различных аппаратных компонентов, таких как светодиоды и переключатели. После завершения программы, известной как «эскиз», она загружается на плату Arduino через USB-кабель. Здесь его можно запустить и он останется в памяти до замены.

Конечно, программирование для Arduino несовершенно.Во-первых, снисходительный характер кода Arduino означает, что легко писать небрежный код и развивать вредные привычки. Вы легко можете не понять, что на самом деле означает этот код.

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

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

Если идея кодирования вас пугает, есть и другие Arduino-совместимые языки, которые вы можете изучить помимо официального.Например, Scratch 4 Arduino — это визуальная альтернатива, более понятная для новичков. Вы изучите концепции кодирования, не беспокоясь о синтаксисе.

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

3.Изучить электронику с Arduino

легко

Когда я впервые получил свой Arduino, у меня не было практических знаний в области электроники или схем.Я забыл все, чему научился в школе, и чувствовал себя не в своей тарелке, играя с крошечным микроконтроллером.

Но я быстро понял, что это не должно быть так сложно. Вам нужно изучить основы схем, если вы хотите понять, что делаете. Но где можно узнать об электронике для Arduino?

Мы рекомендуем начать с YouTube, где вы можете найти сотни видеороликов, связанных с Arduino.

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

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

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

4.Arduino — дешевое и полезное хобби

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

И наоборот, хороший стартовый комплект Arduino будет стоить менее 100 долларов.

Становится лучше. Если вы готовы покупать компоненты в Китае и ждать доставки несколько недель, вы можете получить их менее чем за 10 долларов.

Даже вашу плату Arduino можно купить дешево, если вы купите клон.Поскольку аппаратная часть Arduino имеет открытый исходный код, вы можете получить легальную «подделку» Arduino по цене менее 3 долларов за штуку.

По таким низким ценам вы можете реализовать столько проектов, сколько захотите, не беспокоясь о том, что вы обанкротитесь.

5.Присоединяйтесь к команде Arduino против Raspberry Pi

Поскольку Arduino и Raspberry Pi появились примерно в одно время, люди могут подумать, что это одно и то же.По правде говоря, хоть и есть кроссовер, но эти две платы разные.

Arduino — это плата микроконтроллера, а Raspberry Pi — одноплатный компьютер.Arduino должен быть запрограммирован с другого устройства, тогда как Raspberry Pi может запускать операционную систему. Вы можете запрограммировать Arduino с Raspberry Pi, но не наоборот.

Эти различия привели к некоторому разделению сообществ.Что лучше: Arduino или Raspberry Pi?

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

Как начать работу с Arduino

К настоящему времени вы должны понять, почему изучение Arduino — хорошая идея.От простого языка программирования и простой интеграции с другими компонентами до доступного хобби, более универсального, чем использование Raspberry Pi, преимущества обучения использованию Arduino очевидны.

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

Начало работы с Arduino: руководство для начинающих

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

Читать далее

Об авторе Кристиан Коули (Опубликовано 1456 статей)

Заместитель редактора по безопасности, Linux, DIY, программированию и техническим вопросам.Он также выпускает The Really Useful Podcast и имеет большой опыт в поддержке настольных компьютеров и программного обеспечения. Автор журнала Linux Format, Кристиан — мастер Raspberry Pi, любитель Lego и фанат ретро-игр.

Более От Кристиана Коули
Подпишитесь на нашу рассылку новостей

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Еще один шаг…!

Подтвердите свой адрес электронной почты в только что отправленном вам электронном письме.

Самодельное оборудование

Arduino Uno: программирование

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

В этом руководстве предполагается, что вы прочитали предыдущее руководство по компонентам Arduino Uno и макету Arduino.

В процессе мы подробно рассмотрим, как программировать микроконтроллер, записывать загрузчик и использовать Arduino в качестве интернет-провайдера.

Содержание руководства:

  1. Код загрузки
  2. Совершенно новые чипы
  3. Настройки предохранителя
  4. Записать загрузчик
  5. Arduino как ISP
  6. Программирование на макетной плате

Код загрузки

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

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

Итак, что именно происходит, когда вы нажимаете кнопку «Загрузить» в среде Arduino IDE?

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

Комбинация основных библиотек Arduino, любых используемых вами пользовательских библиотек и компилятора avrdude создаст файл с расширением .hex . Другим микроконтроллерам может потребоваться .bin , который является другим форматом для двоичных данных.

Вы можете экспортировать HEX-файл из Arduino IDE (не загружая его), перейдя в Sketch -> Export compiled Binary

Откройте файл в редакторе кода, и вы увидите двоичный двоичный объект.

Большая часть HEX-файла состоит из двух вещей:

  1. адресов регистров, которые указывают на место в его памяти
  2. Данные
  3. (ваш скомпилированный код), которые вы хотите сохранить по этому адресу

Память микроконтроллера — это гигантский массив значений 2×2. Если наш код слишком велик, мы заполним память микроконтроллера.Если наш код пуст, мы заполним память нулевыми значениями.

Важно отметить, что если вы скомпилируете свой эскиз для платы с другим микроконтроллером (например, Arduino Leonardo), двоичный файл HEX будет совершенно другим.

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

Файл HEX отправляется через USB-соединение к адаптеру uart-to-usb Arduino Uno ( ATmega8u2 ).

Поскольку ATmega8u2 — это отдельное устройство, которое находится между нашим компьютером и целевым микроконтроллером ( ATmega328p ), мы можем назвать ATmega8u2 внутрисистемным программатором (ISP). Это просто означает, что это устройство, единственная цель которого — программировать наш микроконтроллер.

Интернет-провайдер ( ATmega8u2 в нашем случае) затем преобразует эти данные USB в UART и отправляет их целевому устройству ATmega328p для сохранения в памяти.

Примечание : Вы когда-нибудь замечали, что Arduino Uno перезагружается каждый раз, когда вы открываете для него последовательный порт? Важно знать, что адаптер uart-to-usb (ISP) на Arduino Uno будет автоматически сбрасывать ATmega328p каждый раз, когда открывается новый последовательный порт.

Примечание : Также важно знать, что ATmega328p может читать новый код только сразу после его сброса. Именно поэтому разработчики Arduino Uno решили сделать так, чтобы адаптер uart-to-usb (ISP) автоматически сбрасывал чип при открытии последовательного порта.

Ура! Вот так Arduino IDE получает набросок Arduino Uno!

Совершенно новые чипы

При изготовлении плат своими руками мы используем микроконтроллеры, которые покупаем в Интернете.Однако, если вы попытаетесь нажать кнопку «Загрузить» в среде Arduino IDE с новым ATmega328p , вы получите кучу ошибок, и это не сработает.

Когда вы получаете новый микроконтроллер, который вы заказали онлайн, его память полностью пуста, и он все еще находится с заводскими настройками по умолчанию.

Однако на микросхеме есть небольшой фрагмент кода.Его невозможно стереть, и это первое, что делает чип после перезагрузки (или включения).

Этот небольшой фрагмент кода называется загрузчиком производителя и выполняет только одно действие:

  1. Считать новый код (файлы HEX)
  2. Сохранить этот новый код в памяти

После сброса (или включения) загрузчик производителя будет ждать, чтобы увидеть, есть ли новый код.Через очень короткий промежуток времени, если нового кода нет, он выйдет и перейдет к выполнению любого кода, сохраненного в памяти.

Atmel, разработчики ATmega328p , решили, что по умолчанию ATmega328p считывает код с контактов SPI. Выводы SPI на Arduino Uno — это выводы D13 ( SCK ), D12 ( MISO ) и D11 ( MOSI ), и именно здесь загрузчик производителя считывает новый код.

Давайте попробуем использовать выводы SPI для программирования этого нового микроконтроллера, как того требует производитель.

Как только мы поместим наш код в микроконтроллер, он будет сохранен в этом пустом пространстве памяти и будет запущен сразу после загрузчика производителя после сброса (или включения).

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

Устройство, которое нам нужно, — еще один пример внутрисистемного программиста (ISP), и я буду использовать AVR mkII. MKII был разработан для работы со стандартом распиновки ICSP.

Чтобы программировать с помощью устройства ISP, подключитесь к разъемам ICSP 2×3 Arduino Uno в нижней части платы, как на картинке выше.

Обратите внимание на схематический символ контактов заголовка ICSP 2×3.

Выводы заголовка ICSP 2×3 включают выводы SPI SCK (вывод D13 ), MISO (вывод D12 ) и MOSI (вывод D11 ), а также 5V , GND , и RESET контактов.

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

В Arduino IDE я собираюсь сообщить программе, что я использую mkII, выбрав Tools -> Programmer -> AVRISP mkII .

Наконец, нажмите Sketch -> Upload Using Programmer , чтобы использовать устройство ISP для загрузки через SPI.

Загрузите пример скетча Blink, и встроенный светодиод начнет мигать.

Однако я вижу проблему. В эскизе мигания используется задержка в 1 секунду. Однако мой Arduino мигает с задержкой в ​​2 секунды.

Почему это происходит?

Настройки предохранителя

Проблема в том, что чип использует секретный, более медленный генератор, что делает задержку (1000) медленнее, чем ожидалось.

В чем секрет осциллятора? На печатной плате уже есть осциллятор с частотой 16 МГц, подключенный к микросхеме, но он также есть внутри самого чипа.

По умолчанию все новые чипы ATmega328p будут использовать внутренний (внутри чипа) генератор 8 МГц для запуска кода. Мой новый чип использует эти внутренние часы по умолчанию.

Однако разработчики Arduino Uno поместили на печатную плату внешний (вне чипа) генератор на 16 МГц.Это связано с тем, что внешние генераторы имеют тенденцию быть более точными, а более высокая скорость всегда хорошо.

Когда среда Arduino IDE компилировала код для платы «Arduino Uno», она предполагала, что задержка (1000) будет использовать часы 16 МГц для отсчета времени. Но вместо этого частота 8 МГц в два раза медленнее, поэтому мы видим 2-секундные мигания.

Как это исправить?

ATmega328p имеет некоторые специальные аппаратные настройки, называемые настройками предохранителя .После того, как настройки предохранителя записаны в микросхему, они остаются в том же значении после перезапуска.

Одна из настроек предохранителя ATmega328p — это частота и источник сигнала clock, . Так микросхема узнает, какую скорость и тип генератора он должен использовать.

Чтобы изменить настройки предохранителя (например, тактовую частоту) на соответствующие значения Arduino Uno (внешние часы 16 МГц), новому ATmega328p необходимо предоставить файл HEX с новыми настройками внутри.

Но как отправить файл HEX, содержащий правильные настройки предохранителя?

Мы делаем это, когда «сжигаем» загрузчик Arduino (см. Следующий раздел) …

Примечание : Плата «Arduino Uno» не имеет параметров для настройки параметров предохранителя в среде Arduino IDE. Если вы хотите иметь больший контроль над настройками предохранителей на ATmega328p , я рекомендую использовать это ядро ​​Arduino.

Записать загрузчик

Настройки предохранителя записываются во время процесса «Записать загрузчик».

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

Если этот пользовательский загрузчик будет сохранен в памяти, а затем запущен, он будет считывать код через контакты UART (Tx / Rx) и сохранять его в памяти.

Это хорошо для нас, потому что тогда мы можем загружать код через USB-разъем платы Arduino Uno (благодаря встроенному адаптеру USB-UART).

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

При питании Arduino Uno от USB, AVR mkII должен быть подключен к разъему ICSP на Arduno Uno.

Затем следуйте инструкциям на рисунке выше, чтобы «записать» загрузчик для Arduino Uno.

Как только загрузчик будет загружен через SPI, встроенный ATmega328p сможет читать новые скетчи через UART (и, следовательно, через встроенный USB-разъем).

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

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

Примечание : слова «записать», «загрузить», «записать», «сохранить», «прошить» означают одно и то же.Они описывают процесс сохранения прошивки на микроконтроллер или другое подобное устройство.

Arduino как ISP

Если вы прочитаете все это, то, возможно, подумаете, «Так мне нужно покупать одну из этих штуковин для программирования SPI mkII?»

Если у вас несколько Arduino Uno, ответ — «Нет».Вы можете использовать один Arduino Uno для прошивки загрузчика на другой Arduino Uno (круто!).

Во-первых, вам нужно подключить два Arduino Unos, как показано на рисунке ниже. Обратите внимание, что мы подключаем выводы SPI каждого из них.

Примечание : новый чип ATmega328p должен быть на целевой плате . Вот что получит новый загрузчик.

Примечание : на плате программатора уже должна быть установлена ​​ ATmega328p , которая была загружена и может вести себя как обычный Arduino Uno.

На картинке выше один Arduino Uno помечен как «программист», а другой — «цель». Программист — это то, что заменит mkII, который я использовал раньше, а целью является Arduino, который будет получать загрузчик.

Обратите внимание, что программатор Arduino имеет вывод D10 , подключенный к выводу RESET цели . Это сделано для того, чтобы плата программатора могла запустить загрузчик (SPI) производителя целевой платы для запуска.

А теперь запись загрузчика второй Arduino можно выполнить за 4 шага:

  1. Загрузите пример скетча «ArduinoISP» на плату программатора
  2. Добавьте конденсатор 10 мкФ между контактами RESET платы программатора и контактами GND
  3. платы программатора
  4. Установите «Программист» в Arduino IDE как «Arduino as ISP»
  5. Нажмите «Записать загрузчик» в меню «Инструменты».

Ниже приведены изображения, на которых показаны некоторые детали каждого шага.

Шаг 1

Первый шаг — сделать так, чтобы программатор Arduino Uno стал внутрисистемным программистом (ISP). Это можно сделать, просто поместив на него код, который ведет себя как обычный интернет-провайдер.

Как и на картинке выше, вы найдете пример скетча ArduinoISP, спрятанный в папке с примерами.

Загрузите этот пример скетча в программатор , как обычно, и убедитесь, что в качестве цели выбрано «Arduino Uno».

Шаг 2

После загрузки примера скетча ArduinoISP добавьте конденсатор 10 мкФ между контактами RESET и GND на программаторе .

Этот конденсатор предотвращает сброс программатора .

Примечание : Если вы используете поляризованный конденсатор (как я на картинке), убедитесь, что отрицательная сторона подключена к контакту GND !!!

Примечание : Вы можете обнаружить, что на самом деле вам не нужен этот конденсатор для его работы.Это зависит от того, какую версию IDE вы используете и какую операционную систему вы установили.

Шаг 3

Теперь мне нужно сообщить IDE Arduino, что программист, который я использую, представляет собой пример скетча «Arduino as ISP».

Есть много программистов (ISP), которых вы можете выбрать из меню Tools -> Programmer .Вы найдете там Arduino как ISP .

Примечание : не путайте его с «ArduinoISP», это совершенно другое слово. Я знаю, это сбивает с толку, но вы хотите выбрать Arduino в качестве ISP .

Шаг 4

Наконец, я могу перейти к Tools -> Burn Bootloader .

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

Вот и все! Теперь цель Arduino (с новым чипом) имеет правильный загрузчик, правильные настройки предохранителя и может получать код через UART (как и обычный Arduino Uno).

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

Программирование на макетной плате

Что, если я хочу запрограммировать макетный ATmega328p из предыдущего руководства?

Я могу использовать метод «Arduino как ISP», как и раньше.Тем не менее, целевая плата больше не будет другой печатной платой Arduino Uno, а вместо этого будет моей макетной платой ATmega328p .

Нам нужно подключить выводы SPI SCK (вывод D13 ), MISO (вывод D12 ) и MOSI (вывод D11 ), а также 5V , GND и СБРОС контактов, как на изображениях выше.

Однако это немного сложнее, потому что мы используем необработанный пакет.

Чтобы узнать, какие контакты какие, используйте изображение распиновки микроконтроллера ниже.

Провода питания и заземления просты. Я могу просто подключить их к шинам питания и заземления на макетной плате.

Три контакта SPI находятся в нижнем левом углу пакета, на физических контактах 19 , 18 и 17 . Я могу подключить их к моему программатору , контакты платы D13 , D12 и D11 .

RESET на корпусе находится на физическом выводе 1 , в верхнем левом углу корпуса.Я могу подключить это к контакту платы программатора D10 .

См. Схему подключения на картинке ниже.

С помощью этой проводки я могу записать загрузчик на микроконтроллер target на моей макетной плате (потрясающе!). Это одновременно установит настройки предохранителя (чтобы он использовал внешний осциллятор) и сохранит загрузчик UART в своей памяти.

Отлично, мой макетный микроконтроллер загружен!

Теперь у меня есть два варианта. Я могу продолжать загружать свой код через SPI, используя мою плату программатора . Или я могу использовать загрузчик Arduino, который теперь сохранен на чипе, для загрузки через UART (с помощью адаптера UART-USB какого-либо типа).

Если я хочу загрузить через UART, мне нужно сделать еще кое-что.

Во-первых, я собираюсь отсоединить все провода, соединяющие макетную плату с моей платой программатора .

Затем мне нужно найти контакты UART (Tx / Rx) на корпусе микроконтроллера. Глядя на изображение распиновки сверху, я вижу, что они находятся на физических контактах 2 (Rx) и 3 (Tx), чуть ниже контакта RESET .

Я собираюсь вставить туда две перемычки: зеленый для Rx и желтый провод для Tx.

Эти провода нужно будет подключить к адаптеру UART-USB. Они бывают разных форм и типов, но чаще всего идут с 6 выводами заголовка подряд.

Я подключу свой зеленый провод (Rx) к контакту Tx адаптера, а затем подключу желтый провод (Tx) к контакту Rx адаптера.

Затем мне, конечно, нужно будет подключить штырь GND адаптера к шине заземления моей макетной платы.

Наконец, нам нужно сделать еще одно последнее подключение, и оно включает в себя вывод RESET .

Помните, что адаптер UART-USB должен иметь возможность перезапустить ATmega328p , чтобы он мог запустить загрузчик Arduino.Это похоже на нажатие кнопки сброса на микроконтроллере, а затем быстрое отпускание, чтобы он перезапустился.

У этих адаптеров UART-USB есть контакт под названием RTS , который мы можем использовать для переключения контакта сброса. Однако есть проблема.

Штырь RTS на адаптере не «быстро» освобождает штифт сброса, а вместо этого некоторое время удерживает штифт сброса в нажатом состоянии.Если бы мы подключили его напрямую к выводу сброса, микроконтроллер будет находиться в состоянии сброса, и загрузчик никогда не запустится.

Есть простое решение: добавьте небольшой конденсатор между RTS на адаптере и выводом RESET на макетном микроконтроллере.

Примечание : интересно знать, что Arduino Uno уже имеет этот конденсатор на печатной плате.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *