adc với pic 18f4520

5
 ADC vớ i Pic 18f4520 1.Giớ i Thiu: Bchuy n đổi tương t-shay gi tt là ADC đượ c viết tt bở i cm t tiếng anh (Analog to Digital Converter) nó có chc năng ly mc đin áp vào tương tsau mt thờ i gian biến đổi nó s sinh ra mã đầu ra dng sbiu din đầu vào tương t.Bchuy n đổi tương t ng dng r t r ng rãi trong đo lường và điu khin sdng vi điu khin thuc h VĐK 8051 không đượ c tích hợ  p Mudule ADC trong chip vì v y t p cho mch đin.ADC đượ c ng dng r ng rãi trong đo lườ ng chúng ta càn phi ghép ni vớ i vi mch biến đổi ADC,ví d như ADC0804,sghép ni này to ra sphc điu khin nên các hãng s n xut đã tích hợ  p module ADC vào trong chip,r t tin chúng l ợ i cho vic phát trin các ng dng.Trong nôi dung bài vi ết này ta snghiến cu c th v ADC trong vi điu khin PIC 18f4520 ca hãng Microchip các thông sk thut quan tr ng ca ADC: - Độ phân gii ca ADC đượ c biu th bng sbít ca tín hiu đầu ra.S lượ ng bít càng nhi u thì sai s lượ ng tcàng nh -Tc độ chuyn đổi được xác định bng thờ i gian hoàn thành mt ln chuyn đổi.Thờ i gian này đượ c tính tkhi có lnh điu khin chuyn đổi đến khi có tín hiu s đầu ra. 2.Bchuyn đổi ADC trong vi điu khin PIC18f4520 -Giớ i thiu vADC 10 bít trong pic18f4520. VI điu khin PIC 18f4520 đượ c tích hợ  p module ADC vi 13 đầu vào tương ttAN0 - AN12,độ phân gii lad 10 bít s. *các thanh ghi trong mudule ADC +Thanh ghi cha k ết quca byte cao ADRESH(A/D result high register) +Thanh ghi cha k ết quca byte th p ADRESH(A/D result low register)

Upload: le-thanh-loan

Post on 03-Apr-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

7/29/2019 ADC với Pic 18f4520

http://slidepdf.com/reader/full/adc-voi-pic-18f4520 1/5

 

ADC vớ i Pic 18f4520 

1.Giớ i Thiệu:

Bộ chuyển đổi tương tự -số hay gọi tắt là ADC đượ c viết tắt bở i cụm từ tiếng anh (Analog to

Digital Converter) nó có chức năng lấy mức điện áp vào tương tự sau một thờ i gian biến đổi nó

sẽ sinh ra mã đầu ra dạng số biểu diễn đầu vào tương tự .Bộ chuyển đổi tương tự ứng dụng r ất

r ộng rãi trong đo lường và điều khiển sử dụng vi điều khiển thuộc họ VĐK 8051 không đượ ctích hợ  p Mudule ADC trong chip vì vậy tạ p cho mạch điện.ADC đượ c ứng dụng r ộng rãi trong

đo lườ ng chúng ta càn phải ghép nối vớ i vi mạch biến đổi ADC,ví dụ như ADC0804,sự ghép nốinày tạo ra sự phức điều khiển nên các hãng sản xuất đã tích hợ  p module ADC vào trong chip,r ất

tiện chúng lợ i cho việc phát triển các ứng dụng.Trong nôi dung bài viết này ta sẽ nghiến cứu cụ 

thể về ADC trong vi điều khiển PIC 18f4520 của hãng Microchip

các thông số k ỹ thuật quan tr ọng của ADC:

- Độ phân giải của ADC đượ c biểu thị bằng số bít của tín hiệu đầu ra.Số lượ ng bít càng nhiều thì

sai số lượ ng tử càng nhỏ 

-Tốc độ chuyển đổi được xác định bằng thờ i gian hoàn thành một lần chuyển đổi.Thờ i gian này

đượ c tính từ khi có lệnh điều khiển chuyển đổi đến khi có tín hiệu số đầu ra.

2.Bộ chuyển đổi ADC trong vi điều khiển PIC18f4520-Giớ i thiệu về ADC 10 bít trong pic18f4520.

VI điều khiển PIC 18f4520 đượ c tích hợ  p module ADC với 13 đầu vào tương tự từ AN0 -

AN12,độ phân giải lad 10 bít số.

*các thanh ghi trong mudule ADC

+Thanh ghi chứa k ết quả của byte cao ADRESH(A/D result high register)

+Thanh ghi chứa k ết quả của byte thấ p ADRESH(A/D result low register)

