Главная > Коммуникации и связь > Програмно керований генератор лінійно-наростаючої напруги наднизької частоти на мікроконтролері

Програмно керований генератор лінійно-наростаючої напруги наднизької частоти на мікроконтролері


25-01-2012, 10:51. Разместил: tester10

Міністерство освіти і науки, молоді та спорту України

Харківський Національний Університет Радіоелектроніки

Курсова робота

Програмно керований генератор лінійно-наростаючої напруги наднизької частоти на мікроконтролері

Харків 2011


Введення

Генератори лінійно - змінюється напруги називають іноді генераторами розгортки, хоча цей термін не відображає їх набагато ширшого застосування. З області розгорток запозичені назви двох основних частин пилоподібного імпульсу: прямий хід (головний, майже лінійна ділянка t п) і зворотний хід (порівняно коротка ділянка t о, форма якого зазвичай несуттєва).

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

пилкоподібні імпульси можна отримати за допомогою будь-якого релаксатора: мультивібратора, одне вібратора або блокінг-генератора. Тому генератори пилкоподібної напруги становлять особливий клас імпульсних пристроїв і заслуговують спеціального розгляду. Генератори лінійно-змінюється напруги є широко відомими пристроями імпульсної техніки. У цій роботі буде розглянуто створення генератора лінійно-спадаючого напруги на МК ATMega8515.


1. Огляд аналогічних пристроїв

1.1Простейшій генератор пилкоподібної напруги (ДПН)

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

u = E (1-e-t/П„), де П„ = RC.

Якщо під час робочого ходу використовувати лише початкова ділянка експоненти, тобто при tраб <<П„, або, іншими словами, при Um <

Оµ = Um/E. (1.1)

Можна визначити Оµ і за формулою

Оµ = Um/E = 1-e-tраб/П„ ≈ tраб/П„.

З (1.1) випливає, що коефіцієнт нелінійності Оµ виявляється рівним Um/E. Зазвичай це співвідношення називається коефіцієнтом використання джерела живлення. При цьому для отримання достатньо малого значення Оµ доводиться вибирати значення E у багато разів більшим амплітуди Um тобто погано використовувати напругу джерела живлення. Таким чином, найпростіша схема із зарядом або розрядом конденсатора через резистор виявляється придатною лише при порівняно невисокою лінійності (приблизно 10%).

Принципова схема найпростішого ГПН з транзисторним ключем і відповідні часові діаграми напруги наведені на рисунку 1.1б і 1.1в згідно [2].

Малюнок 1.1-Принципова схема ГПН з транзисторним ключем і відповідні часові діаграми

1.2Классіфікація ГПН із стабілізаторами струму

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

1). Генератори, в яких стабілізатор струму реалізований у вигляді окремого структурного елемента зі спеціальним джерелом напруги Їсть.

2). Генератори, в яких джерело напруги Їсть стабілізатора струму реалізований у вигляді зарядженого конденсатора. Необхідно відзначити, що цей генератор по іншому класифікаційною ознакою часто відносять до групи компенсаційних пристроїв. Ідея побудови таких пристроїв заснована на тому, що стабілізація зарядного (Або розрядного) струму конденсатора С може бути досягнута, якщо послідовно з ним включити джерело, напруга якого змінюється по тому ж закону, що і на конденсаторі С, але має зворотну полярність. Роль такого джерела напруги виконує підсилювач. В залежності від способу включення підсилювача розрізняють схеми з позитивною і негативною зворотної зв'язком.

Малюнок 1.2- компенсаційний генератор з ООС (а), з ПОС (б).

На малюнку 1.2а показаний варіант функціональної схеми компенсаційного генератора з позитивною зворотним зв'язком (ПОС): якщо коефіцієнт посилення підсилювача К0 = +1, то підвищення потенціалу в точці а1 при заряді конденсатора С компенсується точно таким же підвищенням потенціалу в точці а2, і зарядний струм i залишиться незмінним. Звичайно, в практичних схемах внаслідок того, що коефіцієнт посилення К0 не залишається в процесі роботи постійним і точно рівним 1, а так само в результаті нестабільності інших параметрів схем спостерігається певне не постійності струму i і більше або менше значення коефіцієнта нелінійності напруги на конденсаторі і вихідної напруги Uвих. Генератор, який реалізує функціональну схему на малюнку 1.2а, називають компенсаційним генератором з ПОС.

