Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРабота_4.doc
Скачиваний:
18
Добавлен:
04.05.2019
Размер:
191.49 Кб
Скачать

Программирование PIC-микроконтроллеров

на языке Си

Лабораторная работа № 4

Исследование аналого-цифрового преобразователя PIC-микроконтроллера

1. Цель работы

Изучить принципы построения встроенного аналого-цифрового преобразователя (АЦП) микроконтроллеров семейства PIC18. Изучить и исследовать методы программирования АЦП на языке Си с помощью интегрированной среды MPLAB IDE. Исследовать методику проверки работы МКУ с АЦП и ЖК-дисплеем с помощью среды моделирования Proteus.

2. Основные теоретические сведения

2.1. Аналого-цифровые преобразователи в pic-микроконтроллерах

Все микроконтроллеры семейства PIC18 имеют встроенные многоканальные аналого-цифровые преобразователи (АЦП), используемые для преобразования аналогового входного напряжения в диапазоне от 0 до UDD (напряжение питания МК) в цифровой код. АЦП выдают 10-разрядный код, а число аналоговых каналов зависит от конкретного типа МК. Так, например, PIC18F242 имеет 6 аналоговых каналов. Для ввода аналоговых сигналов обычно используются линии порта А, которые требуется настроить на ввод. Реальная величина погрешности преобразования, характер использования выводов портов и скорость выполнения операций зависит от конкретного типа МК, а также тактовой частоты его работы.

После запуска АЦП требуется определенное время, называемое временем преобразования, необходимое для преобразования аналогового входного напряжения в цифровой код. Изменение входного напряжения во время процесса преобразования вносит нежелательную погрешность в генерируемый выходной код. Для уменьшения этой погрешности на входе АЦП включают устройство выборки-хранения (УВХ), состоящее из аналогового ключа и запоминающего конденсатора. Ключ замыкается при выборе канала АЦП, а конденсатор, после заряда, сохраняет значение входного напряжения канала на постоянном уровне, пока АЦП выполняет преобразование. Длительность временного интервала, который требуется для заряда запоминающего конденсатора, определяется параметрами входной цепи, а также температурой окружающей среды. В большинстве случаев можно принять, что максимальное время заряда запоминающего конденсатора не превышает 20 мкс.

Модуль АЦП имеет внутренний делитель частоты, обеспечивающий деление тактовой частоты МК в 2, 4, 8, 16, 32 и 64 раза. Встроенный RC-генератор с частотой 250 кГц обычно используется для АЦ-преобразования в тех случаях, когда сам МК переводится в энергосберегающий режим SLEEP.

Минимальное время преобразования АЦП определяется суммарным временем, которое требуется для установки времени на запоминающем конденсаторе и для полного завершения самого АЦ-преобразования.

Результат АЦ-преобразования запоминается в двух регистрах МК: старший байт в ADRESH и младший байт в ADRESL. Этот результат может размещаться в двух различных форматах, которые называются:

  • с правым выравниванием;

  • с левым выравниванием.

В формате «с правым выравниванием» в шесть старших разрядах регистра ADRESH записываются нули, а в два младших разряда - соответственно два старших бита полученного результата.

В формате «с левым выравниванием» восемь старших бит результата записываются в регистр ADRESH, а младшие биты результата запоминаются в регистре ADRESL.

2.2. Библиотека функций управления аналогово-цифровым преобразователем компилятора с18

Для облегчения разработки программ управления встроенным аналогово-цифровым преобразователем микроконтроллеров семейства PIC18 в библиотеке пакета MCC18 имеются несколько функций, которые являются специфическими для компилятора С18 и не существуют в стандартной библиотеке ANSI C. Функции приведены в табл. 1. Полное описание этих функций дано в заголовочном файле с именем adc.h.

Таблица 1

Функции компилятора С18 для АЦП

Функция

Описание

OpenADC( )

Конфигурирует АЦП

SetChanADC( )

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

ConvertADC( )

Запускает АЦП

BusyADC( )

Проверяет, занят ли сейчас АЦП

ReadADC( )

Считывает результат преобразования АЦП

CloseADC( )

Отключает АЦП

Рассмотрим вкратце библиотечные функции управления АЦП.

OpenADC( ) – конфигурирует АЦП. Прототип функции:

