PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Đo nhiệt độ với LM335 (http://www.picvietnam.com/forum/showthread.php?t=5352)

tthong 21-11-2009 08:26 AM

Đo nhiệt độ với LM335
 
Chào mọi người!
Em mới tập viết về Pic nên có vấn đề sau muốn hỏi mọi người. Giờ em đang thử mô phỏng protues để đo nhiệt độ dùng LM335. sơ đồ và code như sau:


#include <16F877a.h>
#include <def_877a.h>
#device *=16 adc=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd.c>
//#include <lcd_NTT.H>
#include <luutinh.h>

void main()
{
float value;
set_tris_a(0xFF);
set_tris_d(0x00);

setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_us(100);

value=(float)read_adc();
value=(value-558.5)/2.048;

lcd_init();
while(1)
{
value=(float)read_adc();
value=(value-558.5);
lcd_gotoxy(1,1);
printf(lcd_putc,"TEMPERATURE WARN\n");
lcd_gotoxy(1,2);
printf(lcd_putc,"TEMP. NOW : %u",value);

}
}

Em Dùng biến trở nối với chân adj của lm335. Khi Lm335 tại 0 độ C thì ngõ ra điện áp của Lm335 là 2,73V. sau đó nếu nhiệt độ LM335 thay đổi thì điện áp ngõ ra ở chân LM335 thay đổi và nhiệt độ hiển thị trên LCD cũng thay đổi.

Nhưng trong mô phỏng thì nó không diễn ra như vậy. Nhiệt độ hiển thị trên LCD luôn là 134. đôi lúc khi chỉnh lại thì nó chỉ dao đông từ 129 tới 135 đô.
Mong mọi người giúp đỡ.

link: http://www.mediafire.com/?wjgytmmgtyg
Cảm ơn!

phamquang_hung 21-11-2009 10:09 AM

Trích:

Nguyên văn bởi tthong (Post 31458)
Chào mọi người!
Em mới tập viết về Pic nên có vấn đề sau muốn hỏi mọi người. Giờ em đang thử mô phỏng protues để đo nhiệt độ dùng LM335. sơ đồ và code như sau:


#include <16F877a.h>
#include <def_877a.h>
#device *=16 adc=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd.c>
//#include <lcd_NTT.H>
#include <luutinh.h>

void main()
{
float value;
set_tris_a(0xFF);
set_tris_d(0x00);

setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_us(100);

value=(float)read_adc();
value=(value-558.5)/2.048;

lcd_init();
while(1)
{
value=(float)read_adc();
value=(value-558.5);
lcd_gotoxy(1,1);
printf(lcd_putc,"TEMPERATURE WARN\n");
lcd_gotoxy(1,2);
printf(lcd_putc,"TEMP. NOW : %u",value);

}
}

Em Dùng biến trở nối với chân adj của lm335. Khi Lm335 tại 0 độ C thì ngõ ra điện áp của Lm335 là 2,73V. sau đó nếu nhiệt độ LM335 thay đổi thì điện áp ngõ ra ở chân LM335 thay đổi và nhiệt độ hiển thị trên LCD cũng thay đổi.

Nhưng trong mô phỏng thì nó không diễn ra như vậy. Nhiệt độ hiển thị trên LCD luôn là 134. đôi lúc khi chỉnh lại thì nó chỉ dao đông từ 129 tới 135 đô.
Mong mọi người giúp đỡ.

link: http://www.mediafire.com/?wjgytmmgtyg
Cảm ơn!

trong file donhietdo.h sao lại có dòng fuse LV cái này là sử dụng clock < 200KHz
mà trong chương trình chính bạn đã dùng HS và clock 20MHz rồi
trong mô phỏng thì ko cần biến trở, chỉ cần nối ngược con LM335 qua 1 con trở 1k
điện áp lấy ở giữa 2 con đó
còn dòng value=(value-558.5) trong vòng lặp while sao lại ko chia cho 2.048
giá trị của value bạn nên đổi qua hai chữ số và viết từng kí tự đó lên LCD sẽ dễ kiểm soát hơn
file mô phỏng t ko mở được nên chỉ giúp bạn được bấy nhiêu


Múi giờ GMT. Hiện tại là 06:04 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam