- •Лабораторна робота №1
- •1 Теоретичні відомості
- •Програмування режимів роботи плати
- •2 Порядок виконання роботи
- •4 Варіанти завдання
- •5 Контрольні питання
- •Лабораторна работа №2
- •1 Теоретичні відомості
- •2 Порядок виконання роботи
- •4 Варіанти завдання
- •5 Контрольні питання
- •Лабораторна работа №3
- •1 Теоретичні відомості
- •2 Порядок виконання роботи
- •4 Варіанти завдання
- •5 Контрольні питання
- •Лабораторна работа №4
- •1 Теоретичні відомості
- •2 Контрольний приклад
- •3 Порядок виконання роботи
- •5 Варіанти завдання
- •5 Контрольні питання
- •Список літератури
Програмування режимів роботи плати
І. Режим прямого запуску АЦП і визначення готовності по біту.
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Запис у порт BASE+1 номера каналу (перші 4 біти, біти 4-7 - цифровий вивід).
3. Запуск АЦП. Здійснюється установкою в "1" біта 0 порту BASE+0 (Записати керуюче слово 01Н).
4. Очікування установки в "1" біта 0 порту BASE+1.
5. Зчитування даних: з порту BASE+2 молодший байт, з порту BASE+3 - старший.
6. Для повторного запуску повторюють кроки 1-5. При опитуванні одного каналу крок 2 не потрібний.
ІІ. Режим прямого запуску АЦП із одержанням даних по перериванню .
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Установка оброблювача на використовуване переривання .
3. Дозвіл апаратного переривання по зазначеному каналу (порт 21Н або 1АН).
4. Запис керуючого слова в порт BASE+0 (30Н).
5. Запис у порт BASE+1 номера каналу (перші 4 біти, біти 4-7 - цифровий вивід).
6. Запуск АЦП. Виробляється установкою в "1" біта 0 порту BASE+0 (Записати керуюче слово 31Н).
7. По закінченні перетворення генерується переривання.
8. По запиті на переривання зчитуються дані: з порту BASE+2 - молодший байт, з порту BASE+3 - старший.
9. Для наступних операцій зчитування повторюють кроки 4-8. При опитуванні одного каналу крок 5 не потрібний.
ІІІ. Режим однократного читання одного каналу з визначенням готовності по біту. Даний режим забезпечує апаратну затримку на установку каналу після перемикання аналогового мультиплексора. Досить записати в порт BASE+1 номер каналу й очікувати готовності по установці біта порту статусу.
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Програмування лічильника/таймера 0 на режим роботи 5 із записом одного молодшого байта. У порт BASE+7 записується керуюче слово таймера 1AH, а в порт BASE+4 - величина тимчасової затримки на установку каналу (2-6 мкс) .
3. Запис керуючого слова в порт BASE+0 (03Н).
4. Запис у порт BASE+1 номера каналу (перші 4 біти, біти 4-7 - цифровий вивід). Установлюється зазначений номер каналу; виконується апаратна затримка на час, зазначений у таймері 0; здійснюється запуск перетворення АЦП.
5. Очікування установки в "1" біта 1 порту BASE+1.
6. Зчитування даних: з порту BASE+2 - молодший байт, з порту BASE+3 - старший.
7. Для наступних операцій зчитування повторюють кроки 4-6.
ІV. Режим однократного читання одного каналу з визначенням готовності по перериванню. Аналогічний режиму ІІІ але використає переривання по готовності даних.
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Програмування лічильника/таймера 0 на режим роботи 5 із записом одного молодшого байта. У порт BASE+7 записують керуюче слово таймера (1AH), а в порт BASE+4 - величину тимчасової затримки на установку каналу (2-6 мкс).
3. Установка оброблювача на використовуване переривання.
4. Дозвіл апаратного переривання по зазначеному каналу (порт 21Н або 1АН).
5. Запис керуючого слова в порт BASE+0 (33Н).
6. Запис у порт BASE+1 номера каналу (перші 4 біти, біти 4-7 - цифровий вихід). Установлюється зазначений номер каналу; виконується апаратна затримка на час, зазначений у таймері 0; виробляється запуск перетворення АЦП.
7. По закінченню перетворення генерується переривання.
8. Зчитування даних: з порту BASE+2 - молодший байт, з порту BASE+3 - старший.
9. Для наступних операцій зчитування повторюємо кроки 6-8.
V. Режим запуску перетворення АЦП від лічильника/таймера з визначенням готовності по біту.
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Програмування лічильника/таймера 1 (при використанні двох таймерів у каскаді лічильників 1 і 2 ). Запис у порт BASE+7 керуючого слова для одного(двох) таймерів: 76Н (лічильник 1, режим 3, 2 байти запис, двійковий), В6Н (лічильник 2, режим 3, 2 байти запис, двійковий). Запис у порт BASE+5 значення лічильника 1: спочатку молодший байт, потім старший. Запис у порт BASE+6 значення лічильника 2: спочатку молодший байт, потім старший.
3. Запис керуючого слова в порт BASE+0 (05Н-один таймер або 09Н - два таймери в каскаді).
4. Очікування переходу біта 2 порти BASE+1 зі стану "1" в "0".
5. Зчитування даних: з порту BASE+2 молодший байт, з порту BASE+3 старший.
6. При необхідності вхідний канал перемикається записом його номера в порт BASE+1 (перші 4 біти, біти 4-7 - цифровий вивід).
7. Для наступних операцій зчитування повторюють кроки 4, 6.
VІ. Режим запуску перетворення АЦП від лічильника/таймера з визначенням готовності по перериванню.
Порядок програмування:
1. Запис керуючого слова в порт BASE+0 (00Н).
2. Програмування лічильника/таймера 1 (при використанні двох таймерів у каскаді лічильників 1 і 2). Запис у порт BASE+7 керуючого слова для одного(двох) таймерів: 76Н (лічильник 1, режим 3, 2 байти запис, двійковий), В6Н (лічильник 2, режим 3, 2 байти запис, двійковий). Запис у порт BASE+5 значення лічильника 1: спочатку молодший байт, потім старший. Запис у порт BASE+6 значення лічильника 2: спочатку молодший байт, потім старший.
3. Установка оброблювача на використовуване переривання.
4. Дозвіл апаратного переривання по зазначеному каналі (порт 21Н або 1АН).
5. Запис у порт BASE+1 номера каналу (перші 4 біти, біти 4-7 - цифровий вивід).
6. Запис керуючого слова в порт BASE+0 (35Н-один таймер або 39Н - два таймери в каскаді).
7. По закінченню перетворення генерується переривання.
8. Зчитування даних: з порту BASE+2 - молодший байт, з порту BASE+3 - старший.
9. При необхідності перемикання на інший вхідний канал здійснюється записом його номера в порт BASE+1 (перші 4 біти, біти 4-7 - цифровий вивід).
10. Для наступних операцій зчитування повторюють кроки 7, 9.
VІІ. Генерація переривань від таймера. У даному режимі таймер працює незалежно від інших схем і генерує запити на переривання із зазначеною частотою. Можливо використання даного режиму разом з І, ІІ , ІІІ, ІV; V і VІ у варіанті без каскадування двох таймерів.
Порядок програмування:
1. Установка оброблювача на використовуване переривання;
2. Дозвіл апаратного переривання по зазначеному каналі (порт 21Н або 1АН);
3. Програмування лічильника/таймера 1 (при використанні двох таймерів у каскаді лічильники 1 і 2). Запис у порт BASE+7 керуючого слова для одного(двох) таймерів: 76Н (лічильник 1, режим 3, 2 байти запис, двійковий), В6Н (лічильник 2, режим 3, 2 байти запис, двійковий). Запис у порт BASE+5 значення лічильника 1: спочатку молодший байт, потім старший. Запис у порт BASE+6 значення лічильника 2: спочатку молодший байт, потім старший.
4. Запис керуючого слова в порт BASE+0. Маска запису залежить від того, які режими використаються разом з VІІ.
5. По закінченні рахунку таймера(ів) генерується запит на переривання.
VІІІ. Цифровий вивід. Цифровий вивід можливий разом з кожним з розглянутих вище режимів. Для цього необхідно записати в BASE+1 потрібне число (біти 4-7). Біти 0-3 встановлюють номер вхідного аналогового каналу й потрібно стежити, щоб без необхідності ці біти не змінювались. При роботі із цифровим виводом разом з режимами ІІ й ІІІ потрібно пам'ятати, що запис у порт BASE+1 запускає даний режим (див. вище), тому кращим варіантом є синхронний запис у цифровий канал одночасно з перемиканням аналогового.
ІX. Цифровий ввід. Для цифрового вводу використаються біти 4-7 порту BASE+1. Для даного варіанта немає ніяких обмежень на момент зчитування значень із цифрового каналу.
Як приклад нижче наведений фрагмент підпрограми виміру за допомогою розглянутого вимірювального модуля миттєвих значень параметрів по трьох обраних каналах, у якому мовою С++ відображені елементи прямого запуску АЦП і запуску АЦП від лічильника/таймера.
/*************************************************************************/
/* Вимірювання */
/*************************************************************************/
void fun_izmer()
{
int kanal;
int ii;
int jj=0;
int d;
int data;
enum predel{ MIN_PIX =1,MAX_PIX =TOCH};
int kolvo_izm;
if( pp==0 ) kolvo_izm=MIN_PIX;
else kolvo_izm=MAX_PIX;
fun_win(17,9,65,13);
cputs("\n Зачекайте, іде вимірювання...");
if( pp==2 ) // Запуск АЦП від лічильника/таймера
{ outportb(0x310,0x0);
outportb(0x317,0x76);
outportb(0x315,impul); // молодший біт 4~1мкс 0x38~14мкс
outportb(0x315,0x0); // старший біт, необхідно 248
outportb(0x310,0x5); // на DD8 встановлюється дозвіл запуску від таймера
}
for(ii=0;ii<kolvo_izm;ii++)
{ // if ( (ii-jj)>6 ) ii=++jj;
for(kanal=0;kanal<3;kanal++)
{ outportb(0x311,128+kanal*16);
//for(d=0;d<100;d++) data+=10;
switch( pp )
{ case 0:case 1: // Одинарний/прямий запуск АЦП
{ outportb(0x310,0x0);
outportb(0x310,0x03);
while( !( inportb(0x311)&0x01 ) );// біт 0
break;
}
case 2: // запуск АЦП від лічильника/таймера
{ while( inportb(0x311)&0x04 );// біт 2
break;
}
default: break;
} //switch (pp)
data=inport(0x312);
d=15&inport(0x313);
data|=d<<=8;
data*=-1;
if( data>2047 )
data-=4096;
parametrs[ii].chanel[kanal]=(float)(data)*2.0*2.5/2048.0;
} //for(ii)
} //for(kanal)
cputs("\r Вимірювання завершено ");
b=FALSE;
while (( kod=getch() )!=27);
}
