Почти Arduino, почти недорого
- Цена: $11 + $2,78
- Перейти в магазин
В некотором смысле этот текст — продолжение рассказа про ATtiny85 с USB. Тогда мне, с одной стороны, правильно указали, что я не совсем точно определил назначение продукта. С другой же говорили и о том, что цена немного неразумна.
При таком раскладе по обеим позициям, опять же, на мой взгляд, оказывается довольно привлекателен чип ATmega328p без лишних деталей. То есть, практически совсем без деталей — что не меняет главного: куча цифровых и аналоговых пинов и достаточно скорости много для чего.
Причем мне глубоко симпатична идея использовать контроллеры в корпусе TQFP-32 с распайкой на плате-адаптере, о чем и пойдет речь.
Итак, делать будем простейшую Arduino на частоте 8 МГц. Не самая высокая скорость, зато достаточно практически голого чипа.
Главный плюс такой конструкции в том, что плата-адаптер может выполнять и роль простейшей макетной платы для каких-то несложных изделий. Альтернатива — ATmega328 в DIP-корпусе — в этом случае будет выглядеть не так хорошо. Или так же хорошо, но тоже на плате-переходнике.
С самого начала хочу обратить внимание, что в заголовке указаны цены за 10 штук контроллеров ($11) и десять же плат-переходников ($2,78), что дает нам примерно $1,4 за готовый комплект.
Про контроллеры ничего особенного сказать не могу, кроме того, что все их свойства подробнейшим образом описаны в соответствующем техническом документе Atmel. При этом также надо понимать, что ATmega328p — тот же самый контроллер, который применяется в популярных платах Arduino начального уровня: UNO, Pro Mini, Nano.
Начальный уровень, тем не менее, пугать не должен, поскольку 32 КБ под код, 2 КБ на исполнение и чертова дюжина цифровых пинов плюс семерка аналоговых, да еще разведенные там же специальные интерфейсы — настоящий, в общем-то клад, даже если ограничиться только средой Arduino.
Если не верите, то продолжаю хвастаться тем, что крутится на Arduino Uno.
Что касается идеи с платами-переходниками, то она у меня в голове с тех пор, как в поисках простого способа использовать купленные по случаю ATtiny85 в корпусах SOIC8, наткнулся на подходящие переходники в бутике Чип-и-Дип. Ценник там все знают, но ждать месяц Китая ради пары контроллеров не хотелось.
Но раз это есть в ЧиД, значит есть и в том же Китае. Причем, что характерно, в различных вариациях: односторонние, двусторонние, квадратные, прямоугольные.
Я выбрал переходник только с TQFP-32, разведенным на выводы с шагом, по-моему, 2 мм. По крайней мере то, что показал штангенциркуль, на 2,54 не совсем тянет. Хотя могу и ошибаться.
Еще одна важная характеристика переходника — шаг контактных площадок под контроллер. Насколько я понял, в данном конструктиве это 0,8 мм, однако контроллер существует и в других ипостасях (QFN) с шагом 0,5 мм. В дальнейшем речь идет именно о корпусе TQFP-32 с шагом 0,8 мм.
Особенность (ну, на мой вкус) переходника в том, что на оборотной стороне сквозные отверстия с металлизацией дублируются обычными площадками. Кроме того, по внутреннему периметру напротив каждой площадки вывода микроконтроллера расположены соединенные между собой контактные площадки, которые также выведены на пару сквозных отверстий по центру коротких сторон платы-адаптера.
Вот это на самом деле очень крутое решение, поскольку так и просится на подключение к минусу (земле), что еще более упрощает макетирование. Подключать можно, разумеется и к любой другой цепи, которую требуется развести на как можно большее количество контактов.
Размеры платы при этом следующие:
Качество изготовления, на мой взгляд, неплохое. Но мне не понравилась довольно тонкая маска (или как называется слой краски поверх проводников?), которую умудрился местами сцарапать паяльником, пока распаивал контроллер.
С контроллером на борту, те самые царапины:
Паяется к слову, элементарно, даже припоя добавлять практически не нужно. Достаточно поставить контроллер на площадки и прогреть выводы паяльником. Для удобства, правда, добавил флюса.
В принципе, этого уже достаточно, чтобы начать пользоваться контроллером, как Arduino-совместимой платой. Однако я решил пойти немного дальше (чуть-чуть) по совету уважаемого Ника Гаммона и добавил подтягивающий резистор к пину Reset и пару конденсаторов на 0,1мкФ по питанию и пину AREF. Пин AREF по его же совету соединил с VCC.
При этом обратите, пожалуйста внимание на тот факт, что распиновка ATmega328p в DIP, которую поминают на каждому углу, отличается от TQFP.
Поэтому сообщаю, что резистор 10К стоит между пинами 4 и 29, конденсаторы — между 3 и 4, а также между 20 и 21. При этом VCC — это пин 4, а GND — пин 3. Это все, что касается наиболее критичного.
В целом все хорошо видно по замечательной картинке от Hobbytronics:
Когда все готово, остается последний шаг для превращения в Arduino: загрузка, простите, загрузчика. Для того можно использовать программатор, которого у меня нет. А кроме программатора подойдет другая плата Arduino. Я использую свободную на данный момент Arduino Mega 2560.
Для программирования необходимо, во-первых, добавить в среду Arduino описание контроллера. Для этого идем на официальный сайт Arduino и скачиваем оттуда подходящий для установленной у вас версии среды архив описаний.
Например:
Содержимое архива следует извлечь в папку hardware папки среды Arduino. В дальнейшем я описываю происходящее на примере среды 1.0.3, которой пока пользуюсь.
Когда описания скопированы, следует запустить Arduino и загрузить скетч программатора в Arduino, которая будет использоваться в качестве этого самого программатора. Скетч находится в меню Файл — Примеры — ArduinoISP.
Разумеется, следует выбрать свою плату и порт. Я выбираю Mega, потому что у меня она и есть:
После загрузки скетча программатора необходимо переключиться на целевую плату. Т.е. в нашем случае — ATmega328 с частотой 8 МГц и внутренним задающим генератором. Она будет в списке плат, если описания, о которых говорил выше, скопированы правильно:
Теперь нужно соединить линии MISO, MOSI и SCK платы-программатора и платы с будущей Arduino, а также подключить RESET, GND и VCC. Плюс питания лучше именно в последнюю очередь.
Исходя из приведенной выше инфографики и описания Arduino Mega, вырисовывается следующая картина:
SPI — Arduino Mega — ATmega328p
MISO — 50 — 16
MOSI — 51 — 15
SCK — 52 — 17
SS (RESET) — 53 — 29
Физическое подключение на ваш вкус, я применил исключительно варварский метод — обычные макетные провода прямо в отверстия платы, без пайки и изоляции:
Если все готово — записываем загрузчик. Сначала убеждаемся, что выбран правильный программатор (Сервис — Программатор — Arduino as ISP):
Потом делаем Сервис — Записать загрузчик:
Ну там скрещиваем пальцы и все такое. По крайней мере я считал это существенным, поскольку предполагал, что мог допустить непропай, мог убить контроллер статикой, накосячить с подключением и т.п.
В моем случае загрузчик прошился нормально. Как получить подтверждение более материальное, чем сообщение среды? Ну как — конечно, нужно Blink.
Открываем скетч из Файл — Примеры — 01. Basics — Blink:
Код не меняем, плату не меняем. Но теперь плату с контроллером подключаем через адаптер USB-Serial, а не Arduino, для чего крест-накрест соединяем RX и TX адаптера и контроллера. Напоминаю, что по распиновке описанного корпуса RX — 30, TX — 31. Не забываем соединить адаптер и плату общей землей и подать питание на плату (можно от того же адаптера).
Теперь в среде Arduino выбираем порт, к которому подключился адаптер и заливаем скетч. Хочу сказать, что про RESET я не забыл: изначально подключил, и следил за поведением USB-Serial адаптера, чтобы успеть сбросить контроллер перед загрузкой скетча. Однако этого не понадобилось — скетч загрузился без дополнительной перезагрузки контроллера.
Возможно, что это только в первый раз, тогда напоминаю, что RESET у контроллера — пин 29. Также напоминаю, что нумерация пинов на плате-переходнике — это не Arduino-нумерация. Поэтому упомянутый в скетче пин 13, к которому подключается светодиод — физический пин 17 чипа и, соответственно, платы-переходника.
Ну а что получилось — уже видели :) Лично я доволен и попробую теперь вставить плату в некое устройство, о котором, если получится расскажу немного позже.
Спасибо за внимание.
При таком раскладе по обеим позициям, опять же, на мой взгляд, оказывается довольно привлекателен чип ATmega328p без лишних деталей. То есть, практически совсем без деталей — что не меняет главного: куча цифровых и аналоговых пинов и достаточно скорости много для чего.
Причем мне глубоко симпатична идея использовать контроллеры в корпусе TQFP-32 с распайкой на плате-адаптере, о чем и пойдет речь.
Итак, делать будем простейшую Arduino на частоте 8 МГц. Не самая высокая скорость, зато достаточно практически голого чипа.
Главный плюс такой конструкции в том, что плата-адаптер может выполнять и роль простейшей макетной платы для каких-то несложных изделий. Альтернатива — ATmega328 в DIP-корпусе — в этом случае будет выглядеть не так хорошо. Или так же хорошо, но тоже на плате-переходнике.
С самого начала хочу обратить внимание, что в заголовке указаны цены за 10 штук контроллеров ($11) и десять же плат-переходников ($2,78), что дает нам примерно $1,4 за готовый комплект.
Про контроллеры ничего особенного сказать не могу, кроме того, что все их свойства подробнейшим образом описаны в соответствующем техническом документе Atmel. При этом также надо понимать, что ATmega328p — тот же самый контроллер, который применяется в популярных платах Arduino начального уровня: UNO, Pro Mini, Nano.
Начальный уровень, тем не менее, пугать не должен, поскольку 32 КБ под код, 2 КБ на исполнение и чертова дюжина цифровых пинов плюс семерка аналоговых, да еще разведенные там же специальные интерфейсы — настоящий, в общем-то клад, даже если ограничиться только средой Arduino.
Если не верите, то продолжаю хвастаться тем, что крутится на Arduino Uno.
Что касается идеи с платами-переходниками, то она у меня в голове с тех пор, как в поисках простого способа использовать купленные по случаю ATtiny85 в корпусах SOIC8, наткнулся на подходящие переходники в бутике Чип-и-Дип. Ценник там все знают, но ждать месяц Китая ради пары контроллеров не хотелось.
Но раз это есть в ЧиД, значит есть и в том же Китае. Причем, что характерно, в различных вариациях: односторонние, двусторонние, квадратные, прямоугольные.
Я выбрал переходник только с TQFP-32, разведенным на выводы с шагом, по-моему, 2 мм. По крайней мере то, что показал штангенциркуль, на 2,54 не совсем тянет. Хотя могу и ошибаться.
Еще одна важная характеристика переходника — шаг контактных площадок под контроллер. Насколько я понял, в данном конструктиве это 0,8 мм, однако контроллер существует и в других ипостасях (QFN) с шагом 0,5 мм. В дальнейшем речь идет именно о корпусе TQFP-32 с шагом 0,8 мм.
Особенность (ну, на мой вкус) переходника в том, что на оборотной стороне сквозные отверстия с металлизацией дублируются обычными площадками. Кроме того, по внутреннему периметру напротив каждой площадки вывода микроконтроллера расположены соединенные между собой контактные площадки, которые также выведены на пару сквозных отверстий по центру коротких сторон платы-адаптера.
Вот это на самом деле очень крутое решение, поскольку так и просится на подключение к минусу (земле), что еще более упрощает макетирование. Подключать можно, разумеется и к любой другой цепи, которую требуется развести на как можно большее количество контактов.
Размеры платы при этом следующие:
Качество изготовления, на мой взгляд, неплохое. Но мне не понравилась довольно тонкая маска (или как называется слой краски поверх проводников?), которую умудрился местами сцарапать паяльником, пока распаивал контроллер.
С контроллером на борту, те самые царапины:
Паяется к слову, элементарно, даже припоя добавлять практически не нужно. Достаточно поставить контроллер на площадки и прогреть выводы паяльником. Для удобства, правда, добавил флюса.
В принципе, этого уже достаточно, чтобы начать пользоваться контроллером, как Arduino-совместимой платой. Однако я решил пойти немного дальше (чуть-чуть) по совету уважаемого Ника Гаммона и добавил подтягивающий резистор к пину Reset и пару конденсаторов на 0,1мкФ по питанию и пину AREF. Пин AREF по его же совету соединил с VCC.
При этом обратите, пожалуйста внимание на тот факт, что распиновка ATmega328p в DIP, которую поминают на каждому углу, отличается от TQFP.
Поэтому сообщаю, что резистор 10К стоит между пинами 4 и 29, конденсаторы — между 3 и 4, а также между 20 и 21. При этом VCC — это пин 4, а GND — пин 3. Это все, что касается наиболее критичного.
В целом все хорошо видно по замечательной картинке от Hobbytronics:
Когда все готово, остается последний шаг для превращения в Arduino: загрузка, простите, загрузчика. Для того можно использовать программатор, которого у меня нет. А кроме программатора подойдет другая плата Arduino. Я использую свободную на данный момент Arduino Mega 2560.
Для программирования необходимо, во-первых, добавить в среду Arduino описание контроллера. Для этого идем на официальный сайт Arduino и скачиваем оттуда подходящий для установленной у вас версии среды архив описаний.
Например:
Содержимое архива следует извлечь в папку hardware папки среды Arduino. В дальнейшем я описываю происходящее на примере среды 1.0.3, которой пока пользуюсь.
Когда описания скопированы, следует запустить Arduino и загрузить скетч программатора в Arduino, которая будет использоваться в качестве этого самого программатора. Скетч находится в меню Файл — Примеры — ArduinoISP.
Разумеется, следует выбрать свою плату и порт. Я выбираю Mega, потому что у меня она и есть:
После загрузки скетча программатора необходимо переключиться на целевую плату. Т.е. в нашем случае — ATmega328 с частотой 8 МГц и внутренним задающим генератором. Она будет в списке плат, если описания, о которых говорил выше, скопированы правильно:
Теперь нужно соединить линии MISO, MOSI и SCK платы-программатора и платы с будущей Arduino, а также подключить RESET, GND и VCC. Плюс питания лучше именно в последнюю очередь.
Исходя из приведенной выше инфографики и описания Arduino Mega, вырисовывается следующая картина:
SPI — Arduino Mega — ATmega328p
MISO — 50 — 16
MOSI — 51 — 15
SCK — 52 — 17
SS (RESET) — 53 — 29
Физическое подключение на ваш вкус, я применил исключительно варварский метод — обычные макетные провода прямо в отверстия платы, без пайки и изоляции:
Если все готово — записываем загрузчик. Сначала убеждаемся, что выбран правильный программатор (Сервис — Программатор — Arduino as ISP):
Потом делаем Сервис — Записать загрузчик:
Ну там скрещиваем пальцы и все такое. По крайней мере я считал это существенным, поскольку предполагал, что мог допустить непропай, мог убить контроллер статикой, накосячить с подключением и т.п.
В моем случае загрузчик прошился нормально. Как получить подтверждение более материальное, чем сообщение среды? Ну как — конечно, нужно Blink.
Открываем скетч из Файл — Примеры — 01. Basics — Blink:
Код не меняем, плату не меняем. Но теперь плату с контроллером подключаем через адаптер USB-Serial, а не Arduino, для чего крест-накрест соединяем RX и TX адаптера и контроллера. Напоминаю, что по распиновке описанного корпуса RX — 30, TX — 31. Не забываем соединить адаптер и плату общей землей и подать питание на плату (можно от того же адаптера).
Теперь в среде Arduino выбираем порт, к которому подключился адаптер и заливаем скетч. Хочу сказать, что про RESET я не забыл: изначально подключил, и следил за поведением USB-Serial адаптера, чтобы успеть сбросить контроллер перед загрузкой скетча. Однако этого не понадобилось — скетч загрузился без дополнительной перезагрузки контроллера.
Возможно, что это только в первый раз, тогда напоминаю, что RESET у контроллера — пин 29. Также напоминаю, что нумерация пинов на плате-переходнике — это не Arduino-нумерация. Поэтому упомянутый в скетче пин 13, к которому подключается светодиод — физический пин 17 чипа и, соответственно, платы-переходника.
Ну а что получилось — уже видели :) Лично я доволен и попробую теперь вставить плату в некое устройство, о котором, если получится расскажу немного позже.
Спасибо за внимание.
Самые обсуждаемые обзоры
+52 |
3311
91
|
+56 |
2811
50
|
1. Уже всё спаяно. Я то могу и QFN припаять (чем на работе в отсутствие монтажников и развлекаюсь), но предпочитаю для домашних поделок более крупные контакты.
2. Есть минимальный обвес в виде кварцев, разъёмов USB, стабилизаторов на 3.3 и проч. Подал питание и можно сразу моргать светодиодом.
А конвертер USB-Serial выключен, когда не используется?
Если вам недстаточно года работы Ардуины от батарейки, вкуривайте вот это — www.gammon.com.au/power Там описано, как уменьшить потребление до теоретических ста НАНОампер при комнатной температуре.
Если вам не подходит, проходим мимо и ищем аналог с перламутровыми пуговицами, если подходит берем в загашник.
Ну или напаиваем навесным.
Хотя это по нашему. Зачем искать лёгких путей и перевозить холодильник на прокатной Газельке с грузчиками за пару тысяч, когда можно соорудить багажник на крышу (всего тысяча) и перевести на свой легковушке. Это же профит, не считая бензина, что холодильник придётся грузить самому и при погрузке/разгрузке можно случайно помять половину своей машины. Зато интересно.
приходят монтажники на работу, а там все QFN припаяны. и вот они начинают бегать и выяснять, кто их припаял и зачем?
Монтажники на работе с 9 до 18 работают, а я когда захотел, тогда и пришел/ушел. Так вот часов в 19-20 мне либо самому корпус перепаивать, либо утра ждать. Вот и получается вечерние развлечение, от которого я бы с удовольствием отказался.
цимус, брат?смысл «нано»? Если USB вообще не нужен, то лучше «про-мини», а если очень нужен, то лучше «микро». Экологическая ниша «нано» мне совершенно не понятна. :/Pro Mini те же 1,40 и стоит. Ну, ладно бы оно впаивалось в некую плату на постоянку, а так какой-то троллейбус из хлеба выходит.
Вот я крайний раз брал здесь: Pro-mini 328 — $1.60, Nano 3.0 CH340 — $1.90.
Но наверняка есть где дешевле.
https://aliexpress.com/item/item/Nano-V3-ATmega168-CH340-MicroUSB-Compatible-for-Arduino-Nano-V3/32572993712.html
1,57
Вдвое меньше RAM и Флэш, чем на 328. В куче реализаций вполне хватает. Сейчас партию Mega8 прикупил, в корпусах, как в обзоре. Примерно по $0.45 за шт получается.
А так Pro Mini на нормальном 328 на Али цена $1.4 — $1.5
приходили очень быстро, все в порядке — трудятся. Цена 1,8$
Попаять можно плату, в которую mini модулем втыкается.
Сегодня впервые использовал INPUT_PULLUP, но еще не понял, почему я раньше возился с внешними резисторами.
Так что за две минуты можно очень многое, главное, чтобы голова при этом работала.
STM8S003F3P6 http://www.aliexpress.com/item/STM8S003F3P6-8S003F3P6-STM8S003-TSSOP20-Free-shipping-100PCS-LOTS/32246496262.html (только 100 циклов перезаписи Flash)
STM8S103F3P6 http://www.aliexpress.com/item/free-shipping-100-PCS-STM8S103F3P6-STM8S103F3P6-TSSOP-20-chip-new-original/32589104611.html (10000 циклов перезаписи Flash)
Этот чип слабее ATmega328p, но как контролер температур, PWM генератор, мультиплексор или чип-саттелит STM32 — за эту цену просто супер.
— 16 MHz
— 8 Kbytes Flash, 1 Kbytes RAM
— 2.95 to 5.5 V operating voltage
— ADC: 10-bit, ±1 LSB ADC with up to 5 multiplexed channels
— 2 PWM generators
— max 16 gpio's
— UART, SPI, I2C
Я давно и успешно пользуюсь Sublime Text с плагином stino, намного удобнее. Ну или MariaMole можно пощупать еще
для STM в избранном давно лежит вот эта статья, пока не пробовал сам.
Скажите пожалуйста человеку несведущему, чем STM лучше AVR/Arduino?
а с Visual Micro я не подружился, у меня он криво-косо заработал, а разбираться было лень. Саблайма хватает для моих скромных экспериментов
А вот когда уже рассматриваешь чипы на основе STM32, они уже предпочтительнее Atmega328 при одинаковой цене, они просто мощнее и функциональнее, посмотрите просто характеристики самого распространенного STM32F103C8
Есть куча применений (и у меня тоже), где возможности Arduino используются от силы на 1/10 часть — но приходится ставить то, что есть под рукой: полуторадолларовую «промини» (сам по себе чип плюс плата куда его закрепить, как показал автор статьи — дешевле выходит не сильно, да и ATtiny45/85 — того же ценового порядка, «от доллара и выше»).
А stm8 позволяет «закрыть» эту нишу всего за 20 центов.
Перестал пользоваться AVR уже несколько лет как, перешел на STM32 :) Где надо помельче — STM32F0… в мелких корпусах, где покрупнее — STM32F1… :)
Да, чуть дороже, зато тактовая частота нормальная и отладка через JTAG :)
Надеюсь, вы не промежуток между отверстиями измеряли? :)
Измерял между центрами отверстий.
Могу посоветовать в качестве среды IAR. В ней достаточно создать новый проект (C -> main или C++ -> main), задать в этом проекте конкретную модель контроллера и у Вас уже будет готовая заготовка со всеми настройками по умолчанию, готовая к компиляции и заливке в контроллер. Останется только вставить код мигания светодиодом в тело функции main() :)
Поищите на habrahabr.ru и geektimes.ru по фразе «STM32», там довольно много статей :)
— … а нужна мне эта паста для того, чтобы начать писать цикл статей по программированию STM32 на примере системы управления ядерным реактором (про постройку которого — в следующем обзоре синей изоленты)
:)
Ну воооот… взяли нормальный конроллер и угробили его преимущество маленького корпуса, да еще и ардуино туда запилили )))