Есть желание сделать такую штуку: RGB светодиод (или матрица из 3-х) управляется драйверами с шим-модуляцией яркости свечения, три шим канала драйверов подключены к выходам микроконтроллера, на входе его ацп стоит переменный резистор. Идея такая, чтобы резистор при вращении от края до края менял цвет RGB - матрицы во всём спектре видимых цветов. Т.е. программа обрабатывает изменение напряжения на входе ацп, преобразуя эту линейную характеристику в набор RGB кодов и меняет тем самым цвет освещения. Про зависимость цвета от яркости каналов можно в принципе не думать, ибо вещь чисто декоративная и цвет применяться будет на глаз.
Вот промышленный вариант:
Основная проблема в том, что с контроллерами знаком только на общем уровне, и хотелось бы узнать, как создать такую программу. Или если кто то знает, где найти рабочую схему с прошивкой, пожалуйста ткните пальцем)
Интересный вопрос: самое время не использовать чужие "прошивки" , а самому подсчитать, подумать, написать и похвалиться всем Котам: "я научился работать с микроконтроллером!". Здесь есть 2 пути: 1 - содрать чужую схему и прошивку 1 в 1 и ничему и не научиться. 2 - самому разобраться во всех тонкостях(Коты консультацией помогут, если что неясно) и гордиться достигнутыми успехами. И в ближайщем будущем уже Вы будете учить маленьких котят и консультировать их. Удачи в Ваших начинаниях!
Да, на логике для начала наверное проще будет. И лучше использовать 3 переменных резистора, на каждый канал, та удобней будет.
Но если решитесь собирать на мк, схема получится минимальной ( светодиоды можно повешать прямо на порт мк без дополнительных ключей,
+ одна, или как вариант три, кнопки), всё упрётся только в программу.
А для написания простой программы хватит недельки неторопливой пролистки пары книжек.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Матан, как раз, не проблема: формула выводится довольно легко.
Правда, выражение выходит длинноватое...
По прикидкам - всё просто, а на практике - хз, буду думать, если что-то РГБшное в руки попадет...
[b][color=#FF0000][size=120][u]КАР[/u]фаген ДОЛЖЕН БЫТЬ РАЗРУШЕН.[/size][/color][/b]
Если использовать одну кнопку, или один валкодер, как предложили, то перебирать все значения цвета будет занимать приличный промежуток времени.
Если взять 64 градации цвета, то полчится 64*64*64 = 262`144 значения придётся прокручивать валкодером -> неудобно.
(если 256*256*256 = 16`777`216 )
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
А я решил использовать синус для такой задачи. Насколько оправдано ? Другие решения этого вопроса для меня не были очевидными, подскажите как еще можно прокрутить всю палитру...
Да пуска на МК делает. Это проще.
А бригадир, вы сами то сможете хотя бы повторить чужое устройство на МК ? А уже всех быдлокодерами обозвали.
\
Я что то похожее делал уже, только с двухцветным светиком.
Нашел математические цветовые модели. Но не смотря на содержание в названии "математические", никакой математики не обнаружено ))) Поделитесь ссылкой или статьей, объясняющей как генерировать цветовой круг в системе RGB. Если надо вот это обработать ( http://upload.wikimedia.org/wikipedia/c ... XYZCMF.png ) то в принципе справлюсь. Но конечно бы хотелось формулу.
По алгоритму который вы написали, можно ли больше комментариев, например что означает стрелочка. Это мол зафиксировали одни каналы, а тот что со стрелочкой увеличиваем пока не дойдем до предела ?
Symbiosis писал(а):По алгоритму который вы написали, можно ли больше комментариев, например что означает стрелочка. Это мол зафиксировали одни каналы, а тот что со стрелочкой увеличиваем пока не дойдем до предела ?
Правильно, этот алгоритм как раз для RGB модели.
на С
r = Color & 255 ;
g = Color / 256 & 255 ;
b = Color / 65536 & 255 ;
и изменяем в цикле Color от 0 до 256*256*256=16`777`215
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Вот есть готовый светильник такой, со встроенной цветомузыкой даже. Но управление от ПК там. http://decada.org.ru/project/electronic/rgb_svet/
А для выбора цвета есть однозначное решение. Для полного спектра удобнее всего взять модель HSV, так как в ней есть искомый компонент Hue, отвечающий за цвет на всем спектре. Из этой модели есть полный математический перевод в RGB, он очень простой и описан формулами: http://ru.wikipedia.org/wiki/HSV_%28%D1 ... .86.92_RGB
В нашем случае компоненты S и V мы принимает за 100%, чтобы получить яркий насыщенный цвет. Тогда, приведя параметр Hue к шкале 0-1024 (диапазон АЦП МК при использовании в качестве регулятора резистора ) можно получать точные компоненты RGB для каждого из положений резистора. Хотя стандартных 360 градусов там более чем достаточно.
Вот пример кода для перевода из HSV в RGB:
void HSV2RGB (unsigned char &r, unsigned char &g, unsigned char &b,
unsigned int i_hue, unsigned char sat, unsigned char val)
/* Вход:
* 0 <= hue < 360 градусов - оттенок. Основные цвета:
* 0 - красный, 60 - желтый,
* 120 - зеленый, 180 - голубой
* 240 - синий, 300 - пурпурный
* hue == 360 - неопределён !!!
* Остальные цвета между ними
* 0 <= sat <= 255 - Saturation - насыщенность
* 0 <= val <= 255 - Value - светлота
*
* Выход:
* 0 <= r,g,b <= 255 - значения красного, зеленого, синего
*/
{
int ii;
double fr, hue;
unsigned char c1, c2, c3;
if (!sat)
r = g = b = val;
else
{ /* Хроматический цвет */
while (i_hue >= 360)
i_hue -= 360;
hue = i_hue;
ii = (int)(hue /= 60.0);
fr = hue - ii;
c1 = (val * (255 - sat)) / 255;
c2 = (val * (255 - sat * fr)) / 255;
c3 = (val * (255 - sat * (1.0 - fr))) / 255;
switch (ii)
{
case 0: r = val; g = c3; b = c1; break;
case 1: r = c2; g = val; b = c1; break;
case 2: r = c1; g = val; b = c3; break;
case 3: r = c1; g = c2; b = val; break;
case 4: r = c3; g = c1; b = val; break;
case 5: r = val; g = c1; b = c2; break;
} // switch
} // if (!sat)
} // HSV 2 RGB
В начале кода просто прописываем sat=255;val=255; а на вход функции подаем значение полученное с переменника. Выход функции можно сразу загонять в ШИМ.
Информативный пост, почитал, полезно.
Но для начинающего легче для понимания RGB модель.
HSV даёт главным образом удобное управление цветом.
Но разницы в цвете между RGB и HSV моделью мы незаметим.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Разницу заметим в преобразовании РГБ не дает возможности регулирования одним параметром оттенка цвета, а ХСВ позволяет это. Так что по сути перевод из системы в систему есть единственно верное решение реализации того, что хочет автор Остальные алгоритмы либо не будут давать полный спектр, либо будут так или иначе совпадать с переводом в ХСВ.