Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УЧПУ.Контроллеры электроавтоматики.doc
Скачиваний:
21
Добавлен:
17.09.2019
Размер:
6.86 Mб
Скачать

2.3.4. Последовательность преобразования аналогового сигнала.

Преобразование начинается после установки в «1» бита G0/-DONE (бит 2) в регистре ADCON0. Последовательность операций приведена на рис. После окончания преобразования результат перепишется в регистры ADRESH и ADRESL, где могут быть прочитаны программно. Перед следующим преобразованием необходимо дать выдержку не менее 2TAD.

2.3.5. Выравнивание результата преобразования.

Поскольку модуль АЦП 10 – разрядный, а результат преобразования хранится в двух спаренных 8 – разрядных регистрах, то окончательный результат преобразования можно «выравнять», как показано на рис. 16. Вид выравнивания задается битом ADFM (бит 7) регистра ADCON1 (адрес 9Fh): при ADFM =1 результат преобразования хранится в регистре ADRESL – восемь младших разрядов и регистре ADRESH – два старших разряда цифрового кода преобразования, шесть старших разрядов регистра ADRESH равны 0, при ADFM = 0 результат преобразования хранится в регистре ADRESH – восемь старших разрядов и в регистре ADRESL – два младших разряда цифрового кода, шесть младших разрядов регистра ADRESL равны 0.

2.3.6. Работа модуля ацп в sleep режиме.

Модуль АЦП можно запустить в работу в SLEEP с целью экономии энергопотребления, при этом в качестве генератора тактовых импульсов должен быть выбран внутренний RC-генератор (биты ADSC1:ADSC0 =11). После завершения преобразования аппаратно сбрасывается бит пуска преобразования GO/-DONE (бит 2 в регистре ADCON0) и если был установлен режим обслуживания прерывания, то микроконтроллер выйдет из SLEEP режима и обработает прерывание. Повторный запуск SLEEP режима может быть осуществлен подпрограммой обработки прерывания. Если режим обслуживания прерывания изначально не был установлен, то после окончания прерывания модуль АЦП выключается, хотя результат преобразования сохраняется в регистрах ADRESH:ADRESL и бит включения модуля ADON остается установленным. То есть работа может быть продолжена, если микроконтроллер будет выведен из SLEEP режима другим способом, например, внешним прерыванием.

2.3.7. Пример программирования модуля ацп.

Описание задачи.

Измерить силу тока в цепи якоря двигателя постоянного тока. Допустимая сила тока по паспорту двигателя составляет 10А.

1. Схема эксперимента:

В качестве датчика тока используем стандартный шунт Rш, рассчитанный на максимальный ток 10А и выдающий при этом токе напряжение на выходе U вых. = 0,75mV.

Схема подключения в этом случае имеет вид:

Т екст программы:

#define XTAL_FREQ 4MHZ

#define byte unsigned char

#define word unsigned int

#include <pic.h>

#include <stdio.h>

__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);

void main() {

TRISA = 0x01; // RA0 на выход

ADCON0 = 0x41; // настройка АЦП

ADCON1 = 0X80

OPTION = 0x08; // настройка TMR0

TOIF = 0; // сброс флага TMR0

TMR0 = 0x13; // пуск TMR0

for(; !TOIF ;) { } // ожидание срабатывания таймера

ADIF = 0; // сброс флага АЦП

GO/-DONE = 1; // пуск АЦП

for (;!ADIF ;) { } // ожидание преобразования АЦП

TXREG = ADRESH; // передача в USART старшего байта АЦП

TXREG = ADRESL; // передача в USART младшего байта АЦП

} // конец main

Примечание. Настройку модуля USART см. в соответствующем разделе.