3). Генератори, в яких роль джерела напруги стабілізатора струму виконує джерело живлення схеми. Такий генератор по іншому класифікаційною ознакою відноситься до компенсаційним генераторам з ООС (негативним зворотним зв'язком); функціональна схема такого генератора показана на малюнку 1.2б.

1.3 Генератори пилкоподібної напруги на операційних підсилювачах

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

На малюнку 1.3а показана схема генератора пилкоподібної напруги з інтегруючої RC-ланцюжком, включеної в ланцюг негативного зворотного зв'язку операційного підсилювача.


2. Обгрунтування обраного варіанта технічного рішення

Переваги реалізації генератора лінійно наростаючої напруги на мікроконтролері:

-компактність приладу;

-можливість програмного управління пристроєм;

-простота схемного рішення;

-точність формування імпульсів різної частоти;

-просте управління режимом роботи за допомогою клавіатури;

-відображення частоти генеруються імпульсів на РКІ.

Схема розроблювального генератора наведена на кресленні РТ 468.524.008 ЕЗ. У схемі застосовується мікроконтролер фірми ATMEL - ATMega8515. Мікросхема створена на основі ядра Mega, має у своєму складі 8-розрядний і 16-розрядний таймери для формування тимчасових затримок і 4 порти для введення і виведення інформації з зовнішніх пристроїв.

Основні технічні характеристики мікроконтролера:

-Форма вхідного сигналу -Довільна

-Максимальна амплітуда вхідного сигналу, 20В

-Дискретність відліку частоти, 10Гц

-Час вимірювання, 100мс

-Період повторення вимірювань, 200 мс

-Напруга живлення, 5В

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

Регулювання амплітуди проводиться потенціометром R1, підключеним до входу управління ЦАП. Так як навантаження нізвоомная (50 ОМ), то для узгоджен...ня опору навантаження з виходом пристрою, застосовується емітерного повторювач на транзисторі 2N636. Для перетворення вихідного сигналу мікроконтролера з рівня TTL в більш потужний сигнал, а також для узгодження пристрої з навантаженням (генератор працює на низькоомних навантаження), використовується вихідний каскад. В якості вихідного каскаду застосований транзистор VT1. При появі на виведення 6 імпульсу, він надходить через резистор R4 на базу VT1. У зв'язку з тим, що величина імпульсу значно менше напруги на емітері, тобто база має менш позитивний потенціал, транзистор відкривається на час, рівний тривалості імпульсу. Резистор R4 обмежує вихідний сигнал мікроконтролера до значення, необхідного для нормальної роботи транзистора VT1. У той час, коли відкритий транзистор, в навантаженні протікає струм джерела харчування, тобто на навантаженні з'являється імпульс з амплітудою, що дорівнює амплітуді напруги живлення. Таким чином, здійснюється підсилення послідовності імпульсів. Так як виходом є колектор, а така схема включення має низький вихідний і досить високий вхідний опір, то цей каскад успішно виконує функцію узгодження виходу мікроконтролера з навантаженням, так як по ТЗ генератор повинен працювати на низькоомних навантаження.

Застосовані недротяні тонкошарові металодіелектричних резистори марки C2-23 постійного опору. У даних резисторів в якості резистивного елемента використовується тонка плівка шару провідного металу, тому вони характеризуються підвищеною теплостійкістю. Резистори мають невисоку вартість.

Харчування генератора здійснюється за допомогою трансформатора, випрямного містка і інтегрального стабілізатора 78LR05.

Зміна частоти сигналу здійснюється матрицею кнопок 4х4.

Індикація частоти здійснюється алфавітно-цифровим РКІ з контролером HD44780. Так як необхідно виводити не більше 16ти символів, займають один рядок, був обраний символьний РКІ формату 16х1 WH1601B фірми Winstar.


3. Розробка принципової схеми пристрою

Розроблюване пристрій повинен генерувати лінійно-наростаюче напруження з дискретно-змінною частотою і плавно-змінною амплітудою. Принципова схема пристрою приведена на кресленні РТ 468.524.008 ЕЗ.

Для дискретної зміни частоти буде використана матрична клавіатура 4х4, підключена до порту D мікроконтролера. До кнопкам клавіатури програмно підключені підтягують резистори щоб уникнути В«обривуВ» на вході. Підтяжка працює таким чином: в ненажатом стані опір між нулем і входом дуже велике, і через резистор на вході створюється потенціал, сприйманий МК як логічна одиниця. При натисканні картина змінюється: тепер резистор - щодо нескінченне опір, а на Піне - потенціал нуля. Клавіатура буде забезпечувати зміна частоти від 2 Гц до 32 Гц з кроком 2 Гц. За замовчуванням буде встановлено режим генерації частоти 2Гц.

Цифрове значення амплітуди необхідно подавати на ЦАП, підключений до порту З микроконтроллера.

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

Відображення генерується частоти в даному режимі буде здійснюватися ЖКИ. Шина передачі даних на РКІ підключена до порту А мікроконтролера. Керуючі сигнали підключені до ніжок РВ0, РВ1, РВ2.

Харчування генератора здійснюється за допомогою трансформатора, випрямного містка і інтегрального стабілізатора 78LR05.


4. Розробка алгоритму і програми функціонування пристрою

Алгоритм головної програми включає в себе наступні блоки:

-ініціалізація МК. В даному блоці здійснюється ініціалізація стека, настроювання портів (на ввід/вивід даних), конфігурування перший таймер-лічильник, настройка/дозвіл переривань, завантаження констант. Нижче наведено лістинг ініціалізації МК:

. include

. def temp = r16

. def adr = r17

. def reg = r18

. def const0 = r19

. def const01 = r20

. def time = r21

. def lev = r22

. def Comand = r23

. def lcd = r24

. def x = r25

. equ E = 2

. equ RW = 1

. equ RS = 0

reset:

rjmp start

reti; Addr

reti; Addr

reti; Addr

rjmp generation

reti; Addr

reti; Addr

reti; Addr

reti; Addr

reti; Addr

reti; Addr [fde_1328364018_1641883032_1328364018_3340286181_513] A

reti; Addr [fde_1328364018_1641883032_1328364018_0643231881_1834] B

reti; Addr [fde_1328364018_1641883032_1328364018_2138860314_1927] C

reti; Addr [fde_1328364018_1641883032_1328364018_4186310823_6601] D

reti; Addr [fde_1328364018_1641883032_1328364018_0823416138_2731] E

reti; Addr [fde_1328364018_1641883032_1328364018_1630421838_2458] F

reti; Addr

; Program starts here after Reset

start: ldi temp,

out SPH, temp

ldi temp, F

out SPL, temp

; ====== настройка портів ===========

ldi temp, $ F0

out DDRD, temp

ldi temp, $ FF

out PORTD, temp

out DDRC, temp

out PORTC, temp

; ===== настройка Т1 і переривань ====

ldi temp,

out TIMSK, temp

ldi temp,

out TCCR1B, temp

sei

; ======== завантаження констант ========

ldi const0, 0

ldi const01,

ldi lev, [fde_1328364018_1641883032_1328364018_6488110323_4946]

ldi x, [fde_1328364018_1641883032_1328364018_1814863302_2077]

; ===== режим за замовчуванням ========

ldi temp, high (E78)

out OCR1AH, temp

ldi temp, low (E78)

out OCR1AL, temp

ldi adr, 0

-ініціалізація ЖКИ. В даному блоці реалізується ініціалізацію ЖКИ: визначення напряму відображення, вибір напрямку зсуву та налаштування розгортки в один рядок. Налаштування кожного з параметрів відбувається за наступним алгоритмом:

Рис. 4.1 - Алгоритм послідовності конфігурації РКІ

Лістинг ініціалізації РКІ

ldi Comand, [fde_1328364018_1641883032_1328364018_2106843318_2253] C; визначення режиму відображення

rcall gotov

rcall LCD_Delay

rcall zap_IR

ldi Comand,; вибір напрямку зсуву

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_IR

ldi Comand,; розгортка в одну рядок

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_IR


-установка режиму по замовчуванням. Даний блок алгоритму включає в себе установку частоти по замовчуванням, а також установку індикації за замовчуванням. Лістинг установки режиму та індикації за замовчуванням:

ldi temp, high (E78)

out OCR1AH, temp

ldi temp, low (E78)

out OCR1AL, temp

; ===== Висновок написи ==============

ldi lcd,; F

rcall mm3

ldi lcd,

rcall mm3

ldi lcd, D; =

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,; 2

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,; H

rcall mm3

ldi lcd, A; z

Після ініціалізації МК, РКІ і установки режиму за замовчуванням слід реалізувати динамічний опитування клавіатури, який являє собою наступну послідовність дій: групи кнопок умовно розбиті на "лінійки" і "колонки". Спочатку програмно на виходах PВ0-PВ3 виставляються одиниці, а на P40 - нуль. При цьому в...ключена перша колонка, і здійснюється перевірка натискання кнопок саме цієї колонки. Потім перша колонка відключається, і підключається наступна, і т.д.

Алгоритм опитування клавіатури, який є частиною головної програми, зазначений у кресленні РТ 468.524.008 П3, а нижче можна ознайомитися з лістингом динамічного опитування клавіатури:

forever:

ldi reg, F; маска 01111111

out PORTD, reg

nop

nop

sbis PIND, 0; перевірка натискання кнопки

rjmp r3; перехід до мітці натискання кнопки

sbis PIND, 1

rjmp r7

sbis PIND, 2

rjmp r11

sbis PIND, 3

rjmp r15

ldi reg, $ BF; маска 10111111

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r2

sbis PIND, 1

rjmp r6

sbis PIND, 2

rjmp r10

sbis PIND, 3

rjmp r14

ldi reg, $ DF; маска 11011111

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r1

sbis PIND, 1

rjmp r5

sbis PIND, 2

rjmp r9

sbis PIND, 3

rjmp r13

ldi reg, $ EF; маска 11101111

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r0

sbis PIND, 1

rjmp r4

sbis PIND, 2

rjmp r8

sbis PIND, 3

rjmp r12

rjmp forever

Як видно з блок-схеми алгоритму роботи програми, у разі натискання якої-небудь кнопки, програма переходить на мітку тієї кнопки, яка виявилася натиснутою. Тут за допомогою Перший таймер-лічильник встановлюється поріг рахунку, який визначає частоту даного режиму, а також викликається підпрограма заміни символу, який відображає частоту даного режиму. Після чого програма повертається назад на мітку forever, де знову починається динамічний опитування клавіатури. Нижче наведено лістинг блоку обробки натискань кнопок:

r0:

ldi temp, high (E78); 2Гц

out OCR1AH, temp

ldi temp, low (E78)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r1:

ldi temp, high ($ F40); 4Гц

out OCR1AH, temp

ldi temp, low ($ F40)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r2:

ldi temp, high ($ A60); 6 Гц

out OCR1AH, temp

ldi temp, low ($ A60)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r3:

ldi temp, high (A0); 8Гц

out OCR1AH, temp

ldi temp, low (A0)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r4:

ldi temp, high (8); 10Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r5:

ldi temp, high (0); 12Гц

out OCR1AH, temp

ldi temp, low (0)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r6:

ldi temp, high (C); 14Гц

out OCR1AH, temp

ldi temp, low (C)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r7:

ldi temp, high (D0); 16Гц

out OCR1AH, temp

ldi temp, low (D0)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r8:

ldi temp, high (8); 18Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r9:

ldi temp, high (C); 20Гц

out OCR1AH, temp

ldi temp, low (C)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r10:

ldi temp, high (C6); 22Гц

out OCR1AH, temp

ldi temp, low (C6)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r11:

ldi temp, high (B); 24Гц

out OCR1AH, temp

ldi temp, low (B)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r12:

ldi temp, high (9); 26Гц

out OCR1AH, temp

ldi temp, low (9)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r13:

ldi temp, high (E); 28Гц

out OCR1AH, temp

ldi temp, low (E)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r14:

ldi temp, high (8); 30Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r15:

ldi temp, high (E8); 32Гц

out OCR1AH, temp

ldi temp, low (E8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

Був повністю описаний алгоритм головної програми. Далі буде наведено алгоритм підпрограми генерації та наведено її лістинг.


На рис.

Для цього на рис.

Рис. готовності:

а).

Рис.

Текст програми

5.

Нижче наведені результати

Таблиця 1 - Результати Гц 0 1 2 3 4 5 7 8 9 10 12 13 14 15

6. Аналіз часовихения перший таймер-лічильник виконується по наступних співвідношеннях:

,

Де 0.25 мкс - час тактирования генератора при тактовій частоті f = 4МГц;

Згід...но з технічним завданням розрахунок константи необхідно провести для шістнадцяти режимів. Отриману константу N переведемо в шістнадцяткову систему. Відповідно нижче наведена таблиця розрахунків для 16ти частот:

Табл. 2 - Розрахунок коефіцієнта N в залежності від частоти

F, МГц

, мкс

2 1960 7800 1E78 4 976 3904 F40 6 664 2656 A60 8 488 1952 7A0 10 390 1500 618 12 324 1296 510 14 279 1116 45C 16 244 976 3D0 18 214 906 358 20 195 780 30C 22 175 700 2BC 24 162 648 288 26 148 592 250 28 139 556 22C 30 128 512 200 32 122 488 1E8

Той факт, що розподіл призводить до наявності більш ніж 4х знаків за коми, і значення необхідно округляти до цілих, говорить про те, що при генерації можливе виникнення похибок. Однак згідно емуляції в пакеті VMLAB похибки генерації частоти не перевищують 1%.


Висновки

В ході виконання даного курсового проекту був розроблений алгоритм, спроектована принципова схема і написана програма управління генератора лінійно-наростаючої напруги з дискретно-змінною частотою за допомогою матриці кнопок і плавно-змінною амплітудою.

Відображення генерується частоти здійснювалося за допомогою ЖКИ.

Після виконання поставленої задачі були зроблені такі суттєві висновки:

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

- похибки одержувані при генерації вельми малі, що свідчить про точність розрахунку;

- спроектоване пристрій цілком і повністю відповідає технічному завданню.

Даний пристрій може отримати застосування у сфері телебачення для горизонтальної розгортки електронного променя в електронно-променевій трубці, а також широко застосовуватися в імпульсній техніці.


Додаток А

; ************************************************** ****

; BASIC. ASM template file for AVR

; ********************************************** ********

. include

; Define here the variables

; програма генератор пилкоподібний напруга

. def temp = r16

. def adr = r17

. def reg = r18

. def const0 = r19

. def const01 = r20

. def time = r21

. def lev = r22

. def Comand = R23

. def lcd = r24

. def x = r25

. equ E = 2

. equ RW = 1

. equ RS = 0

; Define here Reset and interrupt vectors, if any

reset:

rjmp start

reti; Addr

reti; Addr

reti; Addr

rjmp generation; Addr

reti; Addr

reti; Addr Use 'rjmp myVector'

reti; Addr to define a interrupt vector

reti; Addr

reti; Addr

reti; Addr [Fde_1328364018_1641883032_1328364018_6330821184_1292] A

reti; Addr [Fde_1328364018_1641883032_1328364018_6310188324_8542] B This is just an example

reti; Addr [Fde_1328364018_1641883032_1328364018_8431061328_656] C Not all MCUs have the same

reti; Addr [Fde_1328364018_1641883032_1328364018_1831302486_2356] D number of interrupt vectors

reti; Addr [Fde_1328364018_1641883032_1328364018_0263138184_4931] E

reti; Addr [Fde_1328364018_1641883032_1328364018_8301821436_8713] F

reti; Addr

; Program starts here after Reset

start: ldi temp,

out SPH, temp

ldi temp, F

out SPL, temp

; ================= настройка портів ===================

ldi temp, $ F0

out DDRD, temp

ldi temp, $ FF

out PORTD, temp

out DDRC, temp

out PORTC, temp

; ================ настройка Т1 і переривань ==========

ldi temp,

out TIMSK, temp

ldi temp,

out TCCR1B, temp

sei

; ================ завантаження констант ===================

ldi const0, 0

ldi const01,

ldi lev, [fde_1328364018_1641883032_1328364018_1043886321_6186]

ldi x, [fde_1328364018_1641883032_1328364018_6038183142_495]

; ================ режим по замовчуванням ==================

ldi temp, high (E78)

out OCR1AH, temp

ldi temp, low (E78)

out OCR1AL, temp

; ================ ініціалізація ЖКИ ===================

ldi Comand, [fde_1328364018_1641883032_1328364018_2836143180_7549] C; 1100 визначення режиму відображення

rcall gotov

rcall LCD_Delay

rcall zap_IR

ldi Comand,; 110 вибір напрямки зсуву

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_IR

ldi Comand,; розгортка в один рядок

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_IR

; ================ Висновок написи ============================

ldi lcd,; F

rcall mm3

ldi lcd,

rcall mm3

ldi lcd, D; =

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,; 2

rcall mm3

ldi lcd,

rcall mm3

ldi lcd,; H

rcall mm3

ldi lcd, A; z

rcall mm3

; ================ п...ослідовний опитування клавіатури =============

forever:

ldi reg, F

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r3

sbis PIND, 1

rjmp r7

sbis PIND, 2

rjmp r11

sbis PIND, 3

rjmp r15

ldi reg, $ BF

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r2

sbis PIND, 1

rjmp r6

sbis PIND, 2

rjmp r10

sbis PIND, 3

rjmp r14

ldi reg, $ DF

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r1

sbis PIND, 1

rjmp r5

sbis PIND, 2

rjmp r9

sbis PIND, 3

rjmp r13

ldi reg, $ EF

out PORTD, reg

nop

nop

sbis PIND, 0

rjmp r0

sbis PIND, 1

rjmp r4

sbis PIND, 2

rjmp r8

sbis PIND, 3

rjmp r12

rjmp forever

; =================== підпрограма генерації ======================

generation:

out PORTC, lev

inc lev

reti

; ================== мітки переходу на кнопки =====================

r0:

ldi temp, high (E78); 2Гц

out OCR1AH, temp

ldi temp, low (E78)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r1:

ldi temp, high ($ F40); 4Гц

out OCR1AH, temp

ldi temp, low ($ F40)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r2:

ldi temp, high ($ A60); 6 Гц

out OCR1AH, temp

ldi temp, low ($ A60)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r3:

ldi temp, high (A0); 8Гц

out OCR1AH, temp

ldi temp, low (A0)

out OCR1AL, temp

ldi lcd,

rcall zamena1

rjmp forever

r4:

ldi temp, high (8); 10Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r5:

ldi temp, high (0); 12Гц

out OCR1AH, temp

ldi temp, low (0)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r6:

ldi temp, high (C); 14Гц

out OCR1AH, temp

ldi temp, low (C)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r7:

ldi temp, high (D0); 16Гц

out OCR1AH, temp

ldi temp, low (D0)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r8:

ldi temp, high (8); 18Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r9:

ldi temp, high (C); 20Гц

out OCR1AH, temp

ldi temp, low (C)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r10:

ldi temp, high (C6); 22Гц

out OCR1AH, temp

ldi temp, low (C6)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r11:

ldi temp, high (B); 24Гц

out OCR1AH, temp

ldi temp, low (B)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r12:

ldi temp, high (9); 26Гц

out OCR1AH, temp

ldi temp, low (9)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r13:

ldi temp, high (E); 28Гц

out OCR1AH, temp

ldi temp, low (E)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r14:

ldi temp, high (8); 30Гц

out OCR1AH, temp

ldi temp, low (8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

r15:

ldi temp, high (E8); 32Гц

out OCR1AH, temp

ldi temp, low (E8)

out OCR1AL, temp

ldi lcd,

rcall zamena

ldi lcd,

rcall zamena1

rjmp forever

; ================== робота з РКІ ==============

LCD_Delay: ldi x,

L_loop: dec x

brne L_loop

ret

gotov:

ldi temp, [fde_1328364018_1641883032_1328364018_3818203641_4023]

out DDRB, temp

ldi temp, $ FF

out PORTB, temp

out DDRA, temp

mm1: ldi temp, 0b00000010

out PORTA, temp

rcall LCD_Delay

sbi PORTA, E

rcall LCD_Delay

in temp, PIND

rcall LCD_Delay

cbi PORTA, E

rcall LCD_Delay

cbi PORTA, RW

sbrs temp, 7

ret

rjmp mm1

zap_IR:

ldi temp, $ FF

out DDRD, temp

ldi temp, [fde_1328364018_1641883032_1328364018_6830243181_4898]

out PORTA, temp

out PORTD, Comand

sbi PORTA, E

rcall LCD_Delay

cbi PORTA, E

rcall LCD_Delay

ret

zap_DR:

ldi temp, $ FF

out DDRD, temp

ldi temp, 0b00000001

out PORTA, temp

rcall LCD_Delay

out PORTD, lcd

sbi PORTA, E

rcall LCD_Delay

cbi PORTA, E

rcall LCD_Delay

ret

zamena:

ldi Comand,

mm2: rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_IR

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_DR

ret

zamena1:

ldi Comand,

rjmp mm2

mm3:

rcall LCD_Delay

rcall gotov

rcall LCD_Delay

rcall zap_DR

ret