230 likes | 540 Views
บทที่ 4 วงจร ADC. เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. Analog & Digital Signal. Analog Signal. Digital Signal. Digital Signal. Analog to Digital Converter. Quantize. Sampling and Hold. Sampling Rate Selection. Sampling Rate
E N D
บทที่ 4วงจร ADC เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง
Analog & Digital Signal Analog Signal Digital Signal Digital Signal
Analog to Digital Converter Quantize Sampling and Hold
Sampling Rate Selection Sampling Rate fs >= 2 Bandwidth
Sampling Rate Selection Resolution LSB = (Vref+-Vref-)/2k
ADC ของ PIC18F8722 • PIC18F8722 มีวงจร Analog to Digital Converter ขนาด 10 bit ทั้งหมด 16 วงจร (AN0-AN15)
Register ของ ADC • PIC มี Register ที่เกี่ยวกับ ADC ทั้งหมด 5 ตัวคือ • A/D Result High Register (ADRESH) • A/D Result Low Register (ADRESL) • A/D Control Register 0 (ADCON0) • A/D Control Register 1 (ADCON1) • A/D Control Register 2 (ADCON2)
ADRESH และ ADRESL • ADRESH และ ADRESL เป็น Register ที่ใช้เก็บผลลัพธ์ของการแปลง ADC
ADCON0 • ADCON0 เป็น Register ที่ใช้กำหนดว่าจะให้วงจร VAin ของวงจร ADC ต่อกับ AN ตัวที่เท่าใด (CHS3:0) • สั่งให้ ADC เริ่มทำงาน Go/DONE • และตรวจสอบว่า ADC ทำงานเสร็จหรือยัง ADON
ADCON1 • ADCON1 เป็น Register ที่ใช้กำหนดให้ AN ตัวใดทำงานเป็น Analog Input Port หรือทำงานเป็น Digital I/O Port (PCFG3:0) • และกำหนดให้ RA3/AN3 เป็น VRef+และ RA2/AN2 เป็น VRef-(VCFG1:0)
ADCON2 • ADCON2 เป็น Register ที่ใช้กำหนด Acquisition Time ของวงจร ADC
Acquisition Time • สัญญาณ Analog จะถูกป้อนผ่านสวิทซ์ไปเข้าที่ขา VAinของวงจร ADC • จากนั้น CHOLDจะถูกชาร์จประจุให้มีแรงดันเท่ากับขา VAin
Acquisition Time • เพื่อให้การแปลง ADC มีความถูกต้อง จะต้องให้แรงดันของ CHOLD เท่ากับ VAin • เนื่องจาก VAinชาร์จประจุ CHOLD ผ่าน RS, RSSดังนั้นจึงต้องใช้เวลาในการชาร์จประจุ เราเรียกเวลาดังกล่าวว่า Acquisition Time (TACQ)
เราสามารถตั้งค่า Acquisition Time ได้จาก ACQT<2:0> • เมื่อเซ็ทให้ GO/DONE = 1 PIC จะรอเป็นเท่ากับ Acquisition Time จากนั้นจึงเริ่มแปลง ADC • และเมื่อแปลง ADC เสร็จแล้ว GO/DONE จะเท่ากับ 0
#include <p18f8722.h> #include <adc.h> #include <delays.h> #include <timers.h> #define NUMBER_OF_LEDS 8 #pragma code int result; int shift; void main(void) { TRISAbits.TRISA0=1; TRISD = 0; PORTD = 0; ADCON1 = 0b00001110; ADCON2 = 0b10001010; ADCON0bits.ADON = 1; while(1) { ADCON0bits.GO=1; while(ADCON0bits.GO); result = ADRES; result >>=2; if(result==0) result = 1; // PORTD = result; PORTD=1<<shift; shift++; shift %=8; Delay10KTCYx(20); } }