Управление светодиодом на мк attiny13

ЛАМПА НАСТРОЕНИЯ НА ATTINY13

Совсем немного осталось до Нового года 2021, а значит, по традиции, самое время задуматься о создании праздничной иллюминации (конечно собственными руками). Тем более что дни сейчас самые короткие и большую часть времени суток за окном темно, разноцветные светодиодные эффекты в темноте будут смотреться особенно эффектно. На мой взгляд, одним из лучших светодиодных эффектов является так называемая лампа настроения – она представляет собой обычный светильник, цвет которого плавно меняется от одного к другому в случайной последовательности. В отличие от многих других светодиодных эффектов, лампа настроения не напрягает зрение, ведь в ней отсутствуют каких-то резкие вспышки или мерцания света, смена цветов происходит абсолютно плавно. Использовать такую лампу можно в качестве универсального светильника, например, для подсветки новогодней ёлки вместо гирлянды, либо в качестве необычного ночника.

Схема RGB лампы на Attiny13

Схема для сборки лампы представлена ниже.

Детали для этой схемы, а также всё необходимое для сборки других электронных схем, в том числе инструменты, можно купить в магазине «Элирит». В каталоге присутствует большой ассортимент радиоэлектронных товаров, как отечественного производства, так и импортных, по весьма привлекательным ценам, имеется доставка по России.

Ключевым звеном является микроконтроллер Attiny13, один из самых распространённых и недорогих среди AVR. С его 5, 6 и 7 выводов снимается ШИМ-сигнал и поступает на затворы полевых транзисторов, управление яркостью осуществляется с помощью изменения скважности ШИМ. Частота ШИМ-сигнала в данной схеме составляет 130 Гц, этого достаточно для того, чтобы мерцание светодиода было совершенно незаметно для глаз.

Светодиод в схеме используется RGB – на одной подложке одновременно установлены три независимых светодиода, соответственно красный, зелёный и синий, путём комбинирования яркости этих цветов получаются различные другие цвета и оттенки. Использовать можно также и три отдельных светодиода, если под рукой нет RGB, однако в этом случае их нужно будет расположить как можно ближе друг другу и накрыть сверху рассеивающим экраном, чтобы цвета равномерно смешивались. На картинке ниже можно увидеть применённый мной RGB светодиод, он имеет 6 выводов – отдельные анод и катод для каждого цвета.

Несколько слов о деталях схемы. Предпочтительнее использовать элементы поверхностного монтажа, в этом случае вся конструкция получится весьма компактной и её можно будет встроить, например, в какой-нибудь готовый корпус. Помимо самого микроконтроллера, на схеме присутствуют три полевых транзистора – здесь важно использовать транзисторы с логическим уровнем затвора, идеальным вариантом будут указанные на схеме IRLML0030, они полностью открываются от 5-ти вольт.

Не лишним будет также установить токоограничивающие резисторы между выводами микроконтроллера и затворами, например, на 10-47 Ом, на печатной плате под них предусмотрены посадочные места. Также на схеме не указаны токоограничивающие резисторы для самих светодиодов – их сопротивление выбирается исходя из необходимого тока через светодиоды, и соответственно яркости свечения лампы. Оптимальным будет значение около 10 Ом для каждого светодиода (при питании схемы от 5 вольт), в этом случае и сами резисторы, и светодиод не будут сильно нагреваться, но общего уровня яркости хватит для большинства применений лампы.

Обратите внимание, что используемый RGB светодиод должен быть рассчитан на заданный ток, превышение допустимого тока светодиода приведёт к его быстрой деградации. Помимо этого, на плате также присутствует резистор 4,7 – 20 кОм для подтяжки RESET микроконтроллера к питанию, а также конденсаторы по питанию – не стоит ими пренебрегать, ведь ШИМ светодиодов может вызвать помехи по питанию, которые приведут к нестабильной работе микроконтроллера.

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

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

Таким образом, получилась весьма миниатюрная плата с размерами 3х3 см. Для запуска схемы достаточно подвести питание в 5 вольт, микроконтроллер начнёт работу и светодиод сразу же начнёт светится.

