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

Код для медленного включения и выключения светодиода

СообщениеДобавлено: 20 фев 2010, 17:34
wlf
Есть микроконтроллер PIC12F629 и три светодиода, нужно написать программу так, чтобы светодиоды медленно загорались и медленно гасли. Ну или для одного светодиода. У самого не получается, знаний недостаточно! Как будет выглядеть этот кусочек кода???

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 13 мар 2010, 23:52
БОРИС
широтно- импульсная модуляция на частоте >60Гц
а каким способом - на собственное усмотрение
с PICами не пробовал, а для AT89C51 вполне можно сделать до 24 независимых каналов ;)

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 25 мар 2010, 20:35
Арвар
если проблема не решена могу более подробно ответить с точки зрения языка С.

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 28 мар 2010, 14:37
wlf
Проблема не решена, буду вам очень признателен если поможете мне! Пробовал писать программу на ассемблере для PIC12F629, не получается чего-то. Светодиод то горит постоянно, то в пол-накала, то вспыхивает еле заметно!

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 28 мар 2010, 16:02
uyra
можно использовать RC цепь к выходу подключить ключ

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 28 мар 2010, 18:29
Арвар
писал я как-то нечто подобное на С. А МК был ат89с2051.

все регистры, которые я создал у меня были ансигнед чар (0-255)
в void main (void) я настраивал таймер и запускал его
вся прога писалась в подпрограмме прерываний, которая вызывалась по переполнению таймера.
if (count >= 64)
{
count=0; //
otrezok++;
if (otrezok >= 5)
{
otrezok=0;
if (bright<=64)
{
bright++;
}
}
}
count++;
if (count<= bright)
{
вкл. светодиод
}
else выкл. светодиод;
return

count с bright - всю яркость (от "не горит"-тускло горит-горит но не совсем ярко-ярко горит) на уровни разбивает? т.е. каунт как бы создаёт период всего сигнала (0 и 1), а брайт, который постепенно увеличивается в зависимости от otrezok - время тока когда надо гореть и так со временем брайт будет равен каунту, т.е. светодиод будет гореть всегда

вот как-то так,
otrezok - регистр, который задаёт время, в течение которого горит один уровень яркости - от 0 до 64

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 29 мар 2010, 14:30
Vladnik
wlf писал(а):Проблема не решена, буду вам очень признателен если поможете мне! Пробовал писать программу на ассемблере для PIC12F629, не получается чего-то. Светодиод то горит постоянно, то в пол-накала, то вспыхивает еле заметно!

Здравствуйте!
Вся фишка в том что светодиод очень не линейный прибор!
То есть если вы будете линейно увеличивать ширину импульса на выходе МК, на например 0 до 255
то получите следующее - вначале, прибор будет нехотя разгоратся - от 0 до где то 50, потом резко
вспыхнет полностью (100-150), а потом будет светить полностью, и дальнейшее увеличение ширины
импульса мало повлияет на его яркость. Причем чем больше прибор способен отдать в канделах,
тем хуже. Поэтому и характеристику управления надо "расстягивать" со второй четверти и до последней. Недаром многие фирмы выпускают специальные контроллеры для этого дела.

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 29 мар 2010, 22:11
Арвар
Vladnik - согласен. у меня например, гашение светодиода было не совсем плавным. в начале медленного гашения он и не думал гаситься, и только чуть позже осознав что нужно это делать, он спешит медленно погаситься=)

Re: Код для медленного включения и выключения светодиода

СообщениеДобавлено: 03 апр 2010, 10:34
БОРИС
У меня никаких проблем с регулировкой от полного затухания до полной яркости - все решается с помощью программы.
В программе кстати предусматриваются и динамическое или статическое изменение яркости по любому из каналов при работе в режиме формирования рисунка по заранее заданной программе(заказчика) ;)