Принципы построения многоуровневых сетей

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

1. Техническое задание

Техническое задание (ТЗ) на проектирование должно содержать исчерпывающую и однозначную информацию о требованиях, предъявляемых к проекту. Техническое задание является результатом внешнего проектирования и являет собой объемный документ, в котором на естественном языке описана словесная модель проектируемой системы и требования к ней. Несмотря на строгость и точность формулировок ТЗ не дает однозначного описания объекта проектирования и не позволяет непосредственно переходить от описания функционирования системы к ее техническому воплощению.

1.1 Назначение устройства

Требуется написать программу для построения многоуровневой модели сети на платформе лабораторного макета с микроконтроллером (МК) Аtmega128. Обязательными объектами такой сети являются: компьютер, сеть, сервер, коммутатор и здание. Основные функции — построение модели многоуровневых связных сетей и подсетей с помощью Atmega128.

Входные/выходные параметры

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

2. Техническое предложение

2.1 Общий алгоритм решения задачи

Общий алгоритм решения задачи, описанной в техническом задании, приведен на рисунке 2. 1:

Рисунок 2.1 — Общий алгоритм решения задачи

2.2 Выбор элементной базы

Требуемое устройство должно содержать следующие блоки:

ѕ Микроконтроллер ATmega128;

ѕ ЖК-дисплей с разрешением не меньше 128×64 пикселя;

ѕ Кнопки — 12 штук, организованные в матрицу 3×4;

ѕ Память — EEPROM 8192×8 бит.

3. Эскизный проект

3.1 Описание архитектуры проекта и выбранных блоков

Целью данного проекта является написание программы для построения многоуровневой модели сети на платформе лабораторного макета с МК Atmega128. Необходимыми блоками для реализации этой задачи являются: ЖК-дисплей, память, МК и блок кнопок. Блок-схема лабораторного макета представлена на рисунке 3. 1:

Рисунок 3.1 — Блок схема лабораторного макета

Сплошным контуром выделена часть устройства, которая используется программой, а именно:

ѕ Блок кнопок (БК) — состоит из 12 кнопок организованных в матрицу 3×4 для подключения которой требуется 3+4 (7) ЛВВ;

ѕ Блок Ж К дисплея (БЖКД) — содержит дисплей управляемый через шину I2C и подключаемый через две ЛВВ;

ѕ Блок памяти (БПам) — содержит микросхему EEPROM памяти подключенную с помощью шины I2C. Особенностью шины является возможность одновременного подключения нескольких устройств к одной и той же шине;

ѕ Блок программатора (БПрог) — содержит в себе JTAG-совместимый программатор и подключается к МК через JTAG интерфейс предусмотренный в МК;

ѕ USB-RS232 преобразователь это специальная микросхема которая служит мостом между шинами USB и RS232.

4. Технический проект

4.1 Характеристики основных частей лабораторного макета

Микроконтроллер (ATmega128) — 8-разрядный AVR-микроконтроллер с внутрисистемной программируемой флэш-памятью емкостью 128 кбайт построенный на RISC-архитектуре (133 мощных инструкций, 32 8-разрядных регистров общего назначения, регистры управления встроенной периферией, производительность до 16 млн. операций в секунду при тактовой частоте 16 МГц). Интерфейс JTAG предоставляет возможности программирования флэш-памяти, ЭСППЗУ, предоставляет множество функций встроенной отладки. Рабочее напряжение от 4.5 до 5. 5 В.

Память (EEPROM) — используется микросхема AT24C64 фирмы Atmel имеющая 8192×8 бит памяти и работающая на шине I2C.

ЖК-дисплей (COG ЖК индикатор TIC149 фирмы Ampire) — имеет разрешение 133×64 и содержит кроме ЖК матрицы драйвер PCF8535 (управляемый по I2C шине) фирмы Philips Semiconductors.

В качестве кнопок используются тактовые кнопки с размером 6×6×8мм.

JTAG-совместимый программатор — использует МК фирмы Atmel ATmega16, в который заранее записана прошивка, позволяющая программировать основной микроконтроллер.

диаграмма микросхема интерфейс

5. Реализация

5.1 Интегрированная среда разработки

После длительного анализа различных сред и анализа требования проекта была выбрана интегрированная среда разработки IAR Embedded Workbench (рисунок 5. 1), которая представляет собой очень мощный и удобный инструмент программирования микроконтроллеров фирмы Atmel семейства AVR, включая Mega. Это отладочная среда, которая работает под управлением Windows 95, 98, NT. В нее входят компилятор с языка Си, ассемблер, компоновщик, и отладчик, при этом возможно взаимодействие с внешними программами типа AVR Studio. Встроенный редактор специально настроен на синтаксис языка Си, а дополнительные утилиты и хорошая встроенная система помощи дополнительно облегчают написание программ.

