Вы находитесь на странице: 1из 6

Кыргызско-Российский Славянский университет

Естественно-технический факультет
Кафедра «Приборостроение»

МИКРОПРОЦЕССОРЫ В СИСТЕМАХ ДИАГНОСТИКИ

Методические указания по выполнению лабораторной работы №8

Внутрисхемный Отладчик - Эмулятор


Аналого-цифровой преобразователь (АЦП) микроконтроллера PIC.
.

Разработал: Исаков С.С.


2010 г.
Тема: Аналого-цифровой преобразователь (АЦП) микроконтроллера PIC
Цель работы: Изучить методы программирования АЦП
Задание: Составить и отладить программу преобразования аналогового сигнала и
вывод на светодиодный индикатор.
Литература: 16f87x.pdf, mpasm.pdf, mplabicd.pdf, hd44780r.pdf

Модуль 10-разрядного АЦП


Модуль аналого-цифрового преобразования (АЦП) имеет пять каналов у 28-выводных
микросхем и восемь каналов у 40/44-выводных микросхем.
Входной аналоговый сигнал через коммутатор каналов заряжает внутренний
конденсатор АЦП chold. Модуль АЦП преобразует напряжение, удерживаемое на
конденсаторе chold в соответствующий 10-разрядный цифровой код методом
последовательного приближения. Источник верхнего и нижнего опорного напряжения может
быть программно выбран с выводов vdd, Vss, RA2 или RA3.
Допускается работа модуля АЦП в SLEEP режиме микроконтроллера, при этом в
качестве источника тактовых импульсов для АЦП должен быть выбран RC генератор.
Для управления АЦП в микроконтроллере используется 4 регистра:
• Регистр результата ADRESH (старший байт);
• Регистр результата ADRESL (младший байт);
• Регистр управления ADCONO;
• Регистр управления ADCON1.
Регистр ADCONO используется для настройки работы модуля АЦП, а с помощью
регистра ADCON1 устанавливается какие входы микроконтроллера будут использоваться
модулем АЦП и в каком режиме (аналоговый вход или цифровой порт ввода/вывода).
Дополнительную информацию по работе с модулем АЦП смотрите в технической
документации "PICmicro Mid-Range MCU Family Reference Manual" (DS33023).

2
биты 6-4: Не используются: читаются как 'О'
биты 3-0: PCFG3:PCFGO: Управляющие биты настройки каналов АЦП

