Виберіть свою мову

Іноді хочеться дізнатися: "А не дзвонили в двері, коли нікого не було вдома?". У цьому допоможе пропонований музичний дзвінок, який має спеціальну запоминающую функцію. Виконаний він на мікроконтролері популярного сімейства Р/Р, В результаті вийшло дуже простий пристрій, здатний відтворювати кілька десятків мелодій і запам'ятовувати останнє натискання кнопки дзвінка, якщо двері не була вчасно відкрита.

Принцип роботи цього пристрою такий: якщо протягом трьох хвилин з моменту натискання на кнопку дзвінка вхідні двері не відкриють, то при подальшому її відкриванні буде відтворена одна з запрограмованих мелодій Іншими словами, відкривши двері і почувши цю мелодію, ви зрозумієте, що хтось у вашу відсутність дзвонив. В іншому його робота не відрізняється від звичайного музичного дзвінка.

У наведеному варіанті пристрій відтворює 16 мелодій, які вибираються випадковим чином. Змінивши коди керуючої програми, можна заміни ib мелодії будь-якими іншими, а також змінити їх кількість та час звучання.

Принципова схема дзвінка зображена на рис. 1. Його основа - мікроконтролер DD1 (PIC16F84-04I/P фірми Microchip). Тактову частоту задає кварцовий резонатор ZQ1. Сигнал 34 знімається з виведення 7 (RB1) мікроконтролера, підсилюється транзистором VT1 і відтворюється динамічну головку ВА1.

Кнопка дзвінка SB1 і датчик відкривання дверей SF1 підключені до висновків мікроконтролера через струмообмежуючі резистори R3, R5. Конденсатори С5 і С6 виключають мимовільне спрацьовування дзвінка від перешкод, створюваних електроприладами.

Пристрій живиться від мережі змінного струму через понижуючий трансформатор Т1. Напруга вторинної обмотки випрямляється діодним мостом VD1. постійне напруга стабілізується інтегральним стабілізатором DA 1.

Креслення друкованої плати і розташування деталей на ній показано на рис. 2. Плата розрахована на установку резисторів МЛТ. конденсаторів К50-35 (С1, С2) і КМ (решта).

Діодний міст VD1 - КЦ405 з будь-яким буквеним індексом. Кварцовий резонатор ZQ1 - на частоту 4 МГц. Конденсатори C3, C4 - будь-які керамічні ємністю 15...33 пФ. Транзистор VT1 - будь-який з серії КТ815. Опір резистора R1 повинно бути не понад 40 кОм.

В якості Т1 підійде будь-трансформатор, що забезпечує на вторинній обмотці напруга 9... 10 В при струмі 0.3 А. В авторському варіанті застосовано трансформатор ТЗ-Ш-ЗМ1. у якого число витків вторинної обмотки зменшено на 90.

Кнопка SB1 - звичайна для дверного дзвінка, датчик відкривання дверей SF1 - геркон. закріплений на дверному одвірку. На самій двері встановлюють магніт. При закриванні дверей геркон під дією магніту замикається, при відкриванні -розмикається. Датчик може бути будь-якої конструкції.

Лістинг програми:

(натисніть для збільшення)

Для заміни мелодій ознайомимося з принципом розміщення їх у пам'яті мікроконтролера. Вони розташовуються в пам'яті програм в інтервалі адрес з 200Н за 3FFH. Одна нота займає в пам'яті одне машинне слово. Кожна мелодія повинна закінчуватися кодом 07Н. Маска M_RAND. розташована за адресами 0079Н і 0085Н. визначає кількість мелодій і. відповідно, максимальна кількість нот в мелодії (табл. 2).

Так, якщо маска дорівнює F8H (32 мелодії по 15 нот), то перша мелодія займе адреси 200H-20FH. друга -210H-21FH.....32-я - 3F0H-3FFH. Очевидно, що кожна з них займає 16 машинних слів, а максимальна кількість нот в мелодії - 15 (одне машинне слово відведено під код 07Н).

Слід зазначити: якщо в кінці мелодії немає коду 07Н. то буде відтворюватися без зупинки наступна і т. д. до тих пір. поки не зустрінеться цей код. В даному випадку (16 мелодій по 31 ноті) перша мелодія займає адреси 200H-21FH. друга -220H-23FH і т. д. Реальне число нот (від 1 до 31) залежить від того, в якому місці буде поставлений код 07Н. Коди нот в залежності від їх тривалості та приналежності до тієї або іншій октаві представлені в табл. 3.

(натисніть для збільшення)

Для попереднього прослуховування мелодій можна використовувати програму music.exe.

За адресою 008ВН розташовується константа Wait_D. визначає час очікування відкривання дверей. Це час (у секундах) приблизно дорівнює Wait_D-2. У нашому випадку константа дорівнює 5АН (в десятковій системі - 90) і час очікування становить 90 · 2 = 180 с = 3 хв.

Для зміни програми необхідно завантажити файл ring.hex в шістнадцятковий редактор (зазвичай він вбудований в програмне забезпечення програматора) і відредагувати, прийнявши до уваги те, що машинне слово мікроконтролера PIC16F84 має довжину 14 біт і представлено четырехразрядным шестнадцатиричным числом. Замінювати необхідно тільки два молодших розряду, так як старші являють собою код інструкції. Наприклад, у пам'яті за адресою знаходиться 208Н число 3483Н, а необхідно записати код 07Н. Змінивши тільки молодші розряди, отримаємо число 3407Н.

Допустиме також внести зміни безпосередньо у вихідний текст програми (файл nng.asm). Для цього необхідно створити папку Ring в кореневому каталозі будь-якого диска, помістити туди файли nng.asm, ring.pjt і ring.lkr. Потім у середовищі MPLAB v4.12 відкрити проект ring.pjt і файл ring.asm. який і необхідно відредагувати. Далі запускають побудова проекту і отримують новий файл ring.hex.

Файли проекту

Автор: М. Буров, р. Кострома