void OpenADC(unsigned char config, unsigned char config2);

Аргументы функции:

config – это бинарная маска, которая создается с помощью операции поразрядного И ( & ) со значениями от каждой категории, перечисленными далее.

Источник тактирования АЦП:

ADC_FOSC_2 Коэффициент деления частоты FOSC

ADC_FOSC_4 генератора тактовых импульсов МК на

………………. 2, 4, 8, 16, 32, 64

ADC_FOSC_64

ADC_FOSC_RC Внутренний RC-генератор модуля АЦП

Способ размещения результата АЦ-преобразования:

ADC_RIGHT_JUST Правое выравнивание

ADC_LEFT_JUST Левое выравнивание

Источник опорного напряжения:

ADC_1ANA_0REF AN0 – аналоговый вход, UREF+ = UDD,

UREF- = USS

ADC_1ANA_2REF AN0 – аналоговый вход, AN3 = UREF+,

AN2 = UREF-

ADC_2ANA_2REF AN0, AN1 – аналоговые входы,

AN3 = UREF+, AN2 = UREF-

ADC_3ANA_0REF AN0, AN1, AN3 – аналоговые входы,

UREF+ = UDD, UREF- = USS

…………………….

config2 – это бинарная маска, которая создается с помощью операции поразрядного И ( & ) со значениями от каждой категории, перечисленными далее.

Выбор канала АЦП:

ADC_CH0 Канал 0

ADC_CH1 Канал 1

ADC_CH2 Канал 2

………………………..

Прерывания от АЦП:

ADC_INT_ON Прерывания разрешены

ADC_INT_OFF Прерывания запрещены

Пример записи функции OpenADC( ), которая будет использована в данной лабораторной работе:

OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_1ANA_ 0REF,

ADC_CH0 & ADC_INT_OFF);

Эта функция задает тактирование АЦП от генератора МК, коэффициент деления частоты FOSC равен 4; правое выравнивание результата АЦ-преобразования; один аналоговый вход AN0, опорные напряжения UREF+ = UDD, UREF- = USS ; выбирается канал 0 (вход AN0); запрещаются прерывания от АЦП.

Следующая функция SetChanADC( ) выбирает канал, который будет использовать АЦП. Прототип функции:

void SetChanADC(unsigned char channel);

Аргумент функции: channel

ADC_CH0 Канал 0

ADC_CH1 Канал 1

ADC_CH2 Канал 2

…………….

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

SetChanADC(ADC_CH0);

Выбирается канал 0, т.е. аналоговый сигнал должен подаваться на линию AN0 (вывод RA0 порта А).

Функция ConvertADC( ) осуществляет запуск (старт) АЦ-преобразования. Прототип функции:

void ConvertADC(void);

Функция BusyADC( ) – АЦП в данный момент выполняет преобразование? (по-другому, АЦП занят?). Прототип функции:

char BusyADC(void);

Эта функция возвращает значение 1, если АЦП выполняет преобразование (АЦП занят), и возвращает значение 0, если АЦП не выполняет преобразование (АЦП свободен).

Функция ReadADC( ) – чтение результата АЦ-преобразования. Прототип функции:

int ReadADC(void);

Эта функция возвращает двухбайтное число, в котором размещается 10-разрядный код АЦП. Он размещается в младших или старших разрядах числа в соответствие с параметром, заданным в функции OpenADC( ).

Функция CloseADC( ) – отключение АЦП. Прототип функции:

void CloseADC(void);

Эта функция отключает модуль АЦП, при этом он не потребляет ток от источника питания.

Для осуществления АЦ-преобразования входного сигнала программа МК должна сделать следующие действия:

  • выполнить конфигурацию АЦП с помощью задания соответствующих аргументов в функции OpenADC( );

  • выбрать канал для ввода аналогового сигнала с помощью функции SetChanADC( );

  • выполнить задержку на время 20 мкс для заряда конденсатора схемы выборки-хранения;

  • запустить преобразование с помощью функции ConvertADC( );

  • производить периодический опрос готовности данных АЦП с помощью функции BusyADC( ) (если не используется прерывание от АЦП);

  • в случае готовности данных считать результат АЦ-преобразования с помощью функции ReadADC( ).

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