Примечания:
1. Эти каналы не реализованы в микроконтроллерах PIC16F873/ PIC16F876.
2. В этом столбце указывается число аналоговых каналов, доступных для
выполнения преобразования, и число входов источника опорного напряжения.
В регистре ADRESH:ADRESL сохраняется 10-разрядный результат аналого-цифрового
преобразования. Когда еобразование завершено, результат преобразования записывается в
регистр ADRESH:ADRESL, после чего расывается флаг GO/-DONE (ADCONO<2>) и
устанавливается флаг прерывания ADIF. Структурная схема модуля (П показана на рисунке
11-1.
После включения и конфигурации АЦП выбирается рабочий аналоговый канал.
Соответствующие биты TRIS алоговых каналов должны настраивать порт ввода/вывода на
вход. Перед началом преобразования необходимо держать временную паузу

Рекомендованная последовательность действий для работы с АЦП:


1. Настроить модуль АЦП:
• Настроить выводы как аналоговые входы, входы vref или цифровые каналы
ввода/вывода (ADCON1);
• Выбрать входной канал АЦП (ADCONO);
• Выбрать источник тактовых импульсов для АЦП (ADCONO);
• Включить модуль АЦП (ADCONO).
2. Настроить прерывание от модуля АЦП (если необходимо):
• Сбросить бит ADIF в 'О’;
• Установить бит ADIE в '1';
• Установить бит PEIE в Т;
• Установить бит GIE в '1'.
3. Выдержать паузу, необходимую для зарядки конденсатора chold.
4. Начать аналого-цифровое преобразование:
• Установить бит GO/-DONE в '1' (ADCONO).
5. Ожидать окончания преобразования:
• Ожидать пока бит GO/-DONE не будет сброшен в 'О1; ИЛИ
• Ожидать прерывание по окончанию преобразования.

3
6. Считать результат преобразования из регистров ADRESH:ADRESL, сбросить бит
ADIF в 'О1, если это необходимо.
7. Для следующего преобразования необходимо выполнить шаги начиная с пункта 1
или 2. Время преобразования одного бита определяется как время tad. Минимальное время
ожидания перед следующим преобразованием должно составлять не менее 2Тдо.

Структурная схема модуля АЦП

Примечание к рисунку . Эти каналы не реализованы в микроконтроллерах PIC16F873/


PIC16F876.

Аналого-цифровое преобразование
Сброс бита GO/-DONE в 'О во время преобразования приведет к его прекращению.
При этом регистры результата (ADRESH:ADRESL) не изменят своего содержимого. После
досрочного завершения преобразования необходимо обеспечить временную задержку 2Тдо.
Выдержав требуемую паузу, можно начать новое преобразования установкой бита GO/-
DONE в 1.
На рисунке показана последовательность получения результата после установки бита
GO/-DONE в 1.
Примечание. Бит GO/-DONE и бит включения АЦП должны устанавливаться разными
командами. Последовательность получения результата после установки бита GO/-DONE

4
Выравнивание результата преобразования
10-разрядный результат преобразования сохраняется в спаренном 16-разрядном
регистре ADRESH:ADRESL. Запись результата преобразования может выполняться с
правым или левым выравниванием, в зависимости от значения бита ADFM. Не
задействованные биты регистра ADRESH:ADRESL читаются как '0'. Если модуль АЦП
выключен, то 8-разрядные регистры ADRESH и ADREL могут использоваться как регистры
общего назначения.

Выравнивание результата аналого-цифрового преобразования

Ниже приводится текст программы

;**********************************************************
;* TUT877.ASM
;**********************************************************
;* Microchip Technology Incorporated
;* 16 December 1998
;* Assembled with MPASM V2.20
;**********************************************************
;* This program configures the A/D Module to convert on
;* A/D channel 0 (the potentiometer) and display the
;* results on the LEDS on PORTC. Make sure that the DIP
;* switch SW3 has all switches in the ON position.
;**********************************************************

list p=16f877

; Include file, change directory if needed


include "p16f877.inc"

5
; Start at the reset vector
org 0x000
nop
Start
banksel PORTC
clrf PORTC ;Clear PORTC
movlw B'01000001' ;Fosc/8, A/D enabled
movwf ADCON0

banksel OPTION_REG
movlw B'10000111' ;TMR0 prescaler, 1:256
movwf OPTION_REG
clrf TRISC ;PORTC all outputs
movlw B'00001110' ;Left justify,1 analog channel
movwf ADCON1 ;VDD and VSS references

banksel PORTC

Main
btfss INTCON,T0IF ;Wait for Timer0 to timeout
goto Main
bcf INTCON,T0IF

bsf ADCON0,GO ;Start A/D conversion


Wait
btfss PIR1,ADIF ;Wait for conversion to complete
goto Wait

movf ADRESH,W ;Write A/D result to PORTC


movwf PORTC ;LEDs

goto Main ;Do it again

end
VCC

DD1
RV1 13 33 Pc0 VD1
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
2
RB2
36 Pc1 VD2
48%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
10k 4 38
5
RA2/AN2/VREF-/CVREF RB5
39 Pc2 VD3
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15 Pc0 Pc3 VD4
RC0/T1OSO/T1CKI
8 16 Pc1
RE0/AN5/RD RC1/T1OSI/CCP2
9 17 Pc2
10
RE1/AN6/WR RC2/CCP1
18 Pc3 Pc4 VD5
RE2/AN7/CS RC3/SCK/SCL
23 Pc4
RC4/SDI/SDA
1 24 Pc5
MCLR/Vpp/THV RC5/SDO
25 Pc6 Pc5 VD6
RC6/TX/CK
26 Pc7
RC7/RX/DT
19 Pc6 VD7
RD0/PSP0
PIC16F877A 20
RD1/PSP1
21
RD2/PSP2
22 Pc7 VD8
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7