Единственная настройка заключается в выравнивании яркости каждого из цветов RGB светодиода – дело в том, что разные цвета при одинаковых токоограничивающих резисторах имеют чуть разную яркость. На плате последовательно с основными токоограничивающими резисторами предусмотрены дополнительные посадочные места для резисторов 1 — 2,2 Ома, с помощью которых можно настроить отдельно яркость каждого цвета.

Проверить правильность настройки очень просто – достаточно подать на затворы каждого из транзисторов по 5 вольт, при этом светодиод должен светится белым цветом без каких-либо оттенков.ъ

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

В общем получился интересный, недорогой, а главное сделанный своими руками LED светильник. Получившуюся плату следует поместить в любой красивый корпус, желательно выбирать матовый, для дополнительного рассеивания света. Скачать файлы проекта. Автор материала misha1279.

Светомузыка на ATtiny13

Устройство снимает звуковой сигнал с электретного микрофона (можно взять любой, я брал с старого плеера), микрофон питается фантомным питанием через резистор в R5 10kOm. Сигнал с микрофона снимаем через разделительный конденсатор 0,1мкФ (можно отклониться в широких пределах) который отсекает постоянную составляющую сигнала.

После микрофона сигнал попадает на вход операционного усилителя LM358 (можно взять любой другой или собрать усилитель на транзисторе) и максимально усиливается, чтоб подать на вход микроконтроллера сигнал амплитудой от 0 до 5В.

Микроконтроллер ATtiny13 работает на частоте 9,6МГц и тактируется от внутренней РС цепочки, (прошивка и фьюзы будут в архиве ниже). Микроконтроллер проводит анализ подаваемого на вход сигнала и в зависимости от того какой он частоты зажигает один из четырех светодиодов. Вот и вся светомузыка!

Страничка проекта, там есть схема и прошивка

Дубликаты не найдены

TECHNO BROTHER

779 постов 7.5K подписчиков

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат — Нежелателен. Учитесь выражать мысли без матерщины

А видео как работает?

Добавлено, по просьбе трудящихся.

Нужна часовая версия что бы посмотреть как работает.

Соберите на макетке и тестируйте сколько влезет.

можно ж на дискретных элементах собрать

P.S. Сами вы наркоманы

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

«Все смотрим как работает, всем пока! » xD

Есть ли схема простой рации?

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

А хотелки следующие:
1. «Легальные» частоты, чтобы не быть радио хулиганом 😉
2. Относительно хорошая дальность (хватит по сути и 2-3км, но лучше с запасом).
3. Современная элементная база (большинство схем в сети чуть ли не на лампах).
4. Относительная компактность (размер барсетки вполне подойдёт).
5. Ну и сложность изготовления. Хотелось бы полностью аналоговую. Работать с микроконтроллерами не привык.

Буду рад услышать ваше мнение и по возможности увидеть схемы.

УМЗЧ ВВ Сухова 1989. Второй комплект. Восстановление

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

Начал с блока питания, все 4 транзистора неисправны, заменил. Через токоограничительные резисторы в 15 ом включил, пошёл дымок из правого канала, сгорел резистор R25, ну понятно, пробит выходной каскад. Заменил КТ818Г и проверил все остальные силовые. В момент включения были подключены два осциллографа, заметил что в одном канале отсутствует сигнал с генератора НЧ, а во втором канале искажена синусоида. Вообще не характерные искажения, какие-то экспоненциально нарастающие пилы (забыл сфоткать). Решил выпаять все слаботочные транзисторы и проверить, у одного оказалось напряжение Uf = 2.9 в, (напряжение смещения Б-Э (открытия транзистора)) вместо положенных 0,5 в. Причём пару минут спустя показания менялись от 2,5 до 1,5. Исчезающий дефект самое неприятное занятие выискивать. Запаиваю обратно все транзисторы левого канала и приступаю к выпайке транзисторов из правого.

Читайте также  Светодиодная лампочка теплого света для комнатных цветов

