Проект tinyAVR 3. Смешивание цветов светодиода RGB

January 7, 2015 by admin Комментировать »

Известно, что все видимые цвета можно получить из трех основных цветов: красного, синего и зеленого. Рассматриваемый проект иллюстрирует, как можно смешивать первичные цвета в разных пропорциях и получать миллионы оттенков. Некоторые из вас, наверное, уже проверяли эту гипотезу, создавая цвета в программах для дизайна вроде Microsoft Paint, Adobe Photoshop и т. п. Дисплеи персональных компьютеров, ноутбуков и нетбуков характеризуются количеством отображаемых ими цветов. Простые дисплеи поддерживают 15-разрядное представление цвета (по 5 битов на каждый из основных цветов), они могут выдавать 25 комбинаций, что дает 25х25х25 цветов. Хорошие дисплеи поддерживают 24- разрядную палитру цвет (и даже больше). В данном проекте мы продемонстрируем концепцию смешивания цветов на одном светодиоде типа RGB. Программное обеспечение генерирует 8 разрядов каждого цвета. Поэтому мы можем получить на одном светодиоде 28х 28х 28 цветов, однако такое количество оттенков глаз человека не различает.

Спецификация проекта

Цель — разработать схему на основе светодиода типа RGB, которая позволит смешивать разные процентные соотношения красного, зеленого и синего цветов (чтобы получить множество оттенков). Пользователь должен иметь возможность задавать соотношение цветов. Для управления интенсивностью свечения каждого светодиода (т. е. соотношением цветов) используется широтно-импульсная модуляция (которая уже обсуждалась ранее). Блок-схема проекта приведена на рис. 2.24.

Рис. 2.24. Блок-схема устройства смешивания цветов RGB-светодиода

Описание устройства

На рис. 2.25 изображена принципиальная схема проекта со смешиванием цветов RGB. Входное напряжение может составлять от 5,5 до 20 В (стабилизатор LM2940 выдает постоянное выходное напряжение 5 В). Диод D1 — это диод Шоттки (1N5819) с падением напряжения примерно 0,2 В. Он защищает схему в случае подачи входного напряжения с обратной полярности. Конденсаторы С2 и С8 предназначены для фильтрации выбросов и нежелательных помех источника питания; С4 и С7 — для стабилизации выхода LM2940. СЗ припаивается возле контактов питания микроконтроллера для развязки схемы. Основа устройства— микроконтроллер ATtinyl3. Он имеет все необходимые нам элементы (таймеры, АЦП, контакты вво- да/вывода и т. д.). Рассматриваемый далее код достаточно мал и легко помещается во Flash-память этого контроллера (размером 1 кБайт). Здесь используется RGB- светодиод с общим анодом, подключенным к источнику питания. Резисторы Rl, R2 и R3 по 100 Ом каждый ограничивают ток красного, синего и зеленого светодиодов соответственно. SL2, SL3 и SL4 — это три потенциометра для установки интенсивности каждого цвета. Конденсаторы Cl, С5 и С6 служат для фильтрации помех на выходах потенциометров. Выходы потенциометров поступают на входы АЦП.

Рис. 2.25. Принципиальная схема устройства смешивания цветов RGB-светодиода

Рис. 2.26. Принципиальная схема устройства смешивания цветов RGB-светодиода

без стабилизатора питания

Схему можно спроектировать и без стабилизатора напряжения (рис. 2.26), но тогда входное напряжение должно быть от 4,5 до 6 В. Здесь отсутствует микросхема LM2940 и конденсаторы на ее выходах.

В процессе выполнения программы сопротивления потенциометров считываются тремя АЦП контроллера ATtinyl3 и соответствующая интенсивность свечения светодиодов устанавливается при помощи широтно-импульсной модуляции. Контроллер ATtinyl3 имеет только два аппаратных ШИМ-канала, а нам для управления тремя светодиодами нужно три, поэтому реализована программная широтноимпульсная модуляция. Контроллеры tinyAVR имеют 10-разрядные АЦП, но в этом проекте задействовано только восемь разрядов. Каждый канал АЦП преобразует аналоговый сигнал от потенциометра в цифровое значение в диапазоне от 0 до 255 (8-битовое разрешение), которому может быть напрямую сопоставлен уровень яркости соответствующего светодиода.

Конструкция

Компоновки печатных плат и принципиальные схемы (обеих версий) можно скачать с адреса: www.avrgenius.com/tinyavrl.

