Arduino Leonardo — платформа для разработки на базе микроконтроллера ATmega32U4. На плате предусмотрены: 20 цифровых входов/выходов (7 из них могут работать в качестве ШИМ-выходов, 12 — в качестве аналоговых входов), кварцевый резонатор на 16 МГц, разъём микро-USB, разъём питания, разъём для внутрисхемного программирования ICSP (In-Circuit Serial Programming) и кнопка сброса.
Отличие Arduino Leonardo от других плат в том, что его USB-контроллер встроен непосредственно в микроконтроллер ATmega32U4, исключая необходимость в дополнительном процессоре. При подключении к компьютеру Leonardo определяется HID устройство (вроде клавиатуры или мыши) — сделать на основе Arduino Leonardo новый компьютерный эмулятор значительно проще, чем с другими платами.
Подключение и настройка
Для работы с платой Arduino Leonardo в операционной системе Windows скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE.
Что-то пошло не так?
- У меня не появляется новых устройств при подключении Arduino
Элементы платы
Микроконтроллер ATmega32U4
Сердцем платформы Iskra Neo является 8-битный микроконтроллер семейства AVR — ATmega32U4. Он предоставляет в ваше распоряжение 32 КБ флеш-памяти для хранения прошивки, 2.5 КБ оперативной памяти SRAM и 1 КБ энергонезависимой памяти EEPROM для хранения данных. Этого вполне достаточно для решения множества задач вроде управления роботом, промышленной автоматикой, умным домом, световыми инсталляциями и т.д.
Пины питания
- VIN: Напряжение от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, когда устройство запитано от внешнего адаптера.
-
5V: На вывод поступает напряжение 5 В от стабилизатора платы. Стабилизатор обеспечивает питание микроконтроллера ATmega32U4. Питать устройство через вывод
5V
не рекомендуется — в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя. - 3.3V: 3,3 В от стабилизатора напряжения платы. Максимальный ток — 50 мА.
- GND: Выводы земли.
- IOREF: Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера. В зависимости от напряжения, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5 В, так и с 3,3 В устройствами.
Порты ввода/вывода
-
Цифровые входы/выходы: пины –
13
Логический уровень единицы — 5 В, нуля — 0 В. Максимальный ток выхода — 40 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно. -
ШИМ: пины
3
,5
,6
,9
,10
,11
и13
Позволяют выводить 8-битные аналоговые значения в виде ШИМ-сигнала. -
АЦП: пины
A0
–A5
,A6
–A11
(на цифровых пинах 4, 6, 8, 9, 10 и 12). В Arduino Leonardo есть 12 аналоговых входов, каждый из которых может представить напряжение в виде 10-битного кода (1024 значений). Разрядность АЦП — 10 бит. -
TWI/I²C: пины
SDA
иSCL
Для общения с периферией по синхронному протоколу, через 2 провода с использованием библиотекиWire
. -
SPI: пины разъёма
ICSP
Выводы позволяют осуществлять связь по интерфейсу SPI. Обратите внимание, что линии SPI выведены только на разъём ICSP и не соединены с выводами платы, как на Arduino Uno. Те SPI-платы расширения, у которых нет 6-контактного разъёма ICSP для подсоединения к Leonardo — работать не будут. -
UART: пины
0(RX)
и1(TX)
Используется для коммутации платы Arduino с другими устройствами через классSerial1
. Для связи Arduino Leonardo с компьютером через порт micro-USB, используйте классSerial
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
RX и TX | Мигают при обмене данными между Arduino Leonardo и ПК. |
L | Светодиод выводу 13 . При отправке значения HIGH светодиод включается, при отправке LOW – выключается. |
ON | Индикатор питания Arduino Leonardo. |
Разъём micro-USB
Разъём micro-USB предназначен для прошивки платформы Arduino Leonardo с помощью компьютера.
Разъём для внешнего питания
Разъём для подключения внешнего питания от 7 В до 12 В.
ICSP-разъём
ICSP-разъем предназначен для внутрисхемного программирования микроконтроллера ATmega32U4. Также с применением библиотеки SPI
данные выводы могут осуществлять связь по интерфейсу SPI. Обратите внимание линии SPI не продублированы на цифровых контактах, как например на Arduino Uno. Это означает, что если плата расширения использует SPI и не имеет снизу ICSP-разъёма ответного к этим штырькам на Arduino, она работать не будет.
Распиновка
Принципиальная и монтажная схемы
Характеристики
- Микроконтроллер: ATmega32u4
- Тактовая частота: 16 МГц
- Напряжение логических уровней: 5 В
- Входное напряжение питания: 7–12 В
- Портов ввода-вывода общего назначения: 20
- Максимальный ток с пина ввода-вывода: 40 мА
- Максимальный выходной ток пина 3.3V: 50 мА
- Максимальный выходной ток пина 5V: 800 мА
- Портов с поддержкой ШИМ: 7
- Портов, подключённых к АЦП: 12
- Разрядность АЦП: 10 бит
- Flash-память: 32 КБ
- EEPROM-память: 1 КБ
- Оперативная память: 2,5 КБ
- Габариты: 69×53 мм
Ресурсы
- Datasheet на микроконтроллер Atmega32U4
- Arduino Leonardo в магазине.
Любая версия Freeduino / Arduino может выступать в роли ISP программатора, с помощью которого можно, например, изменить bootloader в другой аналогичной плате, или прошить bootloader в новую микросхему ATmega. В описании указывается Arduino, но фактически может быть использован любой клон, включая все варианты Freeduino.
Здесь рассматривается два варианта ISP программатора на основе Arduino: Mega-ISP, который может быть собран из любой версии Arduino и его клонов, и Bit-Bang программатор, для которого подойдут только те варианты Arduino, которые имеют дополнительно выведенные на специальный разъем контакты микросхемы FT232RL.
Особенности ISP/ICSP
Аббревиатуры ISP и ICSP означают In System Programming и In Circuit Serial Programming соответственно. Это означает программирование чипа уже подключенного в некоторую схему, программирование в готовом устройстве по последовательному протоколу.
Принципиально важным является то, что программируемый микроконтроллер должен успешно «завестись», и только после этого он будет в состоянии принимать данные от программатора. Для нас это означает, что он должен быть подключен к питанию, и иметь соответствующий источник тактовых сигналов. Питание проще всего подавать через сам разъем ICSP, а вот с источником тактовых сигналов есть некоторые особенности.
Источник тактовых сигналов выбирается в микроконтроллерах серии ATmega с помощью так называемых fuse-битов, которые, также как и память программ, и EEPROM доступны для изменения с помощью программатора.
Производитель перед продажей выставляет fuse-биты так, что в качестве источника тактовых сигналов выбран внутренний осцилятор, и такой микроконтроллер можно просто подключить к ISP программатору с учетом расположения его выводов, и начать работу. Однако, если с помощью ISP программатора изменить значения fuse-битов так, что изменится источник тактовых сигналов, то чтобы ISP программатор опять начал работать с микроконтроллером, придется соответствующий источник к нему подключить. Таким образом, нужно быть внимательным при изменении значений fuse-битов.
^^^
Mega-ISP
Из известных проектов по созданию ISP программатора на основе Arduino наиболее интересным нам кажется Mega-ISP. Именно этот проект включен в состав ПО Arduino в раздел с примерами под именем ArduinoISP.
После загрузки скетча в вашу плату Arduino, скорее всего потребуется тем или иным образом отключить программный сброс. Владельцы плат Freeduino 2009/2013/Nano/Mega2560 могут просто снять перемычку JRS, владельцы Arduino могут перерезать ножом ту же перемычку. Для некоторых других плат можно выпаять конденсатор CRS, но мы советуем менее радикальный способ — соединить выводы Reset и +5V резистором номиналом порядка 120 Ом (оригинал здесь). Если все сделано правильно, при открытии COM-порта не будет происходить сброс микроконтроллера (это видно по светодиоду 13), и как побочный эффект станет невозможно обновить его собственную прошивку из среды Arduino.
Во-вторых, данный ISP программатор при общении с ПК использует протокол AVRISP/STK500v1 только со скорость 19200 бит/сек, и нормально работает не со всеми вариантами ПО для ПК. Поэтому не удивляйтесь, что не удается что-либо прошить из среды Arduino. Авторы рекомендуют использовать программу avrdude из состава Win-AVR.
Сборка программатора Mega-ISP
Если Вы с помощью одной платы Arduino собираетесь прошить другую, то Вам потребуется разъем 2×3 и 6 проводков. Схема сборки:
Если нужно прошить отдельный микроконтроллер (не забываем, что его fuse-биты должны быть выставлены так, что он тактируется от внутреннего осцилятора), то нужно узнать согласно документации Atmel расположение вывовдов Gnd, Vcc, MOSI, MISO, SCK.
Соединение с Arduino такое: 10 — Reset, 11 — MOSI, 12 — MISO, 13 — SCK.
Не забываем подключить «землю» и питание.
Для примера приводим разводку для разъема ICSP и микроконтроллеров ATmega328 и ATtiny85.
На фото представлен один из вариантов реализации:
<center>
Работа с программатором Mega-ISP
Рассмотрим например, как прошить новый boot-loader.
Скачайте архив с проектом и подходящей версией avrdude. Распакуйте архив в какую-нибудь папку.
Откройте проект в среде Arduino и загрузите его в вашу плату. Либо загрузите в плату пример ArduinoISP из состава ПО Arduino. После этого можно отключать программный сброс согласно описания выше.
Подсоедините вторую плату (которую будем «прошивать») к первой.
В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:
Разберем ключи:
-q — уменьшает объем выводимой на экран отладочной информации
-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)
-p m328 — выбор типа микроконтроллера ATmega328
-c avrisp — выбор протокола
-P COM3 — выбор COM порта. Здесь нужно поставить свой
-b 19200 — выбор скорости порта
-e — Команда на предварительную очистку памяти программ
-U flash:w:ATmegaBOOT_328_diecimila.hex — указывает на .hex файл с прошивкой
Прочие замечания
В процессе работы с программатором было замечено, что иногда процесс прошивки не начинается, и avrdude завершается с ошибкой. В таких случаях нам помогал сброс программатора кнопкой Reset и повторная прошивка.
Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.
В Сети есть страничка с разведенной платой такого программатора, включающей дополнительные отладочные светодиоды: http://drug123.org.ua/mega-isp-shield/
^^^
Bit-Bang программатор
«Сердцем» Bit-Bang программатора является микросхема FD232RL (та самая, которая реализует COM-порт на шине USB), а собственно микроконтроллер ATmega никакого участия в процессе программирования не принимает. Это позволяет программировать микроконтроллер, установленный в «панельке» Вашей Arduino – вторая плата Arduino не потребуется.
Соответственно, для данного программатора подойдут только USB версии Arduino, да и то не все, т.к. не на всех вариантах разведен разъем X3 с дополнительными выводами FT232RL.
Сборка программатора Arduino Bit-Bang
Для сборки Вам потребуются разъемы 1×4, 2×6, штекер 1×2 (для питания) и несколько проводов. Можно использовать, например пару Audio-кабелей от CD-ROM – у них удобные разборные разъемы, и в таком случае можно обойтись даже без паяльника.
Схема соединений следующая:
Провода питания и «земли» потребуются, если Вы собираетесь программировать внешнее устройство. Для программирования микроконтроллера, находящегося в панели той же самой Arduino они не нужны.
На фотографиях представлены оба варианта соединения – программирование микроконтроллера ATmega168, находящегося в панельке Arduino (провода питания и «земли» не нужны), и программирование микроконтроллера во второй плате.
<center></center>
Работа с программатором Arduino Bit-Bang
Аналогично рассмотрим прошивку нового boot-loader’а.
Скачайте архив с соответствующей версией avrdude. Распакуйте архив в какую-нибудь папку.
Подсоедините программатор к USB порту.
В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:
Разберем ключи:
-q — уменьшает объем выводимой на экран отладочной информации
-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)
-p m168 — выбор типа микроконтроллера ATmega168
-c diecimila — выбор программатора (он описан под таким именем в .conf файле)
-P ft0 — выбор порта. Выбрано первое устройство с чипом FTDI
-e — Команда на предварительную очистку памяти программ
-U flash:w:ATmegaBOOT_168_diecimila.hex — указывает на .hex файл с прошивкой
Прочие замечания
Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.
Более полную информацию можно найти по ссылке:
http://make.kosakalab.com/arduino/bootloader/index_en.html
^^^Есть 6-контактный и 10-контактный версии.Распиновка бывают следующие:Как-то на днях делал переходник для своего программатора AVR-910 я ошибся с распиновкой выводов и заметил когда уже протравил печатку, и тогда решил найти распиновку, и опубликовать у себя на сайте что-бы не забывать 🙂Вот будут полезные фотки: Рис. 3. Распространённая распиновка ISP-вилки.Проводники для программирования следует подключить к одноимённым проводникам программатора. Эти проводники удобно подключить к ответной части разъёма имеющегося программатора с помощью стандартной вилки для установки на плату IDC-10MS (Рис. 3). Точное расположение выводов на этой вилке необходимо обязательно сверить с имеющимся программатором!ISP коннектор программатора при установке на печатную платуСтандартный ISP коннектор Atmel Для примера приводим разводку для разъема ICSP и микроконтроллеров ATmega168 и ATtiny85.<center>Блог им. podkassetnik Когда-то все мои печатные платы были заточены под детали для установки в отверстия (through holes). В те славные времена для внутрисхемного программирования микроконтроллеров AVR я вовсю использовал 10-контактный разъем BH-10 (или штыри PLD-10) со стандартной Atmel-овской распиновкой (см. STK200/STK300). С учетом размеров прочих компонентов платы, данный разъем занимал не так уж и много места. Но времена изменились, и теперь в основном я использую детали SMD. Так что установка на плату разъема габаритами с два корпуса TQFP-32, мягко говоря, напрягает. Поэтому было принято эпохальное решение – впредь использовать для программирования камней другой стандарт (это который привязан к 6-ти пиновому разъему BH-6 или PLD-6). Однако, поскольку все мои программаторы были сделаны относительно давно, из них торчали именно 10-контактные разъемы BH-10. И для того, чтобы для программирования «по новому стандарту» использовать старый шлейф (да и чтобы их не валялось с десяток разных видов), смастерил я себе такой вот переходник, цепляющийся на один из концов 10-жильного провода:Надо сказать, к такому решению я пришел далеко не сразу. Вернее, конечно, было понятно, что этот переходник нужен. Но я просто патологически ленив и для программирования первой платы с 6-ти контактным разъемом поступил просто и без затей – отрезал разъем IDC-10 с одного края шлейфа и тупо припаял провода к разъему PLD-6, торчащему из платы.После этого сию плату мне приносили на перепрошивку раза три или четыре (расширялся функционал). И уже на второй раз я смекнул, что постоянно припаивать/отпаивать провода просто не смогу – скорее от бешенства расшибу плату. Ну, или головы тем затейникам, которые не могут даже со второго раза нормально озвучить ТЗ для простенького устройства. В башку опять закрались мысли о нормальном переходнике. Однако, и в этот раз здравый рассудок был коварно обманут – лень присоветовала припаять к жилам шлейфа гнёзда BLS-1. В принципе, этим был достигнут некий компромисс. Но только до поры до времени. Ведь взаимное положение гнёзд не зафиксировано жестко (ибо они просто болтаются на проводах), поэтому каждый раз приходилось заново собирать кубик-рубик. Ну и перепутав пару раз номера контактов, я призадумался.С одной стороны, крайне не хотелось разводить и делать плату под «жесткий» переходник. С другой – однажды я бы точно доэкспериментировался и чего-нибудь сжег. Поэтому в итоге решил-таки побороть лень, сделать плату и навсегда забыть о вышеописанном геморрое.Поначалу хотел сделать универсальную мега-плату с кучей «стандартных» разъемов, которые только встречаются на просторах Интернета. Но потом решительно задушил творческий порыв и сделал просто набалдашник на 10-контактный шлейф, с обоих концов которого висит по одному разъему IDC-10. При этом такой конструктив однозначно (с точки хрения моей логики) определяет типы разъемов, которые будут использоваться в переходнике. Со стороны 10-контактного стандарта это будет угловой разъем BH-10R, а со стороны 6-контактного – PBD-6R (также угловой).Схема «устройства» очевидна. Надо перенаправить сигналы с контактов разъема BH-10R на нужные контакты PBD-6R:«Чертеж» печатной платы (совмещенный вид со стороны деталей):Плата односторонняя, вполне ЛУТ-опригодная. Дорожки 0,5мм (местами 0,25мм). В общем, ничего особо страшного. При установке деталей надо выковырять контакт №3 из разъема BH-10R. Габаритные размеры печатной платы – 13,0х14,6 мм.Распиновка 6-ти контактного разъема со стороны морды:Ну и фото переходника, насаженного на шлейф:На сегодня всё. Желаю удачи при работе с микроконтроллерами AVR!Содержание архива:ISP_10-6_Hardware.zip:ISP_10-6.pdf – схема переходника;ISP_10-6_ЛУТ.lay – печатная плата переходника (вариант для «утюжников»);ISP_10-6_ФР.lay – печатная плата переходника (вариант для «шаблонщиков»).Плата нарисована в «САПР» «Sprint Layout 5.0» (бесплатная гляделка).</center>Используемые источники:
- http://wiki.amperka.ru/продукты:arduino-leonardo
- http://www.freeduino.ru/arduino/isp.html
- http://bigbenmobileblog.blogspot.com/2014/01/avr-isp.html