Обработка аналоговых сигналов на основе МК C8051F064

Автор: Пользователь скрыл имя, 13 Декабря 2012 в 09:08, курсовая работа

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

Цель курсовой работы – получение навыков программирования аппаратных комплексов, включающих взаимодействующие между собой различные 8- или 32-разрядные микроконтроллерные системы (МК-системы) и персональные компьютеры (РС), на языках Ассемблеров, С – для микроконтроллеров (МК) и языке С++ для РС с платформой Windows.

Содержание

1. Постановка задачи 6
1.1. Стандартное задание 6
1.2. Индивидуальное задание 6
2. Техническое задание 7
3. Описание аппаратных и программных средств лабораторного комплекса 8
3.1. Структура аппаратных средств 8
3.1.1. Структурная схема лабораторного комплекса 8
3.1.2. Плата МК – системы 9
3.1.2.1. Конфигурируемые узлы МК C8051F064 11
3.1.2.2. Внешняя память XRAM 16
3.1.2.3. Входные усилители 17
3.1.2.4. Микросхема моста UART-USB 18
3.1.2.5. Сопряжение платы с PC 20
3.1.2.6. Питание платы 21
3.1.3. Требования к PC 21
3.1.4. ОСЦИГЕН 21
3.2. Перечень программных средств лабораторного комплекса 22
3.2.1. Средства программирования и отладки МК-системы 22
3.2.1.1. Интегрированная среда разработки фирмы SiLabs IDE 2.0 22
3.2.1.2. Ассемблер, компилятор и линкер интегрированной среды разработки Keil 23
3.2.2. Средства разработки Windows-приложений 24
3.2.2.1. Среда разработки 24
3.2.2.2. Библиотека WIN32 API функций 24
3.2.3. Приложения для ОСЦИГЕНа. 25
3.2.3.1. Драйвер конфигурируемого выносного блока 25
3.2.3.2. Windows-приложение OGView 25
3.2.4. Драйвер виртуального COM-порта фирмы SiLabs 26
4. Разработка программного комплекса для решения целевой задачи 26
4.1. Функциональная схема реализации функций запоминающего осциллографа 26
4.2. Состав и механизм взаимодействия приложений программного комплекса 27
4.2.1. Схема программного комплекса 27
4.2.2. Протокол обмена между PC-приложением и МК-приложением 27
4.2.3. Таблица допустимых команд 27
4.2.4. Размещение в памяти значений выборок сигнала со стороны МК и ПК 28
4.3. Разработка приложения для МК-системы 29
4.3.1. Обобщенная схема алгоритма 29
4.3.2. Обоснование выбора языка программирования и среды разработки 30
4.3.3. Описание файлов проекта приложения 30
4.3.3.1. Модули приложения 30
4.3.3.2. Модули, подключаемые на этапе линкования 30
4.3.4. Структура и организация программы 30
4.3.5. Схемы алгоритмов и описание функций приложения 30
4.3.5.1. Перечень функций приложения 30
4.3.5.2. Организация бесконечного цикла встроенного приложения 31
4.3.5.3. Отключение сторожевого таймера 31
4.3.5.4. Переключение с внутреннего генератора на внешний 32
4.3.5.5. Конфигурирование портов ввода/вывода 33
4.3.5.6. Конфигурирование аналого-цифровых преобразователей ADC 32
4.3.5.7. Конфигурирование интерфейса DMA 34
4.3.5.8. Инициализация последовательного интерфейса UART 35
4.3.5.9. Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу 36
4.3.5.10. Инициализация таймера для установки времени дискретизации входного сигнала 36
4.3.5.11. Выбор режимов работы внешней памяти XRAM и ее интерфейса 36
4.3.5.12. Инициализация прерываний 37
4.3.5.13. Формирование цифровых отсчетов и их сохранение во внешней памяти XRAM 37
4.3.5.14. Передача данных на PC 37
4.3.5.15. Прием данных с PC 37
4.3.5.16. Другие используемые функции 38
4.3.5.17. Конфигурирование узлов МК с учетом данных, пришедших с PC 38
4.4. Разработка Windows-приложения 39
4.4.1. Особенности использования среды разработки 39
4.4.2. Описание файлов проекта 39
4.4.3. Обобщенная схема алгоритма многопоточного приложения 40
4.4.4. Внешний вид и описание графического интерфейса, принципы построения программы 40
4.4.5. Описание структуры и организация программы 41
4.4.5.1. Назначение подключаемых файлов 41
4.4.5.2. Описание прототипов функций 41
4.4.5.3. Функция WinMain() 42
4.4.5.4. Функция главного окна 42
4.4.5.5. Организация дополнительных потоков, их назначение 43
4.4.5.6. Рабочие функции дополнительных потоков 43
4.4.5.7. Синхронизация потоков 43
4.4.5.8. Особенности обработки сообщений Windows в программе 43
4.4.5.9. Функция рисования графика восстановленного сигнала 45
4.4.5.10. Разметка осей графика 45
4.4.5.11. Использование контекстуальной памяти для рисования графика 45
4.4.6. Работа с COM-портом, описание WinAPI-функций и структур данных 46
4.4.6.1. Инициализация COM-порта, обоснование выбора режима (синхронный, асинхронный), объема буфера приема/передачи данных 46
4.4.6.2. Организация настроек COM¬-порта в графическом интерфейсе 48
4.4.6.3. Использование функций WaitCommEvent(), WaitForSingleObject(), WaitForMultiplyObject() 49
4.4.7. Работа оператора с приложением 49
4.4.7.1. Последовательность запуска приложения на МК и ПК в лаборатории 49
4.4.7.2. Примеры последовательности 49
4.4.7.3. Адаптация к сепктру входного сигнала 49
4.4.8. Описание протокола RS-232 49
5. Список используемых источников информации 87
6. Приложения 50
6.1. Исходные тексты модулей программы для МК 50
6.2. Фрагменты листингов файлов МК-приложения, полученные в результате трансляций: MAP-file и др 56
6.3. Исходные тексты файлов Windows-приложения 58
6.4. Алгоритмы 72
6.4.1. Обобщенный алгоритм программы для МК 72
6.4.2. Дополнительные алгоритмы программы для МК 73
6.4.2.1. Алгоритм процедуры отключения WDT 73
6.4.2.2. Алгоритм функции SYSCLK_Init 74
6.4.2.3. Алгоритм функции Port_Init 75
6.4.2.4. Алгоритм функции ADCInit 76
6.4.2.5. Алгоритм функции DMAInit 77
6.4.2.6. Алгоритм работы функции UART0_Init 79
6.4.2.7. Алгоритм функции Timer3_Init 80
6.4.2.8. Алгоритм функции main 81
6.4.2.9. Алгоритм функции Config 82
6.4.2.10. Алгоритм функции SendData 83
6.4.2.11. Алгоритм функции ReceiveData 84
6.4.3. Обобщенный алгоритм программы Windows-приложения 85
6.4.3.1. Алгоритм работы функции рисования графика 85
6.4.3.2. Алгоритм обработки сообщений 86

