Разработка логической схемы реализации линии связи

Схема линии связи и подключения абонентов. Ведение передачи информации в последовательном коде. Использование интерфейсного модуля-контроллера связи для ее реализации. Схема микроконтроллера, описание работы портов. Создание проекта в AVR Studio.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид контрольная работа
Язык русский
Дата добавления 24.02.2014
Размер файла 82,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

  • Задание
  • Описание работы порта А
  • Описание работы порта B
  • Создание проекта в AVR Studio
  • Список использованной литературы
  • Приложение

Задание

К общей шине (ОШ) подключены несколько абонентов, каждый из которых функционирует автономно в соответствии с управляющей информацией, полученной от специального устройства - арбитра общей шины. Эта шина включает 3 линии связи: одну информационную и две синхронизирующие. Передача информации ведется в последовательном коде. При этом синхроимпульсы С1 отмечают начало каждого байта, а С2 синхронизируют передачу отдельных битов. Основная тактовая частота 1 МГЦ. Длительность синхроимпульсов 0,25 мкс.

При необходимости связи арбитр вырабатывает общий для всех абонентов сигнал ВНИМАНИЕ и затем - АДРЕС нужного абонента. Этот абонент после идентификации своего адреса выдает в шину сигнал ГОТОВ либо ЗАНЯТ в зависимости от своего состояния. Получив сигнал готовности, арбитр сразу же формирует непрерывную многобайтную посылку - информационное сообщение (ИС), которое замыкается сигналом КОНЕЦ ПЕРЕДАЧИ. Приняв эту посылку, абонент отвечает сигналом КОНЕЦ ПРИЕМА при отсутствии ошибок передачи, либо сигналом ПОВТОРИТЬ ПЕРЕДАЧУ, если обнаружена ошибка. В последнем случае арбитр повторяет весь цикл связи заново. Информационное сообщение имеет символьный характер. Каждый символ занимает 1 байт (8 разрядов). Алфавит сообщений содержит всего 200 символов. Остающиеся 56 символов могут быть использованы в качестве сигналов связи: ГОТОВ, ВНИМАНИЕ и др.

Для реализации связи каждому абоненту придается интерфейсный модуль-контроллер связи. Сигналы ГОТОВ и ПОВТОРИТЬ-ПЕРЕДАЧУ вырабатываются контроллером по получении от своего абонента сигналов конца работы (КР) и ошибки передачи (ОП) соответственно.

ВНИМАНИЕ

217

11011001

АДРЕС

57

00111001

ГОТОВ

237

11101101

ЗАНЯТ

253

11111101

КОНЕЦ_ПЕРЕДАЧИ

114

01110000

КОНЕЦ_ПРИЕМА

174

10101110

ПОВТОРИТЬ_ПЕРЕДАЧУ

154

10100100

Схема микроконтроллера.

Для программирования необходимой логики работы мы будем использовать 3 из 8 выводов порта А и все 8 выводов порта B

Описание работы порта А

На вывод 0 поступает сигнал синхронизации С1

На вывод 1 поступает сигнал синхронизации С2

Вывод 2 используется для посылки и приёма Арбитру управляющих сигналов ("Внимание", "Готов" ит.д.), а также для приёма информационного сообщения.

Выводы 3-7 не используются и поэтому не показаны на схеме

Описание работы порта B

8 выводов порта B используются для параллельной передачи и приёма Абоненту управляющих сигналов ("Ошибка передачи", "Конец работы" ит.д.), а также для пересылки информационного сообщения, которое идёт от Арбитра

порт линия связь схема

В качестве программируемого микроконтроллера возьмём ATmega169. Выбор обусловлен тем, что данное устройство поддерживает необходимые для выполнения курсового проекта характеристики, хотя и является избыточным.

Работу программы будем проверять в эмуляторе AVR Studio 4.13.528

Компилировать программу будем в WinAVR 20071221

AVR Studio - интегрированная среда проектирования программ для микроконтроллеров, которую можно свободно скачать с сайта производителя www.atmel.com

