BÀI 21 : ADC PIC16F887 XC8 - Lập Trình PIC
Có thể bạn quan tâm
Menu Lập trình PIC PIC16F887 BÀI 21 : ADC PIC16F887 XC8 BÀI 21 : ADC PIC16F887 XC8 3:45:00 AM PIC16F887
Chức năng các thành phần: AN0 đến AN13 (analog) là 14 ngõ vào của 14 kênh tương tự được đưa đến mạch đa hợp. CHS<3:0> là các ngõ vào chọn kênh của bộ đa hợp tương tự. Tín hiệu kênh tương tự đã chọn sẽ được đưa đến bộ chuyển đổi ADC. Điện áp tham chiếu dương Vref+ có thể lập trình nối với nguồn cung cấp dương AVDD hoặc điện áp tham chiếu bên ngoài nối với ngõ vào Vref+ của chân AN3, bit lựa chọn là VCFG0. Điện áp tham chiếu âm Vref- có thể lập trình nối với nguồn cung cấp AV SS hoặc điện áp tham chiếu bên ngoài nối với ngõ vào Vre- của chân AN2, bit lựa chọn là VCFG1. Hai ngõ vào Vref+ và Vref- có chức năng thiết lập độ phân giải cho ADC. Bit ADON có chức năng cho phép ADC hoạt động hoặc tắt bộ ADC khi không hoạt động để giảm công suất tiêu tán, ADON bằng 1 thì cho phép, bằng 0 tắt. Kết quả chuyển đổi là số nhị phân 10 bit sẽ lưu vào cặp thanh ghi 16 bit có tên là ADRESH và ADRESL, 10 bit kết quả lưu vào thanh ghi 16 bit nên có dạng lưu là canh lề trái và canh lề phải tùy thuộc vào bit lựa chọn có tên ADFM. ADC có 14 kênh nhưng mỗi thời điểm chỉ chuyển đổi 1 kênh và chuyển đổi kênh nào thì phụ thuộc vào 4 bit chọn kênh CHS4:CHS0. Hai ngõ vào điện áp tham chiếu dương và âm có thể lập trình nối với nguồn VDD và VSS hoặc nhận điện áp tham chiếu từ bên ngoài qua 2 chân RA3 và RA2. Khối ADC độc lập với CPU nên có thể hoạt động khi CPU đang ở chế độ ngủ do xung cung cấp cho ADC lấy từ dao động RC bên trong của khối ADC. 2. KHẢO SÁT CÁC THANH GHI CỦA PIC 16F887 Khối ADC có 4 thanh ghi: Thanh ghi lưu kết quả byte cao: ADRESH (A/D Result High Register) Thanh ghi lưu kết quả byte thấp: ADRESL (A/D Result Low Register) Thanh ghi điều khiển ADC thứ 0: ADCON0 (A/D Control Register 0) Thanh ghi điều khiển ADC thứ 1: ADCON1 (A/D Control Register 1) a. Thanh ghi ADCON0 (ADC Control register)chứa các bit điều khiển khối ADC như sau:
- Bit 7-6 ADCS<1:0>: Các bit lựa chọn xung chuyển đổi AD (AD Conversion Clock Select bits) : 00 = FOSC/2 01 = FOSC/8 10 = FOSC/32 11 = FRC (xung clock lấy từ bộ dao động nội bên trong có tần số lớn nhất là 500 kHz) Bit 5-3 CHS<3:0>: Các bit lựa chọn kênh tương tự (Analog Channel Select bits) như bảng 7-1:
- Bit 2 DONE GO /: bit báo trạng thái chuyển đổi ADC (A/D Conversion status bit) Khi cho GO/DONE = 1 để bắt đầu thực hiện quá trình chuyển đổi. Sau khi chuyển đổi xong thì mạch chuyển đổi làm bit GO/DONE xuống mức 0. - Bit 0 ADON: bit mở nguồn cho ADC hoạt động (AD ON bit): ADON = 1 có chức năng mở nguồn cho khối chuyển đổi ADC hoạt động. ADON = 0 sẽ tắt nguồn khối chuyển đổi ADC để giảm công suất tiêu thụ. b. Thanh ghi ADCON1 thiết lập các chân của port là tương tự hoặc xuất nhập số IO.
- Bit 7 ADFM: bit lựa chọn định dạng kết quả ADC (AD Result Format Select bit): ADFM = 1: có chức năng canh lề phải, 6 bit MSB của ADRESH có giá trị là „0‟. ADFM = 0: có chức năng canh lề trái, 6 bit LSB của ADRESL có giá trị là „0‟. - Bit 5 VCFG1: bit lựa chọn điện áp tham chiếu (Voltage reference bit) VCFG1 = 1: có chức năng nối điện áp tham chiếu Vref- với ngõ vào AN3. VCFG1 = 0: có chức năng nối điện áp tham chiếu Vref- với VSS. - Bit 4 VCFG0: bit lựa chọn điện áp tham chiếu (Voltage reference bit) VCFG0 = 1: có chức năng nối điện áp tham chiếu Vref+ với ngõ vào AN3 . VCFG0 = 0: có chức năng nối điện áp tham chiếu Vref+ với VDD - Bit 6, 3-0: chưa dùng nếu đọc sẽ có giá trị là „0‟ c. Thanh ghi ADRESH và ADRESL Cặp thanh ghi 16 bit ADRESH: ADRESL dùng để lưu kết quả chuyển đổi 10 bit của ADC sau khi chuyển đổi xong. Do kết quả chỉ có 10 bit nhưng lưu trong cặp thanh ghi 16 bit nên có 2 kiểu định dạng tùy thuộc vào bit ADFM (ADC Format). Hình sau trình bày 2 kiểu định dạng của cặp thanh ghi kết quả:
Chức năng của canh lề phục vụ cho 2 khả năng xử lý kết quả: nếu lấy kết quả 10 bit để xử lý thì nên chọn chế độ canh lề phải, còn nếu lấy kết quả 8 bit thì chọn chế độ canh lề trái và chỉ lấy kết quả của thanh ghi byte cao ADRESH, bỏ đi 2 bit có trọng số thấp nhất của thanh ghi ADRESL và chú ý đến tính toán giá trị, trong chương trình C nếu không khai báo thuộc tính ADC 10 bit thì phần mềm tự động lấy giá trị 8 bit cao. 3. TRÌNH TỰ THỰC HIỆN CHUYỂN Để thực hiện chuyển đổi ADC thì phải thực hiện các bước sau: - Bước 1: Cấu hình cho port: Cấu hình cho các port ở chế độ ngõ vào tương tự. Không được định cấu hình cho các port ở chế độ xuất dữ liệu. - Bước 2: Cấu hình cho module ADC: Chọn xung clock cho chuyển đổi ADC. Định cấu hình cho điện áp chuẩn. Chọn kênh ngõ vào tương tự cần chuyển đổi. Chọn định dạng cho 2 thanh ghi lưu kết quả. Mở nguồn cho ADC. - Bước 3: Thiết lập cấu hình ngắt ADC nếu sử dụng: Xóa cờ báo ngắt ADIF của ADC. Cho bit ADIE bằng 1 để cho phép ADC ngắt. Cho bit PEIE bằng 1 để cho phép ngắt ngoại vi. Cho bit GIE bằng 1 để cho phép ngắt toàn cục. - Bước 4: Chờ hết thời gian ổn định theo yêu cầu. - Bước 5: Bắt đầu chuyển đổi bằng cách cho bit GO/DONE lên 1. - Bước 6: Kiểm tra chuyển đổi ADC kết thúc bằng cách: Kiểm tra liên tục bit GO/DONE nếu về 0 thì quá trình chuyển đổi kết thúc. Nếu dùng ngắt thì chờ ngắt ADC xảy ra. - Bước 7: Đọc cặp thanh ghi kết quả (ADRESH: ADRESL), xóa bit ADIF nếu dùng ngắt. - Bước 8: Thực hiện chuyển đổi kế tiếp. 4. LỰA CHỌN NGUỒN XUNG CHO CHUYỂN ĐỔI ADC Tần số xung clock cho bộ chuyển đổi ADC được lựa chọn bằng phần mềm bởi các bit ADCS nằm trong thanh ghi ADCON0. Có 4 lựa chọn cho nguồn xung clock như sau: FOSC/2 FOSC/8 FOSC/32 FRC lấy từ bộ dao động bên trong. Tần số xung clock tùy chọn phụ thuộc vào tần số bộ dao động như bảng 7-2:
Thời gian chuyển đổi ADC cho mỗi bit được xác định bởi chu kỳ TAD. Để chuyển đổi hoàn tất 10 bit sẽ dùng tối thiểu 11 chu kỳ TAD như hình 7-5.
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình. #include <stdio.h> #include <stdlib.h> #include <xc.h> #define _XTAL_FREQ 4000000 // CONFIG1 #pragma config FOSC = XT // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) void ADC_Init() { ADCON0 = 0x41; ADCON1 = 0xC0; } unsigned int ADC_Read(unsigned char channel) { if(channel > 7) return 0; ADCON0 &= 0xC5; ADCON0 |= channel<<3; __delay_ms(2); GO_nDONE = 1; while(GO_nDONE); return ((ADRESH<<8)+ADRESL); } void main() { unsigned int a; TRISC = 0x00; TRISD = 0x00; PORTD = 0; PORTC = 0; ADC_Init(); do { a = ADC_Read(0); PORTC = a; PORTD = a>>8; __delay_ms(100); }while(1); } - Link download project Click here Share this
Author : Huỳnh Ngọc Lâm
Related Posts
Next « Prev Post Previous Next Post »2 nhận xét
Write nhận xét Unknown February 27, 2017 at 8:51 AM deletecăn trái sao lại dịch trái 8 bit ạ?
Reply
Unknown February 27, 2017 at 9:38 PM delete ADC 10bit PORTC là 8bit rồi PORTD là 2bit !
Reply
Subscribe to: Post Comments (Atom)
LIKE FANPAGE
Follow us
GOOGLE +
THÀNH VIÊN
PROJECT
- PIC16F877A CCS 51
- PIC16F877A XC8 40
- PIC16F887 30
- PIC18F4431 9
- PIC18F452 7
- PIC18F4550 XC8 7
- ARDUINO 6
- IC THÔNG DỤNG 6
- PIC16F628A 6
- PIC16F84A 6
- PIC18F4550 CCS 5
- ĐIỆN TỬ CĂN BẢN 5
- LINH KIỆN 4
- Protues 4
- VI XỬ LÝ 4
- MPLAB XC8 2
- PIC C 2
- TÀI LIỆU PLC 2
- 8051 1
- AUTOCARD 1
- Arduino IDE 1
- CẢM BIẾN QUANG 1
- CẢM BIẾN TIỆM CẬN ĐIỆN DUNG 1
- CẢM BIẾN TIỆN CẬN ĐIỆN CẢM 1
- CẢM BIẾN TỪ 1
- Keil C 1
XEM NHIỀU
-
HƯỚNG DẪN ĐỌC GIÁ TRỊ ĐIỆN TRỞ 1 Giới thiệu. a) Hình dáng và ký hiệu : Trong thiết bị điện tử điện trở là một linh kiện quan trọng , chúng được làm từ hợp chất cacbon v...
-
BÀI 11 : TIMER 1 PIC16F877A CCS Chào các bạn trong bài đăng trước mình đã hướng dẫn các bạn về timer0 và trong bài đăng này mình sẽ tiếp tục hướng dẫn các ban về timer1 c... -
BÀI 4 : GIAO TIẾP VỚI NÚT NHẤN PIC16F877A CCS (P2) Chào các bạn trong bài 3 mình đã giới thiệu với các bạn về cách giao tiếp với nút nhấn rồi bạn nào chưa xem thì xem lại tại đây để hiểu ... -
BÀI 30 : PWM VÀ L298 PIC16F877A CCS 1 .IC L298. IC L298 là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong. Với điện áp làm tăng công suất đầu ra từ 5V – 47V , dòng l... -
BÀI 7 : ĐẾM TỪ 0 ĐẾN 99 PIC16F877A CCS Chào các bạn trong bài đăng trước mình đã hướng dẫn các bạn giao tiếp với LED 7 SEG cụ thể là đếm từ 0 đến 9 còn trong bài đăng này mình s...
THỐNG KÊ
Từ khóa » Bộ Adc Trong Pic18f4520 Có Bao Nhiêu Kênh
-
Bài 14. PIC 18F450 Chuyển Đổi ADC
-
ADC - PIC - DevIOT
-
Tai Lieu Tra_cuu_pic 18f4520 - SlideShare
-
Pic18F4520 Là Vi điều Khiển được Sản Xuất Bởi Hãng Microchip
-
[VI ĐIỀU KHIỂN PIC] - BÀI 7: ANALOG (ADC) CỦA PIC TRONG CCS
-
TÌM HIỂU VỀ ADC CỦA VI ĐIỀU KHIỂN PIC 16F877A - Tài Liệu Text
-
TÀI LIỆU MÔN KĨ THUẬT VI XỬ LÍ PIC18F4520 - 123doc
-
Lập Trình PIC – Bài 4: Hướng Dẫn Code đọc ADC Với Vi điều Khiển PIC
-
Đọc Nhiều Kênh Adc, Lm35 + Uart Giao Tiếp 2Pic + Led 7 đoạn, Lập ...
-
Dùng Nhiều Kênh ADC Của PIC để đo [Lưu Trữ]
-
đọc Nhiều Kênh ADC Pic16f887 - Dien Tu Viet Nam
-
Cho Em Hỏi Về Tốc độ đo ADC - Dien Tu Viet Nam
-
Hướng Dẫn Sử Dụng Module ADC Dùng Vi điều Khiển PIC - Đà Nẵng
-
CHƯƠNG III CHUYỂN ĐỔI ADC TRÊN PIC16F877A - Chickgolden
-
Mô-đun ADC (Bộ Chuyển đổi Tương Tự Sang Số) Trong Vi điều Khiển ...
-
[PDF] Tài Liệu Học Tập Vi điều Khiển ứng Dụng Trong đo