Відомо, що всі видимі кольори можна отримати з трьох основних кольорів: червоного, синього і зеленого. Розглянутий проект ілюструє, як можна змішувати первинні кольори в різних пропорціях і отримувати мільйони відтінків. Деякі з вас, напевно, вже перевіряли цю гіпотезу, створюючи кольору в програмах для дизайну кшталт 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 с .: іл. – (Електроніка)