Диммирование RGB светодиодов
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Диммирование RGB светодиодов
Ребята делаю RGB лампу с сенсорным управлением на attiny45, т.е. уже сделал, но заметил одну проблему. В режиме перебора цветов особенно на медленной скорости заметно ступенчатое регулирование светодиодов, особенно когда один из цветов гаснет или разгорается. При высокой скорости такой эффект не заметен. ШИМ аппаратный частотой 490Гц, выходные мосфеты LR120N, rgb светодиоды 5050 выпаяны из светодиодной ленты, может проблема в светодиодах из-за их инерционности?
Re: Диммирование RGB светодиодов
а частоту шима поднять? Сколько раз имел дело с RGB, все более менее плавно было
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
Пробовал, не помогает
Re: Диммирование RGB светодиодов
может проблема в светодиодах из-за их инерционности?
Светодиоды - не лампочка, у них нет инерции.
Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
YS писал(а):может проблема в светодиодах из-за их инерционности?
Светодиоды - не лампочка, у них нет инерции.![]()
Имел ввиду малую инерционность светодиодов
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
YS писал(а):Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.
Попробую в основном цикле оставить только функцию перебора цветов
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
Оставил только цикл перебора, все равно разгорается ступеньками
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Диммирование RGB светодиодов
проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
характеристика яркости светодиода весьма нелинейна, причем особенно в области малых токов, поэтому изменение ШИМ-а на 1 приводит к существенному скачку яркости, заметному на глаз.
по-моему, побороть это при 8-битном ШИМе не получится.
характеристика яркости светодиода весьма нелинейна, причем особенно в области малых токов, поэтому изменение ШИМ-а на 1 приводит к существенному скачку яркости, заметному на глаз.
по-моему, побороть это при 8-битном ШИМе не получится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
Вот кусок кода, может что не так делаю
Код: Выделить всё
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t H, S, V;
volatile uint8_t color_update;
uint8_t r, g, b;
void hsv_to_rgb(void)
{
uint8_t i, f, p, q, t;
if( S == 0 )
{
OCR0A = OCR1B = OCR1A = V;
}
else
{
i = H/43;
f = H%43;
p = (V * (255 - S))/256;
q = (V * ((10710 - (S * f))/42))/256;
t = (V * ((10710 - (S * (42 - f)))/42))/256;
switch(i)
{
case 0:
r = V; g = t; b = p; break;
case 1:
r = q; g = V; b = p; break;
case 2:
r = p; g = V; b = t; break;
case 3:
r = p; g = q; b = V; break;
case 4:
r = t; g = p; b = V; break;
case 5:
default:
r = V; g = p; b = q; break;
}
}
cli();
OCR0A = r; OCR1B = g; OCR1A = b;
sei();
}
ISR(TIM0_OVF_vect)
{
color_update++;
}
int main(void)
{
DDRB |= (1 << PB4)|(1 << PB1)|(1 << PB0);
TCCR0A |= (1 << COM0A1)|(1<<WGM00)|(1<<WGM01);
TCCR0B |= (1<<CS01)|(1<<CS00);
OCR1C = 0xFF;
TCCR1 |= (1 << COM1A1)|(1<<PWM1A)|(1<<CS12)|(1<<CS11)|(1<<CS10);
GTCCR |= (1 << COM1B1)|(1<<PWM1B)|(1<<PSR1)|(1<<PSR0);
TIMSK |= (1 << TOIE0);
OCR0A = 0;
OCR1B = 0;
OCR1A = 0;
sei();
V = 255;
S = 255;
H = 0;
while(1)
{
if(color_update > 100)
{
color_update = 0;
H++;
hsv_to_rgb();
}
}
}
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Диммирование RGB светодиодов
Странно, что Вы не заметили предыдущего сообщения :AntonChip писал(а):может что не так делаю
ARV писал(а):проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: Диммирование RGB светодиодов
Решил проблему использовав модель HSV->RGB на 768 цветов вместо 255, регулирование ступеньками исчезло, причем ШИМ 8 битный
Тему можно закрывать
Тему можно закрывать