Mạch đo nhiệt độ môi trường sử dụng adc của avr và cảm biến nhiệt độ lm35 Yêu cầu



tải về 16.36 Kb.
Chuyển đổi dữ liệu30.08.2016
Kích16.36 Kb.
#28405
Mạch đo nhiệt độ môi trường sử dụng ADC của AVR và cảm biến nhiệt độ LM35
1.Yêu cầu:

Đo được nhiệt độ từ LM35 hiển thị lên led 7 thanh.

Quy đổi các giá trị độ C và độ F

2.Lý thuyết:

Đối với ATMEGA 16L: 8 chân của PORTA sử dụng làm 8 kênh đầu vào ADC. Để sử dụng tính năng ADC của Atmega 16L chúng ta cần phải thiết kế phần cứng của Vi điều khiển như sau :

* Chân AVCC: Chân này được nối lên 5V để cấp nguồn ổn định cho ADC của vi điều khiển.
* Chân AREF: Chân này được sử dụng làm điện áp tham chiếu cho ADC của vi điều khiển, Với 1 giá trị đầu vào chúng ta có công thức tính như sau:

ADCx=(V_INT*1024)/ AREF


Giá trị ADCx tỉ lệ thuận với điện áp vào V_INT. Giá trị ADC thu được từ các kênh được lưu vào 2 thanh ghi ADCH và ADCL khi sử dụng chúng ta phải đọc giá trị từ các thanh ghi này, khi sử dụng ở ché độ 8 bít thì chỉ lưu vào thanh ghi ADCL.

3.Mô tả:

- Đầu ra của LM35 được nối với cổng A.0 của AVR. Tức là bit 0 và bit 1 của PORTA.

- Đối với cảm biến LM35 thì cứ 10mV tương ứng với 10C, ở 00C điện áp ra là 0V, tương ứng với giá trị ADC là 0. Với Vref=5V, giá trị của ADC từ 0 đến 256, lấy tròn 250 mức. Mỗi giá trị ADC ứng với 5V/250= 20 mV. Vậy 1 giá trị ADC ứng với 20C. Muốn tăng độ phân giải ADC ta giảm Vref.

4.Phần mềm:

- Phần khởi tạo các cổng của vi điều khiển, các bộ đếm, ngắt… được đặt chung vào trong chương trình con init(void)
Nội dung:
void init(void)

{

DDRA=0x00; // Cổng A không sử dụng, mặc định là 0x00

DDRB=0x0F; // Đặt 4 bit đầu của cổng B là cổng ra

DDRC=0xFF; // Đặt cổng C là cổng ra

DDRD=0x00; // Đặt cổng D là cổng vào

TCCR0=0x03; // Bật bộ đếm timer0

TCNT0=0x00;

OCR0=0x00;
MCUCR=0x00;

MCUCSR=0x00;

TIMSK=0x41; // Bật ngắt bộ đếm
ACSR=0x80; // Các thanh ghi khác

SFIOR=0x00;
ADMUX=0|(0x20 & 0xff); // Khởi tạo cho ADC

ADCSRA=0xCB;
#asm("sei")

}
Chương trình phục vụ ngắt cho ADC:

Nội dung chương trình:



interrupt [ADC_INT] void adc_isr(void)

{

static unsigned char input_index=0;

adc_data[input_index]=ADCH;

if (++input_index > (1)) input_index=0;

ADMUX=(0|(0x20 & 0xff))+input_index;

delay_us(10);

ADCSRA|=0x40;

}
Mạch sử dụng nguyên lý quét lần lượt các các led 7 thanh để hiển thị tất cả 4 led 7 thanh. Trên thực tế tại 1 thời điểm chỉ có 1 led sang, tuy nhiên do hiện tượng lưu ảnh của võng mạc nên mắt ta vẫn có cảm giác cả 4 led cùng sang. Để thực hiện quét led, ta dùng 1 bộ đếm, ở đây là bộ đếm timer0 đặt ở chế độ thông thường để lần lượt quét các led:
Chế độ thông thường là chế độ hoạt động đơn giản nhất của Timer .Bộ đếm sẽ liên tục đếm tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi động lại tại giá trị Bottom. Khi bộ đếm đạt giá trị TOP, sẽ sinh một ngắt tràn. Ta sử dụng ngắt này để quét các led.
Nội dung chương trình phục vụ ngắt cho timer0

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

if(led_index==4) led_index=0;

if(led_index==0)

{

led=led_a;

data=font[(temp/10)%10];

}

if(led_index==1)

{

led=led_b;

data=font[temp%10];

}

if(led_index==2)

{

led=led_c;

data=font[10];

}

if(led_index==3)

{

led=led_d;

if(nhiet_do==do_C) data=font[11]; else data=font[12];

}

led_index++;

}

Trong đó biến led_index (Đã khai báo đầu chương trình) được sử dụng để chỉ định led nào sáng trong mỗi một lần timer0 tràn và sinh ngắt.


Chương trình main(void) được sử dụng để gọi chương trình init(void), chỉnh sửa sai số và độ trôi từ giá trị của cảm biến LM35. Sử lí thay đổi giá trị nhiệt độ giữa độ C và độ F khi người dùng bấm nút.

void main(void)

{

init();

nhiet_do=do_C;

while(1)

{

if(nhiet_do==do_C) temp=adc_data[0]+5; else temp=adc_data[0]+37;

delay_ms(100);

if(!BT)

{

if(nhiet_do==do_C) nhiet_do=do_F; else nhiet_do=do_C;

}

}

}
Tài liệu đi kèm:
Datasheet LM35, Atmega16

Sơ đồ mạch vẽ bằng phần mềm Altium Designer Summer 09

Sơ đồ mạch và sơ đồ nguyên lý (bản pdf)

Phần mềm cho vi điều khiển viết bằng CodeVisionAVR



Phần mềm CodeVisionAVR

tải về 16.36 Kb.

Chia sẻ với bạn bè của bạn:




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương