- •Лабораторні роботи з курсу “Обчислювальна техніка та програмування”
- •Лабораторна робота №1. Розрахунок таблиці функції
- •Хід виконання роботи:
- •Лабораторна робота №2. Обчислення визначеного інтегралу
- •Хід виконання роботи:
- •7. Підготувати звіт.
- •Алгоритми методів
- •Метод прямокутників:
- •Метод трапецій:
- •Метод Сімпсона (метод парабол):
- •Лабораторна робота №3. Розв'язання нелінійних рівнянь
- •Хід виконання роботи:
- •6. Підготувати звіт.
- •Методи розв’язку нелінійних рівнянь
- •Метод хорд
- •Метод половинного ділення
- •Метод Ньютона (метод дотичних)
- •Лабораторна робота №4. Робота з двовимірними масивами
- •Хід виконання роботи:
- •5. Підготувати звіт.
- •Завдання на обробку масивів:
- •Лабораторна робота №5. Робота із зовнішніми носіями інформації.
- •Хід виконання роботи:
- •6. Підготувати звіт.
- •Лабораторна робота №6 Програмування зовнішніх пристроїв
- •Хід виконання роботи
- •4. Підготувати звіт. Короткий опис інтерфейсу usb
- •Короткий опис функцій для роботи з мікросхемою ft245
- •Додаткові відомості
- •Завдання
Короткий опис функцій для роботи з мікросхемою ft245
Оскільки написання драйверів для роботи з шиною USB під керуванням операційної системи Windows складне навіть для професійних програмістів, будемо використовувати драйвери, розроблені фірмою FTDI Chip (http://www.ftdichip.com/Drivers/D2XX.htm). Найбільш часто використовуються наступні функції (див. специфікацію), прототипи яких описані у файлі FTD2XX.h:
FT_STATUS FT_ListDevices(PVOID pvArg1,PVOID pvArg2, DWORD dwFlags);
FT_STATUS FT_Open(int iDevice, FT_HANDLE *ftHandle);
FT_STATUS FT_Close(FT_HANDLE ftHandle);
FT_STATUS FT_Write(FT_HANDLE ftHandle, LPVOID lpBuffer,
DWORD dwBytesToWrite, LPDWORD lpdwBytesWritten);
FT_STATUS FT_Read(FT_HANDLE ftHandle, LPVOID lpBuffer,
DWORD dwBytesToRead, LPDWORD lpdwBytesReturned);
FT_STATUS FT_ResetDevice(FT_HANDLE ftHandle);
FT_STATUS FT_Purge(FT_HANDLE ftHandle, DWORD dwMask);
FT_STATUS FT_SetTimeouts(FT_HANDLE ftHandle, DWORD dwReadTimeout,
DWORD dwWriteTimeout);
FT_ListDevices() повертає інформацію про пристрої FTDI, що підключені на даний момент до комп’ютера; в найпростішому випадку функція повертає дані про кількість пристроїв. Перед тим як передавати дані, необхідно відкрити пристрій за допомогою функції FT_Open(), що повертає дескриптор (унікальний номер), який використовується в подальшому всіма функціями для ідентифікації пристрою. Якщо пристрій був відкритий успішно, дані можна передавати і приймати за допомогою функцій FT_Write() та FT_Read(). В кінці сеансу зв’язку пристрій необхідно закрити, використовуючи функцію FT_Close().
Додаткові функції, що використовуються при роботі з мікросхемою FT245:
FT_ResetDevice() – виконує ініціалізацію мікросхеми наново;
FT_Purge() – очищує буфери прийому та/або передачі;
FT_SetTimeouts() – встановлює час очікування виконання операції читання/запису;
Додаткові відомості
При читанні даних інколи виникає необхідність виділяти біти, що відповідають за певний стан зовнішнього пристрою. Для виділення потрібного біта зручно використовувати побітові операції І, АБО та побітову інверсію, а також так звані маски. Маскою називається число, що дозволяє виділити значення певних бітів в байті (або встановити в байті певні біти, не змінюючи інші). Наприклад, щоб виконати певні дії в залежності від значення п’ятого біта з байта, записаного в змінній status, можна виконати таку перевірку:
#define MASK 32
..................
if(status & MASK==1)
/* дії_при_встановленому_біті */
else
/* дії_при_скинутому_біті */
оскільки 25=32.
Щоб встановити третій біт, не змінюючи значення інших, можна скористатись операцією побітового АБО:
#define MASK 8
..................
status=status | MASK; /* третій біт стане рівним 1 */
Для проведення лабораторних робіт використовується макет, зібраний за схемою, що наведена на рисунку. До виводів портів через опори номіналом 2 кОм під’єднані світлодіоди.
При передачі байта на відповідні світлодіоди подається напруга. Щоб подати напругу на окремі світлодіоди, потрібно за допомогою функції FT_Write() передати число, що “відповідає” за них (маску). Наприклад, щоб засвітити світлодіод №5, на порт потрібно видати число 25=32. Якщо необхідно подати живлення на декілька світлодіодів, потрібно в порт записати суму масок: для одночасного загоряння світлодіодів №2 та №6 потрібно видати в порт число 22+26=4+64=68.
Зауваження:
1) Щоб використати описи типів даних, які знаходяться в заголовочному файлі FTD2XX.h, необхідно включити у вихідний код заголовочний файл windows.h.
2) Для зборки виконуваного модуля необхідно включити в проект бібліотеку FTD2XX.lib.
3) Оскільки мікросхема FT245 призначена для роботи з мікроконтролерами, який підтверджує прийом даних, а при односторонній передачі даних таке підтвердження неможливе, перед новою передачею даних необхідно очистити буфер прийому.
4) Функція затримки delay() відсутня в C++ Builder. Замість неї необхідно використовувати аналогічну функцію Sleep().