Страница 1 из 1

Диммирование светодиодов на ATMega

Добавлено: Вт авг 28, 2012 21:37:39
SparkDT
Добрый вечер уважаемые форумчане! Много читал вся кого интересного на этом форуме, вот теперь и сам решил спросить :)
Так как являюсь заядлым аквариумистом, решил сделать очередную крышку со светодиодным типом освещения. И чтобы, как говориться, гулять на все деньги, сделать еще контроллер для этого светилька.
Схему и аппаратную часть вроде как подобрал и разобрался :)
Остается для меня затруднительный вопрос с прошивкой, а именно реализация ШИМ управления каналами светильника (их в светильнике будет 3).
Необходимо реализовать рассвет/закат по такой схеме:
1 точка:
8:00 – 10:00 (плавное включение)
Освещенность: 0/0/0 % - 25/25/25 %

2 точка:
10:00 – 12:00
Освещенность: 25/25/25 % - 50/50/50 %

3 точка:
12:00 – 13:00
Освещенность: 50/50/50 % - 99/99/99 %

4 точка:
13:00 – 15:00
Освещенность: 99/99/99 % - 99/50/99 %

5 точка:
15:00 – 16:00
Освещенность: 99/50/99 % - 99/99/99 %

6 точка:
16:00 – 18:00
Освещенность: 99/99/99 % - 10/70/10 %

7 точка:
18:00 – 18:30
Освещенность: 10/70/10 % - 0/50/0 %

8 точка:
18:30 – 19:30
Освещенность: 0/50/0 % - 0/0/0 %

9 точка:
19:30 – 08:00
Освещенность: 0/0/0 %

Вопрос мой состоит в том, как реализовать плавное ШИМ регулирование на протяжении определенного времени. То есть я не могу понять, как прописать в основной процедуре (вечном цикле) плавное наращивание мощности?
Огромная благодарность всем кто откликнеться на мое обращение! :)

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 08:43:33
zero648
Управлять каналами нужно независимо, т.е. три раздельных ШИМа, или одним ШИМом три канала параллельно?

А на схему можно взглянуть?

А все, понял нужно три независимых ШИМа, сразу не обратил внимание :))

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 08:54:04
mazda
схема тут ни причём, про таймеры почитай, есть статьи

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:05:31
zero648
SparkDT, какой камень хочешь использовать?
mazda писал(а):схема тут ни причём, про таймеры почитай, есть статьи
Интересно, как без схемы, не имея о ней представления, программу можно писать?

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:24:01
mazda
вопрос автора темы - как управлять уровнем шим плавно,
ответ на его вопрос заключаеться в управлении значением предела таймера, нужно читать про таймеры
предел должен меняться плавно, по времени и не особо точно, тоже работа с таймером, если таймеров не хватит, реализует програмно.

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

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:24:42
mazda
вопрос автора темы - как управлять уровнем шим плавно,
ответ на его вопрос заключаеться в управлении значением предела таймера, нужно читать про таймеры
предел должен меняться плавно, по времени и не особо точно, тоже работа с таймером, если таймеров не хватит, реализует програмно.

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

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:25:24
SparkDT
Осуществляться данная затея действительно будет на трех независимых ШИМах, для этих целей думаю использовать ATMEGA 16 или собратья постарше.
Схема действительно тут ни к чему, так как она очень проста. С МК выходит 3 ШИМ сигнала (ШИМ использовать буду аппаратные) и вот ними надо управлять. Меня более интересует алгоритм программы. Не могу понять как правильно организовать в вечном цикле нужные проверки для плавного наращивания мощности (то есть 25% за два часа и чтобы это было плавно, незаметно для глаза, без ступеней). Думаю выразился понятно, если нет прошу Вас спросить еще не достающую для помощи информацию :)

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:37:57
mazda
сам принцип

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:45:18
a_skr
любой attiny хватит для этой задачи с программным ШИМ. или наращивать задачи планируете?
Не могу понять как правильно организовать в вечном цикле нужные проверки для плавного наращивания мощности (то есть 25% за два часа и чтобы это было плавно, незаметно для глаза, без ступеней)
ну, допустим каждую секунду (минуту/вообще всегда) рассчитываете текущий процент (я бы взял уровней побольше на канал - например, 256) исходя из прошедшего времени на данном интервале для каждого канала и просто обновляете значение переменной. обработчик таймера (для программного ШИМ) или сами таймеры (для аппаратного) все остальное делает сам.
ps. могу взяться написать все за небольшой кусочек пирога ;)

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 09:47:14
SparkDT
Получается, что такую программу можно реализовать только с помощью таймеров?
А возможно при этом организовать динамическое значение (то есть дополнительно настраивать расписание с помощью кнопок на устройстве), или такой алгоритм предусматривает только статическое запрограммированное действие?

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:01:08
a_skr
можно. все, что угодно.

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:06:38
BOB51
да все что угодно можно завенуть - и программно и аппаратно и комбинировано - стандартный командоаппарат из раздела программируемое реле времени с регулятором яркости - было бы желание и конкретно сформулированная задача (ну и коробочка с деталюшками) на каком МК - также не критично - их минимум 3 подвида имеется, (можно конечно и на STM32 или AVRовских ARM® processor-based microcontrollers замутить с доступом из интернета через спутник или к настольному ПК прицепить :))) )
:tea:
мня немного опередили :)

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:10:42
Engineer_Keen
25% при 8 битной ШИМ это 64, 2 часа это 120 минут, т.е. нужно раз в пару минут увеличивать яркость на 1. Значит нужно использовать один из таймеров, чтобы он отсчитывал 2х минутные интервалы и в его прерывании увеличивать величину ШИМ. Это как пример.
А вообще можно сделать так:
1) сделать часы
2) разбить вечный цикл на нужное количество интервалов (ваши "точки"), переходить между ними по показаниям часов
3) для каждого интервала задать скорости изменения цветов, например в минуту, (можно 16 разрядные - для точности, сами значения ШИМ тоже 16-разрядные, но в регистры OCR записывать старшие 8 бит, ну или все 16, если ШИМ-16бит) например для 1-й точки - 25%*65536 / 120 минут = 136, т.е. +136/+136/+136 7-й точки - интервал 30 минут, скорости -218/-437/-218
4) в каждом интервале к текущему значению ШИМ прибавлять/отнимать эти скорости изменения.

