Диммирование RGB светодиодов

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Диммирование RGB светодиодов

Сообщение AntonChip »

Ребята делаю RGB лампу с сенсорным управлением на attiny45, т.е. уже сделал, но заметил одну проблему. В режиме перебора цветов особенно на медленной скорости заметно ступенчатое регулирование светодиодов, особенно когда один из цветов гаснет или разгорается. При высокой скорости такой эффект не заметен. ШИМ аппаратный частотой 490Гц, выходные мосфеты LR120N, rgb светодиоды 5050 выпаяны из светодиодной ленты, может проблема в светодиодах из-за их инерционности?
VXXXV
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб фев 02, 2013 17:20:04
Откуда: Донецк

Re: Диммирование RGB светодиодов

Сообщение VXXXV »

а частоту шима поднять? Сколько раз имел дело с RGB, все более менее плавно было
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение AntonChip »

Пробовал, не помогает
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение YS »

может проблема в светодиодах из-за их инерционности?


Светодиоды - не лампочка, у них нет инерции. :)

Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение AntonChip »

YS писал(а):
может проблема в светодиодах из-за их инерционности?


Светодиоды - не лампочка, у них нет инерции. :)

Имел ввиду малую инерционность светодиодов
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение AntonChip »

YS писал(а):
Проверьте, корректно ли реализован сам перебор значений ШИМ. Возможно, из-за какой-либо ошибки интервал перебора больше, чем надо.

Попробую в основном цикле оставить только функцию перебора цветов
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение AntonChip »

Оставил только цикл перебора, все равно разгорается ступеньками
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение ARV »

проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
характеристика яркости светодиода весьма нелинейна, причем особенно в области малых токов, поэтому изменение ШИМ-а на 1 приводит к существенному скачку яркости, заметному на глаз.
по-моему, побороть это при 8-битном ШИМе не получится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение 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();
  }      
}
}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение Аlex »

AntonChip писал(а):может что не так делаю
Странно, что Вы не заметили предыдущего сообщения :
ARV писал(а):проблема в малой разрядности ШИМа. наверняка используете 8-битный режим - этого неостаточно.
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: Диммирование RGB светодиодов

Сообщение AntonChip »

Решил проблему использовав модель HSV->RGB на 768 цветов вместо 255, регулирование ступеньками исчезло, причем ШИМ 8 битный 8)
Тему можно закрывать
Ответить

Вернуться в «AVR»