Реклама ⓘ
Главная » Световые эффекты
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Гирлянда на ATtiny13a с программным ШИМ

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

Всё началось с выбора светодиодов. Решил выбрать 3мм светодиоды жёлтого свечения. Для управления ими использовал микроконтроллер ATtiny13a, так как его ножек хватает для задачи, а для питания схемы использовал 12 вольт.

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

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

Изготовление гирлянды.

Начну с того, как рассчитать количество светодиодов на канал:

  1. Необходимо узнать падение напряжения. У меня получилось 1.8В на жёлтых светодиодах.

  2. Делим напряжение питания (12В) на напряжение падения (1.8В), получаем чуть больше 6. Следовательно на каждый канал будет установлено 6 последовательно включённых светодиода.

Остаётся только спаять гирлянду. Для этого потребовалось 24 светодиода(6 на каждую часть гирлянды), провода и термоусадка.

Печатная плата

Плату я проектировал с учётом изготовления по технологии ЛУТ (вся разводка произведена на нижнем слое). Перемычки обозначены на верхнем слое. Сопротивление резисторов, которые относятся к анодам светодиодов(R7 - R10), надо рассчитывать в зависимости от использования определённых светодиодов. Резисторы и конденсаторы использованы в smd исполнении(для посадочных мест 0805, так же можно использовать компоненты 0603).

Программа.

Это самое интересное, что реализовано в проекте. У меня была идея добавить режимы с ШИМ, но у контроллера нет достаточного количества ножек аппаратных поддерживающих ШИМ, и поэтому решил реализовать его программно-аппаратным путём(аппаратным, так как всё равно используется таймер-счётчик).

Для увеличения скорости переполнения счётного регистра таймер-счётчика установил максимальную частоту контроллера. Получается, что при чистоте 9.6МГц (E: FF, H: FF, L: 7A), прерывание по переполнению счётного регистра срабатывает каждые 0.027 мс. Следовательно получается реализовать программный ШИМ и оставить время для работы основной программы(так как вне прерывания остаётся около 300 тактов для выполнения программы).

В самом прерывании, переменная считает до максимального значения разрешения ШИМ (который можно изменить) и обнуляется по достижению. В то время как в основной программе сравнивается значение с этой переменной и выставляется нужный сигнал (высокий или низкий определённой длительности) на выбранный канал.

В программе пять режимов:

  1. Включенная гирлянда

  2. Поочерёдное мигание каждым из каналов гирлянды

  3. Плавное увеличение и уменьшение яркости (при помощи ШИМ),

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

  5. Выключенная гирлянда(удобно, для того чтобы не отключать от сети)

Рассмотрим осциллограмму каждого из режимов. В первом и последнем режиме нет ничего интересно. А вот три последующих рассмотрим:
1. Циклическое переключение каналов:

Примечание: смена фронтов на Channel 3, это нажатие кнопки. А после её отжатия начинает работать выбранный режим.

2. Плавное возрастание и уменьшение значений ШИМ:

3. Циклическое переключение каналов с ШИМ каждого из них:

Ближе:

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

В памяти микроконтроллера остаётся ещё около 300 байт для написания программы, так что можно ещё добавить эффекты для гирлянды.

Код я оформил, так чтобы легко можно было бы изменить скорость каждого из режимов и разрешение ШИМ (я выбрал шести битный, так как это оптимально по плавности и скорости).

// ===== USER SETTINGS =====
#define NUMBER_MODES			5		//Count of modes/effects
// ------------------------------------
#define PWM_RESOLUTION			64		//Bit PWM (64 - 6-bit)  - 500Hz 
										///////// (127 - 7-bit) - 300Hz
										///////// (255 - 8-bit) - 130Hz
// ------------------------------------	
#define DELAY_BOUNCE_BUTTON		1480	//Button chatter elimination (~40ms) //(x - count) * 0.027ms
#define DELAY_SWITCH_BLINK		15000	//Garland Channel Switching	 (405ms) //---------------------
// ------------------------------------
#define DELAY_DIMMING_MODE_1	1000	//PWM values increase time, for the effect this value is half	  (1000ms) //(x - count) * 1ms 
#define DELAY_DIMMING_MODE_2	110		//PWM values increase time, for the effect this value is complete (110ms)  //-----------------

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
DD1 МК AVR 8-бит
ATtiny13A
1 В DIP исполненииПоиск в магазине ОтронВ блокнот
 
DA1 Линейный регулятор
LM7805
1 Поиск в магазине ОтронВ блокнот
 
VT1-VT4 Биполярный транзистор
2N5551
4 Поиск в магазине ОтронВ блокнот
 
SB1 Кнопка3x6 мм1 Поиск в магазине ОтронВ блокнот
 
HL5 Светодиод3мм1 для индикации питанияПоиск в магазине ОтронВ блокнот
 
R1-R6 Резистор
10 кОм
6 SMD 0603Поиск в магазине ОтронВ блокнот
R7-R10 Резистор
30 Ом
4 SMD 1206Поиск в магазине ОтронВ блокнот
R11 Резистор
470 Ом
1 SMD 0603Поиск в магазине ОтронВ блокнот
 
C1 Конденсатор0.1 мкФ1 SMD 0603Поиск в магазине ОтронВ блокнот
C2 Конденсатор220 мкФ1 8X11.5MMПоиск в магазине ОтронВ блокнот
C3 Конденсатор2.2 мкФ1 SMD 0603Поиск в магазине ОтронВ блокнот
 
