Отделка

Схема гирлянды на pic микроконтроллере. Схема новогодней гирлянды на микроконтроллере своими руками. Формирование линий светодиодов

Схема гирлянды на pic микроконтроллере. Схема новогодней гирлянды на микроконтроллере своими руками. Формирование линий светодиодов

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

Во первых захотелось просто творчества, во вторых - своя самодельная гирлянда светит как-то и радостнее и веселее покупных.
Гирлянда собрана на микроконтроллере ATmega8, и состоит из 42-х светодиодов.
Автор данного проекта Дмитрий Базлов (Дима9350) и он написал код для микроконтроллера, в котором для реализации устройства заложено 11 эффектов (программ), из которых 8 программ для синих, красных и жёлтых светодиодов (по схеме верхний ряд), и 3 эффекта (программы) для белых светодиодов (нижний ряд светодиодов), среди которых имеется эффект падающей снежинки.
Напряжение питания гирлянды от 7 до 15 вольт (можно до 24 вольт, если на стабилизатор поставить небольшой радиатор), или если без стабилизатора напряжении L7805, то 5 вольт, например: USB порт компьютера. Длинна гирлянды в авторском варианте составила один метр. Ниже видео авторской гирлянды с питанием от порта USB.

Схема устройства состоит из:
- микроконтроллера ATmega8;
- чип резисторы для светодиодов 300-330 Ом - 21шт;
- микросхема L293:
- 2 конденсатора 16 вольт 10мкф;
- стабилизатор на 5 вольт - 7805.
Фьюз биты микроконтроллера установлены на 8 мГц от внутреннего генератора.

Рисунок 1.
Схема гирлянды.

Печатная плата гирлянды.

Рисунок 2.
Печатная плата гирлянды.

Внешний вид собранной гирлянды на печатной плате со стороны деталей.

Рисунок 3.
Внешний вид собранной гирлянды на печатной плате со стороны деталей.

Внешний вид собранной гирлянды на печатной плате со стороны монтажа.

Рисунок 4.
Внешний вид собранной гирлянды на печатной плате со стороны монтажа.

Так, как в авторском варианте схемы, в составе гирлянды имеется микросхема L293 (4-х канальный драйвер управления светодиодами), которая по цене соизмерима с микроконтроллером, да и не везде наверное доступна, то схема была немного переделана, и драйвер заменён на два транзистора разной проводимости (КТ814, КТ815 и один резистор на 1 кОм), которые вполне отлично справляются со своей задачей.
Обновлённая схема гирлянды, представлена на рисунке ниже.

Рисунок 5.
Схема гирлянды.

Нижний ряд светодиодов на схеме - это светодиоды белого цвета свечения, верхний ряд - чередование светодиодов по цвету: - синий, жёлтый, красный и так далее.
Цвета могут быть на Ваше усмотрение. Светодиоды желательно применять с повышенной яркостью свечения.
Начало гирлянды, (или её конец, как хотите) - идёт справа налево. "Снежинки" падают, начиная с белого светодиода HL2 и до светодиода HL42, то есть светодиоды HL1 и HL2 должны располагаться на самом верху (ими заканчивается или начинается гирлянда).
В качестве драйвера здесь применены два транзистора разной структуры. Были использованы, как уже говорилось выше, транзисторы КТ814, КТ815. Вполне справятся в этой схеме и транзисторы КТ315 и КТ361, но я их не пробовал ставить.

В авторском варианте белые светодиоды установлены на одном уровне с цветными, так как они подключены параллельно им, но разно-полярно. Расстояние между светодиодами 4-5 см., потому длина гирлянды составила метр.
Я ставил белые и цветные светодиоды отдельно друг от друга, и на расстоянии 5-6 см. Длина гирлянды в моём варианте два с небольшим метра, что вполне подойдёт для ёлки средних размеров. Причём плату спаял в течении получаса, а с гирляндой пришлось немного повозиться. Провода для соединения светодиодов желательно применять тонкие, многожильные. Я использовал связные, многожильные провода, диаметром 0,5-0,6 мм. (вместе с изоляцией), и жгут гирлянды у платы, получился не толстым.

