Цей проект (і наступні два також) побудований на стандартній елементній базі, що складається з семисегментного індикатора на дві з половиною цифри і восьмиконтактного мікроконтролера. Семисегментний індикатори часто застосовуються в приладах. Звичайна конфігурація індикатора – три з половиною цифри (три повних цифри і ” половинка “, в якій при необхідності може висвітлюватися” 1 “). Такий індикатор може показати значення від 0 до 1999. Якщо він відображає і символ “мінус”, то діапазон значень від -1999 до 1999. Індикатори, що мають чотири з половиною цифри, відображають діапазон від 0 до 19999 або від -19999 до 19999, що в десять разів перевищує діапазон індикатора з трьома з половиною цифрами. Однак для багатьох додатків цілком достатньо індикатора в дві з половиною цифри. Семисегментний індикатор можна зібрати з окремих світлодіодів. Перевага такого індикатора в тому, що для нього можна вибрати світлодіоди будь-якого кольору і розміру. На рис. 3.30 показано, як можна зробити семисегментний індикатор з окремих світлодіодів. Кожен сегмент індикатора (за винятком десяткового дробу) робиться з трьох паралельних світлодіодів. Згадаймо з попередньої глави, що для управління паралельними світлодіодами потрібні опору, що обмежують струм. Однак ми не збираємося цього робити і підключимо по три світлодіода паралельно в кожному з семи сегментів. Було б непогано розсортувати ці світлодіоди по інтенсивності (Хоча це доведеться робити вручну і займе багато часу).

Рис. 3.30. Семисегментний індикатор, виконаний з окремих світлодіодів

Кожен семисегментний індикатор має вісім сегментів. Восьмиконтактний мікроконтролер має два контакти харчування і шість контактів вво- так / вивода.’Прі допомогою п’яти контактів ми можемо керувати 20 світлодіодами (За методом Чарлі). Тобто ми можемо підключити наш індикатор на дві з половиною цифри до восьмиконтактних микроконтроллеру за допомогою п’яти контактів вво- так / виводу. Шостий контакт можна задіяти для інших цілей, наприклад, для зчитування зовнішнього аналогового напруги або цифрового вхідного сигналу. Двадцять керованих за методом Чарлі світлодіодів утворюють два семисегментних індикатора (для цього потрібно 16 світлодіодів). Решта чотири світлодіоди служать для відображення десяткового дробу і знака “мінус” (рис. 3.31).

Рис. 3.31. Управління індикатором від мікроконтролера

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

Мета проекту-створити однодіапазонні вольтметр на основі восьми контактного мікроконтролера. Індикатор у дві з половиною цифри реалізований за допомогою мультиплексування методом Чарлі (як пояснювалося в попередньому розділі). Мікроконтролери AVR серії Tiny мають кілька 10-розрядних АЦП. Це дозволить розрізнити 1024 рівня. Індикатор у дві з половиною цифри може відобразити лише 200 значень. Тому розрядність АЦП не є обмеженням для вольтметра. Ми вибрали діапазон від 0 до 12 В, що дає на нашому індикаторі точність в 0,1 В. Внутрішнє опорна напруга мікроконтролера становить 2,56 В, тому для отримання діапазону в 12 В доданий зовнішній дільник напруги 1: 4,9. Коефіцієнт розподілу можна легко змінити, якщо вам потрібно інший діапазон.

Опис пристрою

На рис. 3.32 і 3.33 зображені принципові схеми пристрою. У проектах 8, 9 і 10 використовується ця ж схема. С1 – розв’язує конденсатор для видалення перешкод, що виникають у ланцюзі (він припаивается біля контактів харчування контролера). Обраний мікроконтроллер- ATtiny45. Стабілізатора напруги немає, тому напруга живлення може варіюватися лише від 4,5 до 5,5 В. Відсутня і конденсатор для фільтрації викидів напруги, тому рекомендується живити пристрій від батарей. Двадцять світлодіодів організовані у вигляді двох повних семисегментних індикаторів (по сім світлодіодів для кожної цифри і по одному на десяткову точку), одного індикатора на полціфри (два світлодіоди для відображення 0 або 1 і один – для десяткового дробу) і однієї горизонтальної рисочки (один світлодіод), яка позначає знак “мінус”. Оскільки сегменти цифр семисегментного індикатора довший, ніж розмір трьохміліметрового світлодіода, то для кожного сегмента паралельно з’єднані три світлодіода. Це може призвести до різного току світлодіодів сегментів і точки. Для вирівнювання струму доданий резистор, підключений послідовно до світлодіоду точки.

Рис. 3.32. Принципова схема вольтметра (термометра, частотоміра) з автоматичним діапазоном (частина 1)

Рис. 3.33. Принципова схема вольтметра (термометра, частотоміра) з автоматичним діапазоном (частина 2)

Двадцять світлодіодів управляються за допомогою мультиплексування за методом Чарлі за допомогою п’яти контактів вводу / виводу мікроконтролера. SL1 – це трьохконтактний роз’єм для подачі вхідного сигналу на АЦП контролера. Вхідний сигнал в.проектах 8, 9 і 10 різний. Друга частина схеми (рис. 3.44) служить для подачі на контролер різних вхідних сигналів (шляхом підключення роз’єму SL1 до клем VOLT, LM35 або SIGNAL). Для даного проекту на вхід надходить напруга з SL2. Потім воно знижується в 4,9 разів і подається на вхід АЦП через роз’єм VOLT.

Програма зчитує відлік з виходу АЦП, перетворює його в напругу, виконує округлення і відображає результат на семисегментний дисплеї.

Конструкція

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

Основна (перша) друкована плата зроблена двосторонньою. На другий платі перемичок немає, вона одностороння. На рис. 3.34 і 3.35 показані верхня і нижня сторони основної плати. На рис. 3.36 зображена зібрана плата роз’ємів (друга).

Рис. 3.34. Основна (перша) плата (сторона компонентів)

Рис. 3.35. Основна (перша) плата (сторона друкованих провідників)

Рис. 3.36. Зібрана плата вхідних роз’ємів (друга)

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

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

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

while(1)

voltage = read_adc();

// Тут напруга в 100 разів більше реального // Визначення діапазону і масштабування результату if (voltage < = 199)

{

point = 1;

}

else if(voltage<1995)

{

if(voltage%10>=5)

{

voltage = voltage +10;

}

voltage = voltage/10; point = 2;

}

else

{

if(voltage%100>=50)

{

voltage = voltage+100;

}

voltage = voltage/100; point = 3;

}

c=voltage/100; voltage = voltage%100; d= voltage/10; voltage = voltage%10; e = voltage; display(ο,ά,e,point,0); _delay_ms (100) ;

}

Лістинг 3.5 – це головний нескінченний цикл програми. Спочатку він читає відлік АЦП (за допомогою функції read_adc, яка видає значення, в 100 разів перевищує вхідну напругу). Розрядність АЦП дорівнює 10; опорним служить внутрішнє напруження 2,56 В (для підвищення точності). Оскільки є дільник напруги 4,9: 1, то вимірюваний вхідна напруга може варіюватися в межах від 0 до 2,56 · 4,9 = 12,544 В (приблизно 12 В).

Після того як лічений результат АЦП, виконується його округлення (спочатку потрібно вибрати положення десяткового дробу, а потім округлити значення до трьох цифр). Потім цифри витягуються і передаються в функцію відображення (яка ставить їм у відповідність масив statusonof f). Призначення цього масиву таке ж, що і в проекті 7.

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

Вхідна напруга подається на клеми VOLT, а його значення відображається на семисегментний дисплеї.

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