Рисунок 5.1 — Внешний вид IAR Embedded Workbench

Одним из главных достоинств среды разрыбоки IAR Embedded Workbench является один из лучших компиляторов Си по эффективности кода и множество алгоритмов оптимизации предназначенных специально для AVR-микроконтроллеров (что является очень важным параметром при работе с малым объемом ресурсов памяти). Также к плюсам данной интегрированной среды разработки можно отнести широкие возможности для симуляции и отладки проекта:

ѕ Отладка в кодах Си и ассемблера;

ѕ Различные точки останова;

ѕ Язык описания периферии и операций ввода/вывода;

ѕ Просмотр областей CODE, DATA, EEPROM и регистров ввода/вывода;

ѕ Обработка прерываний с предсказанием;

ѕ Контроль любых переменных и стека;

ѕ Комплексные типы данных.

5.2 Настройки проекта

Для соединения программной части с технической и реализации максимальной производительности необходимо правильно настроить проект.

Выбираем тип микроконтроллера (рисунок 5. 2).

Рисунок 5.2 — Выбор микроконтроллера

Выделяем необходимый объем памяти стека — для хранения до десяти холстов (таблиц размещения элементов). Необходимы нестойки наведены на рисунке 5. 3:

Рисунок 5.3 — Определения объема стека

В связи с малым количеством памяти — в настройках компилятора выбираем максимальный уровень оптимизации, что наглядно показано на рисунке 5. 4:

Рисунок 5.4 — Выбор максимальной оптимизации компилятора

Выбираем программатор JTAGICE для возможности программирования флэш-памяти (рисунок 5. 5).

Рисунок 5.5 — Выбор программатора

В настройках программатора JTAGICE выбираем порт, через который будет осуществляться соединение с компьютером (рисунок 5. 6).

Рисунок 5.6 — Выбор порта компьютера для соединения с программатором

5.3 Меню и блок кнопок

Меню — представляет собой объект класса Menu, который отвечает за предоставления выбора активного элемента. Вызов меню осуществляется в любой момент нажатием на кнопку 10, при этом выводится приглашение выбрать активный элемент. Доступными элементами меню являются: компьютер (computer), сеть (net), здание (building), сервер (server), линия (line), коммутатор (switch), курсор (pointer).

Все операции в программе делятся на три типа: opt_menu, opt_navigation и opt_line; которые хранятся в файле operationType.h. Первый из них переключает раскладку клавиш в режим «Меню» — каждая клавиша выступает номером элемента меню. По нажатию на определенную клавишу создается выбранный элемент и раскладка клавиш переход в режим «Навигация» (второй тип операций). В этом режиме клавиши служат курсором, который помогает перемещать объект в заданное место. Третий тип операций предназначен для рисования соединительной линии.

Для обработки нажатий клавиш создан метод Timer3_overflow являющийся обработчиком по прерыванию. При каждом входе в функцию идет проверка каждой стоки и каждого символа на нажатие. В соответствии от выбранного режима клавиатуры осуществляется его обработка.

5.4 Система классов

Программа написана на языке Си с использованием таких известных технологий как объектно-ориентированное программирование (ООП) и паттерны проектирования. Часть программы написана с помощью классов, а часть с помощью процедур. Все классы можно условно поделить на три категории: классы для отображения сетевых объектов, классы для управления системой и классы для взаимодействия с выбранным устройством.

5.4.1 Классы взаимодействия с выбранным устройством

Рассмотрим классы взаимодействия с выбранным устройством на примере класса TIC149 (рисунок 5. 7), который предоставляет основные функции для работы с ЖК-дисплеем:

ѕ Инициализация (Init);

ѕ Очистка ЖК-дисплея (Clear);

ѕ Вывод символов на ЖК-дисплей (Print) — параметром передаем указатель на выводимою строку;

ѕ Установка активного курсора (SetStartPoint) — устанавливает начальную точку для прорисовки, параметром является шестнадцатеричный символ отвечающий за ось абсцисс или за ось ординат;

ѕ Установка активного холста (SetHolst) — установка таблицы отвечающей за расположение элементов на определенном уровне. Параметром передается объект класса Holst. Концепция холста и управления уровнями вложенности будет рассмотрена ниже;

