Mình thì chỉ thích xài hàng made-in...tự tui thôi. Đây là đoạn code cho AVR để đọc ADC cho mình viết. Mình dùng để xài cho cái màn hình cảm ứng của điện thoại di động OK lắm.
//================================================== ==============
//Chuong trinh nay dung voi AVR chay voi tan so thach anh 4 MHz, thuc hien loc nhieu
//bang cach lay trung binh 8 lan doc.
int ADC_read(unsigned char input_sel)
{
char i;
int temp = 0;
int result = 0;
ADMUX |=(1<<REFS0);//Chon nguon tham khao ben trong chip
ADMUX += input_sel;//Chon kenh doc vao
//Chu y, trong truong hop nay, ket qua duoc canh phai
//Cau hinh cho phep ADC va chon tan so cho bo lay mau va cho phep bo ADC
ADCSRA |= (1<<ADEN)|(ADPS2)|(ADPS0);
//4MHz/32 = 125 kHz
//****Thuc hien thu lan chuyen doi dau tien*****
ADCSRA|=(1<<ADSC);//Bat dau chuyen doi, ADSC: ADC start conversion, bit nay bang 1 trong qua trinh chuyen doi, chuyen doi xong, bit nay bang 0
//Cho cho chuyen doi xong, co ADIF len 1
while (!(ADCSRA & (1<<ADIF)));//Khi chua ket thuc qua trinh chuyen doi thi co ADIF bang 0, ta nhay tai cho
//**********************************************
//Thuc hien phep chuyen doi ADC 8 lan nham thu duoc ket qua chinh xac nhat
for (i=0;i<8;i++)
{
ADCSRA|=(1<<ADSC);//Bat dau chuyen doi, ADSC: ADC start conversion, bit nay bang 1 trong qua trinh chuyen doi, chuyen doi xong, bit nay bang 0
//Cho cho chuyen doi xong, co ADIF len 1
while (!(ADCSRA & (1<<ADIF)));//Khi chua ket thuc qua trinh chuyen doi thi co ADIF bang 0, ta nhay tai cho
temp = ADCL;//Doc gia tri thanh ghi thap
temp += (ADCH<<8);//Cong voi gia tri thanh ghi cao nhan cho 256
result+=temp;//Cong them gia tri bo ADC vao bien result
}
result >>=3;//thuc hien viec chia ket qua cho 8 de lay trung binh
ADCSRA &= ~(1<<ADEN);//Tat bo ADC
return result;
}
//================================================== ==============
//Chuong trinh nay dung voi AVR chay voi tan so thach anh 4 MHz, thuc hien loc nhieu
//bang cach lay trung binh 8 lan doc.
int ADC_read(unsigned char input_sel)
{
char i;
int temp = 0;
int result = 0;
ADMUX |=(1<<REFS0);//Chon nguon tham khao ben trong chip
ADMUX += input_sel;//Chon kenh doc vao
//Chu y, trong truong hop nay, ket qua duoc canh phai
//Cau hinh cho phep ADC va chon tan so cho bo lay mau va cho phep bo ADC
ADCSRA |= (1<<ADEN)|(ADPS2)|(ADPS0);
//4MHz/32 = 125 kHz
//****Thuc hien thu lan chuyen doi dau tien*****
ADCSRA|=(1<<ADSC);//Bat dau chuyen doi, ADSC: ADC start conversion, bit nay bang 1 trong qua trinh chuyen doi, chuyen doi xong, bit nay bang 0
//Cho cho chuyen doi xong, co ADIF len 1
while (!(ADCSRA & (1<<ADIF)));//Khi chua ket thuc qua trinh chuyen doi thi co ADIF bang 0, ta nhay tai cho
//**********************************************
//Thuc hien phep chuyen doi ADC 8 lan nham thu duoc ket qua chinh xac nhat
for (i=0;i<8;i++)
{
ADCSRA|=(1<<ADSC);//Bat dau chuyen doi, ADSC: ADC start conversion, bit nay bang 1 trong qua trinh chuyen doi, chuyen doi xong, bit nay bang 0
//Cho cho chuyen doi xong, co ADIF len 1
while (!(ADCSRA & (1<<ADIF)));//Khi chua ket thuc qua trinh chuyen doi thi co ADIF bang 0, ta nhay tai cho
temp = ADCL;//Doc gia tri thanh ghi thap
temp += (ADCH<<8);//Cong voi gia tri thanh ghi cao nhan cho 256
result+=temp;//Cong them gia tri bo ADC vao bien result
}
result >>=3;//thuc hien viec chia ket qua cho 8 de lay trung binh
ADCSRA &= ~(1<<ADEN);//Tat bo ADC
return result;
}
Comment