WinAVR - программный пакет, содержащий в себе интересующий нас компилятор GNU GCC для C. WinAVR можно свободно скачать с сайта разработчиков http://sourceforge.net/projects/winavr/

Для разбора задания установите сначала WinAVR, а потом AVR Studio. Порядок установки важен для того, чтобы AVR Studio установил в настройках проекта в качестве компилятора компилятор GNU GCC, входящий в состав WinAVR. Обе программы установите с параметрами по умолчанию.

Создание проекта в AVR Studio

Для создания проекта в AVR Studio необходимо зайти в меню Project - > Project Wizard - > New Project

В окне Project type выбираем AVR GCC потому что будем писать программу на языке C

В окне Project name вписываем произвольно название проекта, допустим mk

В окне Initial file вписываем main. c. Это будет главный файл проекта, где будет находиться функция main.

Жмём Next

В окне Debug platform выбираем AVR Simulator. В окне Device выбираем ATmega169

Жмём Finish

После создания проекта в AVR Studio необходимо зайти в меню Project - > Configuration Options - > General и выставить значение Optimization = - O0. Это отключит оптимизацию кода, которая нам не нужна при отладке программы.

Окно main. c содержит исходный текст программы (предварительно скопируйте код в это окно).

В окне I/O View можно наблюдать, а также изменять состояние портов А и B.

Например сигнал С1 эмулируется в данной работе установкой в единицу PINA bit 0., а сигнал С2 эмулируется установкой в единицу PINA bit 1.

Значение PINA bit 2 эмулирует значения, которые нам приходят по информационной линии

В окне Watch можно следить за значениями переменных.

Список использованной литературы

1. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. - М.: "Солон-Пресс", 2004.

2. Шпак Ю.А. Программирование на языке C для AVR и PIC микроконтроллеров. - М.: "МК-Пресс", 2006.

3. Фрунзе А.В. Микроконтроллеры? Это же просто! - K.: "Додэка XXI", 2007.

4. Белов А.В. Самоучитель разработчика устройств на микроконтроллерах AVR. - М.: "Наука и техника", 2008.

5. Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих. - М.: МГТУ им. Н.Э. Баумана, 2007.

6. Джон Мортон Микроконтроллеры AVR. Вводный курс AVR: An Introductory Course. - К.: "Додэка XXI", 2006.

7. Евстифеев А.В. Микроконтроллеры AVR семейства Tiny. Руководство пользователя. - К.: Додэка XXI, 2007

Приложение

/*

Подключение заголовочного файла io. h, который в свою очередь подключит iom169. h

iom169. h - заголовочный файл, который ставит в соответствие константам PORTA и PORTB реальные адреса выводов конкретного контроллера (в нашем случае ATmega169)

Таким образом io. h позволяет работать с портами ввода-вывода

*/

#include <avr/io. h>

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

#include <stdbool. h>

// Определение пользовательского типа данных byte

typedef unsigned char byte;

// Константы, определённые для обращения к выводам порта А

#define C1 (PINA & 0x01) /* 0-вой вывод порта А, на который приходит сигнал С1 */

#define C2 (PINA & 0x02) /* 1-вой вывод порта А, на который приходит сигнал С2 */

#define DATAIN ( (PINA & 0x04) >> 2) /* 2-вой вывод порта А, на который приходит информация. Чтение информации из порта */

#define DATAOUT (x) PORTA = (PORTA & ~ (0x04)) | (x << 2) /* 2-вой вывод порта А, на который приходит информация. Ввод информации в порт */

// Символы сигналов связи варианта задания на курсовой проект #4

#define ATTENTION 217 // Внимание

#define ADDRESS 57 // Адрес

#define READY 237 // Готов

#define BUSY 253 // Занят

#define END_OF_TRANSFER_SEQUENCE 114 // Конец передачи

#define END_OF_RECEIVE 174 // Конец приёма

#define REPEAT_TRANSFER 154 // Повторить передачу

// Символы сигналов связи от Абонента

#define END_OF_WORK 1 // Конец работы

#define TRANSFER_ERROR 2 // Ошибка передачи

// Глобальные переменные

byte frameFromArbiter = 0;

bool abonentStateReceived = false;