Тут вроде проще, но сложнее, дорожки поплыли, пятаки едва держатся. Ещё один ремонт эта плата не переживёт. Новую делать мне пока не хочется, пару битых транзисторов нашёл, и один КТ817Г вдруг показал 437 бетту! Не верю! Из закромов 147 показал, этому верю. Включаю, не работает! Плата защиты не отрабатывает реле. VT1, VT2, VT3 сгорели, и VD10. Ну всё вроде. Ток покоя 50 ма, уровень RMS сигнала на выходе 20 вольт на нагрузку 4 ома. Без нагрузки уровень клиппирования порядка 30 вольт. Но мне такого и не надо. 150 ватт на канал это и так перебор для комнаты в 16м кв. Двести он выдаёт на канал, но это честные ватты, не китайские. Но транзисторы выходные уже в зоне риска, поэтому и ограничил на безопасном уровне. Вес одного усилителя 14 килограммов.

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

Два трансформатора ТС-200, обмотки 2 мм диаметром.

Лампа настроения с сенсорным управлением на Attiny13

Дата публикации: 02 февраля 2016 .

Лирическое вступление

Наконец-то я закончил свой первый, однажды заброшенный, проект на микроконтроллере! Когда я начинал, то замахнулся на повторение одной поделки с «хабрахабр», но так и не смог отладить инфракрасный сенсор (ИК-светодиод + ИК-приемник). Поделка та была на ATmega8 и, как я сейчас понимаю, это было очень жирно для такой задумки. Сейчас я все реализовал на ATtiny13A, как всегда еле все уместил, но тем интереснее. Приступим.

Техническое задание

Вариаций ламп настроения в сети хоть пруд пруди. Однако, мне хотелось чего-то своего, под свои задумки. А задумки довольно простые. Я хотел, чтобы лампа могла использоваться в качестве детского ночника. И как мне видится, было бы полезно ей сделать возможность гореть одним выбранным цветом и возможность выбора яркости. Обмозговав тех. задание состряпал алгоритм.

Алгоритм работы

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

1. Плавная смена цветов по кругу.
2. Один цвет, который получился при переходе с режима №1.
3. Настройка скорости плавной смены цветов для режима №1. 8 вариантов.
4. Настройка яркости. 8 вариантов.

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

Долго эксперементировал с тем, как визуализировать настройку выбора скорости всякими помигиваниями. В итоге остановился на выборе скорости по цветам радуги + розовый цвет. Красный — самая быстрая скорость. Розовый — самая медленная. Настройка яркости осуществляется визуально одним цветом.

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

Кому-то будет проще и быстрее посмотреть функционал на видео. Извиняйте за качество, крутыми гаджетами для съемки не обладаю. Цветопередача ужасная. К тому же, на видео настройка яркости видна плохо, т.к. камера постоянно подстраивалась под каждый уровень яркости.

Материалы

В качестве блока питания можно взять зарядник от телефона на подходящий ток. У меня уже очень давно были закуплены блоки питания и плафоны по 2 штуки. Плафон взял от светильника grono из магазина «Икея». Еще вот похожие по размерам, но круглые — кварне.

Источником света в лампе является один или несколько RGB-светодиодов. Я взял один 3 Ваттный RGB-светодиод, который в номинале держит по 300 мА на каждый канал. Запитал его в щадящем режиме где-то по 200 мА на канал.

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

Схема, реализация

Схема получилась очень простой.

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

Собрал все воедино, бросил коробочку на дно плафона. В качестве сенсора сделал кусок лакированной проволоки 0.3 мм, которую пустил по верхнему контуру плафона. Светодиод посадил временно только на термопасту, а проволоку на скотч.

Трудности отладки

Я уже писал как при разработке лампы я использовал бинарную модуляцию (БМ) и работал с сенсором. Так вот, сенсор требовал доработки, потому как он временами срабатывал сам собой. Я выполнил советы Mail1977, за что его благодарю. Однако, это полностью не решило проблему. Дело оказалось в форме сенсора, в роли которого у нас выступает длинная проволока. Я думаю, она вела себя как антенна и ловила всякую ерунду.

