Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПССА КП-18.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.24 Mб
Скачать
  1. Программное обеспечение

В качестве языка программирования был выбран язык Си, который значительно упрощает процесс написания программы, но при этом увеличиваются требуемые объемы программного кода и оперативной памяти, что может привести к снижению быстродействия МПУ.

Для отладки и разработки программного обеспечения использовалась среда CodeVision AVR. Преимуществами этой среды является то, что здесь содержится генератор начального кода программы, позволяющего произвести инициализацию периферийных устройств, что значительно ускоряет написание программы, она не слишком сложна для самостоятельного освоения, поддерживает все многочисленное семейство микроконтроллеров AVR (включая чипы с ядром ATxmega), формирует ёмкий и результативный программный код [7]. Помимо компилирования среда разработки способна записать созданную программу в память микроконтроллера. Модуль прошивки может взаимодействовать со всеми популярными программаторами (AVR910, STK200/300 и многими другими).

Результат работы в программе CodeVision AVR может быть представлен в виде HEX, ROM или BIN-файла для прямой прошивки микроконтроллера путем использования стороннего программатора. Кроме этого, программа может быть передана в формате COF (файл отладчика) или HEX.

В качестве инструментального средства для разработки и отладки программного обеспечения ОМК был выбран Proteus 7.1 Professional. Он поддерживает работу с языком Си, предоставляет возможность работы в многопроцессорном режиме, содержит обширную библиотеку ОМК и внешних компонентов, имеет развитый интерфейс пользователя, а разработка проекта включает создание принципиальной электрической схемы.

Листинг программы приведен в приложении В.

  1. Алгоритм тестирования

Для проверки работоспособности параллельных портов воспользуемся алгоритмом «Шахматная доска». На выходы порта последовательно запишем код 55h и считаем его. В случае несоответствия формируется код ошибки и фиксируются адреса неисправных ячеек. Затем тест повторяем для инверсного значения (0ААh). Поскольку для вывода нам требуются порты B и C, протестируем их с помощью данного алгоритма:

PORTB = 0x55;

PORTC = 0x55;

for(t=0; t<800; t++);

PORTB = 0xAA;

PORTC = 0xAA;

for(t=0; t<800; t++);

PORTB = 0x00;

PORTC = 0x00;

В результате на выходах параллельных портов последовательно появятся данные коды, представляющие собой чередование 0 и 1.

Далее протестируем порт D на чтение. Для этого выведем его значения на порт B.

for(t=0; t<800; t++);

PORTB = PIND;

for(t=0; t<800; t++);

PORTB = 0x00;

for(t=0; t<800; t++);

В результате данные, записанные в порте D, совпадут с данными, выведенными на порт B.

Затем проверим корректность работы интерфейса SPI. Для этого вместо ведомого устройства подключим другие порты этого же ОМК и будем записывать и читать значения.

PORTB.2=0;

spi((unsigned char)0x6);

PORTB.2=1;

delay_ms(100);

PORTB.2=0;

spi((unsigned char)0x2);

spi((unsigned char)0x0);

PORTB.1=0;

byte=(unsigned char*)&address;

PORTB.1=1;

spi((unsigned char)byte[1]);

spi((unsigned char)byte[0]);

PORTB.3=1;

byte=(unsigned char*)&mileage;

PORTB.3=0;

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

{

spi(0x55);

}

PORTB.2=0;

byte=(unsigned char*)&fuel;

PORTB.2=1;

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

{

spi(0xAA);

}

PORTB.2=1;

address+=0x1;

Наконец, проверим работоспособность внешней памяти. Для этого воспользуемся тем же алгоритмом «Шахматная доска». Во внешнюю память последовательно запишем код 55h и считаем его. В случае несоответствия формируется код ошибки и фиксируются адреса неисправных ячеек. Затем тест повторяем для инверсного значения (0ААh):

while(address <MEMORY_CAPACITY)

{

PORTB.2=0; // Переключаемся на ведомую память

spi((unsigned char)0x6);

PORTB.2=1;

delay_ms(100); // Ждем

PORTB.2=0;

spi((unsigned char)0x2); // Команда "запись"

spi((unsigned char)0x0);

spi((unsigned char)byte[1]);

spi((unsigned char)byte[0]);

spi(0x55);

PORTB.2=1; // Делаем ведомую память не активной

PORTB.2=0; // Переключаемся на ведомую память

spi((unsigned char)0x6);

PORTB.2=1;

delay_ms(100); // Ждем

PORTB.2=0;

spi((unsigned char)0x3); // Команда "чтение"

spi((unsigned char)0x0);

spi((unsigned char)byte[1]);

spi((unsigned char)byte[0]);

spi(0xAA);

PORTB.2=1; // Делаем ведомую память не активной

address+=0x8; // Переходим на следующий адрес

}

Наконец, проверим правильность работы алгоритма. Результатом работы данной системы является подсчёт числа импульсов и измерение входной частоты. В реальных системах для проверки корректности работы датчиков используются их резервные копии. В данной системе вместо них используем виртуальные приборы. Проверим значения числа импульсов и частоты, просто выведя на ЖКИ и сравнив со значениями виртуальных приборов (см. рисунок 7). Как мы видим, показания совпадают, значит, система работает верно.

  1. Результат работы системы при 3-х импульсах и частоте 150 Гц

Таким образом, на тестовых примерах мы убедились, что программа корректно выполняет поставленную задачу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]