PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 09-04-2011, 01:03 PM   #1
pdkxlily
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 27
:
Talking mạch đo nhiệt độ dùng lm35

Trích:
adc=8
while(TRUE)
{
lcd_init();
read=read_adc();
read =read*1.960784314;
printf(lcd_putc,"\rNhiet do: %u",read);
delay_us(20);
}
cho mình hỏi dãy số 1.960784314 (bài này mình lấy tham khảo) sao lúc mô phỏng nó sai 1 độ

Trích:
adc=10

while(TRUE)
{
lcd_init();
read=read_adc();
read =(read-558.5)/2.048+16;
printf(lcd_putc,"\rNhiet do: %u",read);
delay_us(20);
}
đây là bài mình sửa làm theo công thức value = (value ‐ 558.5)/2.048; // For 5V supply
// value = (value ‐ 754.8)/2.048; // For 3.7V Supply
// value = (value ‐ 698.2)/2.048; // For 4V supply
trong datashet nhưg chậm nhiệt độ thực tế 16C nên mình fai cộng 16C .ai có thể giải thích giồng mình vấn đề này đc ko à.thaks
File Kèm Theo
File Type: rar PIC16F877A_LM35_LCD.rar (904.7 KB, 639 lần tải)
pdkxlily vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-04-2011, 03:16 PM   #2
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
hjhj.
- Về sai số nhiệt độ 1 độ C ý, đó là mô phỏng thôi chứ còn khi mạch thật là <= 2 độ kia bạn ạ. Nếu dùng chế độ 8 bit thì phải chấp nhận thôi. Còn dùng chế độ 10 bit thì chính xác tới 0,5 độ C. Và cũng phụ thuộc vào tính toàn nữa. Khi hiển thị là số làm tròn rồi bạn ạ, chứ không hiển thị số thực được. ( Được nhưng mà không xét ở khía cạnh này)
- Về sai số 16 độ C đó chắc là bạn dùng hai loại cảm biến khác nhau thôi. Con LM335 khác con LM35, lại khác hơn con LM35DZ. Tôi thấy hình như bạn dùng LM35DZ, nhiệt độ cứ tăng dần 10mili vol/1 độ C tính từ 0 độ ứng với 0V. Còn loại theo công thức tính trên là theo độ K, nghĩa là 10 milivol/ độ tính từ 0 độ ứng với 273 độ K=2730 milivol.
Những cái này bạn phải tìm hiểu thực tế. Đôi khi chỉ chăm chăm tìm công thức của người khác sẽ không hay lắm. Đối với LM35 thì cứ dùng VOM mà đo là biết ngay loại nào thôi mà.
Thân
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-06-2011, 11:50 PM   #3
pdkxlily
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 27
:
đúng là mình xài lm35DZ vậy tính nhiệt độ theo công thức nào bạn .
pdkxlily vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2011, 02:16 AM   #4
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
Trích:
Nguyên văn bởi pdkxlily View Post
cho mình hỏi dãy số 1.960784314 (bài này mình lấy tham khảo) sao lúc mô phỏng nó sai 1 độ


đây là bài mình sửa làm theo công thức value = (value ‐ 558.5)/2.048; // For 5V supply
// value = (value ‐ 754.8)/2.048; // For 3.7V Supply
// value = (value ‐ 698.2)/2.048; // For 4V supply
trong datashet nhưg chậm nhiệt độ thực tế 16C nên mình fai cộng 16C .ai có thể giải thích giồng mình vấn đề này đc ko à.thaks
uc = 5v
gui bạn cái này.mình làm theo dang so sánh nên chổ nào bị sai thì mình điều chỉnh lại. mình có từng viết bằng asm nhưng cách viết thủ công kiều .độ phân giải 0 dến 150 không bi sai số độ nào cả.mình gũi bạn code c va code asm tham khảo nhé đảm bảo không sai độ nào cả.công thức trên chỉ xác xuất thôi thực tế mô phỏng nó không chính xác t dc .
File Kèm Theo
File Type: rar code c.rar (28.2 KB, 107 lần tải)
File Type: rar code asm.rar (18.3 KB, 21 lần tải)
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2011, 09:44 AM   #5
pdkxlily
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 27
:
Trích:
/* Cap nhat nhiet do -> CYCLE_BUTTON() tr ...------------*/
void UPDATE_TEMP() {
// int temp1, temp2;
temp1 = Adc_Read(0); //Doc nhiet do tu cong ADC
temp2 = (temp1 - 558)/2; //Doi ra do C
IntToStr(temp2, degree); //Chuyen kieu byte sang String
}
/* Xu ly Du lieu nhiet do tu LM335 -> MODE_2() tr ...-----*/
void TEMPERATURE() {
// int temp1, temp2;
temp1 = Adc_Read(0); //Doc nhiet do tu cong ADC
temp2 = (temp1 - 558)/2; //Doi ra do C
IntToStr(temp2, degree); //Chuyen kieu int sang String
LCD_Out_CP(degree); //Hien thi LCD
LCD_Chr_Cp(223); //Hien thi ky tu co ma ASCII la 223: ky hieu do
LCD_Chr_Cp('C'); //hien thi ky tu 'C'
cho mình hỏi cái chuyển int sang string trong ccs là lệnh nào . code trên là của miko C
pdkxlily vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam