intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài 5: ADC

Chia sẻ: Đỗ Hồng | Ngày: | Loại File: PDF | Số trang:18

92
lượt xem
19
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL Khi quá trình chuyển đổi hoàn tất , bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set

Chủ đề:
Lưu

Nội dung Text: Bài 5: ADC

  1. Bài 5: ADC Nội dung  Modul ADC trong PIC16F877A  Ứng dụng của ADC
  2. Giới thiệu  ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu tương tự sang số.  PIC16F877A có 8 ngõ vào analog ( AN7:AN0).  Hiệu điện thế chuẩn 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 hai chân RA2 và RA3.
  3. Giới thiệu  Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL  Khi quá trình chuyển đổi hoàn tất , bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set.
  4. Quy trình chuyển đổi ADC Thiết lập các thông số cho bộ chuyển đổi ADC: 1. -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). bit 7 ADFM: A/D Result Format Select bit bit 6 ADCS2: A/D Conversion Clock Select bit
  5. 1. Thiết lập các thông số cho ADC bit 3-0 PCFG3:PCFG0: A/D Port Configuration Control bits
  6. 1. Thiết lập các thông số cho ADC -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). -Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0). Bit 7,6 ADCS1:ADCS0 A/D Conversion Clock Select bit
  7. 1. Thiết lập các thông số cho ADC Bit 5-3 CHS2:CHS0 - Analog Channel Select bit Các bit này dùng để chọn kênh chuyển đổi ADC 000 kênh 0 (AN0) 001 kênh 1 (AN1)… 111 kênh 7 (AN7) Bit 2 A/D Conversion Status bit (Khi ADON = 1) =1 A/D đang hoạt động(set bit này sẽ làm khởi động ADC và tự xóa khi quá trình chuyển đổi kết thúc) =0 A/D không hoạt động Bit 0 ADON - A/D On bit(ADON = 1 bật A/D)
  8. Quy trình chuyển đổi ADC 2. Thiết lập các cờ ngắt cho bộ AD( không bắt buộc) • Clear bit ADIF(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 ) • Set bit PEIE( Peripheral Interrupt Enable bit = 1 cho phép tất cả các ngắt ngoại vi) • Set bit GIE(Global Interrupt Enable bit= 1 cho phép tất cả các ngắt)
  9. Quy trình chuyển đổi ADC 3. Đợi 1 khoảng thời gian cần thiết( 20us). 4. Bắt đầu quá trình chuyển đổi (set bit ) 5. Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách: Dò bit GO/DONE có bị xóa chưa, hoặc chờ ngắt A/D( nếu dùng ngắt) 6. Đọc kết quả chuyển đổi và xóa cờ ngắt ADIF ( nếu dùng ngắt) , set bit GO/DONE ( nếu cần tiếp tục chuyển đổi)
  10. CCS
  11. Các lệnh trong CCS - #device ADC=xx với xx là số bit .Với PIC16F877A thì xx=08 hoặc xx=10. - Setup_ADC(mode) Mode có thể là: // Tắt ADC ADC_OFF //thời gian lấy mẫu bằng xung Clock/2 ADC_CLOCK_DIV_2 //thời gian lấy mẫu bằng xung Clock/4 ADC_CLOCK_DIV_4 //thời gian lấy mẫu bằng xung Clock/8 ADC_CLOCK_DIV_8 //thời gian lấy mẫu bằng xung Clock/16 ADC_CLOCK_DIV_16 //thời gian lấy mẫu bằng xung Clock/32 ADC_CLOCK_DIV_32 //thời gian lấy mẫu bằng xung Clock/64 ADC_CLOCK_DIV_64 //thời gian lấy mẫu 2-6us ADC_CLOCK_INTERNAL
  12. Các hàm trong CCS - Setup_ADC_ports(Value) Dùng để xác định chân lấy tín hiệu analog và điện thế chuẩn sử dụng. Value là:
  13. Các hàm trong CCS - Set_ADC_channel(channel) chọn chân để đọc vào giá trị analog bằng lệnh Read_adc().Với PIC16F877A channel=0->7 - Read_adc([mode]) Dùng đọc giá trị ADC từ thanh ghi(cặp thanh ghi) chứa kết quả biến đổi ADC. Mode không bắt buộc: ADC_START_AND_READ ADC_START_ONLY ADC_READ_ONLY - adc_done( ) Nó trả về TRUE nếu đã thực hiện chuyển đổi A/D, FALSE nếu vẫn còn bận.
  14. Bài toán Đọc giá trị ADC 8 bit ở chân AN0(điều chỉnh bằng biến trở 10k), đọc và xuất ra dãy led ở portd.
  15. Sơ đồ thuật toán Chương trình chính Đọc giá trị ADC Hiển thị ADC lên PORTD
  16. Chương trình #include #include #fuses NOWDT,HS,PUT,NOPROTECT #device 16f877a*=16 adc=8 #use delay(clock=20000000) int8 adc; main() { trisd=0;//dau ra setup_adc(adc_clock_internal);//thoi gian lay mau 2-6us setup_adc_ports(an0);//AN0 nhan analog set_adc_channel(0);//chon chan de doc delay_ms(10); while(1) {adc=read_adc(); portd=adc; } }
  17. Bài toán Đo nhiệt độ sử dụng LM35 trên chân AN1.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2