Посмотрите демонстрационное видео работы новогодней гирлянды.

ЦМУ/СДУ на микроконтроллере (8 каналов)

Это устройство объединяет в себе цветомузыку (ЦМУ) и светодинамическое устройство (СДУ) на 8 каналов, с множеством световых эффектов. Выходы устройство рассчитаны на подключение достаточно мощной нагрузки.

Разделение частот по каналам ЦМУ чисто программное и очень простое, используется PIC микроконтроллер PIC16F628A. Подсчитывается количество импульсов таймера/счетчика за строго определенный промежуток времени и в зависимости от значения этого счетчика включается тот или иной светодиод.

А вот схема устройства:

Копки позволяют:

  • Выбрать режим - ЦМУ/СДУ. В режиме СДУ даже если есть сигнал на входе работает только основная программа светодинамического устройства. В режиме ЦМУ если нет сигнала то воспроизводиться выбранный эффект СДУ, как фоновый режим.
  • Выбрать эффект СДУ. Кнопка циклически переключает все возможные эффекты светодинамического устройства.
  • Увеличить и уменьшить скорость. Эти кнопки управляют скоростью эффектов СДУ, на ЦМУ никакого действия не оказывают.

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

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

2, схема

Данный проект светодиодной гирлянды на микроконтроллере хорошо подходит для начинающих. Схема отличается своей простотой и содержит минимум элементов.

Данное устройство управляет 13 светодиодами, подключенными к портам микроконтроллера. В качестве микроконтроллера используется МК фирмы ATMEL: ATtiny231320PI . Благодаря использованию внутреннего генератора, выводы 4 и 5 задействованы как дополнительные порты микроконтроллера PA0,PA1. Схема обеспечивает выполнение 12 про- грамм эффектов, 11 из которых - индивидуальные комбинации, а 12-тая про- грамма – последовательный однократный повтор предыдущих эффектов. Переключение на другую программу осуществляется нажатием на кнопку SB1. Программы эффектов включают в себя и бегущий одинарный огонь, и нарастание огня, и бегущую тень и многое другое.

Устройство имеет возможность регулировки скорости смены комбинаций при выполнении программы, которая осуществляется нажатием на кнопки: SB2 – увеличение скорости и SB3 – уменьшение скорости при условии, что переключатель SA1 находиться в положении "Скорость программы”. Также имеется возможность регулировать частоту горения светодиода (от стабилизированного свечения до легкого мерцания), которая осуществляется нажатием на кнопки: SB2 – уменьшение (до мерцания) и SB3- увеличение при условии, что переключатель SA1 находиться в положении "Частота мерцания”. У переключателя SA2 замкнутое положение соответствует режиму регулировки скорости выполнения программ, а разомкнутое - режиму регулировки частоты горения светодиодов.

Порядок нумерации светодиодов в схеме соответствует их порядку зажигания при выполнении программы. При необходимости вывод RESET может быть использован для сброса, а в качестве порта PA2 он не задействован. В устройстве выбрано при программировании тактовая частота 8 МГц от внутреннего генератора (фузы CKSEL3..0 - 0100).Хотя возможно использование частоты в 4 МГц(фузы CKSEL3..0 - 0010) с соответствующими изменениями временных интервалов работы схемы.

Тип светодиодов, указанный на схеме использовался в опытном образце, для схемы подойдут любые светодиоды с напряжением питания 2-3 вольта, резисторами R1-R17 можно регулировать яркость свечения светодиодов.

Прошивку HEX, а также файлы программы на ассемблере вы можете скачать ниже

Список радиоэлементов

Обозначение Тип Номинал

Магазин
DD1 МК AVR 8-бит

ATtiny2313

1
Поиск в магазине
С1 Электролитический конденсатор 100 мкФ 10 В 1
Поиск в магазине
R1-R17 Резистор