ѕ Получение активного холста (GetHolst) — данная функция возвращает указатель на текущий активный холст;

ѕ Изменение расположения активного курсора на одну клетку вверх (goUp);

ѕ Изменение расположения активного курсора на одну клетку вправо (goRight);

ѕ Изменение расположения активного курсора на одну клетку вниз (goDown);

ѕ Изменение расположения активного курсора на одну клетку влево (goLeft).

Рисунок 5.7 — UML диаграмма класса TIC149

Данный класс построен с использованием паттерна одиночка «Singleton» — который обеспечивает единственность объекта класса в которым он используется. Для реализации данного паттерна в защищенной части класса был создан статический объект с типом этого же класса и определен конструктор, а в открытую часть был добавлен статический метод GetDisplay, который по запросу всегда возвращает указатель на единственный объект этого класса.

Пример получения объекта дисплея:

TIC149* display = TIC149: :GetDisplay ();

Рассмотрим более подробно некоторые из методов класса TIC149:

Инициализация (Init) — с помощью функций TWI (функции работы с шиной I2C) осуществляется задание основных настроек ЖК-дисплея — установка режима отображения, включение/выключение зеркал, установка умножителя частоты, яркости, температуры, начальных точек по оси абсцисс и оси ординат.

Очистка экрана (Clear) — с помощью функций TWI сначала задается первая точка заполнения и в цикле 1064 раза подается сигнал 0×00.

Вывод символов на ЖК-дисплей (Print) — данный метод после задания первой точки заполнения в цикле выводит каждый символ. Для этого в массиве font (массив с шестнадцатеричным указанием каждого из байтов определенного символа) указывается смещение относительно первого символа.

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

for (j=0; j< 6; j++)

twi_write (font[(*(string+i))*6 + j]);

Функция прорисовки (Draw) — вызывает два метода класса Holst — для установки координат активного элемента или курсора и для подачи сигнала на прорисовку холста.

Функции управления движением активного курсора (goUp, goRight, goDown, goLeft). Весь экран разделен на клетки — 8 по высоте и 10 по ширине.

Разделение экрана на клетки с шестнадцатеричным обозначением каждого из адресов изображено на рисунке 5. 8:

Рисунок 5.8 — Адресация в ЖК-дисплее

5.4.2 Классы управления системой

К классу управления системой нужно отнести класс Holst — предназначенный для хранения и управления всеми элементами сети и подсети. Общая структура класса изображена на рисунке 5. 9:

Рисунок 5.9 — UML диаграмма классов управления содержимым ЖК-дисплея

Рассмотрение структуры классов управления содержимым ЖК-дисплея начнем с рассмотрения класса HolstTable — предназначенного для хранения и обработки таблицы типов элементов расположенных на определенном уровне. Он хранит матрицу 10×8 каждый элемент который определен типом char и занимает ровно 1 байт в памяти — это было сделано для экономии памяти устройства. Также он поддерживает следующие методы:

ѕ GetElement — получение типа сетевого объекта по его координатам заданных в десятеричной системе;

ѕ SetElement — размещение элемента на таблице. Параметрами метода выступают координаты размещаемого объекта и его тип;

ѕ GetCurrentID — получение текущего идентификатора таблицы (необходимо для реализации вложенности);

ѕ SetCurrentID — задание текущего идентификатора таблицы (вызывается холстом при создании новой подсети)

Класс Holst содержит множество методов для управления содержимым ЖК-дисплея большинство из которых взаимодействуют с объектами класса HolstTable. Рассмотрим каждый из методов класса Holst подробно:

ѕ SetActiveElement — установка активного элемента, т. е. элемента который в текущий момент можно перемещать или размещать на матрице. Параметром передается указатель на Element, что означает, что мы можем передавать в данный метод любой из сетевых объектов;

ѕ SetActiveElementCoord — установка текущих координат активного элемента;

ѕ GetActiveElementX — метод возвращает значение координаты текущего элемента по оси абсцисс;

ѕ GetActiveElementY — метод возвращает значение координаты текущего элемента по оси ординат;

ѕ GetHolstElement — метод возвращает тип элемента расположенного по заданным координатам. При этом используется вызов метода поиска сетевого элемента по координатам у объекта класса HolstTable;

ѕ GetTypeOfActiveElement — получения типа активного элемента;

ѕ AddActiveElementOnHolst — метод добавляет активный элемент по текущим координатам на холст, использую вызов метода записи в объекта класса HolstTable;

ѕ SetCurrentID — установка идентификатора текущей таблицы;

