RGB светодиоды + AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

RGB светодиоды + AVR

Сообщение КАШАК »

Нужно сделать чтобы плавно изменялись цвета RGB светодиодов. Изменение цвета должно быть рандомным. С плавным изменением все просто, использую программный ШИМ. А вот с рандомным изменением цвета возникли проблемы. При использовании функции rand() цвета меняются как-то одинаково, при этом преобладает голубоватый и синий цвет, другие получаются намного реже. Какой алгоритм использовать для получения разнообразных цветов?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RGB светодиоды + AVR

Сообщение Мастер Ломастер »

не уверен, что и с плавной сменой цвета все так уж просто. а по поводу рандомных цветов, то, имхо, надо сделать массив "сочных" цветов и случайно выбирать из него очередной цвет, реализуя плавный переход от предыдущего к новому.
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

Re: RGB светодиоды + AVR

Сообщение FUZZY_ »

Надо ввести коефициенты Ey=0.299Er+0.587Eg+0.114Eb

Где Er,Eb,Eg - яркости свечения соответствующих светодиодов
Ey - яркость свечения общего цвета (1 - max 0 - выключено)
ATtiny13
Встал на лапы
Сообщения: 110
Зарегистрирован: Пт окт 21, 2011 15:05:18

Re: RGB светодиоды + AVR

Сообщение ATtiny13 »

Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: RGB светодиоды + AVR

Сообщение КАШАК »

FUZZY_ писал(а):Надо ввести коефициенты Ey=0.299Er+0.587Eg+0.114Eb

Где Er,Eb,Eg - яркости свечения соответствующих светодиодов
Ey - яркость свечения общего цвета (1 - max 0 - выключено)
А можно подробнее? Например у меня есть три цвета: 255 - цвет погашен, 0 - максимальная яркость. Как это применить в формуле и как использовать Ey?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

Re: RGB светодиоды + AVR

Сообщение FUZZY_ »

Как то так
Вложения
Ebright.jpg
(17.12 КБ) 660 скачиваний
Реклама
Аватара пользователя
TRIOD
Вымогатель припоя
Сообщения: 693
Зарегистрирован: Вт сен 15, 2009 16:23:06
Откуда: Москва

Re: RGB светодиоды + AVR

Сообщение TRIOD »

Я както делал агрегат который меняет цвет псевдо случайно с плавным переходом от цвета к цвету.
Есть таблица с цветами из которой при помощи функции RND() выбирается цвет для вывода.
После за 255 шагов цвет меняется с текущего на новый.
Самый вариант если использовать в качестве генератора случайной последовательности внешний генератор шума.

Вот код, написано на Bascom для Tiny85 с апаратным шимом.

А вобше поищит в инете "Лампу настроения".

Код: Выделить всё

$regfile = "attiny85.dat "
$crystal = 8000000

Tccr0a = &B10100011
Tccr0b = &B00000001
Tcnt0 = &H00
'-------------------------------------
Pllcsr = &H00
Tccr1 = &B00000001
Gtccr = &B01100000
Tcnt1 = &H00
Ocr1c = &HFF

Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.4 = Output

'тикущий цвет
Dim Red As Single
Dim Green As Single
Dim Blue As Single


'следующий цвет
Dim Nextred As Byte
Dim Nextgreen As Byte
Dim Nextblue As Byte

'приращение шага
Dim Delta_red As Single
Dim Delta_green As Single
Dim Delta_blue As Single

'временные переменые
Dim Temp1 As Integer
Dim Temp2 As Long
Dim Temp5 As Byte
Dim I As Byte
Dim B As Byte                                               'номер позиции из таблицы цвета.
Dim Ledr As Byte
Dim Ledg As Byte
Dim Ledb As Byte

B = 0
 Restore Color
 Ocr0a = 127
 Ocr0b = 127
 Ocr1b = 127

Do
   B = B + 1
   If B = 29 Then
      B = 0
   Restore Color
   End If
   'For I = 0 To B
   Read Temp2
   'Next
   Nextblue = Temp2 And 255
   Temp2 = Temp2 / 256
   Nextgreen = Temp2 And 255
   Temp2 = Temp2 / 256
   Nextred = Temp2 And 255

                                'вычесляем прибавку для перехода к новому цвету за 255 шагов
   Delta_red = Nextred - Red
   Delta_red = Delta_red / 255
   Delta_green = Nextgreen - Green
   Delta_green = Delta_green / 255
   Delta_blue = Nextblue - Blue
   Delta_blue = Delta_blue / 255


  For I = 0 To 254                                          'вывод цвета за 255 шагов
    Red = Red + Delta_red
    Green = Green + Delta_green
    Blue = Blue + Delta_blue

Temp5 = Fix(red)
Ledr = Temp5
Temp5 = Fix(green)
Ledg = Temp5
Temp5 = Fix(blue)
Ledb = Temp5
Ocr0a = Ledg
Ocr0b = Ledb
Ocr1b = Ledr
Waitms 15
Next
Wait 20
Loop

Color:
Data &HFF0000& , &HDC143C& , &HFFA07A& , &HFA8072&          ' красные
Data &HFF1493& , &HFF69B4& , &HFFB6C1& , &HC71585&          ' розовые
Data &HFFA500& , &HFF4500& , &HFF7F50& , &HFFA07A&          ' оранжевые
Data &HFFFF00& , &HFFD700& , &HFFFACD& , &HFFE4B5&          ' жёлтые
Data &HEE82EE& , &HDDA0DD& , &H8A2BE2& , &HFF00FF&          ' фиолетовые
Data &H00FF00& , &H00FA9A& , &H20B2AA& , &H8FBC8F&          ' зелёные
Data &H0000FF& , &H00FFFF& , &H00BFFF& , &HB0C4DE&          ' синие
Только абсолютная пустота бездны принесёт мне покой.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»