1 кОм

17
Поиск в магазине
LED1-LED13 Светодиод LD571 13
Поиск в магазине
SB1-SB3 Кнопка
3
Поиск в магазине
SA1 Выключатель
1
Поиск в магазине


3, схема

Переключатель елочных гирлянд на основе PIC16C84.


Наиболее подходящей платформой для такого устройства мне представляе-
тся микроконтроллер AT89C2051 фирмы Atmel, AT90S2313 (так же Atmel), ли-
бо PIC16F84 от Microchip. Я выбрал PIC16C84 - исключительно из соображе-
ний применить куда-нибудь устаревший кристалл (к сожалению, для данной
задачи он не очень удобен из-за особенности построения таблиц в програм-
мной памяти).

2. Возможности устройства.

Поддерживает четыре канала управления (используется фазовое управле-
ние тиристорами с дублирование на контрольные светодиоды).

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

3. Управление устройством.

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

"<<" - выбор программы, переключиться на предыдущую;
">>" - выбор программы, переключиться на следующую;
При выборе программы ее номер (в двоичном коде) отображается на инди-
каторных светодиодах в двоичном коде, до тех пор, пока нажата кнопка вы-
бора.
"Speed" - переключение скорости выполнения программы, циклически
"normal">"fast">"slow">"normal".
"Demo" - автоматический перебор программ, после выполнения программы
начинается выполнение следующей. Этот режим отменяется при нажатии кноп-
ки "<<" или ">>".

Кроме того, при включении устройства можно выбрать дополнительные ре-
жимы, для чего надо нажать и удерживать кнопку "Demo", и, одновременно
с ней комбинацию из остальных кнопок, каждая из которых определяет сле-
дующие режимы:
"<<" - режим "резкого" включения/выключения, без плавной регулировки
яркости в канале;
">>" - эта кнопка пока зарезервирована для будущего использования;
"Speed" - режим управления тремя каналами, четвертый канал в некото-
рых режимах не использовать (типа "бегущих огней").

4. Конструкция и детали.

В качестве микроконтроллера U1 можно использовать PIC16C84 или
PIC16F84, с любой тактовой частотой. В качестве времязадающего элемента
- кварцевый или пьезорезонатор с частотой 4 MHz, особых требований к
стабильности не предъявляется. Тиристоры (симисторы) - практически лю-
бые, с достаточным запасом по коммутируемому напряжению. Диоды в "сило-
вом" выпрямителе - выбирать с достаточным запасом по току и по обратному
напряжению не менее 400 вольт. Токоограничивающие резисторы в цепи упра-
вляющих электродов тиристоров - рекомендуется выбирать с рассеваемой мо-
щностью не меньше 1 ватта.

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

"Продвинутые" пользователи могут попробовать усовершенствовать управ-
ляющую программу или добавить новые световые эффекты (присылайте, пожа-
луйста, описание или "исходники" новых эффектов автору), программа на-
писана с использованием мнемокодов ассемблера spasm от Parallax inc.,

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

Состав изделия

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

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

Анализ повреждений

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

  • Крайне тонкие провода. Они многожильные, каждая жила без преувеличения толщиной в волос, следовательно, соединять их очень трудно и неудобно. Равно как и припаивать.
  • Часто выходящие из строя тиристоры. Они отвечают за смену режимов мигания, что, собственно, и создает праздничное настроение.
  • Лампочки. Независимо от их вида - обычные они или светодиодные, лампы могут перегореть. Если гирлянда перестала мигать, например, зеленым светом, в то время как остальные в порядке, то, скорее всего, пришла в негодность зеленая лампочка. Но может быть и отсоединение провода от ножек светодиода определенного цвета.

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

Устранение неисправностей

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

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

Соединение проводов