ѕ GetCurrentID — получение идентификатора текущей таблицы;

ѕ SetBuilding — установка бинарного параметра указывающего на уровень сети (верхний уровень или подуровень);

ѕ FindBuilding — определение номера здания по его текущим координатам, параметром кроме координат объекта, также передается номер уровня;

ѕ FindParent — определение идентификатора родительского уровня. Параметром передается идентификатор текущего уровня;

ѕ GetHolst — получение таблицы сетевых элементов. Метод возвращает обьект типа HolstTable. Используется для сохранения текущего холста при переходе на новый уровень;

ѕ SetHolst — установка таблицы сетевых элементов. Используется для перехода по уровням сети;

ѕ Draw — перерисовка холста. При проходе в цикле таблицы холста проверяется наличие элемента в ячейке, если объект обнаружен — вызывается виртуальный метод GetType — который возвращает тип найденного объекта. Далее создаем объект заданного типа и вызываем у него метод Draw, после чего удаляем созданный объект. Данная технология позволила сэкономить огромное количество памяти, что является жизненно необходимым требованием для бесперебойной и правильной работы программы. Также эта технология дала возможность сделать вложенность сетей до девятого уровня.

5.4.3 Классы отображения сетевых объектов

Родительским классом для всех сетевых объектов является класс Element, который содержит в себе две виртуальные функции — функцию прорисовки элемента и функцию получения типа производного класса. Все классы сетевых объектов переопределяют эти два метода, что наглядно продемонстрировано на рисунке 5. 10:

Рисунок 5. 10 — UML диаграмма связей сетевых объектов

Функция для получения типа (GetType) — возвращает один шестнадцатеричный символ, который соответствует текущему типу обьекта. Все типы хранятся в файле elementType. h в форме препроцессорных директив define. Типы сетевых элементов с их описанием наведены в таблице 5. 1:

Таблица 5.1 — Типы сетевых элементов

Обозначение

Символ

Описание

t_computer

1

Компьютер

t_net

2

Сеть

Обозначение

Символ

Описание

t_building

3

Здание

t_server

4

Сервер

t_switch

5

Коммутатор

t_out

9

Объект «Выход» из подсети (здания)

t_pointer

6

Указатель

lt_fpoint

11

Указатель для определения начальной точки соединительной линии

lt_lpoint

12

Указатель на определение последней точки соединительной линии

lt_horizontal

13

Горизонтальная линия

lt_vertical

14

Вертикальная линия

lt_left_bottom

15

Угол — с лева вниз

lt_right_bottom

16

Угол — с права вниз

lt_right_top

17

Угол — с права вверх

lt_left_top

18

Угол — с лева вверх

lt_crosswise

19

Пересечение линий «перекресток»

lt_vertical_left

20

Соединительный элемент для трех линий — сверху, снизу и слева

lt_horizontal_bottom

21

Соединительный элемент для трех линий — снизу, слева и справа

lt_vertical_right

22

Соединительный элемент для трех линий — сверху, снизу и справа

lt_horizontal_top

23

Соединительный элемент для трех линий — сверху, слева и справа

Класс Line кроме всего прочего имеет метод SetLineType который задает линии определенное значение — символы с одиннадцатого по двадцать третий из таблицы 5.1. Все типы линии с их шестнадцатеричной матрицей наведены в таблице 5. 2:

Таблица 5.2 — Типы соединительной линии

Обозначение

Изображение

Шестнадцатеричная матрица

lt_fpoint

0x00, 0×00, 0×18, 0×66, 0×42, 0×81, 0×81, 0×42, 0×66, 0×18, 0×00, 0×00

lt_lpoint

0x00, 0×00, 0×00, 0×00, 0×24, 0×18, 0×18, 0×24, 0×00, 0×00, 0×00, 0×00

lt_horizontal

0x08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

lt_vertical

0x00, 0×00, 0×00, 0×00, 0×00, 0xFF, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00

lt_left_bottom

0x08, 0×08, 0×08, 0×08, 0×08, 0xF8, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00

lt_right_bottom

0x00, 0×00, 0×00, 0×00, 0×00, 0xF8, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

lt_right_top

0x00, 0×00, 0×00, 0×00, 0×00, 0x0 °F, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

Обозначение

Изображение

Шестнадцатеричная матрица

lt_left_top

0x08, 0×08, 0×08, 0×08, 0×08, 0x0 °F, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00

lt_crosswise

0x08, 0×08, 0×08, 0×08, 0×08, 0xFF, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

lt_vertical_left

