Волюметри часто є на аудіопристроїв для індикації гучності. На старому обладнанні були, стрілочні прилади, а на сучасному ‘часто встановлюють світлодіодні індикатори. Призначення волюметра – Дати уявлення про гучності сигналу. Крім інтенсивності аудиосигнала, подібний індикатор може показувати і інші величини. Світлодіодні волюметри зустрічаються так часто і настільки популярні, що виготівники напівпровідників пропонують спеціальні інтегральні схеми для вимірювання зовнішніх сигналів і відображення результату на світлодіодах.

Ріс..3.25. Індикація у вигляді шпальти і точки

Зазвичай світлодіоди волюметра являють собою один стовпець або рядок. Одна з таких популярних мікросхем- LM3914 компанії National Semiconductors- цікаве рішення для управління точковим дисплеєм, для вимірювання рівня аналогового напруги і відображення його на десяти світлодіодах (організованих в лінійний аналоговий індикатор). LM3914 випускається вже більше 20 років. Але наше завдання – створити індикатор з більш ніж десятьма рівнями. Можна було б каскадировать кілька схем LM3914, але навіть після цього характер пристрою не зміниться – це буде всього лише лінійний індікдтор вхідного напруги. Тому нам потрібно було знайти інше рішення.

На рис. 3.25 показана робота волюметра в режимі шпальти і точки. У режимі стовпчика при збільшенні рівня вхідного сигналу загоряється все більше світлодіодів (знизу верх). У режимі точки в міру збільшення вхідного сигналу загоряється один світлодіод, відповідний сильнішого сигналу. Світлодіоди розташовані в стовпчик по вертикалі: нижній світлодіод означає більш низький рівень сигналу, ніж верхній.

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

Мета цього проекту – створити універсальний волюметр на 20 рівнів, використовуючи якомога менший мікроконтролер. Сполучення 20 світлодіодів з мікроконтролером можна виконати за допомогою всього п’яти контактів вводу / виводу. Таким чином, ідеальним компонентом для реалізації цього проекту буде восьмиконтактний мікроконтролер, що має шість контактів вводу / виводу. Шляхом програмування можна налаштувати індикатор на будь-яку залежність між вхідним сигналом і вихідними світлодіодами. Наприклад, на рис. 3.26 показана логарифмічна шкала. Можлива і лінійна залежність – для цього потрібно перепрограмувати мікроконтролер. Щоб відображати вхідна напруга лінійним чином, вхідний сигнал слід ділити на постійне число. Для логарифмічною шкали можна задати таблицю відповідності.

Рис. 3.26. Логарифмічна шкала

Опис проекту

На рис. 3.27 і 3.28 зображені принципові схеми проекту. В якості захисного знову використаний діод Шотткі (1Ν5819).

Рис. 3.27. Принципова схема пристрою (частина 1)

Рис. 3.28. Принципова схема пристрою (частина 2)

Ємність Cl служить для фільтрації викидів і небажаних перешкод джерела живлення. С2 – це розв’язує конденсатор (як уже пояснювалося раніше). Застосований мікроконтролер ATtiny45. Стабілізатора напруги в цій схемі немає, тому вхідна напруга може варіюватися лише від 4,5 до 5,5 В. Світлодіоди (з першого по двадцятий) розташовані у вигляді стовпчика. Оскільки розміри друкованої плати під таку конструкцію перевищують граничний розмір, дозволений у безкоштовній версії програми EAGLE, схема була розбита на дві частини. Перша частина показана на рис. 3.27, вона включає схему управління і десять світлодіодів. Решта десять світлодіодів виконані окремо (рис. 3.28). Друковані плати цих двох схем проектувалися окремо з таким розрахунком, щоб з’єднані разом вони утворили єдиний стовпчик з 20 світлодіодів.

Двадцять світлодіодів мультиплексируются за методом Чарлі (за допомогою п’яти контактів вводу / виводу мікроконтролера). SL2- це трьохконтактний роз’єм для подачі сигналу на вхід АЦП контролера. Вхідний сигнал являє собою постійну напругу, регульоване за допомогою потенціометра (контакти якого підключені до VCC, GND і РВ5). Ним може бути також сигнал, поданий на РВ5 і GND. Якщо це зовнішній сигнал, то його мінімальна та максимальна амплітуди повинні бути обмежені 0 (GND) і £ /ип (VCC).

