Це пристрій ми створили для місцевої школи. Потрібно було отримати дуже гучний сигнал, який будив би учнів ранкової зміни. Ми додали також деякі додаткові функції. Спеціальна програма перетворює сигнал підйому в шкільний дзвінок. На рис. 4.32 показана блок-схема пристрою. Харчування передбачено від мережі, але є й резервне живлення від батарей. Звуковий підсилювач видає потужний сигнал, який будить дітей.

Рис. 4.32. Блок схема пристрою

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

Мета проекту-створити гучний сигнал підйому (з резервним живленням від батарей для безперервного відліку часу). Можна задати три моменти часу спрацьовування пристрою.

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

На рис. 4.33 показана принципова схема пристрою, а на рис. 4.34 – підключення додаткових кнопок.

Рис. 4.33. Принципова схема пристрою

Рис. 4.34. Схема підключення кнопок

Пристрій має два варіанти живлення: від мережі і від батареї. Мережа призначена для живлення мікроконтролера і звукового підсилювача, а батарея – тільки для мікроконтролера. До микроконтроллеру Tiny861 підключений кварц на 32,768 кГц в якості джерела тактової частоти (і для виконання програми, і для відліку часу). Тому подача робочої напруги на мікроконтролер виняткова важлива для роботи пристрою. Користувач може встановити три моменту спрацьовування, і коли поточний час співпаде з часом спрацьовування, мікроконтролер згенерує сигнал на контакті РВЗ, який подається на підсилювач потужністю 20 Вт. Мікроконтролер харчується через стабілізатор LP2950-3.3.

Рідкокристалічний дисплей Nokia забезпечує взаємодію з користувачем. Після подачі напруги на схему у верхньому правому куті дисплея з’являється поточний час (разом з меню з шести пунктів: TIME, MODE, DISP, ALARM 1, ALARM2 і ALARM3):

□ TIME – встановлює поточний час;

□ MODE – включає / вимикає час спрацьовування;

□ DISP – вимикає дисплей;

□ ALARM * – встановлює час спрацьовування.

Трикутний покажчик показує поточний пункт меню; його можна переміщати вгору / вниз за допомогою кнопок S2 / S3. Після натискання S1 відображається підменю для обраного пункту меню:

□ TIME – S1 оновлює поточний час і виходить з меню. S2 переводить покажчик змінною цифри. Кнопки S3 / S4 збільшують / умениіают поточну цифру.

□ MODE – SI, S2 і S3 перемикають час спрацьовування Alarml, Alarm2 і Alarm3, а кнопка S4 здійснює вихід з меню. Стан сигналу показано у верхньому лівому кутку головного екрану.

□ DISP – дисплей просто очищається. Дисплей можна включити натисненням будь-якої кнопки. Після включення дисплей повертається в той же самий стан, в якому він був перед вимиканням.

□ ALARM * – те ж саме, що і TIME, але оновлюється час спрацьовування (а не системний час).

Кнопка S4 зупиняє спрацював сигнал.

Конструкція

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

Плата одностороння (на стороні компонентів є всього декілька перемичок). Боку друкованої плати показані на рис. 4.35 і 4.36. Фотографія готового пристрою з проводами до гучномовця приведена на рис. 4.37.

Рис. 4.35. Друкована плата пристрої (сторона компонентів)

Рис. 4.36. Друкована плата пристрої (сторона друкованих провідників)

Рис. 4.37. Зовнішній вигляд пристрою

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

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

Тактова частота дорівнює 32768 Гц (подається від зовнішнього кварцу). Контролер запрограмований за допомогою STK500 в режимі програмування ISP. Найважливіші фрагменти коду ілюструє лістинг 4.11. Програма управляється через меню, тому деякі функції мають нескінченні цикли while, КОТОрИС дозволяє користувачам змінювати налаштування і виходити з циклу (вибравши відповідний пункт меню). Функція setmode дає можливість користувачеві вмикати / вимикати будь-яке з трьох спрацьовувань, a setaiarm- встановити час спрацьовування. Важливими фрагментами коду є ті, які відображають поточний час, продовжують звучання при спрацьовуванні, а також включають сигнал при настанні часу спрацьовування. Тому ці три фрагменти повторюються у всіх циклах while всередині головної функції і всередині деяких інших функцій. Функція showTime_d відображає поточний час, a showTime відображає час, який передається в неї через масив Time [3], Програма виконується на низькій частоті, тому оновлення дисплея займає деякий час, але в результаті знижується загальне енергоспоживання.

void showTime (unsigned char Time[3], unsigned char x, unsigned char y)

{

cursorxy (x%84/y%6) ;

timetext[0J=(Time[hour]/10+’0′);

timetext[1]=(Time[hour]%10+’0′);

timetext[2]=(‘:’);

timetext[3]=(Time[min]/10+’0

timetext[4] = (Time [min]%10+’0′);

timetext[5]= ‘\0’;

putstr(timetext);

}

void showTime_d(unsigned char x, unsigned char y)

{

cursorxy (x%84, y%6) ;

putcharacter(Alarm[0][hour]/10+’0′); putcharacter(Alarm[0][hour]%10+’0′); putcharacter(‘:’);

putcharacter(Alarm[0][min]/10+’0′); putcharacter(Alarm[0][min]%10+’0′); if (((Alarm[0][sec])%2))

{

cursorxy((x%84)+2*6,y%6); putcharacter(‘      ‘);

}

if(al_on==0)

{

cursorxy(0,1); if(alarml==l)

{

putstr("1 ");

}

else putstr(" "); if (alarm2==l)

{

putstr("2 ");

}

else putstr(" ") ; if(alarm3==l)

{

putstr("3 ");

}

else putstr(" ");

}

}

Час відраховується за допомогою зовнішнього кварцу – це набагато точніше, ніж вбудований RC-генератор мікроконтролера. В інших фрагментах коду запускається система автопідстроювання частоти, инициализируются і скидаються значення часу спрацьовування, а також налаштовуються інші глобальні параметри.

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

Робота пристрою докладно описана в попередньому розділі.

Висновок

У цій главі розглянуті деякі проекти на базі графічного дисплея Nokia 3310. Багато наведені тут пристрою можна легко модифікувати під інші цілі. У наступному розділі ми зосередимося на деяких датчиках і обговоримо проекти, виконані з їх використанням.

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