bool frameCameFromArbiter = false;

bool AddressCameFromArbiter = false;

bool frameToAbonentWasSent = false;

bool requestToAbonentWasSent = false;

bool stateOfAbonentWasSentToArbiter = false;

bool DataMessageRefered = false;

int abonentState = 0;

// Получаем побитово байт от Арбитра

void ReceiveFrameFromArbiter ()

{

static int C2Count = 0;

static bool C1Came = false;

static bool C2Out = true;

if (C1) // Если пришёл сигнал С1,{

C1Came = true; // запоминаем что сигнал С1 приходил

}

if (C1Came) // Если сигнал С1 приходил

{

if (C2 && C2Out) // Если сигнал С2 пришёл,

{

frameFromArbiter = (frameFromArbiter & ~ (1 << C2Count)) | (DATAIN << C2Count); // считываем очередной бит с информационной линии

/*

(1 << C2Count) даст нам байт с единицой, установленной на том бите, который мы должны установить

~ (1 << C2Count) инвертирование даст нам байт с нулём, установленным на том бите, который мы должны установить

(frameFromArbiter & ~ (1 << C2Count)) даст нам исходный frameFromArbiter с нулём, установленным на том бите, который мы должны установить

DATAIN << C2Count) даст нам бит со значением пришедшим по информационной линии, который установлен в байте на том бите, который мы должны установить

Итоговое поразрядное ИЛИ даст нам исходный frameFromArbiter со значением пришедшим по информационной линии, которое установится в frameFromArbiter на номере бита, равном номеру сигнала С2

*/

C2Count++; // Считаем номер пришёдшего сигнала С2

C2Out = false; // Запоминаем, что С2 пришёл, но ещё не уходил

}

if (C2Count == 8) // Если пришло 8 сигналов С2, значит мы приняли целиком байт

{

C2Count = 0; // Обнуляем количество сигналов С2

C1Came = false; // Запоминаем что пришёдший после С1 байт уже обработан, ждём следующий С1

C2Out = true;

frameCameFromArbiter = true; // Запоминаем что байт пришёл

}

if (! C2) { // Если сигнал С2 ушёл

C2Out = true; // Запоминаем, что сигнал С2 ушёл

}

}

}

// Ждём поступления от Арбитра адреса микроконтроллера

void WaitAddressFromArbiter ()

{

DDRA = 0x00; // Указываем микроконтроллеру настроить все выводы на приём информации

bool attentionCame = false;

ReceiveFrameFromArbiter (); // Получить байт от Арбитра

if (frameCameFromArbiter) // Если байт от Арбитра пришёл

{

if (attentionCame) // Если сигнал Внимание уже приходил

{

if (frameFromArbiter == ADDRESS) // И пришедший байт равен адресу микроконтроллера

{

AddressCameFromArbiter = true; // Запоминаем, что адрес пришёл

}

attentionCame = false;

}

if (frameFromArbiter == ATTENTION) // Если пришёл байт равный сигналу Внимание

{

attentionCame = true; // Запоминаем, что приходил сигнал Внимание

}

frameCameFromArbiter = false; // Записываем, что мы уже обработали пришедший байт

}

}

// Посылаем параллельно байт Абоненту

void SendFrameToAbonent (byte sendFrame)

{

static bool C1Came = false;

if (C1) // Если пришёл сигнал С1,{

C1Came = true; // запоминаем что сигнал С1 приходил

}

if (C1Came) // Если сигнал С1 приходил

{

PORTB = sendFrame; // Выдаём на выводы порта B байт

}

if (! C1 && C1Came) // Если сигнал С1 ушёл и приходил

{

frameToAbonentWasSent = true; // Запоминаем что байт был отослан

C1Came = false;

}

}

// Посылаем Абоненту запрос о его состоянии

void SendToAbonentRequestAboutAbonentState ()

{

DDRB = 0xFF; // Указываем микроконтроллеру настроить все выводы порта B на вывод информации

SendFrameToAbonent (READY); // Посылаем байт ГОТОВ Абоненту

if (frameToAbonentWasSent) // Если байт был послан

{

requestToAbonentWasSent = true; // Запоминаем, что запрос Абоненту был послан

}

}

