Дипломная работа: Навчальна модель аналогово-цифрового перетворювача
- Delphі повністю підтримує такі програмні концепції як інкапсуляція, наслідування, поліморфізм та керування подіями;
Перевагами середовища Delphі в порівнянні з іншими аналогічними засобами розробки програм є значно простіше його використання, що дозволяє виконувати подальшу модернізацію програми іншими програмістами з мінімальними витратами часу на дослідження синтаксичних та логічних особливостей даної програми. Окрім цього, Delphі володіє досить великим об’ємом документації, як створеної розробниками Delphі, так і сторонніми виробниками, що значно полегшує розробку програм. Отже, за співвідноенням можливості-простота-ціна та враховуючи побажання замовників до мови програмування, інтегроване середовище програмування Delphі є оптимальним вибором для вирішення поставленої задачі.
Для роботи з LPT-портом використовується DLL-бібліотека IO.dll стороннього виробника, яка дозволяє працювати з портами. З даної бібліотеки використовується дві функції та одна процедура. Функція IsDriverInstalled : Boolean повертає TRUE у разі успішної установки драйвера LPT-порта. Функція PortIn(Port : Word) : Byte зчитує дані з порта по вказаній адресі, яка задається значенням змінної Port. Процедура PortOut(Port : Word; Data : Byte) записує в порт один байт, який вказується в змінній Data за адресою порта Port.
4.3 Програма керування АЦП
Загальний вигляд головної форми програми представлено на рис.
Рис.4.1. Екранна форма програми керування АЦП
Кнопка Write_DR дозволяє записувати в порт принтера стан чотирьох бітів регістру DR (біти DR0, DR1, DR2, DR3).
Кнопка Read_SRзчитує з порта принтера значення регітру SR(біт SR3).
Кнопка Write_СR дозволяє записувати в порт принтера стан чотирьох бітів регістру DR (біти СR0, СR1, СR2, СR3).
Кнопка In_Uперетворює напругу, яка подається на плату у двійковий код DR0 – DR3.
Кнопка Out_Uзаписує у порт двійковий код, який відповідає введеній на формі напрузі.
За допомогою кнопки Diagram зчитується напруга QI разів і отримане значення будується у вигляді графіка. Проміжок часу між зчитуванням рівний Time_Discret (Додаток Б).
4.3.1 Процедура обрахунку напруги за її двійковим представленням
Процедура p_Init_U встановлює звязок між напругою Ur і двійковою комбінацією, яка буде передана на LPT-порт, а далі в ЦАП, і з якої ЦАП сформує напругу Ur.
p_Init_U – процедура без параметрів. В процедурі оголошено пять змінних: nDr та bOut типу Integer, Rc1,Rc,Ur типу Real.
Тіло процедури починається з циклу, де bOut міняється від 0 до qB. Глобальна змінна qB приймає значення 15. В циклі виконуються наступні дії:
- процедура Trans_bOut_mDR(bOut) перетворює bOut з десяткової системи числення в двійкову і записує порозрядно в масив mDR[], який є глобальним для всьго модуля;
- змінній Rc1 присвоюєм значення 0;
- відкриваєм цикл, де nDR міняється від 0 до qDR. Глобальна змінна qDR приймає значення 3. В цьому циклі змінній Rc1 присвоюємо значення Rc1:=Rc1+(1/(mR[nDr]+Rdiod))*mDR[nDr], де mR[i] – масив значень, елементи якого відповідають реальним значення опорів 4-х резисторів ЦАП. Rdiod – змінна, значення якої рівне значеню опору діодів, що підключені до резисторів послідовно. Отже з законом Ома загальний опір при паралельному включенні n опорів, буде рівний:
.
Доданок (1/(mR[nDr]+Rdiod)) множиться на елемент масиву mR[i], що приймає двійкове значення 0 чи 1. Тобто, якщо в двійковій комбінації певний розряд рівний 0, то струм не протікає, а отже і не враховується при обчисленні опору. Одже, в даному циклі обраховується обернена величина до опору Rc;
- змінній Rc, що відповідає опору Rc присвоюєм значення 0. Перевіряється, чи значення Rc1 більше 0, тоді Rc присвоюємо 1/Rc1. Значення 1/Rc1 рівне значенню опору при паралельному включені;
- для обрахування напруги на виході ЦАП при поданні відповідних двійкових комбінацій на вхід неохідно також врахувати значення опору Rz. Змінна Rz буде рівна цьому опору. Напруга Uz на виході ЦАП буде обчислена в процедурі наступним чином U_DR=(Rz/(Rz+Rc))*U_A. Змінна U_A рівна значенню напруги, що подається на вхід дільника (3.7 В).
- Значення обрахованої напруги Ur на виході ЦАП запишеться у масив mUr[bOut] (таблиця 4.1).
4.3.2 Процедура DR P_Write_DR
Процедура P_Write_DR записує байт даних в регістр DR.
P_Write_DR – процедура без параметрів. В процедурі оголошено три змінних: bOut типу byte, pDr,nDR типу integer.
Змінній bout привласнюєм спочатку 0, pDr – 1. В циклі з масиву mDR[i] з 4-х молодших розрядів формуємо десяткове число, яке потрібно записати в регістр DR( bout:=bOut+mDR[nDR]*pDr; pDr:=pDr*2;).