- •Уточнение технического задания
- •Разработка структурной схемы
- •Выбор и обоснование элементной базы
- •Выбор расходомера
- •Выбор беспроводного интерфейса передачи данных
- •Выбор оптрона
- •Выбор микроконтроллера
- •Выбор преобразователей напряжения
- •Разработка функциональной схемы
- •Схема питания
- •Схема включения микроконтроллера
- •Схема сопряжения с интерфейсом передачи данных
- •Схема сопряжения с датчиками
- •Разработка алгоритма
- •Разработка программы
- •Спецификация протокола передачи
- •Получение значения счетчика поданного топлива
- •Получение значения счетчика возвращенного топлива
- •Получение значения разности счетчиков топлива
Инв. № подл. Подп. и дата Взам. инв. № Инв. № дубл. Подп. и дата
5 РАЗРАБОТКА АЛГОРИТМА
Алгоритм функционирования программы (рисунок 18) включает в себя
следующие основные блоки:
–включение – инициализация регистров микроконтроллера и переменных программы. Включается UART на прием и передачу установкой битов RXEN и TXEN регистра UCSRB. Скорость приема-передачи устанавливается регистром UBRR. Разрешаются внешние прерывания INT0 и INT1 установкой битов INTF0 и INTF1 регистра GICR по спадающему фронту установкой битов ISC01 и ISC11 и сбросом битов ISC00 и ISC10 регистра MCUCR. Установка значения переменной счетчика в 0;
–получение пакета – при получении байта элементы массива пакета сдвигаются на одну позицию вправо. Последнему элементу массива присваивается значение полученного байта. Пакеты отправляются с бортового ПК через определенный интервал времени;
–проверка пакета – проверка значения заголовка пакета, а также проверка контрольной суммы пакета;
–исполнение команды – если проверка пройдена удачно, то выполняется команда, номер которой пришел в пакете;
–формирование ответа – после выполнения команды формируется пакетответ, для которого также вычисляется контрольная сумма;
–отправка ответа – побайтная отправка сформированного пакета-ответа.
|
|
|
|
|
Устройство измерения расхода |
Лист |
|
|
|
|
|
||
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
топлива |
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Копировал |
Формат А4 |
Инв. № подл. Подп. и дата Взам. инв. № Инв. № дубл. Подп. и дата
Рисунок 18 – Алгоритм работы
|
|
|
|
|
Устройство измерения расхода |
Лист |
|
|
|
|
|
||
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
топлива |
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Копировал |
Формат А4 |
Инв. № подл. Подп. и дата Взам. инв. № Инв. № дубл. Подп. и дата
6 РАЗРАБОТКА ПРОГРАММЫ
Для разработки программы был выбран язык C, так как программирование на Ассемблере очень трудоемко и ориентировано на конкретную архитектуру ЭВМ. Язык C, как язык программирования высокого уровня, свободен от этих недостатков. Он не связан с конкретной архитектурой ЭВМ (электронно вычислительная машина). Компиляторы языка функционируют на разных по архитектуре ЭВМ. Технология подготовки и отладки программ на C характерна для языков высокого уровня (Fortran, Pascal, Ada). В то же время ему присущи многие черты языков “низкого уровня” (доступ к адресам объектов и работа с ними, работа с битовыми величинами), позволяющие организовать эффективное управление устройствами и программами. По объему занимаемой памяти и времени выполнения программы на C близки программам на Ассемблере. В определенном смысле C занимает промежуточное положение между языками высокого уровня и машинно-ориентированными языками.
Впрограмме имеется 3 глобальных переменных:
–unsigned short count_0 – счетчик внешних прерываний от INT0;
–unsigned short count_1 – счетчик внешних прерываний от INT1;
–char packet[6] – массив байтов для получения и отправки пакетов;
15 функций:
–char getchar(void) – получение байта через UART;
–void putchar(char c) – отправка байта через UART;
–void initUART(void) – инициализация и настройка UART;
–void initInterrupt(void) – инициализация и настройка внешних прерываний;
–void int0(void) – функция для внешнего прерывания от INT0;
–void int1(void) – функция для внешнего прерывания от INT1;
–unsigned short crc16(const char * msg, unsigned short msgSize) – расчет контрольной суммы для массива байтов;
|
|
|
|
|
Устройство измерения расхода |
Лист |
|
|
|
|
|
||
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
топлива |
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Копировал |
Формат А4 |
Инв. № подл. Подп. и дата Взам. инв. № Инв. № дубл. Подп. и дата
–unsigned char checkCRC(const char * msg) – проверка контрольной суммы пакета;
–void createPacket1() – формирование пакета-ответа со значением счетчика внешних прерываний от INT0;
–void createPacket2() – формирование пакета-ответа со значением счетчика внешних прерываний от INT1;
–void createPacket3() – формирование пакета-ответа со значением разности счетчиков внешних прерываний от INT0 и INT1;
–void analyzePacket() – анализ полученного пакета от ПК;
–void sendPacket() – отправка пакета-ответа на ПК;
–void receivePacket() – чтение пакета от ПК;
–void main(void) – главная функция программы.
|
|
|
|
|
Устройство измерения расхода |
Лист |
|
|
|
|
|
||
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
топлива |
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Копировал |
Формат А4 |