Tải bản đầy đủ (.pdf) (13 trang)

TÌM HIỂU VỀ ADC CỦA VI ĐIỀU KHIỂN PIC 16F877A

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (549.21 KB, 13 trang )

TÌM HIỂU VỀ ADC CỦA VI ĐIỀU KHIỂN
PIC 16F877A
I. GIỚI THIỆU VỀ ADC CỦA PIC
ADC là bộ chuyển đổi tín hiệu tương tự thành tín hiệu số
PIC 16F877A có 8 ngõ vào Analog ( RA0:RA4 and RE0:RE2) và mỗi kênh
PIC 16F877A có 8 ngõ vào Analog ( RA0:RA4 and RE0:RE2) và mỗi kênh


ADC là 10 bit với chip 40 chân. Hiệu điện thế chuẩn V REF có thể được lựa chọn
ADC là 10 bit với chip 40 chân. Hiệu điện thế chuẩn V REF có thể được lựa chọn


là VDD, VSS hay hiệu điện thế chuẩn được xác lập trên 2 chân RA2, RA3.
là VDD, VSS hay hiệu điện thế chuẩn được xác lập trên 2 chân RA2, RA3.
Bộ chuyển đổi ADC có cấu trúc độc lập để có thể hoạt động trong khi vi điều
Bộ chuyển đổi ADC có cấu trúc độc lập để có thể hoạt động trong khi vi điều


khiển đang ở chế độ Sleep, xung cung cấp cho ADC lấy từ dao động RC bên
khiển đang ở chế độ Sleep, xung cung cấp cho ADC lấy từ dao động RC bên


trong của khối ADC.
trong của khối ADC.


Kết quả chuyển đổi từ tín hiệu tương tự sang số là 10 Bit số tương ứng và được
Kết quả chuyển đổi từ tín hiệu tương tự sang số là 10 Bit số tương ứng và được



lưu trong 2 thanh ghi:
lưu trong 2 thanh ghi:


ADRESH, ADRESL.
ADRESH, ADRESL.
Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng
Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng


như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả
như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả
sẽ được lưu vào 2 thanh ghi
sẽ được lưu vào 2 thanh ghi


ADRESH, ADRESL
ADRESH, ADRESL
.
.
Bit
Bit
được xóa về
được xóa về


0
0
và cờ ngắt
và cờ ngắt



ADIF
ADIF


được
được


SET
SET
.
.
II. KHỐI ADC TRONG PIC


Các thanh ghi liên quan đến bộ chuyển đổi ADC
Ø
Thanh ghi ADCON0 ( ADDRESS 1FH): có chức năng điều khiển hoạt động
của thanh ghi ADC.
Bit 6-7: các bit lựa chọn xung chuyển đổi AD.
Bit 3-5: các bit lựa chọn kênh tương tự.
Bit 2 : bit báo trạng thái chuyển đổi ADC
Bit 1 : Chưa dùng nếu đọc là ‘0’
Bit 0 : bit mở nguồn cho ADC hoạt động.
Bit 7,6 : Dùng lựa chọn tần số chuyển đổi
Bit 5-3 : CHS2:CHS0: Các bit lựa chọn kênh tương tự
Bit 5-3 : CHS2:CHS0: Các bit lựa chọn kênh tương tự
Ø

Ø
Bit 2: GO/DONE:
Bit 2: GO/DONE:


Bit này bằng 1 khi chuyển đổi ADC đang diễn ra.
Bit này bằng 1 khi chuyển đổi ADC đang diễn ra.


Bit này bằng 0 khi quá trình chuyển đổi kết thúc.
Bit này bằng 0 khi quá trình chuyển đổi kết thúc.
Ø
Ø
Bit 0: ADON
Bit 0: ADON


Bit này bằng 1 thì khối ADC được mở nguồn
Bit này bằng 1 thì khối ADC được mở nguồn


Bit này bằng 0 thì khối ADC bị tắt nguồn để giảm bớt công suất
Bit này bằng 0 thì khối ADC bị tắt nguồn để giảm bớt công suất


tiêu thụ.
tiêu thụ.
Thanh ghi ADCON1 ( ADDRESS 9FH)
Thanh ghi ADCON1 ( ADDRESS 9FH)
:

:


Thiết lập chức năng cho các chân của Port là ngõ vào nhận tương tự hoặc
Thiết lập chức năng cho các chân của Port là ngõ vào nhận tương tự hoặc


chân xuất nhập I/O
chân xuất nhập I/O
Bit 7 : bit lựa chọn định dạng kết quả ADC.
Bit =1 canh lề phải,ngược lại canh lề trái.
Bit 6 ( ADCS2): bit lựa chọn xung clock cho chuyển đổi ADC.
Bit 5-4: chưa dùng nếu đọc sẻ có giá trị là ‘0’.
Bit 3-0: bit điều khiển ADC.
THANH GHI ADRESH, ADRESL
THANH GHI ADRESH, ADRESL

Chứa kết quả 10 bits của chuyển đổi
III.
III.
Quy trình chuyển đổi từ tương tự sang số gồm những bước sau
Quy trình chuyển đổi từ tương tự sang số gồm những bước sau


Thiết lập các thông số cho bộ chuyển đổi ADC
Thiết lập các thông số cho bộ chuyển đổi ADC

Chọn ngõ vào analog, chọn điện áp mẫu ( dựa trên các thông số của thanh
Chọn ngõ vào analog, chọn điện áp mẫu ( dựa trên các thông số của thanh



ghi ADCON1).
ghi ADCON1).




Chọn kênh chuyển đổi AD ( thanh ghi ADCON0).
Chọn kênh chuyển đổi AD ( thanh ghi ADCON0).


Chọn xung clock cho kênh chuyển đổi AD ( thanh ghi ADCON0).
Chọn xung clock cho kênh chuyển đổi AD ( thanh ghi ADCON0).


Cho phép bộ chuyển đổi AD hoạt động ( thanh ghi ADCON0).
Cho phép bộ chuyển đổi AD hoạt động ( thanh ghi ADCON0).


Thiết lập các cờ ngắt cho bộ ADC
Thiết lập các cờ ngắt cho bộ ADC
Ø Clear bit ADIF
(ADC Interrupt Flag bit =0 chưa hoàn thành chuyển đổi)
(ADC Interrupt Flag bit =0 chưa hoàn thành chuyển đổi)
Ø Set bit ADIE
( ADC Interrupt Enable bit=1 cho phép ngắt ADC
( ADC Interrupt Enable bit=1 cho phép ngắt ADC
Ø Set bit PEIE
( Peripheral Interrupt Enable bit = 1 cho phép tất cả các ngắt
( Peripheral Interrupt Enable bit = 1 cho phép tất cả các ngắt



ngoại vi)
ngoại vi)
Ø Set bit GIE
(Global Interrupt Enable bit= 1 cho phép tất cả các ngắt)
(Global Interrupt Enable bit= 1 cho phép tất cả các ngắt)


Đợi cho quá trình lấy mẫu hoàn tất
Đợi cho quá trình lấy mẫu hoàn tất
 Bắt đầu quá trình chuyển đổi ( Set Bit )

 Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách:
Kiểm tra Bit . Nếu Bit =0 thì quá trình chuyển đổi
hoàn tất.
Kiểm tra cờ ngắt.
 Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit ( nếu cần tiếp tục
chuyển đổi).
Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo.
IV.
IV.
BÀI TOÁN
BÀI TOÁN


Đọc giá trị ADC 8 bit ở chân AN0 (điều chỉnh bằng biến trở 10k),
và kiểm tra
và kiểm tra



nếu áp ngõ vào analog > 2.5V thì bật các LED gắn ở PORTB lên.
nếu áp ngõ vào analog > 2.5V thì bật các LED gắn ở PORTB lên.


CHƯƠNG TRÌNH:
CHƯƠNG TRÌNH:
#include <pic.h>
__CONFIG(0X3F7A);
#define _XTAL_FREQ 20000000
void port_init(void);
void adc_init(void);
void int_init(void);
void interrupt isr(void);
//
void port_init(void)
{
TRISA0 = 1; //khai bao RA0 la Input de doc ADC
TRISB = 0X00; //khai bao PortB xuat LED nen la OutPut
PORTB = 0xFF; // Tat het LED o portB
}
//
void adc_init(void)
{
PCFG0=0; //chon dien ap mau dua tren cac thong so cua thanh ghi ADCON1
PCFG1=0; // VREF+ =VDD, VREF- = VSS
PCFG2=0;
PCFG3=0;

ADCS1 = 0; // chon tan so lay mau // ADC conversion clock: = Fosc/8

ADCS0 = 1;
// Select Input chanel: AN0
CHS1 = 0; // CHS <2:0> = 000 Select AN0
CHS2 = 0;
CHS0 = 0;
ADFM = 1; // ADFM = 1 Right justified ADFM = 0 Left justified Result format
ADON = 1; // Turn on ADC Module
__delay_ms (1); //delay to wait for adc module init.
}
//
//interrupt initialization THIET LAP CO NGAT CHO BO ADC
void int_init()
{
GIE = 1; //Global Interrupt Enable //cho phep tat cac cac ngat xay ra
PEIE = 1; //Peripheral Interrupt Enable // cho phep tat ca ngat ngoai vi
ADIE = 1; //ADC Interrupt Enable // cho phep ngat adc
ADIF = 0; //Clear ADC Interrupt Flag // xoa co ngat
}
//
void interrupt isr()
{
int ADC_result;
if (ADIF== 1) //neu ngat adc xay ra
{
ADIF = 0; //Clear ADC Interrupt Flag//Read ADC result
ADC_result = (ADRESH<<8)|ADRESL;

if (ADC_result> 512) //V_in > 2.5V <=> ADC_result > 512
{
PORTB = 0; //bat cac led o port b

}
else
{
PORTB = 0xFF;
}
}
}
void main(void)
{
port_init();
adc_init();
int_init();
while(1)
{
__delay_us(50); //delay between 2 AD conversions //delay giua 2 lan chuyen doi
GO_DONE = 1; //Set GODONE bit to start conversion //BAT BIT GO/DONE
DE BAT DAU LAN CHUYEN DOI TIEP THEO
};
}

×