Обработка аналоговых сигналов на основе МК 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 Мб (Скачать)
    • драйвер USBXpress, основное назначение драйвера - работа с мостом в качестве USB-устройства;
    • драйвер виртуального COM-порта (VCP). Данный драйвер является надстройкой над драйвером USBXpress. Использование драйвера VCP является наиболее простым решением для задач обновления текущих разработок, работавших ранее с COM-портом компьютера, так как при установке этого драйвера в системе появляется дополнительный виртуальный COM-порт (COM3, COM4 и т.д.), работа с которым полностью идентична работе со стандартными COM-портами (COM1, COM2).

 

  1. Разработка программного комплекса для решения целевой задачи
    1. Функциональная схема реализации функций запоминающего осциллографа

Функциональная схема реализации функций запоминающего осциллографа представлена на рис.4.1.







 




 



 



 

 

Рис.4.1. Функциональная схема реализации функций запоминающего осциллографа

 

    1. Состав и механизм взаимодействия приложений программного комплекса
      1. Схема программного комплекса

Программный комплекс (рис.4.2) включает в себя две программы:

    • программа для МК;
    • программа для ПК.

Рис.4.2. Схема программного комплекса

Взаимодействие  между программа осуществляется по схеме, указанной на рис.4.3.

 

      1. Протокол обмена между PC-приложением и МК-приложением

Для связи ПК и контроллера используется стандартный протокол RS-232С. Со стороны контроллера по этому протоколу работает UART.

Протокол позволяет передавать и принимать последовательности бит данных длиной от 5 до 9 штук, пред началом передачи посылается стартовый бит (логический ноль), после передачи информационных и проверочных битов посылается стоповый бит (логическая единица). Возможен контроль ошибок при передаче при помощи битов чётности. Изменяемая скорость передачи данных. В курсовой работе используется скорость 115200 бит/с.

В данной работе происходит обмен  данными между PC и МК следующим образом: от МК к РС передаётся байт информации, в котором содержатся данные о выбранном режиме ADC(2 бит), количестве отсчетов(4 бит), частоте(2 бит).

 

 

 

Рис.4.3. Схема взаимодействия МК и  ПК 

 

 

      1. Размещение в памяти значений выборок сигнала со стороны МК и ПК

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

    
 

    1. Разработка приложения для МК-системы
      1. Обобщенная схема алгоритма


 

 


      1. Обоснование выбора языка программирования и среды разработки

В качестве основного языка для  написания программы был выбран язык C. Язык C привычен, удобен и гибок и, соответственно, понятен.

В качестве среды разработки была выбрана SiLabs IDE. Причиной послужили  следующие факторы:

    • удобный интерфейс;
    • наличие бесплатной версии;
    • поддержка языка C.

 

      1. Описание файлов проекта приложения
        1. Модули приложения

Весь код программы объединен  в два файла: файл MC.c и файл МС.asm.c

 

        1. Модули, подключаемые на этапе линкования

INPUT MODULES INCLUDED:

  D:\МК\MC\MC.obj (MC)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C_STARTUP)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C?SLDIV)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C?ULDIV)

 

      1. Структура и организация программы

Программа реализована в виде бесконечного цикла

 

      1. Схемы алгоритмов и описание функций приложения
        1. Перечень функций приложения

В программе для МК описаны следующие функции:

    • void Timer3_Init (void) – инициализация таймера;
    • void SYSCLK_Init (void) – инициализация генератора;
    • void Port_Init (void) – конфигурирование портов ввода/вывода;
    • void ADC_Init (void) – конфигурирование АЦП;
    • void DMA0_Init (void) – конфигурирование интерфейса DMA;
    • void UART0_Init (void) – инициализация УАППа;
    • void SendByte (unsigned char Byte) –отправка байта данных на ПК;
    • unsigned char ReceiveByte (void) – прием байта данных с ПК;
    • void SendData_to_PC (void) – отправка результатов на ПК;
    • void Connection (void) – соединения с ПК;
    • void MC_Config (void) – конфигурирование МК (вызов функций конфигурирования таймера, портов и т.д.);
    • void main (void) – основная функция, в ней организован бесконечный цикл для работы программы.

 

        1. Организация бесконечного цикла встроенного приложения

Бесконечный цикл организован в  функции main(), внутри которого проходит сеанс соединения с ПК (соединения, получение настроек, отправка результатов АЦП). Бесконечный цикл создан, чтобы была возможность многократных запросов со стороны пользователя.

 

        1. Отключение сторожевого таймера

Регистр WDTCN:

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение при сбросе:

ххххх111

               

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0


 

Биты 7-0: Управление WDT

    • Запись 0хA5 как включает, так и перезагружает WDT
    • Запись 0xAD в течение 4 тактовых циклов после записи 0xDE отключает WDT
    • Запись 0xFF блокирует функцию отключения

Отлючение сторожевого таймера (WDT) производится в функции MC_Config с помощью последовательной записи значений 0xDE и 0xAD в регистр WDTCN. Это иллюстрируют следующие строки кода:

EA = 0;             // forbid all interrupts

WDTCN = 0xde;       // turn off WDT

WDTCN = 0xad;     

EA = 1;            // Enable all interrupts