Работа содержит 1 файл

Обобщенная пояснительная записка.doc

— 5.12 Мб (Скачать)

Описанный алгоритм иллюстрирует следующий  код:

SCON0   = 0x50 // Mode 1: 8-Bit UART, Variable Baud Rate, UART0 reception enabled.

SSTA0  |= 0x10; // UART0 baud rate divide-by-two disabled.Timer 1 generates UART0 TX Baud Rate

// T1 initialization

SFRPAGE = TIMER01_PAGE;

TMOD   = 0x20;           // Mode 2: 8-bit counter/timer with autoreload

TH1 =  -(SYSCLK / BAUDRATE)/16;  // 250;          // Reload value

TL1 =  -(SYSCLK / BAUDRATE)/16; // 250;          // Start value for T1

TR1    = 1;                              // Start T1

CKCON |= 0x10;                       // Timer 1 uses the system clock.

 

        1.  Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу

Для установки скорости обмена данными  по последовательному каналу был  выбран таймер T1. Таймер T1 был выбран в качестве генератора скорости передачи данных с помощью регистра SSTA0, см. пред. пункт. Инициализация таймера T1 также описана в п.4.3.5.8.

 

        1. Инициализация таймера для установки времени дискретизации входного сигнала

Для установки времени дискретизации  использовался таймер T3. Его инициализация происходит в функции Timer3_Init().

Инициализация таймера T3 проходит по следующему алгоритму:

    1. запись значения 0x00 в регистр управления таймером TMR3CN (отключение таймера);
    2. запись значения 0x00 в регистр конфигурации таймера TMR3CF (установка частоты счетчика SYSCLK / 12);
    3. установка значения (0xFFFF-ReloadValue) в регистр RCAP3, где ReloadValue – значение частоты дискретизации (установка значения перезагрузки);
    4. запись значения 0xFFFF в регистр значения таймера TMR3  (переполняем таймер);
    5. запуск таймера T3 (установка бита TR3 в ‘1’).

Описанный алгоритм иллюстрирует следующий  код:

TMR3CN = 0x00;  // temporary turning off T3

TMR3CF |=  0x00;  // Counter frequency = SYSCLK/12   

RCAP3 =(0xFFFF-ReloadValue); // writing reload value

TMR3 = 0xFFFF;             // making counter overflow to reload counter

