PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 29-04-2012, 10:55 AM   #1
legolas_2801
Nhập môn đệ tử
 
Tham gia ngày: Apr 2012
Bài gửi: 3
:
nhờ giúp đở mạch tưới nước dùng 16f877 và lm 35

em mới tìm hiểu về PIC16F877A và viết bằng CCS nên ko biết nhiều, mong các anh chị chỉ giùm em.
e dùng lm35 và PIC16F877A! sườn bài như thế này:
- nếu A5=mức cao => B0=mức cao (delay_ms (100))
- nếu A5=mức thấp => B0=mức thấp (delay_ms(60000))
- trong lúc chân B0 đang ở mức thấp mà LM35 lên đến nhiệt độ là 37c thì B0 vẫn lên mức cao.
chương trình của em nếu chạy riêng 2 yêu cầu thì được nhưng nếu chạy chung thì LM35 có lên bao nhiêu độ chân B0 vẫn không lên mức cao được!
đây là code của em:
#include <16f877a.h>
#use delay(clock=4000000)
int i;
unsigned char tVal;
//+++++++++++++++++++++
void nhietdo()
{
if(tVal<=37)
{
output_low(PIN_B0);
delay_ms(1000);
}
else
{
output_high(PIN_B0);
delay_ms(1000);
}
}

//+++++++++++++++++++++
#INT_RTCC
void tuoi_theo_c()
{
nhietdo();
}
//+++++++++++++++++++++
void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_RTCC);
setup_timer_0(RTCC_DIV_8);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports( RA0_RA1_ANALOG_RA3_REF );
while(TRUE)
{
set_adc_channel(0);
delay_ms(10);
tVal = (float)read_adc();
if(input(pin_A5))
{ output_high(PIN_B0);
delay_ms(100);
output_low (PIN_B0);
{ for (i=1;i<=10;++i)
delay_ms(6000);
}
}
}
}
Mong các anh chị giúp em gấp, còn mấy ngày nữa nộp bài rồi mà viết hoài không được!
File Kèm Theo
File Type: rar mach proteus.rar (18.1 KB, 15 lần tải)
legolas_2801 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2012, 10:34 AM   #2
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
Bạn xem toàn bộ phía dưới nhé.....


Ở chồ dòng láy giá trị và trả giá trị về tVal của bạn còn thiếu bước chuyển số sang độ.

LM35 thây đổi 10mv/độ. nhữ vậy adc của bạn chọn là 8 bit thì giá trị dc trả về cao nhất là 255. tương đương là khi LM35 đạt 500 độ th2i giá trị tVal sẽ là 255.

Sai chổ nào? cái của bạn viết ko sai. chỉ thiếu ổ chổ là

tVal=(float)read_adc()/0.51;

tại sao phải chia cho 0.51 vì sao? trả lời: 255/500=0.51.

như vậy giá trị của tVal trả về sé đúng với nhiệt độ thực thế.

//-------------- And phần đọc và trả giá trị ----------------//

ở phần tạo tưới nước cho cây thì bạn làm thế này.. nền dùng thêm IC fiplop ( IC nhỏ ) tham khảo google nhé.



vi du:
if(tval>=30)
{
output_high(pin_b0); // tao xung kich cho ic fiplop để mở bom
output_low(pin_b0);
}

if(tval<30)
{
output_high(pin_b0); // tao lai 1 xung kich ở ic fiplop để tắt Bơm
output_low(pin_b0);
}

rất đơn giản bạn ah...

bạn nên kết noi thêm 1 cái LCD để hiển thị nhiệt độ để kiểm chứng.... chúc bạn thành công ..
Hình Kèm Theo
File Type: jpg 2012-04-27 06.48.43.jpg (230.6 KB, 0 lần tải)
File Kèm Theo
File Type: rar ADC.rar (70.2 KB, 13 lần tải)

thay đổi nội dung bởi: lambaotrung, 04-05-2012 lúc 10:43 AM.
lambaotrung 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à 10:52 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