Организация пространства. Советы и идеи. Сад и участок

Светодиодная гирлянда на attiny2313 схемы. Светодиодная гирлянда на микроконтроллере

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

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

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

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

Чтобы настроить определенные выводы (пин) МК на вход, следует в соответствующие биты регистра 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 к МК.

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

Эта СДУ разработана в двух вариантах. Первый управляет только расположенными на его плате светодиодами и предназначен для разработки и отладки программ световых эффектов. Микроконтроллер с отлаженной программой может быть перенесён на плату второго варианта СДУ, к которому можно подключить 16 осветительных приборов, питающихся от сети 220 В

Из 20 выводов микроконтроллера ATtiny2313 в рассматриваемых СДУ использованы 19: два — для подачи напряжения питания; один — для подключения кнопки, управляющей скоростью воспроизведения световых эффектов; 16 — для формирования сигналов управления гирляндами или другими световыми приборами.

Предусмотрено восемь значений скорости воспроизведения эффектов, их переключают по кругу нажатиями на кнопку. При минимальной скорости состояние гирлянд изменяется каждые 8 с, а при максимальной период смены уменьшается до 0,5...1 с. Следует иметь в виду, что из-за особенностей программы необходимая для переключения скорости длительность нажатия на кнопку довольно велика. К тому же она зависит от скорости, установленной в данный момент. Информацию о скорости микроконтроллер хранит в своём EEPROM, поэтому при включении СДУ она становится такой же, какой была в предыдущем сеансе работы.

Рис. 1. Схема СДУ с микроконтроллером ATtiny2313 на 16 гирлянд

Схема отладочного варианта СДУ, управляющего только светодиодами HL1—HL16, изображена на рис. 1 .

Микроконтроллер DD1 работает от внутреннего RC-генератора частотой 4 МГц. Разъём ХР1 предназначен для соединения с программатором установленного в панель СДУ микроконтроллера. На время программирования цепь питания светодиодов должна быть разорвана выключателем SA1, что исключает их влияние на процесс программирования. Резистор R1 поддерживает высокий логический уровень напряжения на входе PD2 микроконтроллера, когда кнопка SB1 отпущена. При нажатой кнопке этот уровень становится низким.

Устройство собрано на печатной плате размерами 95x70 мм из фольгированного стеклотекстолита. Её чертёж показан на рис, 2 . Для микроконтроллера на плате предусмотрена панель. Это позволяет запрограммировать его и проверить в работе, а затем перенести в другую СДУ, которая будет описана ниже.

Плата рассчитана на установку оксидных конденсаторов (С1 и С2) SR или аналогичных. Диэлектрик конденсаторов СЗ и С4 — керамика. Резисторы — CF-0,125 или другие подобные. Трансформатор Т1 — ТПГ-2 с вторичным переменным напряжением 6 В, конструктивно предназначенный для установки на печатную плату. Можно применить его аналог BVEI 306 2061 мощностью 2,6 В-А. Стабилизатор DA1 в рассматриваемом случае теплоотвода не требует. Кнопки SB1 и выключатель SA1 могут быть любыми, подходящими по размерам для установки на плату.

Второй вариант СДУ управляет не светодиодами, а лампами накаливания или другими световыми приборами на 220 В. Для этого каждая из пар резистор—светодиод предыдущего варианта заменена симисторным коммутатором, схема которого изображена на рис. 3 . Для управления мощным симистором VS1 здесь использован оптрон 1)1, фотодинистор которого устроен так, что моменты его открывания всегда совпадают с переходами приложенного к нему напряжения через ноль. Это уменьшает создаваемые СДУ электромагнитные помехи.

Поскольку для управления оптроном МОС3043 достаточно тока через его излучающий диод всего 5 мА, суммарная нагрузка на микроконтроллер не превышает 80 мА. Общий ток потребления от узла питания в новом варианте приблизительно в два раза меньше. Это позволило отказаться от трансформатора и применить бестрансформаторный узел с гасящими конденсаторами. На его схеме (рис. 4 ) нумерация элементов продолжает начатую на рис. 1 .

Печатная плата второго варианта имеет размеры 195x85 мм. Её чертёж показан на рис. 5 . Элементы шестнадцати одинаковых коммутаторов имеют на нём позиционные номера с цифровыми префиксами, означающими порядковый номер коммутатора. Например, 8R1—8R3, 8U1, 8VS1 — элементы восьмого коммутатора, заменившего резистор R9 и светодиод HL8 и управляющего лампой накаливания (или собранной из них гирляндой) 8EL1.

Все 16симисторов 1VS1 — 16VS1 закреплены на общем теплоотводе из алюминиевой пластины размерами 160x25x2 мм, расположенной перпендикулярно поверхности платы. Крепёжные отверстия для симисторов просверлены в ней на высоте 19 мм от платы.

Симисторы ВТ138Х-600 в полностью изолированном корпусе TO-220F могут быть заменены приборами серий ВТ137—ВТ139 на 600 или 800 В, в том числе в обычном корпусе ТО-220 с металлическим крепёжным и тепло-отводящим фланцем. Поскольку этот фланец соединён внутри симистора с его выводом 2, а все эти выводы соединены на плате, изоляция симисторов от теплоотвода не требуется.

Рекомендуется сначала закрепить на теплоотводе симисторы, а затем смонтировать всю их сборку на плату. Непосредственно к выводам симисторов припаивают резисторы 1R3—16R3. Выводы 1 симисторов зажимают в обращенных к ним отверстиях винтовых зажимов ЗВИ-10-2,5-6 мм2, колодка с которыми (рис. 6 ) установлена вдоль длинной стороны платы рядом с сими-сторами. Всего в колодке 17 пар зажимов, 16 из которых служат для подключения ламп 1EL1—16EL1, а ещё одна — для их общего провода.


Конденсаторы С5 и С6 — К73-17В или импортные, способные работать при переменном напряжении не менее 250 В. Резисторы 1R1 —16R1 — MF-1.

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

К статье прилагаются три версии программы микроконтроллера, пригодных для использования в обоих вариантах СДУ:
PG16H_S_REGULhex — 16 гирлянд работают независимо;
PG8_MK_S_REG.hex — две группы по восемь гирлянд работают синхронно;
PG4_MK_S_REGUL.hex — четыре группы по четыре гирлянды работают синхронно.

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

Журнал Радио,№11 2014г. И. АБЗЕЛИЛБАШ, г. Сибай, Башкирия

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

Данное устройство управляет 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 можно регулировать яркость свечения светодиодов.


Документация (Datashit) на МК ATtiny231320PI
Прошивку HEX, а также файлы программы на ассемблере вы можете
скачать здесь (30 кБайт) .
Видеоролик демонстрации работы устройства (перебор всех эффектов): http://filearchiv.ru/2140780
Видеоролик демонстрации работы устройства (изменение скорости выполнения программ эффектов): http://filearchiv.ru/2140535
Видеоролик демонстрации работы устройства (изменение частоты мерцания светодиодов): http://filearchiv.ru/2140747