TR3 = 1;                   // start T3

 

        1.  Выбор режимов работы внешней памяти XRAM и ее интерфейса

Все порты для работы с внешней  памятью (P4..P7) работают в режиме push-pull. Их настройка происходит в вышеописанной функции Port_Init().

 

        1. Инициализация прерываний

В функции отправки байта Send_Byte (unsigned char Byte) перед началом отправки данных флаг прерывания TI0 сбрасывается в ноль:

TI0=0;// Drop tramsmition interrupt flag

В функции получения  байта Receive_Byte (void) перед началом получения данных флаг прерывания RI0 сбрасывается в ноль:

RI0=0; // drop receiving interrupt flag

 

        1. Формирование цифровых отсчетов и их сохранение во внешней памяти XRAM

Со стороны МК (Little format)  Со стороны ПК (Big format)

    

 

        1. Передача данных на PC

Функция отправки байта на ПК void Send_Byte (unsigned char Byte) работает по следующему алгоритму:

  1. Разрешаем передачу информации через UART, сбрасывая флаг TI0
  2. Записываем байт в буфер UART
  3. Ждем, пока не закончится передача

Описанный алгоритм иллюстрирует следующий  код:

void Send_Byte (unsigned char Byte)

{

 char old_SFRPAGE = SFRPAGE;

SFRPAGE = UART0_PAGE;   // Switch to UART0 page

TI0=0;     // Drop tramsmition interrupt flag

SBUF0=Byte;    // copy data to send to SBUF0

 while(!TI0);    // dalay while tramsmiting

SFRPAGE = old_SFRPAGE;   // restore SFRPAGE

}

 

        1. Прием данных с PC

Функция приема байта с ПК unsigned char Receive_Byte (void) работает по следующему алгоритму:

  1. Разрешаем получение информации через UART, сбрасывая флаг RI0
  2. Устанавливаем флаг активного приема
  3. Ждем, пока прием не завершится
  4. Сохраняем полученную информацию
  5. Сбрасываем флаг активного приема

Описанный алгоритм иллюстрирует следующий  код:

unsigned char Receive_Byte (void)

{

 char old_SFRPAGE = SFRPAGE;

 unsigned char rb;

SFRPAGE = UART0_PAGE;

RI0=0;      // drop receiving interrupt flag

REN0=1;      // receive enable

 while(!RI0);     // delay while receiving

rb = (unsigned char)SBUF0;   // receive data from SBUF0

REN0=0;      // receiving finished

SFRPAGE = old_SFRPAGE;    // restore SFRPAGE

 return rb;  

}

 

        1. Другие используемые функции

Функция отправки результатов оцифровывания void Send_Data_to_PC (void) работает по следующему алгоритму:

  1. Получаем указатель на начала данных в XRAM
  2. Уведомляем ПК о готовности отправки данных оцифровывания, отправляя ‘r’
  3. Ждем уведомление со стороны ПК о готовности приема данных
    1. Отправляем Данные.

Описанный алгоритм иллюстрирует следующий  код:

void Send_Data_to_PC (void)

{

 unsigned int i;

read_ptr = XRAM_START_ADD;  

Send_Byte('r');  // notify PC that results are about to be sent

Receive_Byte()!= 'a'; //wait for confirm of readiness

 for (i=0;  i < 2*NUM_SAMPLES; i++)

{

Send_Byte(*read_ptr);  //send data

 read_ptr++;

}

}

 

        1. Конфигурирование узлов МК с учетом данных, пришедших с PC

С PC приходят данные, при изменении  числа выборок, частоты выборок, скорости двоичной передачи и режиме работы ADC. Пришедшие параметры устанавливаются в  приложении для МК-системы.

 

    1. Разработка Windows-приложения
      1. Особенности использования среды разработки

Использование бесплатной версии Visual Studio 8 накладывает определенные ограничения на использование ресурсов. Поэтому в программе отсутствуют диалоговые окна, тулбары, горячие клавиши и расширенное горизонтальное меню.

В проекте при написании приложения для ПК используются только Win32 API функции. Это позволяет гибко программировать графический интерфейс программы, и вообще, создавать очень гибкое с точки зрения заказчика, приложение. Но, в свою очередь, требует написания очень больших объемов кода и знания тонкостей программирования под Win32 API.

 

      1. Описание файлов проекта

Файл 111.cpp

Этот файл представляет собой полный набор функций и переменных, необходимых  для работы программы со стороны  ПК.

Файл stdafx.h

Файл подключает все необходимые  библиотеки для работы функций файла Win2.cpp.

Файл 111.h

Файл является заголовком Win2.cpp

Файл 111.срр

Подключает stdafx.h

Файл111.vcproj