PS: 3 аппаратных 16 битных ШИМ каналов в меге16 нет, но для освещения ИМХО 8-бит хватает + частоты выше сотен герц так же излишни для света => ШИМ можно сделать программный, тогда и таймера достаточно одного (в нем же отсчитывать минутные интервалы), тогда мега16 легко меняется на ТИНИ13. Но это уже не мне решать :)))

Мда, долго я писал, уже все сказали :facepalm: :oops:

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:36:32
SparkDT
Спасибо всем ответившим, сейчас пытаюсь все переварить, так как не являюсь профи в этом деле и многое для меня требует для начало знакомства :)

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:40:59
zero648
SparkDT писал(а):Осуществляться данная затея действительно будет на трех независимых ШИМах, для этих целей думаю использовать ATMEGA 16 или собратья постарше.
Mega8 тоже подойдет, если все делать аппаратно, три таймера, из них два на три ШИМа, один на отчсет времени. Тактировать лучше от внешнего кварца, внутренний генератор не точный.

Re: Диммирование светодиодов на ATMega

Добавлено: Ср авг 29, 2012 10:50:08
a_skr
на отсчет времени не обязательно отдельный таймер, можно один из ШИМовских использовать, хотя отдельный удобнее. тактировать не лучше, а необходимо от внешнего кварца. еще лучше внешний RTC, электричество ведь иногда куда-то девается ;)

Re: Диммирование светодиодов на ATMega

Добавлено: Чт авг 30, 2012 15:31:33
SparkDT
В реализации проекта будет однозначно использоваться внешний RTC. Скажите это облегчит реализацию прошивки?
И нужно ли в таком случае использовать счетчик и таймер?

Re: Диммирование светодиодов на ATMega

Добавлено: Чт авг 30, 2012 15:42:08
mazda
счётчик времени делай програмным, освободишь от него таймеры и прошивка проще.

Re: Диммирование светодиодов на ATMega

Добавлено: Чт авг 30, 2012 15:52:09
BOB51
все энто хозяйство благополучно умещается в пикушку из ряда 16/18 родичей +жки(если программу "по ходу работы" менять будеш), а если вариант "суточного реле" то и жки не надобно - вполне впишешся в pic16f628a (наиболее на сегодня распространенный) с резервной батарейкой ... для форсу можно внешнюю EEPROMку для сменной программы привесить (сменил пзушку и другая программа побежала) только у суточного реле условие - запуск обязательно в определенное время делать - там без дисплея "подвод стрелок" затруднителен :beer:

Re: Диммирование светодиодов на ATMega

Добавлено: Чт авг 30, 2012 19:09:52
zero648
SparkDT писал(а):В реализации проекта будет однозначно использоваться внешний RTC. Скажите это облегчит реализацию прошивки?
И нужно ли в таком случае использовать счетчик и таймер?
Тогда конечно можно и без таймера, но с другой стороны, чтобы разгрузить проц лучше с таймером для вызова драйвера опроса RTC и вывода времени на LCD.