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