Это основной файл для VC++ проектов. Он содержит информацию о версии Visual C++, которая генерирует файл, а также информацию о платформе, настройках и особенностях проекта, заданных при его создании.

 

      1. Обобщенная схема алгоритма многопоточного приложения

Обобщенная схема алгоритмов многопоточного приложения приведена на рис.4.4.

 

 

Рис.4.4. Обобщенная схема алгоритма  многопоточного приложения

 

      1. Внешний вид и описание графического интерфейса, принципы построения программы

Графический интерфейс (рис.4.5) условно  делится на 2 части:

  1. Нижне-центральная часть, где находится координатная сетка и рисуется график зависимости напряжения, полученного АЦП, от времени. Все это делается в отдельном окне, где выполняются необходимые действия для построения.
  2. окружающая график часть окна, где находятся поля для задания масштаба, COM-порта и настроек микроконтроллера: режима АЦП, числа цифровых отсчетов и частоты цифровых отсчетов, а также кнопки «Demo»,  «Start» и «Exit».

Все элементы основного окна являются дочерними окнами.

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

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

Рис.4.5. Внешний вид рабочего окна программы для ПК

 

      1. Описание структуры и организация программы
        1. Назначение подключаемых файлов

Программа не разбита на модули, поэтому  из подключаемых файлов только stdafx.cpp, который добавляется по умолчанию. Их описание находится выше в пункте «Описание файлов проекта» (п.4.4.2).

 

        1. Описание прототипов функций

В программе используются следующие  функции:

 

  • int SampChk()(; - функция перевода введённого пользователем числа (в фиксированный TextBox в число, которое возвращает;
  • void demo(void) – функция, которая вызывается при нажатии кнопки «Demo», заполняет буфер значениями синусоиды по умолчанию и посылает сообщение перерисовки графика.
  • bool parcechar(double a, WCHAR *dest) – функция, переводящая число в символьную строку
  • BOOL Line(HDC hdc, int x1, int y1, int x2, int y2 ) функция, рисующая линию по координатам в заданном Device Content
  • int start(void) - функция, которая вызывается при нажатии кнопки «Start», считывает введенные настройки, проверяет их, создает подключение к COM-порту, проверяет, готов ли порт к получению данных, создает поток для рисования графика.
  • int SendSet(); - функция соединения с COM портом, реализует отправку и получение сигналов для установления соединения, после этого посылает микроконтроллеру через COM порт необходимые настройки, возвращает единицу если без ошибок, в противном случае ноль;
  • int RecieveData(); - функция получения результатов оцифровывания.
  • int Receive(); - функция чтения символа (байта) из буфер COM порта;
  • int pWrite(HANDLE,unsigned char); - функция записи символа (байта) в буфер COM порта;

 

        1. Функция WinMain()

Программа состоит из функции инициализации, цикла сообщений Windows, функций обработки сообщений главного окна и потока, выполняемого параллельно с главным потоком.

Точкой входа в программу  является функция WinMain(), которая регистрирует классы и вызывает функцию инициализации, в результате чего создается главное и дочерние окна. В конце функции WinMain находится бесконечный цикл по трансляции и обработке сообщений Windows. После трансляции сообщение передается в функцию обратного вызова соответствующего окна.

 

        1. Функция главного окна

CallBack главного окна обрабатывает  сообщение о выходе из приложения  и реагирует на нажатие кнопки  начала измерений.

        1. Организация дополнительных потоков, их назначение

Помимо основного потока в программе  используются еще два потока: для получения данных от микроконтроллера и для прорисовки графика. Потоки создаются запущенными.

_beginthread(MyThreadSend,   0,   0); - создание потока для  обмена данных с микроконтроллером

uintptr_t Thread0=_beginthread(MyThreadPaint,   0,   (void *)hDCbuf); - создание потока для построения графика

WaitForSingleObject((HANDLE)Thread0, 100); - ожидание завершения потока  рисования

 

 

 

        1. Рабочие функции дополнительных потоков

Поток рисования графика имеет  в себе одну функцию – проставить точки. Поток обмена данными использует функцию SendSet, после чего вызывает перерисовку и удаляется

 

        1. Синхронизация потоков

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

 

        1. Особенности обработки сообщений Windows в программе

В программе предусмотрена обработка  следующих сообщений главного окна (рис.4.6):

- WM_COMMAND – это сообщение используется для отслеживания нажатий на кнопки «Start» для инициализации обмена данными между МК и компьютером, нажатий на кнопки «Demo» для отображения демонстрационного варианта графика и кнопки «Exit» для выхода из приложения.

- WM_PAINT – это сообщение посылается, когда необходимо перерисовать графические элементы в окне. В нашем случае осуществляется прорисовка осей, сетки, а в случае получения данных и графика зависимости напряжения.

Информация о работе Обработка аналоговых сигналов на основе МК C8051F064