![]() |
Đ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! |
Trích:
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