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

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

Сообщение AntonChip »

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

Сообщение VXXXV »

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

Сообщение AntonChip »

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

Сообщение YS »

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

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

Сообщение AntonChip »

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

Сообщение AntonChip »

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

Сообщение AntonChip »

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42: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();
  }		
}
}
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

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

Сообщение AntonChip »

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

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