XS1-XS4 РазъёмPLS-24 Для подключения гирляндПоиск в магазине ОтронВ блокнот
XS5 Разъём2x5 мм1 КлеммникПоиск в магазине ОтронВ блокнот
XP1 РазъёмPLD-61 Для ISP программатораПоиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (19) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
KirSan #
Программа писалась, похоже, не в Arduino IDE, однако, если переименовать файл, то всё компилится для уно.
Единственное, придётся порт вывода поменять, компилятор не выводит предупреждение об этом.

Код написан с использованием низкого уровня, что радует и говорит о высоком уровне знаний автора. Я такое ещё понимать и писать не научился, хотя двигаюсь в этом направлении. Код написан на мой взгляд очень грамотно и красиво.
Такой вопрос, что за программа для эмуляции работы?
Ответить
0
KirSan #
Хм, а получится ли этот код потом через ардуино иде загрузить в аттини..?
Ответить
0

[Автор]
NeuroCorvus #
Спасибо! Отвечу по порядку.
1. Для того чтобы перенести программу на Arduino UNO, необходимо не только поменять порты вводы-вывода, но и вектор прерывания и переконфигурировать таймер-счётчик и подстроить значения переменных для выдержки правильных(или нужных) таймингов в программе(из-за другой частоты работы МК). Так как я не думал, что программу будут использовать на других МК, то я писал основываясь только на выбранном МК. В дальнейшем при желании, можно писать уже более гибкие программы, которые будут опосредованы от железа и настраиваться.
2. Показания работы разных режимов производились с помощью логического анализатора Saleae Logic, и снятые им показания в записывались одноимённой программе.
Ответить
+1
KirSan #
А если загрузить в Arduino IDE и вгрузить прямо так в ATtiny13 через USBasp, загрузка пройдёт успешно и будет работать?
Ответить
+1

[Автор]
NeuroCorvus #
Да, всё будет работать. Но как я знаю, то для прошивки через среду Arduino IDE нужно указывать используемый контроллер, и в этом случае надо скачать ядро для ATtiny13a под Arduino IDE, хоть функции ядра не будут использованы. Или удобнее воспользоваться например avrdude и прошить hex файл.
Ответить
0
Shade #
Это все классно, на такой базе, гирлянды по моему уже свое отжили. На ардуино можно сделать проще, быстрее, а главное более гибко.
Ответить
+1
KirSan #
Никто не запрещает поменять расширение файла и залить в Уно. И делай с программой шо хошь.
А можно и наоборот делать. Разработать на уно, а потом пару нажатий на клаву - и оно работает на аттини. Чем не гибкость?
Ответить
+1
Алекс #
А по мне, то что нужно! У меня как раз завалялось пару "тинек" и небольшая и даже светодиоды правда разных цветов, нужно будет пересчитать по падению. А ардуино для таких задач излишне.
Ответить
+1
Mihail #
Вместо 12 вольт я использую стабилизатор на 3,3 В. Все светодиоды каждой гирлянды в параллель. Attiny13 позволяет сделать 6 независимых каналов вывода. Кнопка переключения режимов - излишество! Режимы должны переключаться автоматически и желательно по хаотическому циклу, чтобы не надоедать. Если не хватает памяти, для реализажии всей фантазии эффектов - ставим Attiny 45 или даже Attiny 85. Итог - ненадоедающая 6 канальная гирлянда, работающая от ненужной зарядки от мобильного телефона.
Ответить
0

[Автор]
NeuroCorvus #
Добрый день! Интересный вариант исполнений гирлянды. Мне хотелось бы узнать у Вас, а вы питали линии от ножек МК или от транзисторов. Второй вопрос, как я понимаю, что при такой схеме включения надо ставить резистор на каждый светодиод, а эту задачу как Вы решили?)
Ответить
+1
Mihail #
Питание, естественно, через транзисторные ключи. Никаких резисторов на светодиоды не ставил. Светодиоды одной партии. Различия в яркости не заметил.
Ответить
0
andro #
Низковольтная альтернатива простым китайским гирляндам. Собрать бы такую на симисторах.
Ответить
0
oleg5d75 #
На выходе можно поставить три оптрона и три симистора и управлять покупными гирляндами на 220 В
Ответить
+1
Maxim #
Симисторы с ШИМом не взлетят. ТОлько если не внедрять схему фазового регулирования с детектированием нуля.
Ответить
0
oleg5d75 #
Вы попробуйте, прекрасно все работает
Ответить
0
seawar #
Что, и яркость плавно регулируется?
Ответить
0
oleg5d75 #
Естественно регулируется, китайские гирлянды за пол доллара это также делают , там даже проще, один кристал и три... четыре симистора безо всякой опторазвязки
Ответить
+1
Максим #
А почему все временные интервалы реализованы через программные счётчики, а не через библиотеку задержек? Не лень было высчитывать константы? Я только через них узнал, что МК работает на максимальной тактовой частоте 9,6 МГц, а то фьюзы по частотам здесь почему то не указаны...
Очень сложный код для восприятия, перегруженный доп. функциями и переменными. Более менее наглядным и логичным является только основная программа main, всё остальное... ну такое. Работает конечно, я взял этот код как референс и намерен его полностью переделать и дополнить новыми эффектами.
А ещё в режиме off усыпить контроллер режимом powerdown для экономии работы от батарейки.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор для сборки - LED лампа
Набор для сборки - LED лампа
Набор для сборки - УНЧ 2х60 Вт на TDA7294 Тестер ESR, полупроводников, резисторов, индуктивностей
вверх