Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/10307
Title: Програмований таймер
Authors: Тичков, Володимир Володимирович
Тихонов, Руслан Ігорович
Keywords: програмований таймер-генератор;рідкокристалічний індикатор;гальванічна розв’язка;мікроконтролер PIC16F1517
Issue Date: 8-Jun-2026
Abstract: Кваліфікаційна робота присвячена розробленню програмованого таймера-генератора для робототехнічних комплексів, який призначений для автоматичного вмикання та вимикання виконавчих пристроїв у заданий час, а також для підтримання встановленої температури в контрольованих середовищах. Такий пристрій може застосовуватися у робототехнічних системах, навчальних стендах, побутовій автоматиці, системах освітлення, нагрівання, вентиляції, волого-теплової обробки та інших процесах, де потрібне точне керування часом і температурою. Актуальність роботи зумовлена тим, що багато промислових і побутових таймерів мають обмежену функціональність: вони здебільшого керують лише одним зовнішнім пристроєм або виконують тільки функцію відліку часу. Для керування кількома пристроями необхідно застосовувати декілька окремих таймерів, що ускладнює систему, збільшує її вартість, габарити та кількість з’єднань. Запропонований таймер-генератор усуває цей недолік, оскільки дозволяє одночасно керувати вісьмома зовнішніми каналами та додатково підтримувати температуру по чотирьох незалежних каналах. У першому розділі роботи виконано аналіз існуючих типів таймерів. Розглянуто механічні таймери, які є простими й дешевими, але мають обмежений інтервал програмування, залежать від частоти мережі та припиняють роботу при зникненні живлення. Також проаналізовано електромеханічні таймери, які можуть працювати за добовим або тижневим циклом, але мають обмежену дискретність і механічні елементи, що з часом зношуються. Окремо розглянуто цифрові електронні таймери, які забезпечують програмне керування, кращу точність і можливість збереження параметрів. У технічному завданні визначено, що програмований таймер має працювати від мережі 220 В, 50 Гц, мати 8 робочих каналів, цикл програмування 24 години, дискретність завдання часу 1 хвилину, 99 програмованих подій, релейні комутуючі елементи, сумарне навантаження до 1 кВт і 4 канали регулювання температури. Для температурного регулювання передбачено використання нагрівальних елементів потужністю 200 Вт, а для збереження поточного часу при зникненні живлення — літієвий елемент CR1220. Габаритні розміри пристрою становлять 155×80×55 мм, що робить його достатньо компактним. У структурному плані пристрій побудовано як мікропроцесорну систему, центральним елементом якої є мікроконтролер PIC16F1517. До нього підключено кварцовий резонатор, датчики температури, органи керування, рідкокристалічний індикатор, блок живлення та блок керування зовнішніми пристроями. Кварцовий резонатор частотою 32768 Гц забезпечує стабільний відлік часу, а після поділу частоти формується секундний інтервал, необхідний для роботи таймера в режимі реального часу. Для відображення інформації та програмування режимів роботи застосовано алфавітно-цифровий рідкокристалічний модуль BC1602/WA1602L, який дозволяє показувати поточний час, стан реле, режими роботи каналів і задані температурні параметри. Органи керування реалізовані на п’яти кнопках, за допомогою яких користувач може встановлювати час, програмувати події, перемикати режими «автоматичний/ручний», вмикати або вимикати окремі канали та задавати температуру для відповідного температурного каналу. Температурний контроль реалізовано за допомогою датчиків DS18B20, які мають діапазон вимірювання від -55 до +125 °С і точність близько 0,5 °С у робочому діапазоні. Датчики підключаються паралельно до спільної шини даних, що спрощує схему та дозволяє реалізувати декілька каналів температурного контролю. У пристрої також передбачено можливість корекції похибки датчиків температури, що підвищує точність підтримання заданого режиму. Електрична принципова схема передбачає живлення від мережі 220 В через понижувальний трансформатор 220/12 В потужністю 4 Вт, випрямляч і стабілізатори напруги. Для живлення мікроконтролера використано стабілізатор LM78L05, а для живлення рідкокристалічного індикатора — перетворювач MC34063. Зовнішні пристрої вмикаються через реле К1–К8, а в температурних каналах як силові ключі використано симістори BTA140-600. Для гальванічної розв’язки кіл керування симісторами застосовано оптопари MOC3062, що підвищує електробезпеку та надійність роботи силової частини. У роботі передбачено розроблення програмного забезпечення для мікроконтролера, яке забезпечує збереження в енергонезалежній пам’яті подій, тривалості імпульсу, заданої температури та значень температурної корекції датчиків. Програмна логіка дає змогу реалізувати три типи подій: вмикання, вимикання та імпульс. Це робить пристрій гнучким для використання в різних робототехнічних і автоматизованих системах, де потрібне керування виконавчими механізмами за часом або за температурним режимом. У технологічній частині роботи розглянуто виготовлення друкованої плати та складання пристрою. Визначено, що таймер складається з двох плат розміром 73×134 мм і товщиною 5 мм. Технологічний процес включає виготовлення корпусу, монтаж елементів, паяння, складання та налагодження пристрою. Такий підхід забезпечує компактність, ремонтопридатність і можливість практичного виготовлення виробу в умовах лабораторії або дрібносерійного виробництва. У розділі охорони праці проаналізовано умови роботи в експериментальній лабораторії, де виконується розроблення програмованого таймера. Робота передбачає використання персонального комп’ютера, електронних компонентів, паяльного обладнання та вимірювальних засобів, тому увагу приділено електробезпеці, параметрам мікроклімату, освітленню, організації робочого місця, безпеці під час монтажу та налагодження електронної апаратури. Розглянуто також заходи щодо покращення умов праці, зокрема застосування сучасної системи кондиціонування та рівномірної підготовки повітря. Практичні результати роботи відрізняються від найближчих аналогів тим, що запропонований пристрій поєднує функції багатоканального таймера, генератора подій і регулятора температури в одному компактному виробі. У конструктивному плані він має 8 каналів керування зовнішніми пристроями, 4 температурні канали, індикатор, кнопковий інтерфейс, резервне живлення часу та енергонезалежне збереження параметрів. У технологічному плані пристрій реалізується на друкованих платах із доступною елементною базою. У соціо-екологічному плані він сприяє автоматизації процесів, зменшенню людського втручання, економії електроенергії та стабільнішому підтриманню температурних режимів. В економічному плані розробка дозволяє замінити декілька окремих таймерів і терморегуляторів одним універсальним пристроєм, що зменшує витрати на обладнання, монтаж і обслуговування
URI: https://er.chdtu.edu.ua/handle/ChSTU/10307
Appears in Collections:174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Робототехнічні системи та автоматизація)

Files in This Item:
File Description SizeFormat 
Тихонов.pdf
  Restricted Access