Разрыв провода найти довольно просто. Необходимо тщательно просмотреть гирлянду по всей ее длине , соблюдая аккуратность, чтобы не добавить новых повреждений. Если провод оторвался от лампочки с одной стороны, можно не мучиться с пайкой и отсоединить его и с другого контакта, а потом просто скрутить два конца вместе. При общем количестве в 100−500 лампочек отсутствие одной останется незамеченным. И хотя напряжение на остальные элементы возрастет, так как в последовательной цепи оно делится поровну, разница все же будет незначительной и на ускорение износа деталей гирлянды не повлияет.

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

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

Замена лампочки

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

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

Ремонт микросхемы

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

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

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

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

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

Подключение кнопки к микроконтроллеру

Схема гирлянды приведена ниже.

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

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

DDRB = 0b00000000;

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

Если в бит регистра PORT записан ноль, то пин имеет высокое входное сопротивление.

При установке бита в единицу к ножке МК подключается подтягивающий резистор. Резистор называется так потому, что посредством его “подтягивается” высокий потенциал (+ 5 В) к соответствующей точке электрической цепи; в данном случае – к пину микроконтроллера.

Проверка состояния вывода МК с помощью PINx

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

Данный регистр по аналогии можно сравнить с датчиком. С него можно только считывать информацию. Записать в него ничего нельзя. PIN является противоположность регистра PORT, в который выполняется только запись, но не считывание данных.

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

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

Один контакт ключа соединим с землей (общим проводом), а второй – с выводом микроконтроллера. Когда ключ разомкнут, — вывод находится под высоким потенциалом (+ 5 В), подтянутый внутренним резистором МК. При этом соответствующий бит регистра PIN будет установлен в единицу.

При нажатии на кнопку данный вывод соединится с общим проводом (“минусом”) и на нем возникнет низкий потенциал. А бит регистра PIN автоматически установится в ноль.

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

Светодиодная гирлянда в коде

Теперь давайте напишем целиком код программы, а затем рассмотрим его отдельные элементы. Алгоритм работы программы следующий: при замыкании первого ключа “лампочки” будут включаться в одной последовательности, а при замыкании второго – “лампочки” будут загораться иначе. Если обе кнопки на нажаты, то все светодиоды должны быть выключены.

#define F_CPU 1000000UL // Объявляем частоту работы микроконтроллера 1 МГц

#include

#include // Подключаем библиотеку задержек

#define Z 300 // Значению задержки присваиваем имя Z

#define VD PORTD // Присваиваем порту D имя VD

#define K PORTB // Присваиваем порту B, к которому подключены кнопки, имя K

int main(void)

DDRB = 0b00000000; // Настраиваем порт B на вход

DDRD = 0b11111111; // Настраиваем порт D на выход

VD = 0b00000000; // Выключаем все огни

K = 0b11111111; // Включаем подтягивающие резисторы

while (1)

if (PINB == 0b11111110) // Проверяем, нажата ли 1-я кнопка

VD = 0b11111111; // Если ключ замкнут, то мигаем «лампочками»

_delay_ms (Z);

VD = 0b00000000;

_delay_ms (Z);

else

VD = 0b00000000; // Если ключ разомкнут, то все LED выключены

if (PINB == 0b11111101) // Проверяем, нажата ли 2-я кнопка

VD = 0b00000001; // Если кнопка нажата, то поочередно включаем LED

_ delay _ ms (Z); // с задержкой 0,3 с

VD = 0b00000011;

_delay_ms (Z);

VD = 0b00000111;

_delay_ms (Z);

VD = 0b00001111;

_delay_ms (Z);

LED = 0b00011111;

_delay_ms (Z);

VD = 0b00111111;

_delay_ms (Z);

VD = 0b01111111;

_ delay_ms (Z);

VD = 0b11111111;

_delay_ms (Z);

VD = 0b00000000;

_ delay _ ms (Z);

else

VD = 0b00000000; // Если ключ не замкнут, то все LED выключены

Операторы if и else

Назначение препроцессоров и ним хорошо известны из предыдущих статей. Здесь новым для нас есть оператор if . If переводится с английского «если». Если условие, указанное в круглых скобках, выполнятся, т.е. истинное, то выполняется код программы в фигурных скобках. Например, если переменная a больше 1 единицы, то переменной c присвоится значение a + b.