Програма обчислює ковзне середнє по десяти послідовним отсчетам АЦП, ділить його на 21 рівень (від 0 до 20) і включає відповідну кількість світлодіодів.

Конструкція

Компоновку плат в програмі EAGLE і принципові схеми можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Обидві плати односторонні (на стороні компонентів є всього декілька перемичок). Плати стикують, поєднуючи відповідні подовжені друковані доріжки. Повністю зібрана конструкція показана на рис. 3.29.

Рис. 3.29. Конструкція волюметра в зборі

Програмування

Відкомпільований вихідний код (разом з файлом MAKEFILE) можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Програма виконується на тактовій частоті 8 МГц. Вхід скидання мікроконтролера (РВ5) використовується як вхідний контакт АЦП. Тому функцію скидання цього контакту необхідно відключити (за допомогою програмування fuse-біта RSTDISBL). Після цього контролер запрограмувати за допомогою ISP буде вже не можна. Тому для програмування контролера застосовувався STK5O0 в режимі послідовного програмування під високою напругою (HVSP). Пояснимо найважливіші фрагменти коду.

while(1)

{

// Зрушити значення for (i = 0; i <9; i ++)

{

adcreading[i]=adcreading[ i+1 ];

}

// Зробити новий відлік adcreading [9] = read_adc ();

// Обчислити суму і виконати дискретизацію

adcsum = 0 ;

for (i=0;i<10;i++)

{

adcsum = adcsum + adcreading [ i ] ;

}

// Розділити суму 10 відліків ADC (від 0 дб 2550) // на 21 рівень (від 0 до 20) adcsum = adcsum / 122; if (level> adcsum)

{

for(i=adcsum;iclevel;i++)

{

statusonoff[i]=0;

}

}

else if(level<adcsum)

{

for (i=level;i<adcsum;i++)

{

statusonoff[i]=1;

}

}

1 eve 1=adc sum ;

}

Лістинг 3.3 – головний нескінченний цикл програми. Він видаляє попередній відлік АЦП з буфера adcreading, зрушує інші значення і бере новий відлік. АЦП в контролері ATtiny45 8-розрядний. Потім обчислюється середнє, підсумовуються всі відліки в буфері і сума ділиться на 21 (це все одно, що спочатку поділити суму на 10, а потім поділити це середнє на 21 рівень). Потім потрібну кількість світлодіодів або включається, або вимикається (залежно від попереднього рівня). І нарешті, значення змінної level оновлюється поточним відліком. Код мультиплексування за методом Чарлі (як пояснюється в наступному розділі) був написаний так, щоб в будь-який момент, коли statusonoff [р] отримує значення 1, спалахував світлодіод в позиції відповідної р (і навпаки). Відповідність між рівнем сигналу і числом світяться світлодіодів таке, що при рівні 0 не світиться жоден світлодіод, а при рівні 20 (найвищому) включаються всі 20 світлодіодів.

// Процедура обробки переповнення таймера timerO ISR (TIMO_OVF_vec t)

{

DDRB=0;

P0RTB=statusonoff[count])

«pgm_read_byte(&anode[count])

I 0«pgm_read_byte (&cathode [count] ) ;

DDRB = l«pgm_read_byte (&anode[count])

I l«pgm_read_byte(&cathode[count] ) ; count++; if (count==20) count=0;

}

Лістинг 3.4 – процедура обробки переривання по переповненню таймера TimerO. Тому вона викликається з певною періодичністю. Вона виконує мультиплексування методом Чарлі всіх 20 світлодіодів. Лічильник count відстежує той світлодіод, з яким ми працювали в попередній інтервал часу. Зберігається в statusonoff [count] значення видається на його анод, а 0- на катод. Потім контакти анода і катода оголошуються виходами (за допомогою поновлення регістра DDRB). Після цього світлодіод включається, (якщо statusonoff [count] = l) або навпаки. Цей цикл повторюється для кожного світлодіода.

Решті код складається з ініціалізації АЦП і таймера TimerO.

Робота пристрою

Ми протестували пристрій, припаявши до SL2 потенціометр в 10 кому. Ми міняли значення постійної напруги і спостерігали за стовпчиком світлодіодів.

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)