0x08, 0×08, 0×08, 0×08, 0×08, 0xFF, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00

lt_horizontal_bottom

0x08, 0×08, 0×08, 0×08, 0×08, 0xF8, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

lt_vertical_right

0x00, 0×00, 0×00, 0×00, 0×00, 0xFF, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

lt_horizontal_top

0x08, 0×08, 0×08, 0×08, 0×08, 0x0 °F, 0×08, 0×08, 0×08, 0×08, 0×08, 0×08

5.5 Уровни вложенности

Для организации системы вложенности в файле взаимодействия с клавиатурой keyboard. c производится выделение памяти необходимое для десяти уровней вложенности. При размещении на холсте объекта «здание» осуществляется присвоение ему уникального номера подсети. Количество объектов «здание» ограничено десятью элементами, т.к. каждый такой уровень требует большое количество памяти для хранения объектов подсети. Для перехода на подуровень необходимо в режиме «курсор» навести указатель на объект «здание» и нажать на кнопку 5.

Если мы находимся на подуровне — то в левом верхнем углу автоматично создается объект класса out. Он соединяет подуровни и предназначен для перехода на один уровень вверх — по щелчку на нем.

Алгоритм перехода по подуровням изображен на рисунке 5. 11:

Рисунок 5. 11 — Алгоритм перехода по подуровням

5.6 Инструкция пользователя

1. Подключить устройство к компьютеру с помощью USB кабеля

2. Выбрать номер нужного объекта с меню и нажать его на клавиатуре.

Размещение клавиш на клавиатуре представлено на рисунке 5. 12:

Рисунок 5. 12 — Раскладка клавиатуры в режиме «Меню»

3 На экране появится выбранный элемент. Теперь нужно переместить выбранный объект в определенное место на дисплее, для этого пользуемся раскладкой клавиатуры в режиме «Навигация», изображенной на рисунке 5. 13:

Рисунок 5. 13 — Раскладка клавиатуры в режиме «Навигация»

3. Нажимаем клавишу Enter для размещения объекта на холсте.

4. Для перехода в подсеть необходимо в меню выбрать курсор, навести его на объект «здание» и нажать Enter.

5. Для выхода из подсети необходимо в меню выбрать курсов, навести его на объект «выход» и нажать Enter.

Выводы

Результатом выполнения комплексного курсового проекта является специализированная программа (прошивка) для лабораторного макета на микроконтроллере Atmega128, которая выполняет все поставленные перед ей требования из технического задания. Разработка прошивки выполнена в среде IAR Embedded Workbench.

Для достижения поставленной цели в проекте были выполнены следующие задачи:

— изучение среды IAR Embedded Workbench;

— изучение принципов построения многоуровневых сетей;

— изучение документации на микросхемы;

— написание прошивки для микропроцессоров Atmel AVR;

— изучение принципов программирования под МК;

— написание прошивки;

— программирование микросхемы;

— отладка и тестирование прошивки с помощью интерфейса JTAGICE.

Источники

6. ДСТУ 3008−95. Державний Стандарт України. Документація. Звіти у сфері науки і техніки.

7. Гулиус В. А., Лобода В. Г., Степанов В. П., Цуканов В. Ю. Методы автоматизированного проектирования специализированных микропроцессорных устройств / Под общ. ред. В. Г. Лободы. — Харьков: ХТУРЭ, 2001. — 227 с.

8. Белова Н. В., Коряк С. Ф., Лобода В. Г. Основы построения ориентированных ЭВМ и систем / Под общ. ред. В. Г. Лободы. — Харьков: ООО «Компания СМИТ», 2007. — 148 с.

9. Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Олифер. — СПб: Издательство «Питер», 2006. — 972 с.: ил.

10. Джеймс Челлис, Чарльз Перкинс и Мэттью Стриб. Основы построения сетей. Учебное руководство для специалистов MCSE. — СПб: Издательство «Лори», 1999. — 326 с.: ил.

11. Data sheet I2C BUS — PCF8535 65×133 pixel matrix driver: «Philips Semiconductors», 2001. — 55 p.

Приложение A

Блок-схема дисплея TIC149

Рисунок А1 — Блок-схема дисплея TIC149

Приложение Б

Временная диаграмма формирования знака на дисплее TIC149

по протоколу PCF8535

Рисунок Б1 — Временная диаграмма формирования знака на дисплее TIC149

Приложение В

Таблица задания настроек дисплея

Рисунок В1 — Таблица задания настроек дисплея

ПоказатьСвернуть
Заполнить форму текущей работой