Страница 1 из 1
Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 09:47:46
AntonChip
Ребята делаю RGB лампу с сенсорным управлением на attiny45, т.е. уже сделал, но заметил одну проблему. В режиме перебора цветов особенно на медленной скорости заметно ступенчатое регулирование светодиодов, особенно когда один из цветов гаснет или разгорается. При высокой скорости такой эффект не заметен. ШИМ аппаратный частотой 490Гц, выходные мосфеты LR120N, rgb светодиоды 5050 выпаяны из светодиодной ленты, может проблема в светодиодах из-за их инерционности?
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 14:37:24
VXXXV
а частоту шима поднять? Сколько раз имел дело с RGB, все более менее плавно было
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 16:10:49
AntonChip
Пробовал, не помогает
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 17:55:15
YS
может проблема в светодиодах из-за их инерционности?
Светодиоды - не лампочка, у них нет инерции.
Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 18:10:12
AntonChip
YS писал(а):может проблема в светодиодах из-за их инерционности?
Светодиоды - не лампочка, у них нет инерции.
Имел ввиду малую инерционность светодиодов
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 18:12:56
AntonChip
YS писал(а):Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.
Попробую в основном цикле оставить только функцию перебора цветов
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 18:23:18
AntonChip
Оставил только цикл перебора, все равно разгорается ступеньками
Re: Диммирование RGB светодиодов
Добавлено: Вс авг 16, 2015 18:57:38
ARV
проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
характеристика яркости светодиода весьма нелинейна, причем особенно в области малых токов, поэтому изменение ШИМ-а на 1 приводит к существенному скачку яркости, заметному на глаз.
по-моему, побороть это при 8-битном ШИМе не получится.
Re: Диммирование RGB светодиодов
Добавлено: Пн авг 17, 2015 07:14:01
AntonChip
Вот кусок кода, может что не так делаю
Код: Выделить всё
#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();
}
}
}
Re: Диммирование RGB светодиодов
Добавлено: Пн авг 17, 2015 07:44:15
Аlex
AntonChip писал(а):может что не так делаю
Странно, что Вы не заметили предыдущего сообщения :
ARV писал(а):проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
Re: Диммирование RGB светодиодов
Добавлено: Ср авг 19, 2015 10:34:26
AntonChip
Решил проблему использовав модель HSV->RGB на 768 цветов вместо 255, регулирование ступеньками исчезло, причем ШИМ 8 битный
Тему можно закрывать