Между записью этих значений должно пройти не более четырех тактовых циклов, иначе операция отключения игнорируется. На время этой процедуры необходимо запретить прерывания (EA = 0) во избежание задержки между записями в регистр управления WDT. После завершения операции отключения WDT следует вновь разрешить прерывания (EA=1).

 

        1.  Переключение с внутреннего генератора на внешний

Регистр OSCXCN:

R

R/W

R/W

R/W

R

R/W

R/W

R/W

Значение при сбросе:

00000000

XTLVLD

XOSCMD2

XOSCMD1

XOSCMD0

-

XFCN2

XFCN1

XFCN0

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0


 

Бит 7: XTLVLD – флаг стабилизации кварцевого генератора (действиетелен, только если XOSCMD = 11х)

0 - кварцевый генератор не используется  или еще не стабилен

1 - Кварцевый генератор работает  и стабилен

Биты 6-4: XOSCMD2-0 – биты выбора режима внешнего генератора

00х - внешний генератор выключен

010 - тактовые импульсы поступают  от внешнего КМОП-счетчика через  вывод XTAL1

011 - тактовые импульсы поступают  от внешнего КМОП-счетчика через  вывод XTAL1 и внутренний делитель 2

10х - режим RC/C-генератора с  делением тактовой частоты на 2

110 - режим кварцевого генератора

111 – режим кварцевого генератора  с делением тактовой частоты  на 2

Бит 3: зарезервирован. Читается как 0b. Запись не оказывает никакого влияния.

Биты 2-0: XFCN2-0: Биты управления частотой внешнего генератора

Для переключения с внутреннего  генератора на внешний необходимо выполнить  следующий алгоритм в функции SYSCLK_Init():

  1. Включить внешний генератор (записать в регистр OSCXCN значение 0x77)

Значение 0х77 (01110111)- режим кварцевого генератора с делением тактовой частоты на 2 и частота внешнего генератора задается от 10 МГц до 30 МГц.

  1. Выдержать паузу длительностью как минимум 1мс, чтобы исключить преждевременное переключение системы от внешнего генератора;
  2. Опрашивать бит XTLVLD регистра OSCXCN до обнаружения перехода его состояния из '0' в '1' (бит автоматически устанавливается в '1', как только внешний генератор выходит на стабильный режим работы);

XTLVLD установлен в единицу, когда значение (OSCXCN & b10000000) ненулевое, т.е. когда (OSCXCN & 0х80) или (OSCXCN & 128) ненулевое.

  1. Переключиться на работу от внешнего генератора (записать в регистр CLKSEL значение 0x01 = b00000001).
  2. Отключить внутренний генератор записью значения 0х00 в регистр OSCICN.

Следующий код функции SYSCLK_Init() иллюстрирует вышеописанную процедуру:

OSCXCN = 0x77;  // start external oscilator, frequency =(22 118 400 / 2)Hz

for (i=0; i <5000; i++) ;           // dalay > 1 msec (setting XTLVLD)

while (!(OSCXCN & 128)) ;           // wait until generator is stable

CLKSEL |= 0x01;                     // switch to external oscilator

OSCICN = 0x00; // disable internal oscillator

        1. Конфигурирование портов ввода/вывода

Регистр XBR0:

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение при сбросе:

00000000

CP0E

ECI0E

PCA0ME

UART0EN

SPI0EN

SMB0EN

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0


 

Бит 7: CP0E -  бит подключения выхода компаратора 0 (CP0)

0 - CP0 не соединен с выводом порта

1 -  CP0 соединен с выводом порта

Бит 6: ECI0E – бит подключения входа ECI ПМС0

0 – ECI не соединен с выводом порта

1  - ECI соединен с выводом порта

Биты 5-3: PCA0ME – биты подключения входов/выходов модуля ПМС0

000 – все входы/выходы модуля  ПМС не соединены с выводами  порта

001 – CEX0 соединен с выводом  порта

010 – CEX0, CEX1 соединены с двумя  выводами порта

011 – CEX0, CEX1, CEX2 соединены с тремя выводами порта

100 – CEX0, CEX1, CEX2, CEX3 соединены с  четырьмя выводами порта

101 – CEX0, CEX1, CEX2, CEX3, CEX4 соединены  с пятью выводами порта

110 – CEX0, CEX1, CEX2, CEX3, CEX4, CEX5 соединены  с 6 выводами порта

Бит 2: UART0EN – бит подключения входов/выходов УАПП0

0 – входы/выходы УАПП0 не соединены  с выводами порта

1 – TX0 и RX0 соединены с выводами P0.0 и P0.1 соответсвенно

Бит 1: SPI0EN -  бит подключения входов/выходов модуля SPI0

0 – входы/выходы модуля SPI0 не соединены с выводами порта

1 – в 4-х проводном режиме MISO, MOSI, SCK и NSS соединены с 4 выводами 

порта, в 3-х проводном MISO, MOSI, SCK соединены  с 3 выводами порта.

Бит 0: SMB0EN – бит подключения входов/выходов модуля SMBus0

0 – входы/выходы модуля SMBus0 не соединены с выводами порта

1 – SDA и SCL соединены с двумя выводами порта

Регистр XBR2:

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение при сбросе:

00000000

WEAKPUD

XBARE

-

T4EXE

T4E

UART1E

-

-

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

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