Тогда мне в голову пришла идея: заэкранировать наш сенсор, чтобы он не ловил помехи. И я сделал не одну проволоку, а витую пару. Второй конец которой подключил к земле нашей схемы управления светодиодом. (Здесь у меня вопрос, есть ли смысл посадить на эту землю и корпус блока питания?) И всё, помехи ушли!

Но это еще не все. Первая моя стабильная версия лампы была реализована с помощью БМ (исходник этой реализации я тоже вложу в архив). Однако, помаргивания при плавном изменении цветов RGB-светодиода, все же, были видны, даже на частоте БМ 586 Гц. Особенно на маленьких яркостях. Частоту повышать уже больше не стал. Переделал на программный ШИМ с частотой около 100 Гц. На глаз теперь все происходит плавно!

Перспектива

Когда это все собрал и отладил, то был доволен. Но есть еще задумка. Как-то громоздко все это выглядит. Подумал, что было бы интересно собрать аналог такой лампы в виде небольшого ночничка, который можно было бы питать от любого разъема USB, ведь у каждого есть зарядник для телефона. Развел кругленькую плату (часть ее видно справа на фото готовых плат выше) для 9-ти RGB-светодиодов 5050 и разъема microUSB. Может быть в будущем соберу.

Исходник для прошивки написан на C в CodeBlocks под компилятор GCC AVR.

Желаю каждый проект довести до победного конца!

Простой ШИМ на ATTiny13.Регулируем всё

Потребовалось регулировать температуру маленького 12-ти вольтового паяльника Baku 938 мощностью 8 Вт , но в интернете попадались схемы ШИМ на дискретных элементах, например, схемы на таймере 555, к561ла7, к561лн2, на мультивибраторе из транзисторов.

ШИМ или PWM — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте.

Собрав несколько из них, ни одна меня не устроила, у них был слишком крутой спадподъем сопротивления при вращении ручки переменного резистора — от 2 кОм сразу подскакивало к 7 кОм, и следовательно, при этом, к примеру, подключенный для теста на исток полевого транзистора, компьютерный вентилятор со скорости 20 процентов сразу поднимал обороты до 90-100 процентов. В общем, чтобы пользоваться схемой, пришлось бы вращать потенциометр с прецизионной точностью иили с замером сопротивления при вращении.

Однако, нашлась схема, собранная на ATTiny13, в которой используется цифровая ШИМ . Посмотреть статью о ней можно на странице cxem.net/master/61.php

Сначала я отнесся к ней скептически, но зря, потому что схема минимальна по обвязке, по сравнению с дискретными схемами найденными ранее. Микросхема маленькая и дешевая, изготавливается в корпусах SOIC,DIP, QFN, MLF, ножек всего 8, как и у таймера NELM555.

Читайте также  Разборка компьютерного вентилятора (кулера)

ШИМ на ней получается точным и легко регулируется.

Смотрите также статьи по теме:

Наглядная схема (принципиальную схему смотрите по ссылке выше на сайте-источнике).

Описание чипа Atmel (Microchip) ATTiny13A

ATTiny13A — это 8 битный AVR микроконтроллер с программируемой Flash памятью внутрисистемно, размером 1 КБ.

Распиновка (pinout) микроконтроллера ATTiny13A

В чем отличие ATTiny13 от ATTiny13A ?

Tiny13A — это более новый и улучшенный микроконтроллер от Atmel.

Ранее выпускались два варианта Тини13 — с обычным (ATTiny13, работает от 2.7 вольт) и пониженным (ATTiny13V, работает от 1.8 вольт) питанием.

При этом первый вариант работает на частоте до 20 Мгц, второй — до 10Мгц.

С выходом Тини13А убрали разделение мк по питанию, Тини13А работает и от 1.8 вольт (в этом режиме, при пониженном низковольтном питании его невозможно заставить работать на высокой частоте).

Примечание по сборке схемы

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

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

Можно обойтись и без светодиодов (следовательно и еще без трёх резисторов), они просто нужны для индикации и отображения режима работы.

Также можно обойтись и без линейного стабилизатора напряжения LM7805 (КРЕН5), если схема питается напряжением в 5 вольт, и регулируемая нагрузка работает от такого же напряжения, а не от 12 вольт.