// Получаем от Абонента его состояние

void ReceiveFromAbonentAbonentState ()

{

DDRB = 0x00; // Указываем микроконтроллеру настроить все выводы порта B на приём информации

static bool C1Came = false;

if (C1) // Если пришёл сигнал С1,{

C1Came = true; // запоминаем что сигнал С1 приходил

}

if (C1Came) // Если сигнал С1 приходил

{

abonentState = PINA; // Выдаём на выводы порта B байт

}

if (! C1 && C1Came) // Если сигнал С1 ушёл и приходил

{

abonentStateReceived = true; // Запоминаем что получили состояние Абонента

C1Came = false;

}

}

// Посылаем Арбитру состояние Абонента

void SendToArbiterAbonentState (byte frame)

{

DDRA = 0x04;

static int C2Count = 0;

static bool C1Came = false;

static bool C2Out = true;

if (C1) // Если пришёл сигнал С1,{

C1Came = true; // запоминаем что сигнал С1 приходил

}

if (C1Came) // Если сигнал С1 приходил

{

if (C2 && C2Out) // Если сигнал С2 пришёл,

{

DATAOUT ( (frame & (1 << C2Count)) >> C2Count); // Записываем очередной бит на информационную линию

C2Count++; // Считаем номер пришёдшего сигнала С2

C2Out = false; // Запоминаем, что С2 пришёл, но ещё не уходил

}

if (C2Count == 8)

{

C2Count = 0; // Обнуляем количество сигналов С2

C1Came = false; // Запоминаем что пришёдший после С1 байт уже обработан, ждём следующий С1

C2Out = true;

stateOfAbonentWasSentToArbiter = true; // Запоминаем, что состояние Абонента было отослано Арбитру

}

if (! C2) { // Если сигнал С2 ушёл

C2Out = true; // Запоминаем, что сигнал С2 ушёл

}

}

}

// Получаем информационное сообщение от Арбитра и пересылаем Абоненту

void ReceiveDataMessageFromArbiterAndReferToAbonent ()

{

DDRA = 0x00; // Указываем микроконтроллеру настроить все выводы на приём информации

ReceiveFrameFromArbiter (); // Получить байт от Арбитра

if (frameCameFromArbiter) // Если байт от АРбитра пришёл

{

SendFrameToAbonent (frameFromArbiter); // Посылаем байт Абоненту

frameCameFromArbiter = false; // Запоминаем, что мы обработали байт, пришедший от Арбитра

if (frameFromArbiter == END_OF_TRANSFER_SEQUENCE) // Если пришёдший байт совпадает с символом КОНЕЦ ПЕРЕДАЧИ

{

DataMessageRefered = true; // Запоминаем что информационное сообщение переслали

}

}

}

int main (void)

{

while (1) // Запускаем бесконечный цикл

{

if (! AddressCameFromArbiter) // Если адрес МК ещё не пришёл от Арбитра,

{

WaitAddressFromArbiter (); // ждём

}

if (AddressCameFromArbiter) // Если от Арбитра пришёл адрес МК

{

SendToAbonentRequestAboutAbonentState (); // посылаем Абоненту запрос о его состоянии

if (requestToAbonentWasSent) // Если запрос о состоянии Абонента был послан

{

ReceiveFromAbonentAbonentState (); // получаем ответ

}

if (abonentStateReceived) // Если получили состояние Абонента,

{

if (abonentState == END_OF_WORK) // и состояние равно КОНЕЦ РАБОТЫ,

{

SendToArbiterAbonentState (READY); // посылаем Арбитру сигнал ГОТОВ

if (stateOfAbonentWasSentToArbiter) // Если состояние Абонента отослалось Арбитру

{

ReceiveDataMessageFromArbiterAndReferToAbonent (); // Начинаем принимать информационное сообщение от Арбитра и пересылать его Абоненту

if (DataMessageRefered) // Если информационное сообщение было отослано

{

SendToAbonentRequestAboutAbonentState (); // Посылаем Абоненту запрос о его состоянии

if (requestToAbonentWasSent) // Если запрос о состоянии Абонента был послан,

{

ReceiveFromAbonentAbonentState (); // ждём ответ

}

if (abonentStateReceived) // Если получили состояние Абонента,

{

if (abonentState == TRANSFER_ERROR) // Если состояние Абонента равно ОШИБКА ПЕРЕДАЧИ

{SendToArbiterAbonentState (REPEAT_TRANSFER); // Посылаем Арбитру сигнал ПОВТОРИТЬ ПЕРЕДАЧУ

}

else // Если ошибки не произошло

{

SendToArbiterAbonentState (END_OF_RECEIVE); // Посылаем Арбитру сигнал КОНЕЦ ПРИЁМА

}

}

}

}

}

else // Если состояние не равно КОНЕЦ РАБОТЫ

{

SendToArbiterAbonentState (BUSY); // Посылаем Арбитру, что Абонент ЗАНЯТ

}

}

}

}

}