КРБ Тихонов Р.І. 20262.66 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
4EPKACbKMÄJ IEPKABHMİM TEXHOJIOrI4HHH YHIBEPCHTET 
OAKYJIDTET EJEKTPOHHMX TEXHOJOiÄ, ABTOTPAHCIOPTY TA 
MAIMHOBYIYBAHHA 
KAOEJ|PA IPHJIAJIOBYJ|YBAHHA, MEXATPOHIKH TA 
KOMII'IOTEPH3OBAHHX TEXHOJIOrIṁ 
lorry ueHO AO 3aXMCTy 
Beasiny Bava kapepu IIMKT 
MaKcHM BOHIAPEHKO 
2026 p. 
IIOACHIOBAJIbHA3 AIIHCKA 
I0K BAUIlOIKAIIHHOI POBOTH BAKAJIABPA 
Ha TeMy «llporpaMOBAHHĂ Ta ňMep» 
BuKOHaB 3106yBay ocBİTH 4 Kypcy, rpynıu 3PCA-25cK3 
cIneLlaTbHICTb: 174 «ABTOMaTH3auia, KOMn'IOTepHo 
iHTerpoBaHİ TeXHOIOrii Ta poõoTOTeXHİKa» 
OCBITHA iporpaMa: PoooTOTexHİ4Hİ CHCTeMH Ta 
aBTOMaTH3alIIA 
THXOHOB PycnaH IropoBHY 
KepisHMK BononHMHD THYKOB 
PeueH3eHT TpHropiň THMYHK 
KBanidikauižHa poőoTa őakanaBpa MICTHTb pesyNBTaTH BJJaCHHX 3106yTKİB aBTOpa. 
BHKopHCTaHHA 1ne4, pesylbTaTIB 1 TeKCTIB IHUHX aBTOpIB MarOTb II0CHiaHHA Ha 
BiInOBİIHe MKePeno. 
YepkacH- 2026 
UEPKACbKHŮ JLEPKABIHHÝ TEXHOJIOTI4HMH VHIBEPCHTET 
( tone uitMeIN DauiM OO aNuUIt.OTO IKIDy 
DakynbTCT CJICKTDOLuX TeXNOJIOTiL, 
Kapexpa aBTOTDauciiODTY Ta 
mpma/o6YAVBamIn, MaIHHO6YIVBaHHSA 
MCxaTpoMiKU 
OcoiTHb0-KBanichikauišHú piseub aKaJTaBp TA KOMIT' 1OTepw30BauHX TeXHoJTorii 
CheuwlbHiCTb 174 «ABrOMATWanin, KOMIn' 
OCBITHa 1OTCPH0-iITCrPOBAni 
nporpaMa TeXHO1Oriï Ta 
«Poố0TOTeXIHii poboroTeXHİKA» 
CHCTeMM Ta aBTOMaTH3auis> 
3ATBEPIDKYIO 
B.o. 3apitygava kaheapu IIMKT 
MaKcHM BoHJapeHKo 
96 2026 pokKy 
3 A BAA H HA 
HA KBAJIIOIKAIÄHY POBOTY EAKAJIABPA 
THxOHOBa Pycnana IropoBuya 
(upisauIc, iM'A, io GabkoDi) 
I. TeMa pooTH [IporpamOBaHHÝ TaMMep 
KepiBHHK poõoTH A0T Kahenpu npunano6yIyBaHHA, MexaTpOHIKH Ta 
KOMI IOTePH3OBaHHX TeXHOJIOriň, K.T.H., I0LeHT TuYKOB BononHMHp BoIONUMHPpOBHY 
( upiseUỊe, iM'A, no 6ankoni, naykoBuŇC TyriIL, DTCNC IBaI) 
3aTBepAKEHI Haka3OM BHIOrO HaByaIbHOrO 3akiay BII "13 KBÍTHA 2026 poKy No 94/03-03 
2. CipoK NONaHHA 3A06yBayeM po6oTH 5 YepBHA 2026 p. 
3. BuxINHİ MaHi n0 poố0TH HKI Iporpamy BaHHA TaŽMepa 24 roIHHH (106a): 
AHCKpeTHICTB 3aBlaHHA 4acy - 1 XBHIHHa; KiJIbKICTH KaHaIB - 8 KaHaniB: cVMaDHa 
3naTHÍCTB HaBaHTaxeHHA TaűMepa - I KBT, (220 B); nporpaMOBaHİ nOgii - BMHKaHHS. 
BHMHKaHHA, İMIYIbC; KÜIbKİcTb IOAIÄ- 99 noniň; THI KOMYTYIOYOrO eNeMeHTa - pene: 
KIIbKICTb KaHaiiB_ peryIkOaHHA TEMIeparypu - 4 kaHanH; noTyKHİCTH HarpiBanbHOrO 
enemeHTa – 200 BT, (220 B); KHBNEHHA – 220 B, 50 Tu. 
4. 3micT pozpaxyHKOB0-n01CHIOBAJIbHOÏ 3anHcKH (nepesiK NHTAHb, AKİ noTpiốHO 
po3pooHTH 1OópyHTYBaHHA HeoŐXiIHoCTİ IpoeKTYBAHHA Ha oCHOBİ KpHTHYHOro 
aHai3y Internet nouyKy; 2 O6pyHTYBaHHA TeXHİYHOro 3aBlaHHA; 3 Po3poóka 
CTDyKTypHoi Ta npHHUHNOBOi CxeM; 4 Po3pooKa nporpaMHOro 3aõesmeyeHHA TažMepa 
reHepaTOpa poooTOTeXHİ4HHX KOMIJIeKCIB; 6 CnenjaIbHHĂ po3nin. 6.1 
TexHOJIoriYHHÄ po3I; 6.2 EKOHOMiYHHĂ po3AI; 6.3 Po3nin OXOPOHH 
npaui 
5. IlepeiK rpağiHoro MaTepiany (3 TOYHHM 3a3HaYEHHAM 060B'ABKOBHX KpecneHL) 
IIporpaMOBAHňT aňMep. Cxema eneKTpHYHa cTpYKTYpHa (A1). EJIOK YnpaBniHHA 
30BHİIHỈMH HPHCTPOAMH. CxeMa eleKTPHTHa npHHIHnOBa (A1) CKIalaNbHHĂ 
KpecneHHK (A2)KpecneHHK ApYKOBaHOï IMaTH (A2). . EIoK MİKpoKOHTP0Jepa. 
CxeMa eJIeKTpHYHa npHHHInOBa (A1). CKJanaJIbHHŇ KpecJIeHHK (A2). 
IporpaMOBAHHÄ TaiMep-reHepaTop AIS POooTOTeXHİyHHX KOMIIeKCİB. KpecieHHK 
ApVKOBaHo nIaTH (A2). 
2 
6. KoncybTan posniis Knamiqpikauiinoi poóorH 
lIpi3vmuIc, iiiaUI Ta nocana inonc, JaTa 
Posi pabnaHHSI 3aBlaHHA 
KONCyJIbTaWTa DII/LaD ripninge 
Oxopon npaui KoxeM°AKin O.C., crapuHi BHKJIajnaų 
kaɖpenpu r35KEXJ 
ExonoMivnni THYKOB B.B., nouerT Kadenpu IIMKT, 
posain, K.T.H., IOUCHT 
TeHONorinni 
ponin 
Hopvoniauiinnů THUKOB B.B., noueHT Kadhenpu IIMKT, 
KOHTPo.JIb K.T.H., 1OLeHT 
7. Mara BHMaYi 3aBlaHHA 
KAJIEHIAPHMM IJIAH 
No HasBa eTaniB KBanioikauiÄHOi Crpok BKOHAHHA IpmiTKa 
3/n poõoTH eraniB poõoTH 
O6rpyHTYBaHHA HeOŐxIJHOCTI NpoeKTYBaHHA Ha OCHOBI 02.2026 BHK 
KpHTHYHOro aHai3y icHyIOYHX aHanoriB 
OôrpyHTYBaHHA TeXHIYHOrO 3aBlaHHA 02.2026 BHK 
3 Pospooka crpyKTypHoi CxeMH 02.2026 BHK 
4 PospooKa npHHUHnOBOi eJIeKTpHYHO1i cxeMH 03.2026 BHK 
Po3paXyHOK eJIeMeHTIB CXeMH 03-04.2026 BHK 
6 OuiHKaT OYHOCTİ Ta HaniĂHOCTI 03-04.2026 
TexHoNOriHnŭ po3Ain 03-04.2026 BHK 
8 Po3niı oxopoHH ipaui 03-04.2026 BHK 
EKOHOMiYHUÄp o3AiJI 03-04.2026 BHK 
10 OhopMJneHHA KPecieHb 03-04.2026 BHK 
11 OhopMIEHHA NOnaTKIB 05.2026 BHK 
12 OpopmneHHA CYTpoBiNHoi 10KyMeHTaii 05.2026 BHK 
3n06ysa BHUIOÏ oCBiTH Pycnan THXOHOB 
KepisnnK po6oTM BoJIOJHMHP THUKOB 
(nyụIHc 
 
Вступ 
 
Таймерні пристрої різних типів давно стали невід’ємною частиною побуту 
та промисловості, забезпечуючи автоматизацію різноманітних процесів. Багато 
завдань керування технологічними операціями потребують виконання в режимі 
реального часу. Сучасні таймери дозволяють ефективно задавати інтервали 
роботи обладнання, сигналізувати про завершення певних циклів тощо. 
Відтак, застосування таймерів є надзвичайно актуальним як для 
промислової автоматизації, так і для створення робототехнічних комплексів — чи 
то на виробництві, чи в побуті. Яскравим прикладом є автоматизація процесів 
волого-теплової обробки у швейній галузі. Найефективнішим методом 
підтримання необхідного режиму такої обробки є використання автоматичного 
регулювання температури та часу витримки. 
Таймери самостійно включають електричні або механічні прилади. 
Наприклад, вранці вони включають освітлення в акваріумі, ввечері вимикають 
його. Експлуатація пристрою значно полегшує утримання акваріума. Мешканці 
підводного світу, включаючи рослини, швидко пристосовується до циклічних 
тимчасовим процесів: таймер позбавляє ваших вихованців від зайвих стресів. 
Одним головним недоліком таймерів, які випускає промисловість є те що 
вони можуть керувати тільки одним зовнішнім пристроєм. Для управління 
декількома пристроями необхідна така ж кількість таймерів, що економічно не 
вигідно для споживача. Ще одним з недоліків являється однофункціональність – 
управління тільки відліками часу. При розробці таймера-генератора були 
враховані вказані недоліки та було розроблено пристрій якій одночасно в 
реальному часі керує до 8 зовнішніми пристроями та дозволяє підтримувати 
встановлену температуру (керуючи нагрівачами чи вентиляторами) по 4 
незалежним каналам. 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 4  
  
 
1 Обгрунтування необхідності проектування на основі критичного 
аналізу Internet пошуку 
 
Таймер — це пристрій або інструмент, призначений для відліку певних 
часових інтервалів. Його можна розглядати як різновид годинника, що 
використовується для керування послідовністю подій чи процесів. На відміну від 
секундоміра, який веде відлік від нуля для вимірювання вже витраченого часу, 
таймер працює за принципом пісочного годинника, відраховуючи час у 
зворотному напрямку від заданого значення. За принципом дії таймери 
поділяються на механічні, електромеханічні, електронні (кварцові) та програмні. 
Найчастіше під таймером розуміють пристрій зі зворотним відліком, який 
активується вручну або за допомогою електричного імпульсу. Окрім них, існують 
таймери реального часу, які спрацьовують у точно визначений момент доби; такі 
пристрої обов’язково містять вбудований годинник або механізм відліку часу. 
Найпростішим прикладом такого таймера є звичайний будильник. 
 
1.1 Механічний таймер 
Якщо у вашому домі є прилади, які потребують періодичного ввімкнення 
та вимкнення — наприклад, насоси, обігрівачі чи компресори, — розетки-таймери 
допоможуть позбутися рутинної необхідності контролювати цей процес особисто. 
За принципом роботи вони поділяються на механічні та електронні. 
Механічні моделі простіші в обслуговуванні та налаштуванні, до того ж вони 
дешевші, що забезпечує їм високу популярність. Однак такі пристрої мають певні 
особливості, з якими варто ознайомитися ще до моменту придбання та початку 
експлуатації. 
Принцип дії: 
Принцип роботи механічного таймера-розетки предсталений на рисунку 
1.1. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 5  
  
 
 
Рисунок 1.1 – Пристрій розетки з механічним таймером: 1-розетка, 2- 
перемикач режимів роботи, 3-шкала часу, 4-програмовані клавіші, 5-показник 
часу, 6-штепсель 
Спосіб комутації електричних контактів у розетках-таймерах однаковий, 
він механічний, через з’єднання провідників. Різниця лише в методі керування. В 
електронних це виконують релейні схеми, які наглядаються процесором. 
Основою механічних таймерів є пристрій, що забезпечує постійний обертовий 
рух, який сприяє з’єднанню та роз’єднанню контактів. 
У старіших таймерах, виготовлених років 30-40 тому, таким пристроєм був 
механізм, подібний до годинникового, котрий складався із системи шестерень і 
такий, що рухався спіральною пружиною. Зараз його замінено повільнохідним 
імпульсним електродвигуном, що зробило прилад менш шумним, хоча і залежним 
від зовнішнього джерела електрики. 
Спосіб контролю комутації і виявив головний недолік механічних 
рознімів-таймерів. У наявних зразках неможливо реалізувати програмування на 
інтервал часу, довший за добу. В електронних же апаратах він може сягати тижня 
чи місяця. 
Стається це тому, що темп обертання виконавчого диска з контактом 
залежить від передавального співвідношення редуктора, яке зменшує число 
обертів за хвилину валу імпульсного електродвигуна. 
Є методи змусити виконавчий диск робити повний оберт, наприклад, за дві 
доби. Одне з них – ускладнити редуктор, зробивши більше шестерень у ньому. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 6  
  
 
Інше – збільшити діаметр виконавчого диска. Проте – це розширений шлях 
модернізації конструкції, що збільшує її габаритність. Тому його не 
використовують. 
Іншим недоліком механічних розеток-таймерів є залежність виконавчого 
двигуна від зовнішньої енергії. Якщо частота змінного струму відрізняється від 
номінальних 50 Гц, то вони або прискорюються, або сповільнюються. Крім того, 
при аварійних вимкненнях електроенергії таймери механічні припиняють 
працювати зовсім. В електронних розетках-таймери цього не трапляється, 
оскільки вони обладнані резервним джерелом живлення – акумулятором. 
Прив'язка механічного комутуючого пристрою до мережевої напруги може 
бути і його перевагою. У разі аварійного вимкнення він однаково виконає свою 
програму, але трохи пізніше. А от електронний комутатор не відчує відключення 
від мережі. Контакти він замкне, а працював керований апарат чи ні – йому 
байдуже. 
 
1.2 Електромеханічний таймер 
Електромеханічні таймери призначені для управління електроприладами за 
розкладом. Використовується для включення/відключення освітлення і інших 
електротехнічних пристроїв протягом добового або тижневого циклу за 
встановленою програмою.  
Реле часу має мінімальний інтервал програмування 15 хв, є вбудований 
акумулятор з резервом ходу до 100 годин, а також, що можливість примусового 
включення/відключення навантаження, простий в установці і надійний.  
Механічний таймер невимогливий до навколишньої температури, тому Ви 
можете використовувати його в холодних приміщеннях (гаражі, неопалювані 
кімнати будинку або офісу, підсобки) для управління світлом або нагрівальними 
приладами. 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 7  
  
 
 
Рисунок 1.2 – Електромеханічний таймер 
 
Принцип дії: 
Механічний добовий таймер має 96 міні-перемикачів-«пелюсток», кожен з 
яких відповідає за свій 15(30)-хвилинний відрізок на 24-годинною шкалою. В ті 
15(30) хвилин, коли відповідний «пелюстка» включений, прилад буде працювати. 
Таймери механічні підключаються в розетку для управління побутовими 
приладами можна придбати в будь-якому спеціалізованому магазині, ми ж 
розглянемо промислові варіанти, що встановлюються на площину/DIN-рейку, 
номінальний струм контактів 16 А. 
Реле часу 1РВМ (одноканальне), 2РВМ (двоканальне) більше не 
випускаються, натомість йдуть сучасні аналоги. На нашому сайті ви можете 
знайти описи різних (механічних і електронних) реле часу в розділі каталогу 
«Добові і тижневі реле».  
Технічні характеристики: 
-Напруга живлення: 230 В  
-Точність ходу ± 1 сек/добу 
-Споживана потужність: 1.8 ВA 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 8  
  
 
-Кількість контактів: 1 перемикаючий 
-Номінальний струм: 16 А 
-Комутована напруга: 250 В  
-Діапазон робочих температур: від - 10 °C до + 45 °C - мінімальна 
температура згідно з досвіду використання даних пристроїв значно нижче. 
-Кріплення реле: DIN-рейка/поверхня 
 
1.3 Цифровий електронний таймер 
Спроможне здійснювати програмне автоматичне керування освітленням та 
іншими приладами з огляду на добовий дійсний час за таймером. 
Такий апарат на сьогоднішній день буде доречним для збереження 
електроенергії на освітлення, покращення роботи зовнішнього освітлення, для 
різноманітних пристроїв та апаратури, які необхідно вмикати й вимикати в 
однаковий час регулярно кожні добу, протягом багатьох тижнів, місяців. Таким 
чином, відбувається економія і матеріальних засобів. 
 
 
Рисунок 1.3 – Цифровий електронний таймер 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 9  
  
 
 
Рисунок 1.4 – Електрична принципова схема цифрового таймера 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 10  
  
 
2 Обґрунтування технічного завдання 
 
Проаналізуємо вихідні дані нашої кваліфікаційної роботи. Ось так, згідно 
із завданням, програмований таймер використовується для увімкнення та 
вимкнення різних виконавчих пристроїв у визначений час, а також регулятор 
температури для підтримання заданої теплоти. Працює при вихідній напрузі 220 
В, 50 Гц. Літієвий елемент CR1220. Кількість робочих каналів 8 шт. Живлення 
схеми становить 12 В. У роли індикатора виступає WA1602L, датчика 
температури - DS18B20. (Maxim-Dallas). Розміри плати становлять ширина 73 мм, 
довжина 134 мм, товщина 5мм, що є досить компактна в нашому випадку. 
Можливість корекції похибки датчика температури. Збереження всіх 
програмованих параметрів в незалежній пам’яті. 
Технічні показники проекту: 
Цикл програмування таймера - 24 години (доба). 
Дискретність завдання часу - 1 хвилина. 
Кількість каналів - 8 каналів. 
Сумарна здатність навантаження таймера - 1 кВт, (220 В) 
Програмовані події - вмикання, вимикання, імпульс. 
Кількість подій - 99 подій. 
Тип коммутуючого елемента – реле. 
Кількість каналів регулювання температури - 4 канали. 
Потужність нагрівального елемента – 200 Вт, (220В.). 
Живлення – 220 В, 50 Гц. 
Габаритні розміри – 155 х 80 х 55. 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 11  
  
 
3 Розробка структурної та принципової схем 
 
Структурна схема програмованого таймера-генератора для 
робототехнічних комплексів зображена на рисунку 3.1. 
 
 
Рисунок 3.1 - Структурна схема таймера-генератора: КР – кварцовий 
резонатор, ДТ – датчик температури, ЦП – центральний процесор, ОК – органи 
керування, БУЗП – блок управління зовнішніми пристроями, БЖ – блок 
живлення, ЦП – мікроконтролер типу PIC16F1517-I/P(MICRO CHIP) 
 
Характеристики наведені в таблиці 3.1. 
Таблиця 3.1 – Характеристика мікроконтролера типу PIC16F1517-
I/P(MICRO CHIP) 
Параметр Значення 
Lead Free Status / RoHS Status Lead free / RoHS Compliant 
Серія PIC® XLP™ 16F 
Процесор PIC 
Розмір ядра 8 Біт 
Швидкість 20 MГц 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 12  
  
 
Підключення  I²C, LIN, SPI, UART/USART 
Периферія  Brownout Detect/Reset, POR, PWM, WDT 
Число вводів/виводів 36 
Розмір програмованої пам'яті 14 Kбайт (8 K x 14) 
Тип програмованої пам'яті  FLASH 
Размер памяти  512 x 8 
Напруга джерела (Vcc/Vdd)  2.3 В - 5.5 В 
Претворювачі даних  A/D 28x10b 
Тип осцилятора  Internal 
Робоча температура  40 °C – 85 °C 
Корпус (розмір)  40DIP (0.600", 15.24 мм) 
 
Таймер-генератор по суті є мікропроцесорною системою — це 
функціонально закінчений виріб, що складається з кількох пристроїв, головним з 
яких є мікроконтролер. 
Структура мікропроцесорної системи (МПС) є магістрально-модульною. У 
такій структурі є група магістралей (шин), до яких приєднуються різні модулі 
(блоки), що обмінюються між собою відомостями по одних і тих самих шинах по 
черзі, в режимі поділу часу. 
Типова мікропроцесорна система працює за допомогою шин, за якими в 
систему передаються адреси модулів, до яких звертається мікропроцесор. У шину 
включений шинний формувач (ШФ) – DD2, DD3, що забезпечує роботу 
мікроконтролера на навантаження, утворену зовнішніми ланцюгами. Власної 
здатності навантаження у МП не вистачає. 
Мікроконтролер сполучає на одному кристалі функції процесора та 
периферійних приладів, містить ОЗП і (або) ПЗП. По суті, це однокристальний 
комп'ютер, здатний виконувати нескладні завдання. 
Система стабілізації частоти. 
Таймер-генератор оперує у режимі реального часу, тому для високої 
сталості відліку часу застосовуємо часовий кварцовий резонатор. Резонансна 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 13  
  
 
частота часових резонаторів 32768 Гц, поділена на 15-розрядний двійковий 
лічильник, дає інтервал часу у 1 секунду. 
Алфавітно-цифровий РК-модуль. 
Для показу поточної інформації під час роботи приладу, програмування 
режиму роботи приладу використовуємо алфавітно-цифровий РК-модуль BC1602 
фірми Bolymin. 
Таблиця 3.2 - Основні параметри  
16 символів, 2 рядки 
Вбудований контролер KS0066 або аналогічний 
Підсвітка фронтальна світлодіодна 
Напруга + 5 В 
 
Таблиця 3.3 - Призначення виводів 
№ Символ Призначення 
 
1 Vss Загальний  
2 Vdd Напруга живлення 
3 Vo Регулювання контрастності 
4 RS Вибір регістра команди/дані  
5 R/W Зчитування/запис 
6 E Стробіруючий сигнал 
7 - 14 DB0-DB7 Шина даних 
15 A/Vee Напруга живлення підсвітки/вихід джерела мінусової напруги 
16 K Общий підсвітки 
 
Таблиця 3.4 – Електричні характеристики 
Параметр Символ Умова Значення Од. виміру 
 
Напруга живлення: Vdd Vdd = + 5 В 5.0 В 
 
Струм споживання: Idd Vdd = + 5 В 1.2 мA 
 
Напруга живлення ЖК: Vdd-Vo 25 ºC 4.2 В 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 14  
  
 
Напруга живлення LED 
Vf 25 ºC 4.2 В 
підсвітки  
Струм споживання LED 
If 25 ºC 280 мA 
підсвіткою  
Струм споживання EL 
Iel Vel = 110 В / 400 Гц - Врмс 
підсвіткою  
 
Датчики температури 
Окрім програмованого таймера, який служить для увімкнення та 
вимкнення різних виконавчих пристроїв у заданий час, таймер-генератор включає 
4 канали регулятора температури для підтримання встановленої температури в 
контрольованому середовищі. Як датчики для системи вимірювання та контролю 
температури застосовуємо термістори – DS18B20(Maxim-Dallas). 
 
Рисунок 3.2 – Датчик температури  
 
Температурний діапазон від - 55 до + 125 °С.  
Точність показань 0.5 °С в діапазоні - 10 до + 85 °C. 
Напруга живлення 3 – 5 В.  
Крім стандартної схеми підключення датчика можлива робота і по 
паразитному живленню (крім LaunchPad) - при цьому до датчика необхідно 
підвести всього 2 дроти (1 і 3 вивід на мінус, 2 - дані.). так само шина даних 
підключається до +5 В через резистор 4.7 кОм (підтягуючий резистор) R2…R5. 
Всі датчики підключаються паралельно. 
Органи керування 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 15  
  
 
Для управління (програмування, ручного управління зовнішніми 
пристроями, тощо використовуємо 5 кнопок з нормально розімкнутими 
контактами К1…К5. 
 
Таблиця 3.5 – Технічні параметри кнопок К1-К5 
Функціональне призначення мініатюрна кнопка 
Робоча напруга,В 30 
Робочий струм,А  0.1 
Фіксація немає 
Конфігурація контактів DPDT 
Підсвічування немає 
Опір ізолятора не менше, МОм 100 
Опір контактів не більше, Ом 0,05 
Робоча температура, ºС -25…+70 
Спосіб монтажу в отвори на плату 
Виробник Switronic 
 
Для контролю замикання контактів кнопок при натисканні виводиться 
звуковий сигнал за допомогою п'єзо динаміка HF1. 
Живлення пристрою 
Пристрій живиться від мережі 220 В змінного струму через понижуючий 
трансформатор 220 / 12 В, 4 Вт та схему випрямлення напруги VD15.  
Для стабілізації напруги живлення мікроконтролера використовується 
інтегральний стабілізатор LM78L05 – DA2. 
Мікросхема — стабілізатор 78L05 (7805) має теплове захист, а також 
вбудовану систему **оберігає** стабілізатор від перевантаження по струму. Тим 
не менш, для більш надійної роботи бажано застосовувати діод, що дозволяє 
захистити стабілізатор від короткого замикання у вхідному ланцюзі. 
 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 16  
  
 
Таблиця 3.6 - Технічні параметри стабілізатора 78L05 
Вхідна напруга від 7 В до 20 В 
Вихідна напруга від 4,5 В до 5,5 В 
Вихідний струм (максимальний) 100 мА 
Струм споживання (стабілізатором) 5,5 мА 
Допустима різниця напруги вхід-вихід 1,7 В 
Робоча температура від - 40 до + 125 °C 
 
Для живлення Алфавітно-цифрового ЖК-модуля використовується DA1 - 
MC34063 – універсальна мікросхема для найпростіших імпульсних 
перетворювачів. На ній без застосування зовнішніх перемикаючих транзисторів 
можна будувати понижуючі, підвищують і інвертують перетворювачі. А це 
основні типи перетворювачів, які не мають гальванічної розв'язки. 
 
Таблиця 3.7 - Основні технічні характеристики MC34063 
Широкий діапазон значень вхідних напруг від 3В до 40В 
Високий вихідний імпульсний струм до 1,5 А 
Регульована вихідна напруга 
Частота перетворювача до 100 кГц 
Точність внутрішнього джерела опорної напруги 2 % 
Обмеження струму короткого замикання 
Низьке споживання в сплячому режимі 
 
Для збереження поточного часу при пропаданні живлення таймера від 
мережі використовується литиевый елемент CR1220. 
 
Таблиця 3.8 - Технічні параметри литиевого елемента СR1220 
Найменування типу VARTA: CR1220 
Класифікація МЕК CR1220 
Електрохімічна система Первинний літієвий, дисковий 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 17  
  
 
Ємність 35 мАч 
Напруга 3 В 
 
Блок управління зовнішніми пристроями 
Для включення/виключення зовнішніх пристроїв за програмою чи в 
ручному режимі передбачена подача на них оперативної напруги через контакти 
реле К1…К8. 
В каналах регулятора температури в якості ключів використані 
напівпровідникові симістори VD11…VD14 – BTA 140 – 600 
 
Таблиця 3.9 - Технічні параметри семістора BTA140-600 
I max у відкритому стані, (A) 25 
U в закритому стані, (В) 600 
Відпираючий струм, max (мA) 6÷35 
Pin(1,2,3) (T1, T2 G) 
Корпус TO-220 
 
Для гальванічної розв'язки кіл управління симісторів використано 
оптопари МОС 3062 – DA2…DA5. 
Симісторний оптрон (оптопара) являє собою світлодіод і світлочутливий 
симістор, зібрані в одному корпусі і мають оптичну зв'язок. Основне призначення 
– комутація високоВного навантаження змінного та пульсуючого струму. Крім 
прямого включення навантаження симісторні оптрони нерідко використовуються 
як керуючі для потужних симісторів або тиристорів (як гальванічної розв'язки і як 
підсилювачі струму) 
 
 
 
 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 18  
  
 
Таблиця 3.10 – Параметри симісторного оптрона 
вхід вихід загальні 
тип 
If, мА Ur, В Udrm, В I, мА ZCC Upk, кВ 
МОС3062 10 6 600 100 + 5,3(7.5) 
 
If – струм спрацьовування; 
Ur – зворотна напруга світлодіода, не більше; 
Udrm – напруга, що комутується, не більше; 
I – струм через симістор, не більше; 
ZCC – наявність або відсутність схеми відмикання в момент проходження 
через «нуль»; 
Upk – напруга ізоляції, максимально допустима пікова напруга між входом 
і виходом; 
Urms – напруга ізоляції, максимально допустима напруга ізоляції (діюче 
значення). 
 
Інструкція по експлуатації виробу. 
Для контролю і управління функціями використовується РК – індикатор 16 
Х 2 і 5 кнопок. 
Індикатор має два режими – робочий і програмування. Зовнішній вигляд 
індикатора в робочому режимі показаний на рисунку 3.3. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 19  
  
 
 
 
Рисунок 3.3 – Робочий режим 
 
Чотири символу праворуч угорі відображають реальний час. Для 
установки часу з допомогою кнопок «вправо» і «вліво» встановити курсор на 
позицію індикатора годин. Кнопки «вгору» і «вниз» встановити значення годин, 
потім встановити курсор на позицію індикатора хвилин і встановити значення 
хвилин і натиснути кнопку «enter». Годинник реального часу починають йти, про 
це свідчить миготливе двокрапка. ( при першому включенні після повного 
припинення електроживлення курсор автоматично встановлюється в потрібну 
позицію). Після запуску можна встановити елемент СR1220. Без цього елемента у 
разі короткочасного припинення електроживлення хід годин припиняється. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 20  
  
 
Вісім символів внизу зліва відображають стан реле каналів 1 ... 8. 
Для ручного керування необхідно встановити курсор на символ, 
відповідний потрібного реле і натиснути кнопку «вгору» для включення або 
кнопку «вниз» для відключення. Курсор переміщається з допомогою кнопок 
«вліво» чи «вправо». 
 Вісім символів вгорі зліва відображають режими управління реле. Для 
встановлення потрібного режиму необхідно встановити курсор на символ, що 
відповідає режиму потрібного реле і натиснути кнопку «вгору» для режиму 
«автомат/ручний» або «вниз» для режиму «ручний» В ручному режимі реле 
включаються і відключаються так, як описано вище. У режимі «автомат/ручний» 
реле включаються і вимикаються вручну і автоматично. Для автоматичного 
керування необхідно запрограмувати «події». 
Для цього: 
1. Перемикаємо індикатор таймера в режим «програмування». Натискаємо 
і утримуємо кнопку «вліво», потім натискаємо кнопку «вправо». Індикатор 
приймає вигляд. Відпускаємо кнопку. 
2. За допомогою кнопок «вправо» і «вліво» встановлюємо курсор на 
позицію, яка вказує номер події. За допомогою кнопок «вгору» і «вниз» 
встановлюємо номер першої події – 01. 
3. Далі встановлюємо номер каналу. За допомогою кнопок «вправо» і 
«вліво» встановлюємо курсор на позицію номера каналу. За допомогою кнопок 
«вгору» і «вниз» встановлюємо номер реле – 1. 
4. Далі встановлюємо тип події. За допомогою кнопок «вправо» і «вліво» 
встановлюємо курсор на позицію, яка вказує на тип події. За допомогою кнопок 
«вгору» і «вниз» встановлюємо «+» - включення. 
5. Встановлюємо час настання події. За допомогою кнопок «вправо» і 
«вліво» встановлюємо курсор на позицію, яка вказує годинник настання події. 
За допомогою кнопок «вгору» і «вниз» встановлюємо 10. Встановлюємо 
курсор на позицію, яка вказує хвилини настання події. 
За допомогою кнопок «вгору» і «вниз» встановлюємо 00. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 21  
  
 
6. Для програмування другого події повторити пункти 2 ,4 , 5. В п. 2 
встановити – 02, п. 4 встановити «-», п. 5 – 23.59. Введені події зберігаються в 
пам'яті контролера весь час, поки на пристрій подано електроживлення або 
встановлена батарея CR1220. 
7. Для збереження інформації в енергонезалежній пам'яті необхідно при 
знаходженні індикатора в режимі програмування натискати кнопку «вправо» до 
тих пір, поки на дисплеї не з'явиться напис «store». Після цього натиснути кнопку 
«enter». Введена інформація записується в енергонезалежну пам'ять і індикатор 
переходить в робочий режим.  
Крім включення і відключення існує ще один тип події – імпульс. 
При настанні цієї події реле включається на заздалегідь запрограмований 
час . Цей час може становити 2 – 58 секунд. Один з прикладів використання цього 
типу події – подача дзвінків в школі. Припустимо, потрібно подавати дзвінки 
тривалістю 10 секунд о 08.30 , 09.15 , 09.25 , 10.10 і т. д. Дзвінок підключаємо, 
наприклад, до реле 7, включаємо для цього реле режим «автомат/ручний». Після 
цього програмуємо #01 &7p [08:30], #02 &7p [09:15], #03 &7p [09:25], #04 &7p 
[10:10] і т. д. Встановлюємо тривалість дзвінка p = 10c. 
Об'єднаний режим таймера «автомат/ручний» дозволяє вносити 
короткочасні корективи в запрограмований алгоритм, не змінюючи самого 
алгоритму, тобто задавати події крім запрограмованого часу. 
 Регулятор температури складається з чотирьох терморегуляторів для 
підтримки заданої температури в об'єкті регулювання. Кожен регулятор містить 
датчик температури DS18B20 і нагрівальний елемент. При знаходженні 
індикатора в робочому режимі нижні символи праворуч відображають номер 
каналу, реальну температуру цього каналу і стан регулювання (вкл. вимк.). Для 
того, щоб подивитися температуру іншого каналу необхідно встановити курсор на 
номер каналу і за допомогою кнопок «вгору» і «вниз» встановити потрібний 
канал. Зліва від номера каналу знаходиться символ, який вказує на стан 
регулятора («+» включений, «-» вимкнено). У робочому режимі існує можливість 
корекції похибки датчика температури (при необхідності). Для цього необхідно 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 22  
  
 
помістити поряд з датчиком зразковий термометр, встановити курсор на 
показання температури цього каналу і через деякий час, коли показання 
термометра стабілізуються, кнопками «вгору» і «вниз» встановити на індикаторі 
показання термометра. Після цього записати значення поправки в 
енергонезалежну пам'ять. 
 Для того, щоб встановити задану температуру, необхідно індикатор 
перемкнути у режим «програмування». На індикаторі в тих же знакомісцях 
висвічується номер каналу і значення заданої температура. Встановити курсор на 
значення температури потрібного каналу і за допомогою кнопок «вгору» і «вниз» 
ввести потрібне значення. 
В енергонезалежну пам'ять поміщаються: 
1. Події 
2. Тривалість імпульсу «р». 
3. Задана температура. 
4. Значення температурної корекції датчиків. 
Зазначені в п. 7 дії забезпечують запис одночасно всіх параметрів, тому їх 
слід проводити після повного завершення процесу програмування. 
 
На рисунку 3.4 представлена принципова схема контролера таймера-
генератора. 
Для досягнення поставленої задачі –"програмований таймер-генератор для 
робототехнічних комплексів" як основний елемент апаратної та програмної 
реалізації використовуємо мікроконтролер PIC16F1517-I/PT 
8-бітний PIC-мікроконтролер, FLASH/ISP FLASH = 14 Кбайт, SRAM = 512 
байт, Живлення, В = 2,3...5,5, кільк. вив. користув. = 36, периферія. = Brown-out 
Detect/Reset, POR, PWM, WDT, роздільна здатність/швидкість АЦП/кільк. кан. = 
28 х 10-біт, сумісність = I²C, LIN, SPI, UART/USART, Темп. роб., °C = -40...+85, 
частота, МГц = 20. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 23  
  
 
 
Рисунок 3.4 – Схема принципова контролера  
 
Мікроконтро́лер (англ. microcontroller), або однокристальна мікроЕОМ — 
виконана у вигляді мікросхеми спеціалізована мікропроцесорна система, що 
вміщує мікропроцесор, блоки пам'яті для зберігання коду програм і даних, порти 
вводу-виводу та блоки зі спеціальними функціями (лічильники, компаратори, 
АЦП та інші). 
Застосовується для керування електронними пристроями. По суті, це — 
однокристальний комп'ютер, спроможний виконувати нескладні завдання. 
Використання однієї мікросхеми суттєво зменшує розміри, енергоспоживання та 
вартість пристроїв, побудованих на базі мікроконтролерів. 
Для показу поточної інформації під час роботи пристрою, програмування 
режиму роботи пристрою використовуємо алфавітно-цифровий РК-модуль 
BC1602 фірми Bolymin.Перевагою символьних РК-модулів перед звичайними РКІ 
є компактний інтерфейс і простота управління. Вхідні/вихідні сигнали мають 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 24  
  
 
КМОП-рівні, тому РК-модуль, з точки зору мікроконтролера, мало чим 
відрізняється від зовнішньої логічної КМОП мікросхеми. Користувачеві 
залишається лише підключити до індикатору 6...11 проводів і періодично 
посилати за ним керуючі сигнали. Все інше бере на себе вбудований в 
символьний рідкокристалічний модуль контролер. По-англійськи його називають 
Dot Matrix LCD Controller/Driver, оскільки він поєднує функції керуючого 
пристрою і силового драйвера для матриці точкових сегментів 
DS18B20 – цифровий сенсор температури з програмованим роздільною 
селективністю перетворення. 
Визначні ознаки 
1) Застосування інтерфейсної шини даних 1-Wire для зв'язку з керуючою 
системою; 
2) Наявність унікального 64-бітного послідовного ідентифікаційного коду, 
розміщеного у внутрішній ROM-пам'яті та призначеного для багатоточкових 
систем, де потрібно викликати певний датчик; 
3) Напруга живлення складає 3-5,5 В, що дозволяє застосовувати його не 
лише у 5-В системах, але й у 3,3 (переважна більшість мікроконтролерів); 
4) Діапазон вимірюваної температури охоплює -55...+125 оС; 
5) Точність ±0,5 оС, хоча це дійсно лише для діапазону -10...+85 оС; 
6) Роздільна здатність перетворення встановлюється користувачем і 
дорівнює 9...12 біт; 
7) Володіє внутрішніми регістрами тригерів найвищої та найнижчої 
границь спрацювання з генерацією сигналу тривоги для систем, що задіюють 
термостатичну логіку роботи; 
8) Ці сенсори програмно сумісні з DS1822 та активно використовуються у 
промислових термостатичних регуляторах, індустріальних комплексах, у 
споживчій електроніці та інших чутливих до тепла системах.MC34063 – 
універсальна мікросхема для найпростіших імпульсних перетворювачів в блоках 
живлення.  
78L05 це стабілізатор напруги на 5 В.  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 25  
  
 
Симістор BTA140-600 в поєднанні з оптроном МОС3062 дозволять 
керувати нагрівальними приладами достатньо потужними і одночасно 
забезпечують гальванічну розв'язку мережі живлення нагрівачами від системи 
управління температурними режимами. 
Інші елементи схеми – резистори, конденсатори тощо, широко вживанні 
елементи електронних схем для використання як в промислових так і в побутових 
приладах. 
 
Рисунок 3.5 – Схема принципова блоку управління зовнішніми пристроями 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 26  
  
 
4 Розробка програмного забезпечення таймера 
 
4.1 Прошивка МК головна програма 
 
#include <htc.h> 
#include "variable.c" 
 
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF &  
     BOREN_OFF & CLKOUTEN_OFF); 
