рефераты рефераты
Главная страница > Дипломная работа: Проектирование устройства передачи данных по радиоканалу  
Дипломная работа: Проектирование устройства передачи данных по радиоканалу
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Дипломная работа: Проектирование устройства передачи данных по радиоканалу

if(SelfTest) goto test_modes;

FDIV++;

// через 10 мс обнуление отсчетов и посылка в хост синхронизирующего // сигнала цикла ARQ.

if(FDIV==80) {FDIV=0;NBDP_THR_TX();}

#ifdef RX_TO_TX_

tx_buf[1] = RX_TO_TX[0];

tx_buf[2] = RX_TO_TX[1];

return;

#endif

// Проверка нужна ли модуляция, если нет то возврат

if(!Modulator_ON)

{

PH_ACC = 0;

return;

}

restart:

if(mod_ready)

{

tx_buf[1] = tx_buf[2] = 0;

if(FS_PTT_OFF) // выключение модуляции

{

FS_PTT_OFF=0;

PTT_OFF();

}

return;

}

test_modes:

BITTIME--;

if(BITTIME==0)

{

/*=== determine the new bit from out byte ===*/

// Режим реальной работы

if(!SelfTest) out_data <<= 1; /* 7 bit mode */

if(out_data & 0x80) /* MARK */

{

PH_INC = MARK_INC;

asm("

#define PFDATA 0x3fe5

ar = b#0000000001000000; /* set 1 PF6/TLG OUT */

ay1 = dm(PFDATA);

ar = ar or ay1;

dm(PFDATA) = ar;");

}

else /* SPACE */

{

PH_INC = SPACE_INC;

asm("

ar = b#1111111110111111; /* reset 1 PF6/TLG OUT */

ay1 = dm(PFDATA);

ar = ar and ay1;

dm(PFDATA) = ar;");

}

// Тестовый режим, работа в 8-битном режиме

if(SelfTest) out_data <<= 1;

BITTIME = BITLENGTH;

bits_left--;

if(bits_left<0)

{

mod_ready=1;

modulating();

goto restart;

}

else

{

/* blink by PF7 as syncro_out */

asm("

ar = dm(PFDATA);

ar = tglbit 7 of ar;

dm(PFDATA) = ar; ");

/* -------------------------- */

}

}

/*asm ("dis m_mode;");*/

PH_ACC += PH_INC;

l_out = sin_i(PH_ACC);

tx_buf[2] = l_out; // выдача результатов в порт ( связь с кодеком)

}

/*-------------------------------------------------------------*/

void modulating(void)

{

if(SelfTest)

{

if(SelfTest==1) /* space */

{

out_data = 0;

}

else if(SelfTest==2) /* mark */

{

out_data = 0xFF;

}

else if(SelfTest==3) /* dot */

{

/* 10101010 */

out_data = 0xAA;

}

else if(SelfTest==4) /* big dot */

{

/* 11110000 */

out_data = 0xF0;

}

else

{

SelfTest=0;

}

BITTIME=1;

bits_left=8; // 8-битный режим работы

mod_ready=0;

return;

}

// В случае тестового режима дальше не идем

if(mod_ready == 0) return;

BITTIME=1;

if(ModulatorGet(&out_data)==0) /* nothing to get */

{

// обнуление флагов и возврат

/* clear PF6 as TLG & PF7 as syncro_out */

asm("

ar = dm(PFDATA);

ar = clrbit 7 of ar;

ar = clrbit 6 of ar;

dm(PFDATA) = ar; ");

/* -------------------------- */

return;

}

bits_left=7; // 7-битный режим работы

mod_ready=0;

}

Программа демодуляции

Принцип демодуляции входного сигнала нашего устройства, основывается на том, что нам известны частоты поступающие от отдельного устройства приема сигнала по радиоканалу, уже отфильтрованные и поданные на вход нашего устройства. И нам необходимо выделить соответственно частоты 1785 Hz = MARK = ' 0 ' и 1615 Hz = SPACE = ' 1 ' и получить определенный код. После получении кода происходит раскодирование по таблице NBDP и передача в ЭВМ, где программа TERMINAL соответственно реагирует на данные кода.

// Demod.c

// Подключаем заголовочные файлы и объявляем локальные и глобальные // переменные

#include <drivers.h>

#include <stdlib.h>

#include <template.h>

#include <nbdp.h>

extern void out_mcr(int data);

#define DMD_KOEFF 0x019A

#define DMD_LEVEL 0x1000 /* порог срабатывания */

#define OUT_MARK 'M'

#define OUT_SPACE 'S'

#define OUT_ERR 'E'

int my_fir(int NewValue);

int my_sqrt(int NewValue);

/*-------------------------------------------------------------*/

volatile int l_in,r_in;

int Demodulator_ON=1; // Demodulator ON/OFF flag

int PH_TONE_ACC[2]; // опорный MARK/SPACE PHASE ACC

int PH_TONE_INC[2] = {MARK_INC, SPACE_INC};

int i,j; // временные счетчики

int R [4]; // временные результаты

int S [4]; // частичные суммы

int DL[4*BITLENGTH]; // Delay lines for 4 bands

int DLp = 0; // DL pointer

int countN=BITLENGTH; // Cycle count

int REZ[2]; // Результаты

int PRZLT[2]; // Приблизительные результаты (prev. Rez)

int svMode; /* Save multiplier mode location */

int JitterOff; /* Bit syncro OFF flag */

int OutData[2];

void demodulator(void)

{

// Если демодулятор откл., то обнуление результатов и возврат

if(!Demodulator_ON && (dip_sw & DIP_SW1))

{

REZ[0] = 0;

out_mcr(0);

goto CheckCycle;

}

if(SelfTest) // Если тестовый режим, то возврат

{

return;

}

// Выключение режима целочисленной арифметики

asm("dis m_mode;");

l_in = rx_buf[IN_CHNL];

// ограничить входной сигнал для устранения переполнения фильтра

r_in = _FRACT_MULTIPLY_(r_in,DMD_KOEFF);

Заполняем массив временных результатов для MARK и SPACE

PH_TONE_ACC[0] += PH_TONE_INC[0];

R[0] = _FRACT_MULTIPLY_(r_in,sin_i(PH_TONE_ACC[0]));

R[1] = _FRACT_MULTIPLY_(r_in,cos_i(PH_TONE_ACC[0]));

PH_TONE_ACC[1] += PH_TONE_INC[1];

R[2] = _FRACT_MULTIPLY_(r_in,sin_i(PH_TONE_ACC[1]));

R[3] = _FRACT_MULTIPLY_(r_in,cos_i(PH_TONE_ACC[1]));

//Извлекаем старые данные и добавляем новые

for(i=0;i<4;i++)

{

S[i] = S[i] - DL[DLp];

S[i] = S[i] + R[i];

DL[DLp++] = R[i];

}

if(DLp >= (4*BITLENGTH)) DLp=0; /* wrap DL pointer */

// Получение результата по каждому фильтру.

PRZLT[0] = REZ[0]; // Предварительный результат

REZ[0] = _FRACT_MULTIPLY_(S[0],S[0]) + _FRACT_MULTIPLY_(S[1],S[1]);

REZ[1] = _FRACT_MULTIPLY_(S[2],S[2]) + _FRACT_MULTIPLY_(S[3],S[3]);

if(dip_sw & DIP_SW2)

{

REZ[0] = my_sqrt(REZ[0]);

REZ[1] = my_sqrt(REZ[1]);

}

R[1] = (REZ[0]-REZ[1]);

R[2] = (REZ[0]+REZ[1]);

R[0] = _FRACT_MULTIPLY_((_FRACT_DIVIDE_(R[1],R[2])),0x6400);

REZ[0] = R[0];

/* debug solution output */

tx_buf[1] = REZ[0];

/*================================================

STEP 4.

Time supervision, bit detection, etc.

================================================*/

CheckCycle:

countN--;

if(!countN)

{

if(abs(REZ[0]) > DMD_LEVEL)

{

if(REZ[0] > 0)

{

OutData[0] = OUT_MARK;

asm("reset fl0; set fl2; set fl1; ");

}

else

{

OutData[0] = OUT_SPACE;

asm(" set fl0; reset fl2; set fl1; ");

}

}

else

{

OutData[0] = OUT_ERR;

asm(" set fl0; set fl2; reset fl1; ");

}

countN = BITLENGTH;

// отправляем на ЦАП (кодек)

NBDP_THR_RX(OutData[0]);

}

// включение режима целочисленной арифметики

asm("ena m_mode;");

}

Дополнительные программы и функции

1. Программа nbdp_table.c

Содержит таблицу соответствия кодов ASCII и кодов формата NBDP.

#include <nbdp.h>

/*B - MARK FREQ:1785Hz

/*Y - SPACE FREQ:1615Hz

/* ¦ +-----------------¦ 5-Unit ¦ 7-Unit ¦ */

/* ¦No ¦LET ¦FIG ¦RUS ¦ Code ¦ Code ¦ */

UCHAR _7bit_code[]= { /*+--+-----+-----+-----+---------+-----------¦ */

0x71 ,/*¦01¦A 41 ¦- 2D ¦А 80 ¦ZZAAA ¦BBBYYYB 71 ¦ */

0x27 ,/*¦02¦B 42 ¦? 3F ¦Б 81 ¦ZAAZZ ¦YBYYBBB 27 ¦ */

0x5c ,/*¦03¦C 43 ¦: 3A ¦Ц 96 ¦AZZZA ¦BYBBBYY 5C ¦ */

0x65 ,/*¦04¦D 44 ¦Wh?? ¦Д 84 ¦ZAAZA ¦BBYYBYB 65 ¦ */

0x35 ,/*¦05¦E 45 ¦3 33 ¦Е 85 ¦ZAAAA ¦YBBYBYB 35 ¦ */

0x6c ,/*¦06¦F 46 ¦Э*9D ¦Ф 94 ¦ZAZZA ¦BBYBBYY 6C ¦ */

0x56 ,/*¦07¦G 47 ¦Ш*98 ¦Г 83 ¦AZAZZ ¦BYBYBBY 56 ¦ */

0x4b ,/*¦08¦H 48 ¦Щ*99 ¦Х 95 ¦AAZAZ ¦BYYBYBB 4B ¦ */

0x59 ,/*¦09¦I 49 ¦8 38 ¦И 88 ¦AZZAA ¦BYBBYYB 59 ¦ */

0x74 ,/*¦10¦J 4A ¦Ю*07 ¦Й 89 ¦ZZAZA ¦BBBYBYY 74 ¦ */

0x3c ,/*¦11¦K 4B ¦( 28 ¦К 8A ¦ZZZZA ¦YBBBBYY 3C ¦ */

0x53 ,/*¦12¦L 4C ¦) 29 ¦Л 8B ¦AZAAZ ¦BYBYYBB 53 ¦ */

0x4e ,/*¦13¦M 4D ¦. 2E ¦М 8C ¦AAZZZ ¦BYYBBBY 4E ¦ */

0x4d ,/*¦14¦N 4E ¦, 2C ¦Н 8D ¦AAZZA ¦BYYBBYB 4D ¦ */

0x47 ,/*¦15¦O 4F ¦9 39 ¦О 8E ¦AAAZZ ¦BYYYBBB 47 ¦ */

0x5a ,/*¦16¦P 50 ¦0 30 ¦П 8F ¦AZZAZ ¦BYBBYBY 5A ¦ */

0x3a ,/*¦17¦Q 51 ¦1 31 ¦Я 9F ¦ZZZAZ ¦YBBBYBY 3A ¦ */

0x55 ,/*¦18¦R 52 ¦4Ч34 ¦Р 90 ¦AZAZA ¦BYBYBYB 55 ¦ */

0x69 ,/*¦19¦S 53 ¦' 27 ¦С 91 ¦ZAZAA ¦BBYBYYB 69 ¦ */

0x17 ,/*¦20¦T 54 ¦5 35 ¦Т 92 ¦AAAAZ ¦YYBYBBB 17 ¦ */

0x39 ,/*¦21¦U 55 ¦7 37 ¦У 93 ¦ZZZAA ¦YBBBYYB 39 ¦ */

0x1e ,/*¦22¦V 56 ¦= 3D ¦Ж 86 ¦AZZZZ ¦YYBBBBY 1E ¦ */

0x72 ,/*¦23¦W 57 ¦2 32 ¦В 82 ¦ZZAAZ ¦BBBYYBY 72 ¦ */

0x2e ,/*¦24¦X 58 ¦/ 2F ¦Ь 9C ¦ZAZZZ ¦YBYBBBY 2E ¦ */

0x6a ,/*¦25¦Y 59 ¦6 36 ¦Ы 9B ¦ZAZAZ ¦BBYBYBY 6A ¦ */

0x63 ,/*¦26¦Z 5A ¦+ 2B ¦З 87 ¦ZAAAZ ¦BBYYYBB 63 ¦ */

0x0f ,/*¦27¦CR 0D -- ----- ¦AAAZA ¦YYYBBBB 0F ¦ */

0x1b ,/*¦28¦LF 0A -- ----- ¦AZAAA ¦YYBBYBB 1B ¦ */

0x2d ,/*¦29¦LET 16 -- ----- ¦ZZZZZ ¦YBYBBYB 2D ¦ */

0x36 ,/*¦30¦FIG 0F -- ----- ¦ZZAZZ ¦YBBYBBY 36 ¦ */

0x1d ,/*¦31¦SP 20 -- ----- ¦AAZAA ¦YYBBBYB 1D ¦ */

0x2b ,/*¦32¦RUS 00 -- ----- ¦AAAAA ¦YBYBYBB 2B ¦ */

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19

рефераты
Новости