if (a >1)

c = a + b;

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

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

if (a >1) c = a + b;

Также оператор if работает в связке с оператором else .

if (a >1) → если a >1, то = a + b

c = a + b;

else → в противном случае, c = a — b

c = a — b;

Работает это так. Если a > 1, то c = a + b. В противном случае, т.е. когда а меньше или равно единице, то c = a – b.

Пояснение кода программы

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

Обратите внимание, что команда присвоения состоит из одного знака равно «=», а команда проверки условия «равно» состоит из двух знаков равно, написанных без пробела «==».

Когда кнопка не нажата, в бите регистра PINB появится единица, вызванная высоким потенциалом подтягивающего резистора. В этом случае управление перейдет к оператору else и все LED будут выключены.

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

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

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

Ранее в статье вы подробно рассмотрели настройку на выход, а здесь – на вход. Теперь объединим все вместе и приведем простой наглядный алгоритм.

Гирлянда на ATtiny2313 собирается очень просто. В этой простой статье мы с вами будет делать мини-гирлянду из 4 светодиодов.

Нажата ли ты, наша кнопочка, или отжата?”, – именно таким вопросом мы задавались в прошлой статье. И в зависимости от состояния кнопки мы делали эффект из 4 светодиодов. В этой статье мы с вами разберем похожую ситуацию. Итак, погнали!

Помните китайскую гирлянду за 100 руб?

Нажимаем кнопочку и эффект моргания становится абсолютно другой;-) Именно этим мы с вами и займемся в этой статье;-)

Мы не будем делать китайску гирлянду с N-ным количеством лампочек, а сделаем упрощенную схему такой гирлянды на МК AVR Tiny2313 и четырех светодиодах. С помощью кнопки мы будем менять эффект моргания.

Итак, наша задача буквально звучит так:

Создать гирлянду на МК AVR Tiny2313 из четырех светодиодов и одной кнопки с самовозвратом (кнопка, которую нажал и сама отжимается). Нажимаем один раз кнопку – появляется первый эффект моргания кнопки, нажал второй раз кнопку – появился второй эффект моргания и тд. Всего у нас будет семь эффектов. Условие такое, что пока светодиоды переливаются морганием, у нас МК не реагирует на кнопку. То есть пока не прошел эффект, нажатие на кнопку никак не отображается на эффекте. Эффект НЕ прерывается. Когда эффект закончится, только тогда МК будет обрабатывать нажатие на кнопку.

Задача вроде бы ясна. Для начала составим простенькую схемку в Proteus. Схемка будет выглядеть примерно как-то так (кликните для увеличения, откроется в новом окне):


Все? Нет не все! Теперь шьем наш МК HEX-файлом. А где его взять? Из Atmel Studio 6. Но чтобы его создать, нам потребуется для начала написать программу, по которой будет работать наш МК. Как все это сделать, смотрим в этой статье.

Ниже приведен текст с комментариями:



Обратите внимание также на строчку кода:

{_delay_ms(50); //включаем задержку 50 миллисекунд для антидребезга

Программа Proteus спокойно бы работала и без этой строчки кода. Зачем мы тогда ее вставили? Дело все в том, что реальное положение дел чуточку хуже. Козлом отпущения в данном случае будет самая безобидная кнопка, которую мы поставим в схему на переключение гирлянд, собрав ее на макетной плате.

Что делает кнопка в схеме согласно схемотехнике МК? Подает логический ноль или единицу на ножку МК. Так? Так. Но в реальной схеме она не сразу замыкает и размыкает цепь. При замыкании или размыкании кнопки у нас нет четкого переключения уровней сигнала с логической единицы на ноль и наоборот. Переключение с помощи кнопки выглядит примерно вот так:

С логической единицы в ноль примерно вот так:


С нуля на единицу как-то вот так:


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

Прикрепляю к проекту СИшник, HEX и файл Протеуса.