Для стабильности напряжения можно добавить керамические конденсаторы (на наглядной схеме выделены квадратом салатового цвета) — 0,33 микроФарад (334) на вход 7805, и 0,1 микрофарад (104) на выходе 7805.

Используемая нагружаемая мощность будет ограничена полевым (MOSFET) транзистором.

Прошивка

Почитав комментарии на оригинальной странице, увидел несколько комментариев об ошибке — надо вначале держать кнопку 30 секунд, чтобы ШИМ запустился, что конечно же ну очень долго.

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

Пришлось его скачать и открыть исходник в нем. Исправив ошибку с ожиданием в 30 секунд — решил проверить и залить прошивку. Но прошивка не захотела литься, подумав что это ошибка компилятора BascomAVR, было решено написать свой код для ATTiny13 на Си в Atmel Studio 7, конечно с сохранением оригинальной схемотехники, чтобы было можно только лишь залить прошивку и ничего не переделывать на печатке.

Написал тестовый код в Atmel Studio, скомпилировал прошивку, заливаю в attiny13 – опять ошибка:

mismatch 0x000000

Ошибка оказалась не в средах разработки, а в программе для прошивки мк, конкретно в моем случае в eXtreme Burner AVR, для того, чтобы исправить данную ошибку необходимо открыть файл

C:Program FileseXtreme Burner – AVRDatachips.xml

Найти ATTiny13 и между тегами 64 Вместо 64 написать 32 – после этого ATTiny13 начал шиться без проблем.

Спустя несколько дней программа была написана.

Что изменено и добавлено в прошивку:
+ Не нужно удерживать кнопку на протяжении 30 секунд
+ Добавлено 8 значений ШИМ вместо 7
+ Добавлена индикация включения.
+ Сделана наглядная индикация режима ШИМ .
+ Добавлено автосохранение значения ШИМ (по умолчанию выключено)

Индикация включения — при включении очень быстро и с реверсом перельются все три светодиода.

Переключение режимов осуществляется нажатием на кнопку, действует циклически.

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

Пояснения по работе устройства с новой прошивкой

Режимы работы:
— Все светодиоды выключены, Значение ШИМ — 0 (0%)
1 — Моргает светодиод 1, ШИМ — 32 (12%)
2 — Моргает светодиод 2, ШИМ — 64 (25%)
3 — Моргает светодиод 3, ШИМ — 96 (37.6%)
4 — Все светодиоды переливаются, ШИМ — 128 (50%)
5 — Горит светодиод 1, ШИМ — 160 (62.7%)
6 — Горит светодиод 2, ШИМ — 192 (75.2%)
7 — Горит светодиод 3, ШИМ — 224 (87.8%)
8 — Все светодиоды моргают, ШИМ — 255 (100%)

ШИМ — 0 (0%) — питание на «регулируемом устройстве» отсутствует, например, паяльник не греется.

ШИМ — 255 (100%) — полная мощность работы «регулируемого устройства».

Для включения автосохранения значения ШИМ необходимо удержать кнопку в течении 3-х секунд, для отключения — осуществить тоже самое.

При этом при включении автосохранения на 1,5 секунды загорится светодиод 1.
При отключении — на 1,5 секунды загорится светодиод 3.Удерживать кнопку можно в любом режиме, но лучше это делать в режиме 0- так будет нагляднее.

Не стоит забывать, что при включенном автосохранении каждый раз, при нажатии на кнопку записываются данные в EEPROM, ресурс записи EEPROM в Atmel AVR — 100 000.

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

  1. Для заливки прошивки в ATTiny потребуется: USB ASP Программатор микроконтроллеров ATmega AVR.
  2. Программа eXtreme Burner AVR.

Необходимо поставить фьюз на работу от внутреннего тактового генератора на 9,6 Мгц

Т.к. я пользуюсь eXtreme Burner AVR то во вкладке FuseBits записываю такие байты вместо выставления галок(в других программах-прошивальщиках галки):

Младший байт(Low ByteFuse) – 7A

Старший байт (High ByteFuse) – EB

Для того, чтобы знать какие галки ставить в других программах, чтобы микроконтроллер работал на частоте 9.6Мгц , можно использовать данный сайт:

Слева вверху, где написано Байты конфигурации вводим – 7A в окошечко LOW

и EB в окошечко HIGH – получаем указание на то, где следует поставить галки.

Собранное в корпус устройство ШИМ с вынесенной кнопкой:

(Принципиальная схема и печатная плата имеется на приведенном выше сайте.)

Плата ШИМ, упакованная в корпус от другого устройства и подключенный к ней паяльник.

Файлы прошивки в формате HEX:

Оригинальная, скомпилированная из приведенных ниже исходников:

Прошивка с более высокой частотой (Не тестировалась на реальной схеме!):

Прошивка по просьбе одного из пользователей нашего сайта, частота ШИМ — около 2,3 килоГерц:

В данной прошивке всего три режима

1 — ШИМ 80%, светится светодиод 1

2 — ШИМ 90%, светится светодиод 1,2

3 — ШИМ 100%(Постоянное питание), светится светодиод 1, 2 и 3

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

  • Все
  • Тематические


    Программирование Arduino даёт не только огромный простор для фантазии и возможностей, но, как и любой фреймворк , одновременно навязывает свой стиль и ограничивает возможности.
    Поэтому, если чувствуется, что Arduino становится тесноват — можно не только перейти на 32-битные контроллеры (например, STM32), но и попробовать более низкоуровневое программирование контроллеров.

    Уходя ближе «к железу» — программировать придётся на более близком к железу уровне — и если это не ассемблер, то уж язык программирования Си — точно.
    Пример подобного программирования уже приводился в статье Arduino/CraftDuino и WinAVR — программируем на чистом С .
    У такого стандартного программирования микроконтроллеров есть существенное преимущество перед использованием Arduino-вских скетчей.
    Однако, за низкоуровневый полный контроль и возможность использовать все ресурсы микроконтроллера, приходится расплачиваться долгим и внимательным изучением документации (datasheet-а) на микроконтроллер.
    Т.е., если у вас ещё не было опыта работы с конкретным микроконтроллером — то вместо быстренького набрасывания скетча для решения своей задачи — вам придётся потратить дополнительное время на изучение мат. части.

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

    Для примера, возьмём меленький, простой и дешёвый контроллер ATtiny13.

    ATtiny13

    8-битный AVR микроконтроллер с 1 КБ программируемой Flash памяти

    — RISC архитектура
    — 120 команд, (большинство выполняется за один такт)
    — 32 8-битных регистра общего применения
    — 1 КБ программируемой Flash памяти программы
    — 64 байта EEPROM памяти данных, (до 100 000 циклов записи/стирания)
    — 64 байта SRAM памяти (статическое ОЗУ)
    — Один 8-разрядный таймер/счётчик с отдельным предделителем и два ШИМ канала
    — 4-канальный 10-битный АЦП со встроенным ИОН
    — Программируемый сторожевой таймер (watchdog) со встроенным генератором
    — Встроенный аналоговый компаратор
    — Внутрисистемное программирование через SPI порт
    — Внешние и внутренние источники прерывания
    Корпусное исполнение:
    — 8-выводные PDIP и SOIC корпуса: 6 программируемых линий ввода-вывода

    Диапазон напряжения питания, частота:
    1.8 – 5.5В (для ATtiny13V) — до 10МГц
    2.7 – 5.5В (для ATtiny13) — до 20МГц

    Выводы микроконтроллера ATtiny13:

    Документация на ATtiny13:

    Как видим, микросхема микроконтроллера — маленькая — всего 8 ножек.
    Чтобы заставить её работать — нужно просто воткнуть её в макетную плату, подтянуть RESET (первый пин — на схеме обозначается — PB5) к шине питания через 10-килоомный резистор и подать питание — например, 5V снятые с пинов питания контроллера Arduino / CraftDuino.

    Разумеется, желательно, ещё повесить конденсатор в 0.1 мкФ между шинами питания.

    Подключение ATtiny13 через SPI к CraftDuino

    В статье Делаем ISP-программатор из Arduino , уже подробно расписано как нужно подключить микроконтроллер ATtiny13 к контроллеру Arduino или CraftDuino, чтобы его можно было программировать через выводы микросхемы FT232RL используя режим bit-bang (режим управления отдельными выводам микросхемы). Поэтому сразу переходим к софтовой части.

    Atmel Studio

    Раз решили программировать «по-взрослому», то и среда разработки нужна «взрослая».
    Идём на сайт Atmel -a, и скачиваем свежую версию Atmel Studio .

    Atmel Studio — (наследница AVR Studio) — это бесплатная среда разработки для микроконтроллеров Atmel.
    Сама IDE должна быть знакома, т.к. используется оболочка от Microsoft Visual Studio, однако следует обратить внимание, что в качестве компилятора используется GCC.

    После установки, на рабочем столе появится ярлык с симпатичной красной божьей коровкой. Запускаем IDE и привычным образом, быстренько создаём проект.
    File -> New -> Project.
    Выбираем С/С++ и GCC C Executable Project, пишем имя проекта, например, blink 🙂
    Затем, среда предложит выбрать тип используемого микроконтроллера — выбираем ATtiny13.
    Всё — шаблонный файл уже создан и можно начинать программировать:

    Предлагаемый шаблон программы — напоминает что-то знакомое :

    Соответствие функций Arduino на Си

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

    Как увидим далее, конфигурирование и работа с портами сводится к установке соответствующих битов в нужных регистрах микроконтроллера.
    Если вы уже имели дело с установкой/проверкой/очисткой битов (работа с битовыми масками), то вам будет проще разобраться в происходящем.
    Но, на всякий случай, напомню:
    чтобы установить бит N — нужно выполнить побитовое ИЛИ с числом, где этот бит установлен (чтобы получить такое число — мы побитово сдвигаем влево единицу на заданное число позиций).
    Соответственно, чтобы сбросить бит N — нужно выполнить побитовое И с числом в котором установлены все биты кроме заданного (чтобы получить такое «интвертированное число» — мы сначала получаем число в котором бит установлен, а потом применяем к нему операцию побитового НЕ).

    Так как процедура установки бита встречается чрезвычайно часто — для неё даже есть удобный макрос

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

    Для простоты понимания Си-шных методов работы, сопоставим им функции Arduino.

    Базовые функции управления портами (см. datasheet стр. 48):

    В принципе, хотя у ATtiny13 всего 1 килобайт флеша на котором сильно не разгуляешься, но даже для этой крохи частично реализован Arduino-вский фреймворк — Core13 .
    В нём есть реализации для:

    Подробнее про использование Core13 можно прочитать здесь: Прошивка и программирование ATtiny13 при помощи Arduino .
    Но даже если использовать Arduino IDE не собираетесь — взглянуть на код всё равно стоит, чтобы проверить как работает и что скрывается за реализацией функций Arduino:

    Реализация функций digitalWrite() и digitalRead() из Core13 (core13_022_arduino_1_6)

    Даже здесь используется много проверок, что разумеется даёт «защиту от дурака», но и является причиной, почему при использовании Arduino-вских функций производительность кода будет ниже.

    Частота работы микроконтроллера

    По-умолчанию, микроконтроллер ATtiny13 работает на частоте 1.2 МГц — определяется фьюз-битами (так называются специальные конфигурационные биты, находящиеся в специальных ячейках памяти и отвечающие за параметры конфигурации всего МК).
    Младший фьюз-байт lfuse = 0x6A
    Старший фьюз-байт hfuse = 0xFF

    Посмотреть, что означают эти параметры можно в удобном калькуляторе фьюзов для AVR — AVR Fuse Calculator .
    В калькуляторе, можно увидеть, что меняя значение младшего фьюз-байта с 0x6A на 0x7A — мы получим работу микроконтроллера на частоте 9.6 МГц за счёт отключения делителя тактового сигнала на 8 (CKDIV8).
    9.6 МГц / 8 = 1.2 МГц.

    Посмотреть текущие значения фьзов можно при помощи avrdude, командой:

    — получим два файла — low_fuse_val.hex и high_fuse_val.hex с шестнацетиричным значением соответствующих фьюзов.

    Blink для ATtiny13

    Теперь, зная частоту работы контроллера и базовые методы работы с портами, можем написать микроконтроллерный Hello World — а именно — Arduino-вский — Blink:

    Выбираем тип сборки — Release и жмём F7 для сборки проекта (Build -> Build Solution).

    Чтобы проверить работу программы — подключаем к третьей ножке (PB4) светодиод с токоограничительным резистором:

    Прошивка МК ATtiny13

    Остаётся прошить наш микроконтроллер.
    Можно взять готовый hex-файл из папки проекта и используя avrdude, прошить МК командой:

    А можно, для удобства прошивки, соответствующим образом настроить Atmel Studio.

    Настройка Atmel Studio для прошивки МК ATtiny13 через avrdude

    Настроить Atmel Studio для прошивки МК ATtiny13 через avrdude, очень просто .

    Идём в меню
    Tools -> External Tools

    И добавляем нашу тулзу — avrdude:

    Title:
    Deploy ATtiny13

    Command:
    C:ArduBootavrdude.exe

    Arguments:
    -C C:ArduBootavrdude.conf -c ftbb -P ft0 -B 9600 -p attiny13 -U flash:w:$(TargetDir)$(TargetName).hex:i

    Чтобы видеть лог процесса прошивки — нужно поставить галочку рядом с пунктом «Use Output window».

    Вот и всё.
    Теперь, чтобы прошить МК нужно зайти в меню Tools и выбрать наш пункт «Deploy ATtiny13».

    Управление светодиодом на мк attiny13

    Как то приобрел в хозяйство маленькие контроллеры ATTiny13. Недавно руки дошли с ними повозиться.

    Я взял в корпусе DIP8 вместе с панельками

    Характеристики ATTiny13A

    • Память для программ (FLASH) — 1Кб
    • ОЗУ — 64 Байт
    • Число входов/выходов — 6
    • Выходов ШИМ — 2
    • Аналоговых входов (АЦП 10бит) — 4
    • Таймер 8 бит — 1
    • Напряжение питания 1.8 — 5.5В
    • Рабочая частота — до 20МГц
    • Потребление в активном режиме 1.8В/ 1МГц — 190мкА
    • Потребление в режиме сна 1.8В/1МГц — 24мкА

    Программирование ATtiny13

    Для программирования я настроил среду Arduino IDE. Как известно, эта среда разработки может поддерживать дополнительные контроллеры. Например, в этой статье, я рассказывал, как программировать в Arduino IDE «народный WiFi» ESP8266. На сайте arduino.cc есть ветка, посещенная программированию ATTiny13 в среде Ардуино. У меня установлена версия 1.6.5. Скачиваю архив ATTiny core for Arduino. Распаковываю в папку c:Program Files (x86)Arduinohardware и в Arduino IDE появляются дополнительные платы

    Теперь загрузка программ. Объем памяти микропроцессора всего 1Кб и никакой загрузчик туда не поместится. Поэтому загрузка скетчей производится программатором по ISP. USBAsp, которым я программировал Atmega328 работать с тинькой не захотел. Нужна специальная прошивка программатора, с которой я возиться не захотел. Программировать микроконтроллер можно при помощи любой Ардуины. Для этого собираю такую схему:

    В Arduino IDE выбираю «Файл->Образцы->ArduinoISP» и загружаю в Ардуино скетч программатора. Затем выбираю «Инструменты->Программатор->Arduino as ISP». Теперь можно загружать скетчи в тиньку. Следует отметить, что ATTiny13 core for Arduino содержит ограниченный набор функций Ардуино.

    Применение ATTiny13

    На работе у меня есть настольная елочка со световодами

    В елочке стояла галогенная лампочка на 12В и моторчик, который крутит цветной круг-цветофильтр, который меняет цвет световодов. За 3 года умерли и лампочка и моторчик.

    Вот я и решил восстановить эту елочку кусочком RGB-ленты управляемой ATtiny13. Съема управления лентой получилась такая:

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

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

    После этого остается только закрепить плату и ленту в корпусе елочки

    Белый скотч наклеен для улучшения отражения света внутри корпуса.