7/29/2019 ADC với Pic 18f4520

http://slidepdf.com/reader/full/adc-voi-pic-18f4520 2/5

+Thanh ghi điều khiển A/D 0 ADCON0 (A/D control register 0)

Thanh ghi ADCON0 đượ c sử dụng để điều khiển hoạt động của các module AD.thanh ghi

ADCON1 đượ c sử dụng để cấu hình các chân AN0 đến AN12 của các cổng vào /ra(vào ra tươngtự hay song song).Thanh ghi ADCON2 đượ c sử dụng để cấu hình nguồn xung cho module

ADC,thờ i gian thu nhận và lựa chọn cách đặt 10 bít số sau khi biến đổi vào thanh ghi k ết quả 

ADRESH và ADRESL.

 Nguyên Lý:

7/29/2019 ADC với Pic 18f4520

http://slidepdf.com/reader/full/adc-voi-pic-18f4520 3/5

 

Code Chương Trình 

#include<p18f4520.h>

#include<stdio.h>

#include <adc.h> // gọi hàm adc

#include <delays.h>

#define LCD_DATA PORTD

#define LCD_RS PORTEbits.RE0

#define LCD_RW PORTEbits.RE1

#define LCD_EN PORTEbits.RE2

char mang[80];

unsigned int AD; // giá tr ị số khi đọc ADC

void khoitao(void);//định nghĩa hàm khở i tạo có kiểu k xác định

void ghilenh(char lenh);//định nghĩa hàm ghi lệnh kiểu char 

void ghidata(char data);

void chuoi (char *str);//định nghĩa chuỗi

void ADC0(void);// hàm đọc ADC0

void ADC0(void)

{

OpenADC(

ADC_FOSC_32 & // chọn tần số hoạt động hay nghĩa là khai báo xung nhị p chuyển đổi ad=1/32xung nhị p hệ thống

ADC_RIGHT_JUST & //khai báo dồn phải dữ liệu khi chuyển đổi

ADC_12_TAD,//12 AD chuyển đổi đồng hồ chậm tr ễ 

ADC_CH0 & //chọn kênh CH0

ADC_INT_OFF& //khai bao không sử dụng ngắt cho ADC

ADC_VREFPLUS_VDD& //Vref+ = 5V

ADC_VREFMINUS_VSS, //Vref- = 0V

14);//ADCON1=OX0E;E=14 //chọn chân AN0

ConvertADC(); // bắt đầu hoạt động

while(BusyADC() ); // chờ hoạt đọng xong

AD = ReadADC(); // đọc và lưu giá trị vào AD

CloseADC(); // dừng hoạt động

}

void khoitao (void)

7/29/2019 ADC với Pic 18f4520

http://slidepdf.com/reader/full/adc-voi-pic-18f4520 4/5

{

ghilenh(0x03);

ghilenh(0x38);

ghilenh(0x06);

ghilenh(0x0c);

ghilenh(0x01);

}

void ghilenh (char lenh)

{

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 1;

LCD_DATA = lenh;LCD_EN = 0;

Delay1KTCYx(10);//10mS

}

void ghidata (char data)

{

if(data=='\n')

{

ghilenh(0xC0);

Delay1KTCYx(10);//10mS

return;}

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 1;

LCD_DATA = data;

LCD_EN = 0;

Delay1KTCYx(10);//10mS

}

void ghichuoi (char *str)

{

while(*str)

{

ghidata(*str);

str++;

}

7/29/2019 ADC với Pic 18f4520

http://slidepdf.com/reader/full/adc-voi-pic-18f4520 5/5

}

void main()

{

float AD1;

unsigned int AD2;

TRISD=0x00;//set port D là đầu ra

TRISE=0X00;

TRISA=0X01; //chọn RA0 là chiều vào

ADCON1=0X0E; //chọn kênh CH0

khoitao();

ghilenh(0x82);

sprintf(&mang[0],"Welcome to ");

ghichuoi(&mang[0]);

ghilenh(0xc2);sprintf(&mang[0],"Techshowvn.com ");

ghichuoi(&mang[0]);

Delay1KTCYx(10000);

while(1)

{

ADC0(); // đọc ADC0

AD1=(float)(AD*5)/1023; // tính ra giá tr ị điện áp

AD2=(unsigned int)(AD1*1000);//chuyển về mV, ép kiểu số nguyên// hiển thị lên LCD giá tr ị số đọc đượ c AD và giá tr ị điện áp tương ứng

ghilenh(0X80);

sprintf(&mang[0],"ADC0 = %4d \nVolt = %d.%d V ",AD,AD2/1000,AD2%1000);

ghichuoi(&mang[0]);

}

}