__CONFIG(STVREN_ON & BORV_HI & LVP_OFF); 
 
//*******************************************************************************
************ 
void strob(void) 
{ 
 e = 1; 
 NOP(); 
 e = 0; 
} 
void delay_15mS(void) 
{ 
 T2CON  = 0x76; 
 PR2   = 250; 
 TMR2IF = 0; 
 while (TMR2IF == 0); 
} 
void delay_5mS(void) 
{ 
 T2CON  = 0x26; 
 PR2   = 250; 
 TMR2IF = 0; 
 while (TMR2IF == 0);  
} 
void delay_150uS(void) 
{ 
 T2CON  = 0x14; 
 PR2   = 199; 
 TMR2IF = 0;  
 while (TMR2IF == 0);  
} 
void delay_50uS(void) 
{ 
 T2CON  = 0x04; 
 PR2   = 199; 
 TMR2IF = 0;  
 while (TMR2IF == 0);  
} 
void delay_500uS(void) 
{ 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 27  
  
 
 T2CON  = 0x3C; 
 PR2   = 249; 
 TMR2IF = 0; 
 while (TMR2IF == 0);  
} 
 
//******************************************************************************* 
void erase_flash(void) 
{ 
 char i; 
 for (i = 0;i < 8;i++) 
  { 
   PMADR = &eeprom_rom[i][0]; 
   CFGS = 0; 
    FREE = 1; 
   WREN = 1; 
   PMCON2 = 0x55; 
   PMCON2 = 0xAA; 
   WR = 1; 
   NOP(); 
   NOP(); 
   WREN = 0; 
  } 
} 
void write_flash() 
{ 
 char i,j,k; 
 k = count_wr << 5; 
 
 for (i = 0;i < 4;i++) 
  { 
   j = i << 1; 
   buffer.all = set_termo[i]; 
   eeprom_ram[200 + j] = buffer.lb; 
   eeprom_ram[201 + j] = buffer.mb; 
  buffer.all = corr_termo[i]; 
   eeprom_ram[208 + j] = buffer.lb; 
   eeprom_ram[209 + j] = buffer.mb; 
  } 
 eeprom_ram[216] = _switch.all; 
 
// PMADR = ROM; 
 CFGS = 0; 
 WREN = 1; 
 LWLO = 1; 
   for (i = 0;i < 32;i++) 
    { 
     PMDAT = eeprom_ram[k];; 
     PMADR = &eeprom_rom[count_wr][i]; 
     PMCON2 = 0x55; 
     PMCON2 = 0xAA; 
     WR = 1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 28  
  
 
     NOP(); 
     NOP();   
     k++; 
    } 
 LWLO = 0; 
 PMCON2 = 0x55; 
 PMCON2 = 0xAA; 
 WR = 1; 
 NOP(); 
 NOP(); 
 WREN = 0; 
 if (count_wr < 7) 
  count_wr++; 
 else 
  { 
   status.write = 0; 
   cursor = 0; 
  } 
} 
//*******************************************************************************
********* 
unsigned char Crc8(unsigned char *stroke, unsigned char len) 
{ 
 unsigned char crc = 0x00; 
 while (len--) 
   { 
  crc = Crc8Table[crc ^ *stroke++];  
   } 
 return crc; 
} 
//*******************************************************************************
****************** 
void ds_1_reset(void) 
{ 
 ds_port_1 = 0; 
 tris_1 = 0; 
 delay_500uS(); 
 tris_1 = 1; 
} 
void ds_2_reset(void) 
{ 
 ds_port_2 = 0; 
 tris_2 = 0; 
 delay_500uS(); 
 tris_2 = 1; 
} 
void ds_3_reset(void) 
{ 
 ds_port_3 = 0; 
 tris_3 = 0; 
 delay_500uS(); 
 tris_3 = 1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 29  
  
 
} 
void ds_4_reset(void) 
{ 
 ds_port_4 = 0; 
 tris_4 = 0; 
 delay_500uS(); 
 tris_4 = 1; 
} 
//*******************************************************************************
**************** 
void ds_1_read(void) 
{ 
 char i,j; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_1 = 0; 
 OPTION_REG = 0x08; 
 for (j = 0;j < 9;j++) 
  { 
   for (i = 0;i < 8;i++) 
    { 
     tris_1 = 1; 
     shift_reg_rx.all = shift_reg_rx.all >> 1; 
     while (TMR2IF == 0); 
       tris_1 = 0; 
     TMR2IF = 0; 
     NOP(); 
     NOP(); 
     NOP(); 
     NOP(); 
     TMR0 = 210; 
     TMR0IF = 0;  
     tris_1 = 1;    
       while (TMR0IF == 0); 
     shift_reg_rx._bit = ds_port_1; 
    } 
   stroke_rx[j] = shift_reg_rx.all; 
  } 
} 
//****************************************************************************** 
//*******************************************************************************
**************** 
void ds_2_read(void) 
{ 
 char i,j; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_2 = 0; 
 OPTION_REG = 0x08; 
 for (j = 0;j < 9;j++) 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 30  
  
 
  { 
   for (i = 0;i < 8;i++) 
    { 
     tris_2 = 1; 
     shift_reg_rx.all = shift_reg_rx.all >> 1; 
     while (TMR2IF == 0); 
       tris_2 = 0; 
     TMR2IF = 0; 
     NOP(); 
     NOP(); 
     NOP(); 
     NOP(); 
     TMR0 = 210; 
     TMR0IF = 0;  
     tris_2 = 1;    
       while (TMR0IF == 0); 
     shift_reg_rx._bit = ds_port_2; 
    } 
   stroke_rx[j] = shift_reg_rx.all; 
  } 
} 
//*******************************************************************************
**************** 
void ds_3_read(void) 
{ 
 char i,j; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_3 = 0; 
 OPTION_REG = 0x08; 
 for (j = 0;j < 9;j++) 
  { 
   for (i = 0;i < 8;i++) 
    { 
     tris_3 = 1; 
     shift_reg_rx.all = shift_reg_rx.all >> 1; 
     while (TMR2IF == 0); 
       tris_3 = 0; 
     TMR2IF = 0; 
     NOP(); 
     NOP(); 
     NOP(); 
     NOP(); 
     TMR0 = 210; 
     TMR0IF = 0;  
     tris_3 = 1;    
       while (TMR0IF == 0); 
     shift_reg_rx._bit = ds_port_3; 
    } 
   stroke_rx[j] = shift_reg_rx.all; 
  } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 31  
  
 
} 
//*******************************************************************************
**************** 
void ds_4_read(void) 
{ 
 char i,j; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_4 = 0; 
 OPTION_REG = 0x08; 
 for (j = 0;j < 9;j++) 
  { 
   for (i = 0;i < 8;i++) 
    { 
     tris_4 = 1; 
     shift_reg_rx.all = shift_reg_rx.all >> 1; 
     while (TMR2IF == 0); 
       tris_4 = 0; 
     TMR2IF = 0; 
     NOP(); 
     NOP(); 
     NOP(); 
     NOP(); 
     TMR0 = 210; 
     TMR0IF = 0;  
     tris_4 = 1;    
       while (TMR0IF == 0); 
     shift_reg_rx._bit = ds_port_4; 
    } 
   stroke_rx[j] = shift_reg_rx.all; 
  } 
} 
//*******************************************************************************
************** 
void ds_1_write(char command) 
{ 
 char i; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_1 = 0; 
 shift_reg_tx.all = command; 
 OPTION_REG = 0x08; 
 for (i = 0;i < 8;i++) 
  { 
   tris_1 = 1; 
   while (TMR2IF == 0); 
   TMR2IF = 0; 
   tris_1 = 0; 
   TMR0 = shift_reg_tx._bit?220:0; 
   TMR0IF = 0;     
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 32  
  
 
   while (TMR0IF == 0); 
   tris_1 = 1; 
   shift_reg_tx.all = shift_reg_tx.all >> 1; 
  } 
} 
//*******************************************************************************
*************** 
void ds_2_write(char command) 
{ 
 char i; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_2 = 0; 
 shift_reg_tx.all = command; 
 OPTION_REG = 0x08; 
 for (i = 0;i < 8;i++) 
  { 
   tris_2 = 1; 
   while (TMR2IF == 0); 
   TMR2IF = 0; 
   tris_2 = 0; 
   TMR0 = shift_reg_tx._bit?220:0; 
   TMR0IF = 0;     
   while (TMR0IF == 0); 
   tris_2 = 1; 
   shift_reg_tx.all = shift_reg_tx.all >> 1; 
  } 
} 
//*******************************************************************************
*************** 
void ds_3_write(char command) 
{ 
 char i; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_3 = 0; 
 shift_reg_tx.all = command; 
 OPTION_REG = 0x08; 
 for (i = 0;i < 8;i++) 
  { 
   tris_3 = 1; 
   while (TMR2IF == 0); 
   TMR2IF = 0; 
   tris_3 = 0; 
   TMR0 = shift_reg_tx._bit?220:0; 
   TMR0IF = 0;     
   while (TMR0IF == 0); 
   tris_3 = 1; 
   shift_reg_tx.all = shift_reg_tx.all >> 1; 
  } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 33  
  
 
} 
//*******************************************************************************
*************** 
void ds_4_write(char command) 
{ 
 char i; 
 T2CON = 0x0C; 
 PR2 = 199; 
 TMR2IF = 0; 
 ds_port_4 = 0; 
 shift_reg_tx.all = command; 
 OPTION_REG = 0x08; 
 for (i = 0;i < 8;i++) 
  { 
   tris_4 = 1; 
   while (TMR2IF == 0); 
   TMR2IF = 0; 
   tris_4 = 0; 
   TMR0 = shift_reg_tx._bit?220:0; 
   TMR0IF = 0;     
   while (TMR0IF == 0); 
   tris_4 = 1; 
   shift_reg_tx.all = shift_reg_tx.all >> 1; 
  } 
} 
//*******************************************************************************
*************** 
void set_cursor(void) 
{ 
 if ((key == left) && (cursor > 0))  
   cursor--; 
 if ((key == right) && (cursor < 30)) 
   cursor++; 
 if (status.work == 0)          
       //робочий режим 
  switch (cursor) 
   { 
    case 0:{ 
//        if (key == up) 
//         { 
//          if (N < 9)   
//           N++; 
//         } 
//        if (key == down) 
//         { 
//          if (N > 0)   
//           N--; 
//         } 
        };break;   
    case 1:{ 
         if (key == up) 
 `         _switch._0 = 1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 34  
  
 
         else if (key == down) 
          _switch._0 = 0; 
        };break;  
    case 2:{ 
         if (key == up) 
 `         _switch._1 = 1; 
         else if (key == down) 
          _switch._1 = 0; 
        };break;    
    case 3:{ 
         if (key == up) 
 `         _switch._2 = 1; 
         else if (key == down) 
          _switch._2 = 0; 
        };break;  
    case 4:{ 
         if (key == up) 
 `         _switch._3 = 1; 
         else if (key == down) 
          _switch._3 = 0; 
        };break; 
    case 5:{ 
         if (key == up) 
 `         _switch._4 = 1; 
         else if (key == down) 
          _switch._4 = 0; 
        };break;  
    case 6:{ 
         if (key == up) 
 `         _switch._5 = 1; 
         else if (key == down) 
          _switch._5 = 0; 
        };break;     
    case 7:{ 
         if (key == up) 
 `         _switch._6 = 1; 
         else if (key == down) 
          _switch._6 = 0; 
        };break; 
    case 8:{ 
         if (key == up) 
 `         _switch._7 = 1; 
         else if (key == down) 
          _switch._7 = 0; 
        };break; 
  
//********************************************************** 
 
    case 9:{ 
        if (_switch._0 == 1) 
         { 
          if (key == up)   
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 35  
  
 
           _auto._0 = 1; 
          else if (key == down) 
 `          _auto._0 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._0 = 1; 
          else if (key == down) 
 `          _manual._0 = 0; 
         } 
        };break;  
    case 10:{ 
        if (_switch._1 == 1) 
         { 
          if (key == up)   
           _auto._1 = 1; 
          else if (key == down) 
 `          _auto._1 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._1 = 1; 
          else if (key == down) 
 `          _manual._1 = 0; 
         } 
        };break;     
    case 11:{ 
        if (_switch._2 == 1) 
         { 
          if (key == up)   
           _auto._2 = 1; 
          else if (key == down) 
 `          _auto._2 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._2 = 1; 
          else if (key == down) 
 `          _manual._2 = 0; 
         } 
        };break;  
    case 12:{ 
        if (_switch._3 == 1) 
         { 
          if (key == up)   
           _auto._3 = 1; 
          else if (key == down) 
 `          _auto._3 = 0; 
         } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 36  
  
 
        else  
         { 
          if (key == up)   
           _manual._3 = 1; 
          else if (key == down) 
 `          _manual._3 = 0; 
         } 
        };break;  
    case 13:{ 
        if (_switch._4 == 1) 
         { 
          if (key == up)   
           _auto._4 = 1; 
          else if (key == down) 
 `          _auto._4 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._4 = 1; 
          else if (key == down) 
 `          _manual._4 = 0; 
         } 
        };break;  
    case 14:{ 
        if (_switch._5 == 1) 
         { 
          if (key == up)   
           _auto._5 = 1; 
          else if (key == down) 
 `          _auto._5 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._5 = 1; 
          else if (key == down) 
 `          _manual._5 = 0; 
         } 
        };break;     
    case 15:{ 
        if (_switch._6 == 1) 
         { 
          if (key == up)   
           _auto._6 = 1; 
          else if (key == down) 
 `          _auto._6 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._6 = 1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 37  
  
 
          else if (key == down) 
 `          _manual._6 = 0; 
         } 
        };break;  
    case 16:{ 
        if (_switch._7 == 1) 
         { 
          if (key == up)   
           _auto._7 = 1; 
          else if (key == down) 
 `          _auto._7 = 0; 
         } 
        else  
         { 
          if (key == up)   
           _manual._7 = 1; 
          else if (key == down) 
 `          _manual._7 = 0; 
         } 
        };break;   
    case 18:{ 
         if (key == up)   
           termo_con.all |= 
mask_set_1[n_can_termo]; 
         else if (key == down) 
 `          termo_con.all &= 
~mask_set_1[n_can_termo]; 
        };break; 
    case 17:{ 
        if (key == up) 
         { 
          if (n_can_termo < 3) 
  
           n_can_termo++; 
         } 
        if (key == down) 
         { 
          if (n_can_termo > 0) 
  
           n_can_termo--; 
         } 
        };break;   
    case 20:{ 
        if (key == up) 
         { 
          if (time_hour < 23) 
  
           time_hour++; 
         } 
        if (key == down) 
         { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 38  
  
 
          if (time_hour > 0) 
  
           time_hour--; 
         } 
        };break;   
    case 22:{ 
        if (key == up) 
         { 
          if (corr_termo[n_can_termo] 
< 32000)   
          
 corr_termo[n_can_termo]++; 
         } 
        if (key == down) 
         { 
          if (corr_termo[n_can_termo] 
> -32000)   
          
 corr_termo[n_can_termo]--; 
         } 
        };break;     
       
    case 21:{ 
        if (key == up) 
         { 
          if (time_minute < 59) 
  
           time_minute++; 
         } 
        if (key == down) 
         { 
          if (time_minute > 0) 
  
           time_minute--; 
         } 
        };break; 
 
        
  } 
 else  
  {           
         // режим програмування 
   switch (cursor) 
    { 
     case 0:;break; 
     case 1:{ 
         if (key == up) 
          { 
           if (n_sob < 98)
   
            n_sob++; 
          } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 39  
  
 
         if (key == down) 
          { 
           if (n_sob > 0) 
  
            n_sob--; 
          } 
         };break;    
     
     case 2:{ 
         if (key == up) 
          { 
           if (reg_hour.n_can < 
7)   
            reg_hour.n_can++; 
          } 
         if (key == down) 
          { 
           if (reg_hour.n_can > 
0)   
           
 reg_hour.n_can--; 
          } 
         };break;    
    
     case 3:{ 
         if (key == up) 
          { 
           if (reg_minute.action 
< 3)   
            
reg_minute.action++; 
          } 
         if (key == down) 
          { 
           if (reg_minute.action 
> 1)   
           
 reg_minute.action--; 
          } 
         };break;   
     case 4:{ 
         if (key == up) 
          { 
           if (reg_hour.val < 23)
   
            reg_hour.val++; 
          } 
         if (key == down) 
          { 
           if (reg_hour.val > 0)
   
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 40  
  
 
            reg_hour.val--
; 
          } 
         };break; 
     case 5:{ 
         if (key == up) 
          { 
           if (reg_minute.val < 
59)   
            reg_minute.val++; 
          } 
         if (key == down) 
          { 
           if (reg_minute.val > 
0)   
           
 reg_minute.val--; 
          } 
         };break; 
     case 6:{ 
         if (key == up) 
          { 
           if (n_can_termo < 3)
   
           
 n_can_termo++; 
          } 
         if (key == down) 
          { 
           if (n_can_termo > 0)
   
            n_can_termo--
; 
          } 
         };break;    
     case 7:{ 
        if (key == up) 
         { 
          if (set_termo[n_can_termo] 
< 560)  //30 deg 
          
 set_termo[n_can_termo]++; 
         } 
        if (key == down) 
         { 
          if (set_termo[n_can_termo] 
> 320)  //20 deg 
          
 set_termo[n_can_termo]--; 
         } 
       if (key == enter) 
         { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 41  
  
 
          set_termo[n_can_termo] = 
400;    //25 deg 
         } 
        };break; 
     case 10:{ 
         if (key == enter) 
          { 
           erase_flash(); 
           status.write = 1; 
           count_wr = 0; 
           status.work = 0; 
           cursor = 0; 
          } 
         };break;   
    } 
  } 
 if (((key == up) || (key == down)) && ((cursor == 2) || (cursor == 4))) 
   eeprom_ram[n_sob << 1] = reg_hour.all;     
           //запис змін значень 
в масив 
 
 if (((key == up) || (key == down)) && ((cursor == 3) || (cursor == 5))) 
   eeprom_ram[(n_sob << 1) + 1] =  reg_minute.all;   // 
   
 key = 0; 
} 
//*******************************************************************************
************************************ 
void display(void)            
{ 
 char i; 
 delay_150uS(); 
 rw = 0;            
 rs = 0; 
 port_lcd = 0x80 | light;         
  //установка адреси верхнього рядку 
 strob(); 
 port_lcd = 0x00 | light; 
 strob(); 
 rs = 1; 
 if (status.work == 0)          
      //робочий режим 
  { 
   data = _switch._0?au:man; 
   stroke_dysplay[0] = (index._640 & !(cursor ^ 1))?0x20:data; 
  data = _switch._1?au:man; 
   stroke_dysplay[1] = (index._640 & !(cursor ^ 2))?0x20:data; 
   data = _switch._2?au:man; 
   stroke_dysplay[2] = (index._640 & !(cursor ^ 3))?0x20:data; 
   data = _switch._3?au:man; 
   stroke_dysplay[3] = (index._640 & !(cursor ^ 4))?0x20:data; 
   data = _switch._4?au:man; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 42  
  
 
   stroke_dysplay[4] = (index._640 & !(cursor ^ 5))?0x20:data; 
   data = _switch._5?au:man; 
   stroke_dysplay[5] = (index._640 & !(cursor ^ 6))?0x20:data; 
   data = _switch._6?au:man; 
   stroke_dysplay[6] = (index._640 & !(cursor ^ 7))?0x20:data; 
   data = _switch._7?au:man; 
   stroke_dysplay[7] = (index._640 & !(cursor ^ 8))?0x20:data; 
   stroke_dysplay[8] = 0x20; 
   stroke_dysplay[9] = 0x20; 
   data = H_10 + 0x30; 
   stroke_dysplay[10] = (index._640 & !(cursor ^ 20))?0x20:data; 
   data = H_01 + 0x30; 
   stroke_dysplay[11] = (index._640 & !(cursor ^ 20))?0x20:data; 
   stroke_dysplay[12] = status.second?0x3a:0x20; 
   data = M_10 + 0x30; 
   stroke_dysplay[13] = (index._640 & !(cursor ^ 21))?0x20:data; 
   data = M_01 + 0x30; 
   stroke_dysplay[14] = (index._640 & !(cursor ^ 21))?0x20:data; 
   stroke_dysplay[15] = 0x20; 
  } 
 else             
  //програмування 
  {   
   stroke_dysplay[0] = 0x23;       //# 
   data = sob_10 + 0x30;       
 //номер події 
   stroke_dysplay[1] = (index._640 & !(cursor ^ 1))?0x20:data; 
   data = sob_01 + 0x30; 
   stroke_dysplay[2] = (index._640 & !(cursor ^ 1))?0x20:data;  
  
   stroke_dysplay[3] = 0x20; 
   stroke_dysplay[4] = 0x3e; 
   data = reg_hour.n_can + 0x31;      
    //номер канала 
   stroke_dysplay[5] = (index._640 & !(cursor ^ 2))?0x20:data; 
   if (reg_minute.action == 3) 
     data = 0xd9;      
 //включити 
   else if (reg_minute.action == 2) 
     data = 0xda;      
 //виключити 
   else 
     data = 0x58;       //не 
активно 
   stroke_dysplay[6] = (index._640 & !(cursor ^ 3))?0x20:data;  
   stroke_dysplay[7] = 0x20; 
   stroke_dysplay[8] = 0x20; 
   stroke_dysplay[9] = 0x20; 
   data = h_10 + 0x30; 
   stroke_dysplay[10] = (index._640 & !(cursor ^ 4))?0x20:data; 
   data = h_01 + 0x30; 
   stroke_dysplay[11] = (index._640 & !(cursor ^ 4))?0x20:data; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 43  
  
 
   stroke_dysplay[12] = 0x3a; 
   data = m_10 + 0x30; 
   stroke_dysplay[13] = (index._640 & !(cursor ^ 5))?0x20:data; 
   data = m_01 + 0x30; 
   stroke_dysplay[14] = (index._640 & !(cursor ^ 5))?0x20:data; 
   stroke_dysplay[15] = 0x20; 
  } 
  for (i = 0;i < 17;i++)    //вивід інформації першого рядку на індикатор
         
  { 
   delay_50uS(); 
  buff_lcd = stroke_dysplay[i]; 
   port_lcd = buff_lcd; 
   strob(); 
   port_lcd = buff_lcd << 4 | light;; 
   strob(); 
 }  
//************************************************************* 
 
 delay_150uS(); 
 rw = 0;            
        //установка адреси другого рядка 
 rs = 0; 
 port_lcd = 0xc0 | light;; 
 strob(); 
 port_lcd = 0x00 | light;; 
 strob(); 
 rs = 1; 
 if (status.work == 0)          
       //робочий режим 
  { 
   data = relay._0?on:off; 
   stroke_dysplay[16] = (index._640 & !(cursor ^ 9))?0x20:data; 
   data = relay._1?on:off; 
   stroke_dysplay[17] = (index._640 & !(cursor ^ 10))?0x20:data; 
   data = relay._2?on:off; 
   stroke_dysplay[18] = (index._640 & !(cursor ^ 11))?0x20:data; 
   data = relay._3?on:off; 
   stroke_dysplay[19] = (index._640 & !(cursor ^ 12))?0x20:data; 
   data = relay._4?on:off; 
   stroke_dysplay[20] = (index._640 & !(cursor ^ 13))?0x20:data; 
   data = relay._5?on:off; 
   stroke_dysplay[21] = (index._640 & !(cursor ^ 14))?0x20:data; 
   data = relay._6?on:off; 
   stroke_dysplay[22] = (index._640 & !(cursor ^ 15))?0x20:data; 
   data = relay._7?on:off; 
   stroke_dysplay[23] = (index._640 & !(cursor ^ 16))?0x20:data; 
   stroke_dysplay[24] = 0x20; 
   data = n_can_termo + 0x31; 
   stroke_dysplay[25] = (index._640 & !(cursor ^ 17))?0x20:data; 
   data = (termo_con.all & (mask_set_1[n_can_termo]))?0x2b:0x2d; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 44  
  
 
   stroke_dysplay[26] = (index._640 & !(cursor ^ 18))?0x20:data;//вкл-викл 
канала температури 
   stroke_dysplay[27] = 0x20; 
   data = termo_10 + 0x30; 
   stroke_dysplay[28] = (index._640 & !(cursor ^ 22))?0x20:data;  
   data = termo_01 + 0x30; 
   stroke_dysplay[29] = (index._640 & !(cursor ^ 22))?0x20:data;   
   stroke_dysplay[30] = 0x2c; 
   data = termo_00 + 0x30; 
   stroke_dysplay[31] = (index._640 & !(cursor ^ 22))?0x20:data; 
  } 
 else             
    //програмування 
  { 
   stroke_dysplay[16] = 0x20; 
   stroke_dysplay[17] = ((cursor ^ 10))?0x20:0x73; 
   stroke_dysplay[18] = ((cursor ^ 10))?0x20:0x74; 
   stroke_dysplay[19] = ((cursor ^ 10))?0x20:0x6f;  
   stroke_dysplay[20] = ((cursor ^ 10))?0x20:0x72;  
   stroke_dysplay[21] = ((cursor ^ 10))?0x20:0x65; 
   stroke_dysplay[22] = ((cursor ^ 10))?0x20:0x7e; 
   stroke_dysplay[23] = 0x20;  
   stroke_dysplay[24] = 0x20;  
   data = n_can_termo + 0x31; 
   stroke_dysplay[25] = (index._640 & !(cursor ^ 6))?0x20:data; 
   stroke_dysplay[26] = 0x74;  
   stroke_dysplay[27] = 0x3d;  
   data = set_termo_10 + 0x30; 
   stroke_dysplay[28] = (index._640 & !(cursor ^ 7))?0x20:data;  
   data = set_termo_01 + 0x30; 
   stroke_dysplay[29] = (index._640 & !(cursor ^ 7))?0x20:data;   
   stroke_dysplay[30] = 0x2c; 
   data = set_termo_00 + 0x30; 
   stroke_dysplay[31] = (index._640 & !(cursor ^ 7))?0x20:data; 
  } 
 for (i = 16;i < 33;i++)        //вивод інформації 
другого рядку на індикатор 
  { 
   delay_50uS(); 
  buff_lcd = stroke_dysplay[i]; 
  port_lcd = buff_lcd | light;; 
   strob(); 
    port_lcd = buff_lcd << 4 | light;; 
   strob(); 
 } 
} 
void BCD_decod(void) 
{ 
 
   h_01 = reg_hour.val;        //prg 
   m_01 = reg_minute.val;       //prg 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 45  
  
 
   h_10 = 0;         
     //prg 
   m_10 = 0; 
    
   while (h_01 > 9)        
  //prg 
    {         
        //prg 
     h_01 -= 10;       
    //prg 
     h_10++;       
      //prg 
    }         
        //prg 
   while (m_01 > 9)        
  //prg 
    {         
        //prg 
     m_01 -= 10;       
    //prg 
     m_10++;       
      //prg 
    }         
        //prg 
 
   reg_hour.all = eeprom_ram[n_sob << 1];     
  //prg 
   reg_minute.all = eeprom_ram[(n_sob << 1) + 1];   //prg 
 
 
   sob_10 = 0;  
   sob_01 = n_sob + 1;       //prg перетворення з 
двійкового у двійково-десятикове значення 
   while (sob_01 > 9) 
    {         
    //prg номера події 
     sob_01 -= 10; 
     sob_10++; 
    } 
    H_01 = time_hour;        //rab 
значення годин та хвилин в BCD 
   M_01 = time_minute; 
   H_10 = 0; 
   M_10 = 0; 
    
   while (H_01 > 9) 
    { 
     H_01 -= 10; 
     H_10++; 
    } 
   while (M_01 > 9) 
    { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 46  
  
 
     M_01 -= 10; 
     M_10++; 
    }  
//*************************************** 
   if (termo[n_can_termo] == 0xffff) 
    { 
     termo_00 = 0x2f; 
     termo_01 = 0x2f; 
     termo_10 = 0x2f; 
    } 
   else 
    {          
           
     termo_01 = (char)(termo[n_can_termo] >> 4);  
   //rab temperatury в BCD 
     termo_10 = 0; 
    
     while (termo_01 > 9) 
      { 
       termo_01 -= 10; 
       termo_10++; 
      } 
     termo_00 = tabl_termo[(termo[n_can_termo] & 0x000f)]; 
    } 
 
 
   set_termo_01 = (char)(set_termo[n_can_termo] >> 4);   
  //set temperatury в BCD 
   set_termo_10 = 0; 
    
    while (set_termo_01 > 9) 
     { 
      set_termo_01 -= 10; 
      set_termo_10++; 
     } 
    set_termo_00 = tabl_termo[(set_termo[n_can_termo] & 0x000f)]; 
 
} 
void alarm(void)           
   //rab 
{ 
 char i; 
 if (status.alarm == 1) 
  { 
   for (i = 0;i < 200;i += 2) 
    {  
     reg_hour.all = eeprom_ram[i];    
   // перенос из ROM в RAM 
     reg_minute.all = eeprom_ram[i + 1]; 
     if ((reg_minute.action > 1) && (_switch.all & 
mask_set_1[reg_hour.n_can]))     //подія активна та канал на 
"автоматі" 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 47  
  
 
      { 
       if ((reg_minute.val == time_minute) && 
(reg_hour.val == time_hour))  //час співпав 
        { 
         if (reg_minute.action == 3) 
    //включити 
           _auto.all |= 
mask_set_1[reg_hour.n_can];  
         else if (reg_minute.action == 2)
              
   //виключити 
           _auto.all &= 
~mask_set_1[reg_hour.n_can]; 
        } 
     } 
   } 
 
  } 
 status.alarm = 0; 
} 
//*******************************************************************************
******************************************************* 
void out(void) 
{ 
 TRISD = 0; 
 TRISA = 0x0f; 
 relay._0 = _switch._0?_auto._0:_manual._0; 
 relay._1 = _switch._1?_auto._1:_manual._1; 
 relay._2 = _switch._2?_auto._2:_manual._2; 
 relay._3 = _switch._3?_auto._3:_manual._3;  
 relay._4 = _switch._4?_auto._4:_manual._4; 
 relay._5 = _switch._5?_auto._5:_manual._5; 
 relay._6 = _switch._6?_auto._6:_manual._6; 
 relay._7 = _switch._7?_auto._7:_manual._7;  
 
 relay_port_1 = relay._0; 
 relay_port_2 = relay._1;  
 relay_port_3 = relay._2; 
 relay_port_4 = relay._3; 
 relay_port_5 = relay._4; 
 relay_port_6 = relay._5; 
 relay_port_7 = relay._6; 
 relay_port_8 = relay._7; 
 
 counter--; 
        
 compare_out[0] = (counter + 0) & limit; 
 compare_out[1] = (counter + shift_1) & limit; 
 compare_out[2] = (counter + shift_2) & limit; 
 compare_out[3] = (counter + shift_3) & limit; 
   
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 48  
  
 
 if ((termo_out[0] > 0) && (compare_out[0] == termo_out[0])) 
  reg_1 = termo_con.on_1?1:0; 
 else if (compare_out[0] == 0) 
  reg_1 = 0; 
 if ((termo_out[1] > 0) && (compare_out[1] == termo_out[1])) 
  reg_2 = termo_con.on_2?1:0; 
 else if (compare_out[1] == 0) 
  reg_2 = 0; 
 if ((termo_out[2] > 0) && (compare_out[2] == termo_out[2])) 
  reg_3 = termo_con.on_3?1:0; 
 else if (compare_out[2] == 0) 
  reg_3 = 0; 
 if ((termo_out[3] > 0) && (compare_out[3] == termo_out[3])) 
  reg_4 = termo_con.on_4?1:0; 
 else if (compare_out[3] == 0) 
  reg_4 = 0;   
         
} 
//*******************************************************************************
********************* 
void real_time(void) 
{ 
 char i; 
// RC3 = 1; 
 second += 2; 
 if (second > 59) 
  { 
   second = 0; 
   time_minute++; 
   status.alarm = 1; 
   if (time_minute > 59) 
    { 
     time_minute = 0; 
     time_hour++; 
     if (time_hour > 23) 
      time_hour = 0;    
    } 
  } 
 if (status.alarm == 1) 
  alarm(); 
 
 if (status.no_pow > 0) 
  { 
//   pow_dysplay = 0; 
//  pow_sensor = 0; 
   rs = 0; 
   tmr_dysp_start = 50; 
  OSCCON = 0x02; 
   TRISD = 0xff; 
   TRISA = 0xff; 
  } 
  status.no_pow++;  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 49  
  
 
// RC3 = 0; 
} 
//*******************************************************************************
**************************8   
void keyboard(void) 
{ 
  static char k,m,j; 
 k = PORTB & 0b00111110; 
 
  if ((m == no_pusch) && (k == pusch_up)) 
   key = up ; 
 else  if ((m == no_pusch) && (k == pusch_down)) 
   key = down; 
 else  if ((m == no_pusch) && (k == pusch_left)) 
   key = left; 
 else  if ((m == no_pusch) && (k == pusch_right)) 
   key = right; 
 else  if ((m == no_pusch) && (k == pusch_enter)) 
    key = enter; 
  
 else  if ((m == pusch_left) && (k == 0x2a)) 
   { 
    status.work = 1; 
    cursor = 0; 
   } 
 else  if ((m == pusch_up) && (k == 0x16)) 
   { 
    status.work = 0; 
    cursor = 0; 
   }  
 else  if ((m == pusch_up) && (k == pusch_up)) 
   { 
    if (timer_key) 
     timer_key--;  
    else 
     { 
      if ((index.all & 0b00011111) == 0b00011111) 
        key = up; 
     } 
   } 
 else  if ((m == pusch_down) && (k == pusch_down)) 
   { 
    if (timer_key) 
     timer_key--;  
    else 
     { 
      if ((index.all & 0b00011111) == 0b00011111) 
        key = down; 
     } 
   } 
 else  if ((m == no_pusch) && (k == no_pusch)) 
   timer_key = set_time_key_0; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 50  
  
 
 
 j = rab; 
 m = k; 
} 
//*******************************************************************************
********************** 
//*******************************************************************************
********* 
 
 
void func_0(void) 
{ 
 ds_port_1 = 0; 
 if (termo_con._1 == 0) 
  { 
   ds_1_reset(); 
   delay_500uS(); 
   ds_1_write(0xcc); 
   delay_150uS(); 
   ds_1_write(0x44); 
   termo_con._1 = 1; 
   tmr_ds_1 = 0x0a; 
  } 
 else 
  { 
   if (tmr_ds_1) 
    tmr_ds_1--; 
   else 
    { 
     ds_1_reset(); 
     delay_500uS(); 
    ds_1_write(0xcc); 
   delay_150uS(); 
    ds_1_write(0xbe); 
     delay_500uS(); 
     ds_1_read(); 
    termo_con._1 = 0;  
 
     if ((Crc8(stroke_rx,9) == 0)) 
      {   
      termo_val.mb = stroke_rx[1]; 
      termo_val.lb = stroke_rx[0]; 
        termo[0] = termo_val.all + corr_termo[0]; 
       if (termo[0] < set_termo[0]) 
        { 
         termo_out[0] = (set_termo[0] - 
termo[0]) << 4; 
         if (termo_out[0] > limit) 
          termo_out[0] = limit; 
        } 
       else 
        { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 51  
  
 
         termo_out[0] = 0; 
        } 
      }  
     else 
      { 
        termo[0] = 0xffff; 
       termo_out[0] = 0; 
      } 
   } 
  } 
 alarm(); 
 set_cursor(); 
} 
void func_1(void) 
{ 
 ds_port_2 = 0; 
 if (termo_con._2 == 0) 
  { 
   ds_2_reset(); 
   delay_500uS(); 
   ds_2_write(0xcc); 
   delay_150uS(); 
   ds_2_write(0x44); 
   termo_con._2 = 1; 
   tmr_ds_2 = 0x0a; 
  } 
 else 
  { 
   if (tmr_ds_2) 
    tmr_ds_2--; 
   else 
    { 
     ds_2_reset(); 
     delay_500uS(); 
    ds_2_write(0xcc); 
   delay_150uS(); 
    ds_2_write(0xbe); 
     delay_500uS(); 
     ds_2_read(); 
    termo_con._2 = 0;  
     if ((Crc8(stroke_rx,9) == 0)) 
      {   
      termo_val.mb = stroke_rx[1]; 
      termo_val.lb = stroke_rx[0]; 
        termo[1] = termo_val.all + corr_termo[1]; 
       if (termo[1] < set_termo[1]) 
        { 
         termo_out[1] = (set_termo[1] - 
termo[1]) << 4; 
         if (termo_out[1] > limit) 
          termo_out[1] = limit; 
        } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 52  
  
 
       else 
        { 
         termo_out[1] = 0; 
        } 
      }  
     else 
      { 
        termo[1] = 0xffff; 
       termo_out[1] = 0; 
      } 
   } 
  } 
 BCD_decod(); 
 if (status.no_pow == 0) 
  display(); 
} 
void func_2(void) 
{ 
 ds_port_3 = 0; 
 if (termo_con._3 == 0) 
  { 
   ds_3_reset(); 
   delay_500uS(); 
   ds_3_write(0xcc); 
   delay_150uS(); 
   ds_3_write(0x44); 
   termo_con._3 = 1; 
   tmr_ds_3 = 0x0a; 
  } 
 else 
  { 
   if (tmr_ds_3) 
    tmr_ds_3--; 
   else 
    { 
     ds_3_reset(); 
     delay_500uS(); 
    ds_3_write(0xcc); 
   delay_150uS(); 
    ds_3_write(0xbe); 
     delay_500uS(); 
     ds_3_read(); 
    termo_con._3 = 0;  
     if ((Crc8(stroke_rx,9) == 0)) 
      {   
      termo_val.mb = stroke_rx[1]; 
      termo_val.lb = stroke_rx[0]; 
        termo[2] = termo_val.all + corr_termo[2]; 
       if (termo[2] < set_termo[2]) 
        { 
         termo_out[2] = (set_termo[2] - 
termo[2]) << 4; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 53  
  
 
         if (termo_out[2] > limit) 
          termo_out[2] = limit; 
        } 
       else 
        { 
         termo_out[2] = 0; 
        } 
      }  
     else 
      { 
        termo[2] = 0xffff; 
       termo_out[2] = 0; 
      } 
   } 
  } 
 set_cursor(); 
} 
void func_3(void) 
{ 
 ds_port_4 = 0; 
 if (termo_con._4 == 0) 
  { 
   ds_4_reset(); 
   delay_500uS(); 
   ds_4_write(0xcc); 
   delay_150uS(); 
   ds_4_write(0x44); 
   termo_con._4 = 1; 
   tmr_ds_4 = 0x0a; 
  } 
 else 
  { 
   if (tmr_ds_4) 
    tmr_ds_4--; 
   else 
    { 
     ds_4_reset(); 
     delay_500uS(); 
    ds_4_write(0xcc); 
   delay_150uS(); 
    ds_4_write(0xbe); 
     delay_500uS(); 
     ds_4_read(); 
    termo_con._4 = 0;  
     if ((Crc8(stroke_rx,9) == 0)) 
      {   
      termo_val.mb = stroke_rx[1]; 
      termo_val.lb = stroke_rx[0]; 
        termo[3] = termo_val.all + corr_termo[3]; 
       if (termo[3] < set_termo[3]) 
        { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 54  
  
 
         termo_out[3] = (set_termo[3] - 
termo[3]) << 4; 
         if (termo_out[3] > limit) 
          termo_out[3] = limit; 
        } 
       else 
        { 
         termo_out[3] = 0; 
        } 
      }  
     else 
      { 
        termo[3] = 0xffff; 
       termo_out[3] = 0; 
      } 
   } 
  } 
 BCD_decod(); 
 if (status.no_pow == 0) 
  display(); 
} 
 
typedef void(*func_point)(void);  
const func_point func[4] = {func_0,func_1,func_2,func_3}; 
//*******************************************************************************
********** 
void init_LCD() 
{ 
 pow_dysplay = 1; 
 pow_sensor = 1; 
 rs = 0; 
 rw = 0; 
 delay_15mS(); 
 port_lcd = 0x30 | light; 
 strob(); 
 delay_5mS();  //не перевіряємо 
 strob(); 
 delay_150uS(); // не перевіряємо 
 strob(); 
 delay_50uS(); // 
 strob(); 
 delay_50uS(); // 
 strob(); 
 
 port_lcd = 0x20 | light; 
 strob(); 
 delay_50uS(); // 
 port_lcd =  0x20 | light;  // чотирибітна шина 
 strob(); 
 port_lcd = 0x80 | light;  //N F 
 strob(); 
 delay_50uS(); 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 55  
  
 
 port_lcd = 0x00 | light; 
 strob(); 
 port_lcd = 0xd0 | light; 
 strob(); 
 delay_50uS(); 
 port_lcd = 0x00 | light; 
 strob(); 
 port_lcd = 0x60 | light; 
 strob(); 
 delay_50uS(); 
 port_lcd = 0x00 | light; 
 strob(); 
 port_lcd = 0x10 | light; 
 strob(); 
 delay_15mS(); 
} 
void init(void) 
{ 
 char i,j,k; 
 OSCCON = 0x7a; 
 PORTA = 0; 
 PORTB = 0; 
 PORTC = 0; 
 PORTD = 0; 
 PORTE = 0; 
 TRISA = 0b00001111; 
 ANSELA = 0; 
 TRISB = 0b00111111; 
 ANSELB = 0; 
 TRISC = 0b00000000; 
 ANSELC = 0; 
 TRISD = 0; 
 ANSELD = 0; 
 TRISE = 0; 
 ANSELE = 0; 
 INTE = 1; 
 INTEDG = 1;           
  //переривання за позитивним фронтом 
 TMR1IE = 1; 
 T1CON = 0x8d; 
 INTF = 0; 
 TMR1IF = 0; 
 PEIE = 1; 
 nWPUEN = 0; 
 WPUB = 0b00111110; 
 timer_light = set_time_light; 
 init_LCD(); 
 status.work = 0; 
 cursor = 20; 
 key = 0x20; 
 k = 0; 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 56  
  
 
 for (j = 0;j < 8;j++)          
         //перенесення даних із ПЗП в ОЗП 
  { 
   for (i = 0;i < 32;i++) 
    { 
     eeprom_ram[k] = eeprom_rom[j][i]; 
     k++; 
    } 
  } 
 for (i = 0;i < 4;i++) 
  { 
   j = i << 1; 
 
   buffer.lb = eeprom_ram[200 + j]; 
  buffer.mb = eeprom_ram[201 + j]; 
  set_termo[i] = buffer.all; 
 
   buffer.lb = eeprom_ram[208 + j]; 
  buffer.mb = eeprom_ram[209 + j]; 
    corr_termo[i] = buffer.all; 
  } 
 _switch.all = eeprom_ram[216]; 
} 
//*******************************************************************************
******** 
void main(void) 
{  
 init(); 
 while (1) 
  { 
   if ((INTF == 0) && (TMR1IF == 0))  
     SLEEP();  //якщо переривання немає — спимо 
   else 
    { 
    if (INTF == 1)        
       // якщо переривання від RB0 
      { 
       if (status.write == 1) 
         write_flash(); 
       OSCCON = 0x7a; 
       if (pow_dysplay == 0) 
        if (tmr_dysp_start) 
          tmr_dysp_start--; 
        else 
         init_LCD(); 
       status.no_pow = 0; 
       keyboard(); 
       (func[index.all & 0x03])(); 
       out(); 
      index.all++;  
       INTF = 0; 
      } 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 57  
  
 
     if (TMR1IF == 1)      
          // якщо преривання від 
TMR1 
      { 
       CLRWDT(); 
       status.second = !status.second; 
       real_time(); 
       TMR1IF = 0; 
      } 
    } 
  } 
} 
 
4.2 Прошивка МК змінних 
#include <htc.h> 
 
 
#define   relay_port_1    LATD0 
#define   relay_port_2    LATD2 
#define   relay_port_3    LATD4 
#define   relay_port_4    LATD6 
#define   relay_port_5    LATD7 
#define   relay_port_6    LATD5 
#define   relay_port_7    LATD3 
#define   relay_port_8    LATD1 
 
#define   port_lcd  LATC 
#define   rs     RE0 
#define   rw     RE1 
#define   e      RE2 
 
 
#define   ds_port_1   RA0 
#define   ds_port_2   RA1 
#define   ds_port_3   RA2 
#define   ds_port_4   RA3 
 
#define   reg_1    LATA4 
#define   reg_2    LATA5 
#define   reg_3    LATA6 
#define   reg_4    LATA7 
 
#define   light_sw  RC3 
 
#define   tris_1   TRISA0 
#define   tris_2   TRISA1 
#define   tris_3   TRISA2 
#define   tris_4   TRISA3 
 
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 58  
  
 
#define   on     0x2b 
#define   off     0x2d 
#define   noact    0x78 
#define   au     0xed 
#define   man     0xdf 
 
 
#define   pusch_up    0b00110110 
#define   pusch_down   0b00011110 
#define   pusch_left   0b00101110 
#define   pusch_right   0b00111010 
#define   pusch_enter   0b00111100 
#define   no_pusch    0b00111110 
#define   prg      (char)(pusch_left & pusch_right) 
#define   rab      (char)(pusch_up & pusch_down) 
 
#define   up     0x30 
#define   down    0x31 
#define   left    0x32 
#define   right    0x33 
#define   enter    0x34 
 
#define   set_time_key_0    100 
#define   set_time_key_1    50 
#define   set_time_light    500 
//#define   set_time_pulse    10 
 
#define   limit         0x3f 
#define   shift_1        limit/4 
  
#define   shift_2        limit/2 
#define   shift_3        shift_1 + 
shift_2 
 
unsigned char eeprom_ram[224]; 
unsigned char second,buff_lcd,cursor,data,key,light; 
unsigned char n_can,counter,count_wr; 
unsigned char H_10,H_01,M_10,M_01,h_10,h_01,m_10,m_01,time_hour,time_minute,i_01,i_10; 
unsigned char 
n_can_termo,termo_10,termo_01,termo_00,set_termo_10,set_termo_01,set_termo_00; 
unsigned char n_sob,sob_10,sob_01; 
unsigned int termo[4]; 
int corr_termo[4]; 
unsigned int termo_out[4]; 
unsigned int set_termo[4]; 
unsigned char tmr_ds_1,tmr_ds_2,tmr_ds_3,tmr_ds_4; 
 
unsigned char ds_bit[] = {0x01,0x02,0x04,0x08}; 
unsigned char set_time_pulse; 
 
unsigned char timer_key,timer_dysp_start,timer_pulse; 
char stroke_dysplay[32]; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 59  
  
 
unsigned char compare_out[4]; 
unsigned char stroke_rx[9]; 
unsigned int timer_light; 
 
union { 
struct{ 
    unsigned _0:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
    unsigned _4:1; 
    unsigned _5:1; 
    unsigned _6:1; 
    unsigned _7:1; 
 
  };unsigned char all; 
  }_pulse; 
   
union { 
struct{ 
    unsigned _0:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
    unsigned _4:1; 
    unsigned _5:1; 
    unsigned _6:1; 
    unsigned _7:1; 
 
  };unsigned char all; 
  }_switch; 
 
union { 
struct{ 
    unsigned _0:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
    unsigned _4:1; 
    unsigned _5:1; 
    unsigned _6:1; 
    unsigned _7:1; 
 
  };unsigned char all; 
  }_auto; 
 
union { 
struct{ 
    unsigned _0:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 60  
  
 
    unsigned _4:1; 
    unsigned _5:1; 
    unsigned _6:1; 
    unsigned _7:1; 
 
  };unsigned char all; 
  }_manual; 
 
union { 
struct{ 
    unsigned _0:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
    unsigned _4:1; 
    unsigned _5:1; 
    unsigned _6:1; 
    unsigned _7:1; 
 
  };unsigned char all; 
  }relay; 
 
union { 
struct{ 
    unsigned _40:1; 
    unsigned _80:1; 
    unsigned _160:1; 
    unsigned _320:1; 
    unsigned _640:1; 
    unsigned _1280:1; 
    unsigned _2560:1; 
    unsigned _5120:1; 
 
  };unsigned char all; 
  }index; 
 
union { 
struct{ 
    unsigned :1; 
    unsigned go:1; 
    unsigned write:1; 
    unsigned second:1; 
    unsigned no_pow:2; 
    unsigned work:1; 
    unsigned alarm:1; 
 
  };unsigned char all; 
  }status; 
 
union { 
struct{ 
    unsigned on_1:1; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 61  
  
 
    unsigned on_2:1; 
    unsigned on_3:1; 
    unsigned on_4:1; 
    unsigned _1:1; 
    unsigned _2:1; 
    unsigned _3:1; 
    unsigned _4:1; 
  };unsigned char all; 
  }termo_con; 
 
union { 
struct{ 
    unsigned val:5; 
    unsigned n_can:3; 
  };unsigned char all; 
  }reg_hour; 
 
union { 
struct{ 
    unsigned val:6; 
    unsigned action:2; 
  };unsigned char all; 
  }reg_minute; 
 
union { 
struct{ 
    unsigned tim:3; 
    unsigned key:5; 
  };unsigned char all; 
  }qwerty; 
 
 union { 
struct { 
    unsigned lb:8;         
     //  
    unsigned mb:8;         
   // 
    };unsigned int all; 
  }termo_val;   
   
 union { 
struct { 
    unsigned lb:8;         
     //  
    unsigned mb:8;         
   // 
    };unsigned int all; 
  }buffer;  
  
 union { 
struct { 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 62  
  
 
    unsigned _bit:1;         
   // 
    unsigned :7;          
    // 
    };unsigned char all; 
  }shift_reg_tx;   
  
 union { 
struct { 
    unsigned :7;  
    unsigned _bit:1;  
    };unsigned char all; 
  }shift_reg_rx;  
 
 
 
 
const unsigned char eeprom_rom[8][32] = 
{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},     
          
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},  
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},  
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0}, 
             
       
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; 
const unsigned char qwesad[] = {0,0,0};        
            
 
             
        
const unsigned char tabl_termo[] = 
{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; 
        
const unsigned char mask_set_1[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 
 
const char Crc8Table[256]= 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 63  
  
 
{ 
 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53 
}; 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 64  
  
 
5 Оцінка точності програмованого таймера 
 
Похибка програмованого таймера для робототехнічних комплексів не є 
постійною величиною, а змінюється в часі в залежності від зміни умов 
проведення аналізів. Для вивчення похибки програмованого таймера-генератора 
для робототехнічних комплексів необхідно розділити її на складові частини.  
Тоді загальна похибка програмованого таймера-генератора для 
робототехнічних комплексів розраховується за формулою: 
 
   2  2  2  2 2 2 2
 1 2 3 4 5 6 7 ,                 (5.1) 
де 1 – приведена похибка кварцового резонатора; 
2 – приведена похибка датчика температури; 
3 – приведена похибка центрального процесора; 
4 – приведена похибка органів керування; 
5 – приведена похибка блока управління зовнішніми пристроями; 
6 – приведена похибка блока живлення; 
7 – приведена похибка мікроконтролера. 
  0,42  0,12 1,02  0,32  0,12  0,22 1,82  2,133% . 
 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 65  
  
 
6 Спеціальний розділ 
 
6.1 Технологічний розділ 
Наш програмований таймер для робототехнічних комплексів складається з 
двох плат (рисунок 6.1 та 6.2). Розміри плат становлять ширина 73 мм, довжина 
134 мм, товщина 5 мм, що є досить компактна в нашому випадку. 
 
 
Рисунок 6.1 – Друкована плата контролера 
 
Рисунок 6.2 – Друкована плата блоку управління зовнішніми пристроями 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 66  
  
 
6.2 Економічний розділ 
Розраховуємо вартість матеріалів, запасних частин, комплектуючих які 
витрачаються на виготовлення пристрою. 
Таблиця 6.1 - Розрахунок вартості матеріалів, запасних частин, 
комплектуючих матеріалів, грн. 
№ Назва Кількість Вартість грн. 
 За одиницю Загальна 
1 Великий корпус 1 108,00 108,00 
2 Малий корпус 1 87,00 87,00 
3 Трансформатор 220\12 1 71,00 71,00 
4 Друковані плати 2 250,00 500,00 
5 Індекатор WA1602L 1 415,00 415,00 
6 Реле 8 25,00 200,00 
7 Сімістор BTA 140-800 4 48,00 192,00 
8 Клемник 4-х контактний 6 31,00 186,00 
9 Клемник 3-х контактний 4 21,00 84,00 
10 Кнопки 5 5,00 25,00 
11 Штовхачі для кнопок 5 2,2 11,00 
12 Зумер 1 5,00 5,00 
13 Тримач батареї CR 1 4,00 4,00 
14 Мікроконтролер PIC16F1517-I/PT 1 76,00 76,00 
15 Датчик DS18B20 4 43,00 172,00 
16 Мікросхема ULN2003 2 4,50 9,00 
17 Мікросхема МС34063 1 11,00 11,00 
18 Мікросхема МОС3062 4 21,00 84,00 
19 Діодний міст DF08 1 15,00 15,00 
20 Діод LL4148 11 0,9 9,9 
21 Діод MBRS140 2 5,50 11,00 
22 Діод BAV99 4 0,60 2,40 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 67  
  
 
23 Діод GS1M 2 1,20 2,40 
24 Стабілітрон BZV55 4.7V 1 11,00 11,00 
25 Дросель 100мкГн & 500мА 1 7,00 7,00 
26 Роз’єм ICD20 2 5,00 10,00 
27 Роз’єм ВН20 2 5,00 10,00 
28 Плівочний конденсатор 4 1,50 6,00 
29 Конденсатор Ел 2200.0 & 25в 1 10,00 10,00 
30 Конденсатор Ел 1000.0 & 25в 1 7,00 7,00 
31 Конденсатор Ел 100.0 & 25в 1 3,00 3,00 
32 Конденсатор 0805 9 0,70 6,30 
33 Конденсатор 0.125Вт 12 1,50 18,00 
34 Резистор 0805 19 0,50 9,50 
Всього 125 2378,50 
Загальна вартість матеріалів, запасних частин, комплектуючих складає 
2378,50 грн. 
Розробка пристрою передбачає виконання наступних видів робіт, які 
вказані в таблиці 6.2 
Таблиця 6.2 - Витрати часу на розробку пристрою. 
Норма часу на Загальні 
№ Назва робіт К-сть, шт. 
розробку, год. витрати часу 
1 Виготовлення 1 2 2 
корпусу 
2 Монтаж 125 0,02 2,5 
елементів 
3 Пайка 125 0,02 2,5 
елементів 
4 Збирання 1 1 1 
пристрою 
5 Наладка 1 2 2 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 68  
  
 
пристрою 
Всього 10 
 
6.3 Охорона праці  
 
Аналіз небезпек і шкідливостей, що виникають у процесі  проведення 
досліджень в приміщенні лабораторії 
Даний проект характеризується тим, що для проведення усього комплексу з 
розробки програмованого таймеру необхідний сучасний комплекс програмних і 
апаратних засобів досліджень. Тому робота виконується за допомогою сучасного 
персонального комп’ютера (ПК) у приміщенні експериментальної лабораторії. 
Аналіз небезпек та шкідливостей полягає у визначенні наявності шкідливих 
факторів на робочому місці при роботі в даному приміщенні.  
Приміщення лабораторії розташоване на 2-му поверсі цегляної 
пятиповерхової будівлі. Устаткування лабораторії складається з чотирьох ПК і 
двох друкувальних пристроїв. Приміщення має наступні розміри: довжина 8 м, 
ширина 4,5 м,  висота 3,2 м і розрахований на чотирьох одночасно працюючих 
чоловік. Площа, яка припадає на одного працівника – 9 м2, об’єм – 28,8 м3, що 
відповідає вимогам ДБН В.2.2.28-2010. 
Робота з комп’ютерного моделювання відноситься до категорії 1-легких, 
оскільки виконується сидячи, не потребує систематичної фізичної напруги або 
підняття і перенесення ваги. Енерговитрати при виконанні такої роботи 
складають приблизно 150 ккал/год, це еквівалентно 172 Дж/сек. 
Характеристика зорової роботи з ПК відповідає великому класу точності, 
тобто найменший розмір об'єкта розрізнення понад 0,3мм до 0,5мм, що відповідає 
3 розряду зорової роботи, підрозряд – в; контраст розрізнення об'єкта з фоном – 
великий, фон світлий. 
Лабораторія має бічне природне освітлення через три світлових отвори у 
зовнішній стіні (вікон). Вікно має такі розміри: ширина 1,3 м; висота 1,8 м. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 69  
  
 
Нормований коефіцієнт природного освітлення становить 1,2%. Площа світлових 
отворів забезпечує необхідний коефіцієнт природного освітлення, фактичне 
значення якого становить 38-46%, що є достатнім рівнем, обумовленим ДБН 
В.2.5-28-2018. Для темного часу доби передбачене штучне освітлення. 
Лабораторія обладнана шістьма світильниками, кожний з яких має по дві 
люмінесцентні лампи денного світла, потужністю 58 Вт кожна. Фактичне 
значення штучного загального освітлення становить 415 лк, а нормативне 
значення – 400 лк. Отже, рівень штучного освітлення відповідає ДБН В.2.5-28-
2018. 
Мікроклімат впливає на терморегуляцію організму людини, яка є необхідною 
умовою його життєздатності і нормальної життєдіяльності. Терморегуляцією 
називається сукупність процесів, пов'язаних з утворенням тепла в організмі 
людини і віддачею його в навколишнє середовище, в результаті яких температура 
тіла людини підтримується на постійному рівні (36,5-37 ºC) незалежно від 
зовнішніх умов. 
Мікроклімат впливає, головним чином, на теплообмін між організмом 
людини і навколишнім середовищем. Теплообмін здійснюється в основному 
трьома способами: 
1. конвекцією за рахунок різниці температур тіла людини і навколишнього 
повітря, а також за рахунок руху повітря; 
2. випромінюванням за рахунок різниці температур тіла людини і 
навколишніх предметів; 
3. випаровуванням за рахунок різниці вологості поверхні тіла людини і 
навколишнього повітря. 
Процес конвекції є перенесенням тепла в результаті переміщення і 
перемішування частинок повітря. Процес теплового випромінювання полягає в 
перенесенні тепла від одного тіла до іншого інтенсивними інфрачервоними 
променями. 
При нормальних умовах (T = 20 ºC, φ = 50%, P = 760 мм.рт.ст. (101,3 кПа), v 
= 0,1 м/с) людина в стані спокою віддає в навколишнє середовище в середньому 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 70  
  
 
420 кДж / год (100 ккал / год): конвекцією - 30%; випромінюванням - 45%; 
випаровуванням - 25%. 
Для забезпечення нормального теплообміну між організмом людини і 
навколишнім середовищем встановлені нормативні параметри мікроклімату. При 
відхиленні фактичних параметрів від нормативних відбувається порушення 
теплообміну, терморегуляції і пов'язаних з ними багатьох функцій організму, що 
призводить до виникнення ряду захворювань. 
Фактичні значення основних факторів мікроклімату наступні: 
1. Температура повітря: 
-   в холодний період року – 22-23°С; 
-   в теплий період року – 30-32°С. 
2. Вологість повітря: 
- в холодний період року – 50-52%; 
- в теплий період року – 40-45%. 
3. Швидкість руху повітря: 
- в холодний період року – 0,05-0,1 м/с; 
- в теплий період року – 0,1-0,15 м/с. 
Оптимальні параметри мікроклімату в робочій зоні : 
1. Температура повітря: 
- в холодний період року – 20-22°С; 
- в теплий період року – 25-26°С. 
2. Вологість повітря: 40-60 %. 
3. Швидкість руху повітря: 
- не більше 0,1м/с; 
Наведені фактичні значення задовольняють ДСН 3.3.6.042-99 «Санітарні 
норми мікроклімату виробничих приміщень», за виключенням температури в 
теплий період року. Необхідно розрахувати і змонтувати систему 
кондиціонування повітря. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 71  
  
 
Дане приміщення відноситься до класу приміщень без підвищеної 
небезпеки ураження електричним струмом (ПУЕ-17), тому що відповідає таким 
вимогам: 
– кабінет має  струмонепровідні дерев'яні поли (паркет); 
– відносна вологість повітря 50-60%; 
– немає утворень пилу , що проводить струм; 
– неможливість одночасного дотику з однієї сторони до металевих 
конструкцій будинку, що мають з'єднання з землею, і з іншої сторони до корпусів 
електроустаткування. 
Вся електрична підводка до столів, де розташовані персональні 
комп’ютери, захищена від механічних ушкоджень. Для захисту від ураження 
електричним струмом застосоване заземлення відповідно ДСТУ Б В.2.5-82:2016.  
При роботі з ПК не відбувається утворення і виділення в повітря загально-
токсичних, подразнюючих, канцерогенних і інших шкідливих речовин, 
концентрація яких перевищувала б установлені норми і правила, тому повітря 
робочої зони відповідає вимогам ДСТУ-Н Б А.3.2-1:2007 і вимогам до ГДК 
шкідливих речовин і пилу. 
Джерела вібрація в даному приміщенні відсутні, що відповідає вимогам 
ДСН 3.3.6.039-99 
В даному приміщенні рівень шуму визначається шумом від системних 
блоків та від друкувального пристрою (принтеру) і не перевищує 52 дБА, що 
відповідає вимозі ДСН 3.3.6.037-99 
Приміщення лабораторії розташоване в північній частині будинку, стіни 
пофарбовані кремовою фарбою (пастельний тон) із коефіцієнтом відбиття 40-60%, 
фарбування має матову структуру. Робочі місця обладнані відповідно до вимог 
ДСТУ 8604:2015. У даному приміщенні робочі місця розташовані таким чином, 
щоб у поле зору не потрапляли вікна й освітлювальні прилади. Екрани моніторів 
розміщені під кутом 90-105о до вікна, у поле зору не потрапляють поверхні з 
дзеркальним відбиттям. Співвідношення яскравості екрана з найближчими 
поверхнями не перевищує 5:1, покриття столу матове з коефіцієнтом відбиття 0,3-
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 72  
  
 
0,4. Монітори розміщені так, щоб відстань від очей користувача до екрана 
складала не менше 700 мм, кут зору 30о. Руки користувача розташовуються на 
робочому столі в горизонтальному положенні, передбачена опора для спини. 
Пожежна безпека регламентується НАПБ А.01.001-2014. Приміщення 
лабораторії відноситься до категорії В (ДСТУ Б В.1.1-36:2016) – 
пожежонебезпечних приміщень, тому що є наявність горючих речовин: дерев'яні 
столи і стільці, дерев'яна підлога, віконна рама; приміщення сухе з відносною 
вологістю 40-60%. Згідно умов експлуатації приміщення лабораторії відповідно 
до ДБН В.2.5-56-2014 обладнане автоматичним пожежним димовим 
оповіщувачем ІПК-3.1М, який формує сигнал про пожежу при виявлені чиннику, 
що супроводжує пожежу - дим. 
Додатково для гасіння пожежі в кабінеті передбачений ручний 
вуглекислотний вогнегасник типу ВВК-9, призначений для гасіння твердих і 
рідких горючих речовин, а також електроустановок. 
При виникненні пожежі люди евакуюються з лабораторії шляхом виходу в 
коридор другого поверху, що веде на сходову клітку, яка має вихід назовні через 
вестибюль (ДБН В.1.1.7-2016). 
За результатами аналізу умов праці дослідника, що виникають у процесі 
роботи при статистичній обробці матеріалів, можна зробити висновок, що всі 
параметри лабораторії відповідають вимогам нормативних документів для даного 
типу роботи. Відхиленням від встановлених вимог є  відсутність системи 
кондиціонування повітря. Виходячи з цього рекомендується в приміщенні 
лабораторії встановити систему кондиціонування повітря.  
 
Розробка системи кондиціонування повітря 
Кондиціонування повітря — це створення та автоматичне підтримування в 
приміщенні заданих або таких, що змінюються за певною програмою 
метеорологічних умов, які є найбільш сприятливими для працівників чи для 
нормального протікання технологічного процесу. Кондиціонування повітря може 
бути повним та неповним. Повне кондиціонування повітря передбачає 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 73  
  
 
регулювання температури, вологості, швидкості руху повітря, а також можливість 
його додаткового оброблення (очищення від пилу, дезінфекції, дезодорації, 
озонування). При неповному кондиціонуванні регулюється лише частина 
параметрів повітря. 
Кондиціонування повітря здійснюється кондиціонерами, які 
підрозділяються на центральні та місцеві. Центральні кондиціонери призначені 
для обслуговування великих за розмірами приміщень. Оброблення повітря 
проводиться в одному центрі, що розташований поза приміщеннями, в яких 
здійснюється кондиціонування і зв'язаного з останніми каналами для подачі та 
рециркуляції повітря. Місцеві кондиціонери мають малу продуктивність і 
встановлюються безпосередньо в невеликих приміщеннях. Такі кондиціонери, 
зазвичай, працюють на зовнішньому повітрі за, так званою, припливною схемою. 
Система кондиціонування оснащується спеціальними пристроями, які 
автоматично регулюють за заданими умовами необхідні параметри повітря, а 
отже й відповідні характеристики теплоносія та холодної води. 
Принцип роботи кондиціонера. 
У основі роботи будь-якого кондиціонера лежить властивість рідин 
поглинати тепло при випаровуванні і виділяти - при конденсації. Щоб зрозуміти, 
яким чином відбувається цей процес, розглянемо схему кондиціонера на прикладі 
спліт-системи:  
 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 74  
  
 
Рисунок 7.1 - Схема кондиціонера побудована за принципом спліт-системи 
 
Основними вузлами будь-якого кондиціонера є:  
Компресор - стискає фреон і підтримує його рух по холодильному контуру.  
Конденсатор - радіатор, розташований в зовнішньому блоці. Назва 
відображає процес, що відбувається при роботі кондиціонера, - перехід фреону з 
газоподібної фази в рідку (конденсація).  
Випарник - радіатор, розташований у внутрішньому блоці. У випарнику 
фреон переходить з рідкої фази в газоподібну (випаровування).  
ТРВ (терморегулюючий вентиль) - знижує тиск фреону перед випарником.  
Вентилятори - створюють потік повітря, що обдуває випарник і 
конденсатор. Використовуються для інтенсивнішого теплообміну з навколишнім 
повітрям. 
Компресор, конденсатор, ТРВ і випарник сполучені мідними трубами і 
утворюють холодильний контур, усередині якого циркулює суміш фреону і 
невеликої кількості компресорного масла.  
В процесі роботи кондиціонера на вхід компресора з випарника надходить 
газоподібний фреон під низьким тиском в 3 - 5 атмосфери і температурою 10 - 
20°С. Компресор стискає фреон до тиску 15 - 25 атмосфери, внаслідок чого фреон 
нагрівається до 70 - 90°С, після чого поступає в конденсатор.  
Завдяки інтенсивному обдуванню конденсатора, фреон остигає і 
переходить з газоподібної фази в рідку з виділенням додаткового тепла. 
Відповідно, повітря, що проходить через конденсатор, нагрівається.  
На виході конденсатора фреон знаходиться в рідкому стані, під високим 
тиском і з температурою на 10 - 20°С вище за температуру атмосферного повітря. 
З конденсатора теплий фреон поступає в терморегулюючий вентиль (ТРВ), який в 
простому випадку є капіляром (довга тонка мідна трубка, звита в спіраль). На 
виході ТРВ тиск і температура фреону істотно знижуються, частина фреону при 
цьому може випаруватися.  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 75  
  
 
Після ТРВ суміш рідкого і газоподібного фреону з низьким тиском 
поступає у випарник. У випарнику рідкий фреон переходить в газоподібну фазу з 
поглинанням тепла, відповідно, повітря, що проходить через випарник, остигає. 
Далі газоподібний фреон з низьким тиском поступає на вхід компресора і увесь 
цикл повторюється.  
Цей процес лежить в основі роботи будь-якого кондиціонера і не залежить 
від його типу, моделі або виробника.  
При вирішенні питання щодо доцільності кондиціонування повітря 
необхідно враховувати й економічні чинники. 
Через традиції, що склалися, окрім одиниць системи СІ, для вимірювання 
потужності кондиціонера (при роботі на охолоджування або нагрів) 
використовують також позасистемну одиницю «британська теплова 
одиниця/година (БТЕ/год), величина якої визначається так: кількість тепла, 
необхідного для нагріву одного фунт (0,45 кг) води, на один градус Фаренгейта 
(0,56 °С). Одиниця БТЕ/год так співвідноситься з одиницею системи СІ (Вт): 1 Вт 
= 3,412 БТЕ/год. 
Таким чином, використовувані в кліматичній техніці одиниці вимірювання 
потужності (продуктивності) зв'язані між собою співвідношеннями: 1 Вт = 3,412 
БТЕ/год, 1 Вт = 1,163 ккал/год, 1 БТЕ/год = 0,293 Вт, 1 ккал/год = 3,968 БТЕ/год. 
Потрібну для конкретного приміщення потужність кондиціонера по 
холоду можна розрахувати, визначивши лишнє тепло в приміщені, в якому він 
повинен бути встановлений. 
Надлишкове тепло в приміщені розраховують за формулою: 
Qз Q1 Q2 Q3 Q4 Q5  
де Qз  – загальна кількість тепла; 
Q1  – лишнє тепло в приміщені від сонячної радіації та штучного світла; 
Q2  – надходження тепла від людей, що знаходяться в приміщенні; 
Q3  – надходження тепла від офісного устаткування; 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 76  
  
 
Q4  – надходження тепла від побутової техніки; 
Q5  – надходження тепла від опалювання. 
Надходження тепла від сонячної радіації залежить від площі і 
розташування вікон. На широті Черкас надходження тепла через 1 кв. м скла 
будуть: 
- північна орієнтація – 42 Вт/м2; 
- північно-східна і північно-західна орієнтація – 215 Вт/м2; 
- східна і західна орієнтація – 290 Вт/м2; 
- південно-східна і південно-західна орієнтація – 220 Вт/м2; 
- південна орієнтація – 130 Вт/м2; 
- горизонтальне скління – 400 Вт/м2. 
Якщо вікно затінене деревами або є щільні світлі жалюзі, приведені 
величини ділять на коефіцієнт 1,4. 
Кабінет має бічне природне освітлення через чотири світлових отвори у 
зовнішній стіні (вікон). Вікно має такі розміри: ширина 1,3м; висота 1,8м. 
Надходження тепла від сонячної радіації через вікна, а при використанні 
електричного освітлення надходження тепла від штучного освітлення: 
Q1.1 w  h  qs  nw 1,3 1,8  42  4 393 (Вт) 
де w  - ширина вікон, 
h  - висота вікон, 
qs  - орієнтація вікна, 
nw  - кількість вікон. 
Q1.2  nL PL 12 60 720 (Вт) 
де nL  - кількість ламп електричного освітлення, 
PL  - потужність одної лампи електричного освітлення. 
В результаті  
Q1 Q1.1 Q1.2 393 7201113 (Вт) 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 77  
  
 
Надходження тепла від стін істотно менше, тому у ряді випадків ними 
нехтують. 
Надходження тепла від людей, що знаходяться в приміщенні. Одна людина 
залежно від роду занять виділяє: 
- відпочинок в сидячому положенні – 120 Вт; 
- легка робота в сидячому положенні – 130 Вт; 
- помірно активна робота в офісі – 140 Вт; 
- легка робота стоячи – 160 Вт; 
- легка робота на виробництві – 240 Вт; 
- робота середньої тяжкості на виробництві – 290 Вт; 
- важка робота – 440 Вт. 
Тепер розрахуємо надходження тепла від людей: 
Q2  q p  np 140  4  560
 (Вт) 
q
де p  - надходження тепла від людини, 
n
     p  - кількість людей. 
Надходження тепла від офісного устаткування. Зазвичай вони 
приймаються у розмірі 30% від споживаної потужності: 
- комп'ютер – 350 Вт; 
- лазерний принтер – 400 Вт; 
- матричний або струменевий принтер – 50 Вт; 
- копіювальний апарат – 500 - 600 Вт. 
Q3  qk nk qr  (350 4) 2 50 1500
(Вт) 
де qk  - надходження тепла від комп'ютера, 
     nk  - кількість комп'ютерів, 
     qr  - принтер. 
Надходження тепла побутової кухонної техніки. Побутова кухонна техніка 
відсутня, тому Q4  0  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 78  
  
 
У ряді випадків, у високих будівлях з великою площею скління 
кондиціонування буває необхідно вже навесні, коли опалювальний сезон ще не 
закінчений. В цьому випадку в розрахунку необхідно враховувати лишнє тепло 
від системи опалювання, що приблизно дорівнює 180-225 Вт/м2 площі. 
Вибираємо Q5  200Вт/м2 .  
В результаті загальна сума тепла буде рівна: 
Qз Q1 Q2 Q3 Q4 Q5 1113 560 1500  200  3282
 (Вт) 
Вибираємо близьку по потужності модель кондиціонера із стандартного 
ряду: 2,0; 2,5; 3,5; 5,0; 7,0 кВт. В даному випадку достатньо моделі потужністю 
3,5 кВт. Вибираємо кондиціонер HAIER AS12NB5HRA. 
 
 
Рисунок 7.2 - Кондиционер HAIER AS12NB5HRA 
 
Технічні характеристики кондиціонера HAIER AS12NB5HRA наступні: 
 Потужність охолоджування (Вт): 3500  
 Потужність обігріву (Вт): 3900 
 Повітрообмін (куб. м/година): 600  
 Розміри внутрішнього блоку (мм): 855x280x204 
 Розміри зовнішнього блоку (мм): 780x540x245 
 Потужність, яка споживається при охолоджувані (кВт): 1,025 
 Потужність, яка споживається при обігріві (кВт): 1,08 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 79  
  
 
 Живлення (В/Гц/Ф): 220/50/1 
 Рівень шуму (дБ): 21/35 
 Вага внутрішнього блоку (кг): 10,3 
 Вага зовнішнього блоку (кг): 28 
 Тип хладагенту: R410А 
 Контроль температури : Термістор  
 Кількість швидкостей вентилятора : 3/4  
 Регулювання коливання жалюзі : Авто  
 Тип пульта ДУ : ДУ з дисплеєм  
 Діапазон температур: (-15) … +43 °С 
 Таймер : 24 год Вкл/викл  
 Тип компресора : інверторний 
Спеціальні функції та пристрої кондиціонера HAIER AS12NB5HRA: 
1. Інверторний компресор. 
Інверторний принцип управління компресором допомагає домогтися 
кращої енергоефективності. Кондиціонер працює плавно і тихо, споживає на 20-
30% менше електроенергії. 
2. Режим дбайливого обдування і низький шум. 
Залежно від обраного температурного режиму, кондиціонер обирає спосіб 
обдування. На низькій швидкості працює тихо, звуковий рівень чутності - всього 
16 дБ. Повітряний потік спрямований вгору, в режимі охолодження і вниз, в 
режимі опалення. 
3. Рівномірна підготовки повітря. 
Вертикальні і горизонтальні жалюзі кондиціонера розподіляють 
повітряний потік в 11 напрямках. Так досягається рівномірний розподіл повітря 
по всій площі та об'єму приміщення. 
4. Антикорозійне покриття. 
Покриття Blue Fin захищає теплообмінник від впливу пилу і вологи. 
Збільшує термін служби обладнання. 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 80  
  
 
Висновки 
 
Створений під час проєктування програмований таймер для 
робототехнічних систем є пристроєм, призначеним для вмикання та вимикання 
різних виконавчих механізмів у визначений час і регулятора температури для 
утримання заданої температури. 
Розроблені структурна електрична схема, принципова електрична схема 
програмованого таймера для робототехнічних систем, складальне креслення 
друкованої плати та креслення друкованої плати. Розроблене програмне 
забезпечення програмованого таймера для робототехнічних систем на основі 
прошивки мікроконтролера як основної програми, так і змінних. 
 
  
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 81  
  
 
Список використаної літератури 
 
1. Козбур, І. Р., Марущак, П. О., Медвідь, В. Р., Савків, В. Б., & Пісьціо, 
В. П. (2022). Проектування мікропроцесорних систем керування. 
2. Главчев, М. І. (2024). Проєктування програм діагностики 
комп'ютерних систем та мереж. Частина 2. 
3. Шкіль, О., Рахліс, Д., Філіпенко, І., Корнієнко, В., & Рожнова, Т. 
(2024). Автоматизоване проєктування вбудованих систем цифрового оброблення 
сигналів на платформі SoC. Сучасний стан наукових досліджень та технологій в 
промисловості, (1 (27)), 192-203. 
4. Марчак, Б. В., & Лашко, О. Л. (2022). Принципи побудови та 
реалізація системного менеджера відкладеного запуску програм. 
5. Яшанов, С. М., Шевчук, Б. В., & Олефіренко, Т. О. (2022). 
Інформаційні технології у виробництві. 
6. Мельникович, Д. С. (2025). Автоматизована система керування 
будинком. 
7. Заікін, В. І. Застосування 3D моделювання під час проєктування та 
виготовлення корпусу блоку керування системи ЧПК. 
8. Марков, В. Ю. (2025). Програмований генератор випробувальних 
сигналів на базі мікроконтролера ATMega328 для перевірки логічних мікросхем. 
9. Jing, Z., & Wang, F. (2022, November). The design and implementation of 
timer. In 6th International Conference on Mechatronics and Intelligent Robotics 
(ICMIR2022) (Vol. 12301, pp. 330-336). SPIE. 
10. Кнівець, Є. Г., & Поліщук, В. М. (2025). Багатоканальний циклічний 
програмований таймер для керування системою опалення, 109. 
11. Микитюк, З., Шимчишин, О., Зворський, А., & Марків, Д. (2024). 
Автоматизація процесів керування мікрокліматом житлових приміщень. 
12. Ангеліна, М. (2022). Характеристичні особливості деяких 
мікроконтролерів ARDUINO. Рекомендовано Вченою радою Житомирського 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 82  
  
 
державного університету імені Івана Франка, протокол № 3 від 4.02. 2022 р. 
Рецензенти, 273. 
13. Новоселов, С. П., Сичова, О. В., & Теслюк, С. І. Багатопотокове 
програмне керування рухом промислового маніпулятора. Міжнародна науково-
практична конференція «Інтелектуальні інформаційні системи в управлінні 
проєктами та економіці в умовах воєнного стану», Коблево, 13-16 вересня 2022 р. 
Праці–Харків: ХНУРЕ, 2022.–135 с., 92. 
14. Ткачук, О. О. (2022). Автоматизація процесу керування 3D фрезерним 
станком. 
15. Коверзнєв, А. В., & Ясенова, І. С. Програмний засіб керування часом 
та управління задачами. ЗБІРНИК ТЕЗ, 231. 
16. Славов, С. В. (2023). Багатоканальний таймер виконавчих пристроїв 
робототехнічних систем. 
Аркуш 
ЗРСА25ск3.026.23499.001 ПЗ 
Зм. Арк. № докум. Підпис Дата 83