Размещено на Allbest.ru


Подобные документы

  • Проектирование цифровой линии передачи между пунктами Гомель и Калинковичи. Выбор системы передачи для осуществления связи. Структурная схема аппаратуры ИКМ-120. Параметры системы передачи, трассы кабельной линии. Расчет схемы организации связи.

    курсовая работа [129,2 K], добавлен 08.05.2012

  • Схема строительства волоконно-оптической линии связи (ВОЛС) с использованием подвески оптического кабеля на осветительных опорах. Особенности организации по ВОЛС каналов коммерческой связи. Расчет длины регенерационных участков по трассе линии связи.

    курсовая работа [778,1 K], добавлен 29.12.2014

  • Измерительные приборы в волоконно-оптической линии связи, выбор оборудования для их монтажа. Схема организации связи и характеристика промежуточных и конечных пунктов, трасса кабельной линии передачи. Характеристика волоконно-оптической системы передачи.

    дипломная работа [6,6 M], добавлен 20.06.2016

  • Первичная сеть, включающая линии передачи и соответствующие узлы связи, образующие магистральную, дорожную и отделенческую сеть связи как основа железнодорожной связи. Конструкция и характеристика оптических кабелей связи, особенности ее строительства.

    курсовая работа [428,0 K], добавлен 21.10.2014

  • Описание проектируемого участка линии связи. Выбор типов кабеля, систем передачи, размещения цепей по четверкам. Размещение усилительных, регенерационных пунктов и тяговых подстанций на трассе линии связи. Расчет влияний контактной сети переменного тока.

    курсовая работа [2,0 M], добавлен 07.02.2013

  • Состав проекта на строительство линии связи, устройство ее переходов через препятствия по трассе. Выбор типов кабельной магистрали и волоконно-оптической системы передачи. Расчет внешних электромагнитных влияний. Разработка средств связи на перегоне.

    курсовая работа [743,9 K], добавлен 16.02.2013

  • Описание проектируемого участка линии связи. Выбор типов кабеля, систем передачи и размещения цепей по четверкам. Размещение усилительных и регенерационных пунктов на трассе линии связи. Защита кабеля и аппаратуры связи от опасных и мешающих влияний.

    курсовая работа [148,5 K], добавлен 06.02.2013

  • Разработка локальной сети передачи данных с выходом в Интернет для небольшого района города. Определение топологии сети связи. Проверка возможности реализации линий связи на медном проводнике трех категорий. Расчет поляризационной модовой дисперсии.

    курсовая работа [733,1 K], добавлен 19.10.2014

  • Основные этапы проектирования цифровой линии связи. Реконструкция межстанционной связи, варианты ее организации. Стратегии цифровизации сетей: наложение и острова. "Радиальная" схема организации межстанционной связи. Схема "кольцо", комбинированная схема.

    курсовая работа [785,2 K], добавлен 08.04.2011

  • Разработка принципиальной схемы и описание работы контроллера клавиатуры/дисплея КР580ВД79. Схема сопряжения микроконтроллера с фотоимпульсным датчиком. Расчет потребляемого тока от источника питания. Блок-схема программы вывода информации на индикацию.

    курсовая работа [736,9 K], добавлен 18.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.