Обе платы в основном разведены на стороне пайки (на стороне компонентов есть всего несколько перемычек). Нарисованный на платах круг диаметром 40 мм предназначен для резервирования места под шарик для пинг-понга, которым закрыт светодиод (для рассеивания и смешивания цветов). На рис. 2.27 и 2.28 изображены обе стороны платы (вариант со стабилизатором). На рис. 2.29 показана сторона компонентов (со светодиодом, закрытым шариком для пинг-понга).

Рис. 2.27. Плата устройства смешивания цветов (сторона компонентов)

Рис. 2.28. Плата со стороны печатных проводников

Рис. 2.29. Печатная плата устройства с установленным светорассеивателем

Программирование

Откомпилированный исходный код можно скачать по ссылке: www.avrgenius.coin/ tinyavrl.

Тактовая частота равна 9,6 МГц. Контакт RESET контроллера ATtinyl3 задействован как вход АЦП, поэтому функцию сброса этого контакта следует отключить посредством программирования fuse-бита RSTDISBL. После установки этого бита интерфейс ISP становится недоступен и дальнейшее программирование контроллера следует выполнять при помощи другого интерфейса. Поэтому контроллер программируется при помощи STK500 в режиме программирования HVSP. Поясним самые важные фрагменты кода.

//Процедура переполнения для таймера Timer О ISR (TIMO_OVF_vec t)

{

//Значение е определяет количество уровней широтно-импульсной модуляции.

//256 уровней – от 0 to 255

//О – полностью включен, а 255 полностью выключен if(е==255)

{

е=0;

PORTB |= (1«0) | (1«1) | (1«2) ;

}

abc (pwm[0] ,pwm[ 1 ] ,pwm[2] , е) ; е++;

}

Листинг 2.2— это процедура прерывания по переполнению таймера TimerO. Она обрабатывает три программных канала ШИМ и вызывается при переполнении TimerO. Переменная е хранит состояние ШИМ. Когда е получает значение 255, все светодиоды выключаются и е инициализируется значением 0. Массив pwm содержит текущее значение интенсивности каждого светодиода. Код написан таким образом, что значение 0 в любой переменной массива pwm соответствует максимальной интенсивности (светодиод полностью включен), а 255 — минимальной (светодиод полностью выключен). Функция abc сравнивает каждое значение массива pwm с переменной е и, если имеется совпадение, включает соответствующий светодиод.

//Эта функция читает значение АЦП из выбранного канала unsigned char read_ADC(unsigned char channel)

(

unsigned char k; unsigned int ADCvalue=0;

ADMUX = ADMUX& (ObllllllOO) ;

//сбросить биты выбора канала ADMUX I = channel;

//игнорируем первое считывание после смены канала

ADCSRA |= 1«ADSC;

while (ADCSRA& (1«ADSC) ) ;//Ждем

ADCvalue=ADCH;

ADCvalue=0;//игнорируем считывание for(k=0;k<=7;k++)

{

ADCSRA |= 1«ADSC;

while (ADCSRA& (1«ADSC) ) ; / /Ждем

ADC value += ADCH;

}

return (ADCvalue»3) ; //делим на 8

}

Процедура из листинга 2.3 преобразует значение из выбранного канала АЦП (номер которого передается в эту функцию через аргумент channel) в цифровое значение от 0 до 255 и возвращает его вызывающей функции. Функция сначала выбирает нужный канал АЦП. Она игнорирует первое считывание АЦП и возвращает в вызывающую функцию среднее значение последующих восьми считываний. АЦП используется в режиме однократного преобразования. После выбора нового канала АЦП всегда рекомендуется игнорировать первое считывание (во избежание ошибок преобразования).

Функция main работает в бесконечном цикле. Она берет (по одному) отсчеты трех каналов АЦП и присваивает их соответствующим переменным массива pwm.

Работа устройства

Интенсивность свечения каждого светодиода можно изменять от минимума до максимума (через 256 уровней) при помощи потенциометров. Разные интенсивности красного, зеленого и синего светодиодов дают разные оттенки цветов. Шарик для пинг-понга обеспечивает равномерное смешивание трех цветовых компонентов.

Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)

Оставить комментарий

Устройство витков выходе генератора импульсов микросхемы мощности нагрузки напряжение напряжения питания приемника пример провода работы радоэлектроника сигнал сигнала сигналов сопротивление схема теория транзистора транзисторов управления усиления усилитель усилителя устройства частоты