PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 09-08-2012, 09:29 PM   #1
loveboom3012
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 18
:
Xem giúp mình lỗi code cho lm35 này với

Code:
#include <16f877a.h>
#include <def_877a.h>
#device ADC=10
#fuses nowdt,noprotect,nolvp,hs
#use delay(clock=20000000)
const unsigned char ma7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int16 kqadc;
int dem,dv,ch,tr,ng,i;
unsigned char mdv,mch,mtr,mng;
void giaima7doan(int16 tam)
{
	ng=tam/1000;
	tam=tam%1000;
	tr=tam/100;
	tam=tam%100;
	ch=tam/10;
	dv=tam%10;
	mng=ma7[ng];
	mtr=ma7[tr];
	mch=ma7[ch];
	mdv=ma7[dv];
	mch=mch&0x7f;
}
//hien thi quet led
void hienthi()
{
	for(i=0;i<=30;i++)
	{
	output_d(mdv);	output_low(pin_b2);	delay_us(100);	output_high(pin_b2);
	output_d(mch);	output_low(pin_b3);	delay_us(100);	output_high(pin_b3);
	output_d(mtr);	output_low(pin_b4);	delay_us(100);	output_high(pin_b4);
	output_d(0x9c); output_low(pin_b1);	delay_us(100);	output_high(pin_b1);
	output_d(0xc6);	output_low(pin_b0);	delay_us(100);	output_high(pin_b0);	
}
}
void main()
{
	set_tris_A(0b00000001);
	set_tris_D(0x00);
	set_tris_b(0x00);
//	set_tris_C(0x00);
	output_b(0xff);
	setup_ADC(ADC_clock_div_32);
	setup_adc_ports(AN0);
	set_adc_channel(0);
	while(1)
		{
			kqadc=4.887*read_adc();
			giaima7doan(kqadc);
				hienthi();
			if(kqadc>40)
				{
					output_high(pin_c0);
				}
			else
				{
					output_low(pin_c0);
				}	
		
		}
}
theo ý mình coded thì khi nhiệt độ quá 40 độ thì pin RC0 lên mức high, dưới 40 độ thì mức low , nhưng khi mô phỏng thì nhiệt độ chưa tới 40 pin RC0 đã lên mức high rồi, xem giúp mình với !hình đã đính kèm
Hình Kèm Theo
File Type: png picture002.png (53.8 KB, 3 lần tải)
loveboom3012 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 12:06 AM   #2
toancdt
Đệ tử 2 túi
 
toancdt's Avatar
 
Tham gia ngày: Apr 2011
Bài gửi: 31
:
Send a message via Yahoo to toancdt
bạn nên thêm dòng kqadc=0.4887*read_adc(); ở dưới hienthi(); trong vòng lặp while
__________________
[email]toancdt09@gmail.com
toancdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 02:01 PM   #3
loveboom3012
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 18
:
Trích:
Nguyên văn bởi toancdt View Post
bạn nên thêm dòng kqadc=0.4887*read_adc(); ở dưới hienthi(); trong vòng lặp while
mình đã sửa lại theo ý của bạn, nhưng vẫn bị giống vậy à , hix
loveboom3012 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 03:40 PM   #4
toancdt
Đệ tử 2 túi
 
toancdt's Avatar
 
Tham gia ngày: Apr 2011
Bài gửi: 31
:
Send a message via Yahoo to toancdt
Trích:
Nguyên văn bởi loveboom3012 View Post
mình đã sửa lại theo ý của bạn, nhưng vẫn bị giống vậy à , hix
sửa như vậy mình test thử là đúng rồi, đâu bạn gửi code bạn lên đây mình kiểm tra lại xem
__________________
[email]toancdt09@gmail.com
toancdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 04:45 PM   #5
toancdt
Đệ tử 2 túi
 
toancdt's Avatar
 
Tham gia ngày: Apr 2011
Bài gửi: 31
:
Send a message via Yahoo to toancdt
khi bạn mô phỏng thấy hiển thị chưa đến 40 mà rc0 đã lên mức cao nhưng thực tế biến kqadc đã lớn hơn 40 rất nhiều. cụ thể là tăng 1 độ thì giá trị adc của bạn sẽ tăng 2.046, nếu nhiệt độ là 5 thì giá trị adc đọc được là 2.046x5=10.23 => kqadc=4.887*10.23=49.99 => từ 5 độ trở lên biến kqadc đã lớn hơn 40 nên rc0 lên mức cao là phải thôi.

bạn sửa lại như dưới đây là chạy được.

kqadc=4.887*read_adc();// nếu bạn dùng biến kqadc này để so sánh sẽ không đúng
giaima7doan(kqadc);
hienthi();
kqadc=0.4887*read_adc();// thêm dòng này vào
if(kqadc>40)
__________________
[email]toancdt09@gmail.com

thay đổi nội dung bởi: toancdt, 10-08-2012 lúc 04:52 PM. Lý do: bổ sung
toancdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 08:03 PM   #6
loveboom3012
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 18
:
Trích:
Nguyên văn bởi toancdt View Post
khi bạn mô phỏng thấy hiển thị chưa đến 40 mà rc0 đã lên mức cao nhưng thực tế biến kqadc đã lớn hơn 40 rất nhiều. cụ thể là tăng 1 độ thì giá trị adc của bạn sẽ tăng 2.046, nếu nhiệt độ là 5 thì giá trị adc đọc được là 2.046x5=10.23 => kqadc=4.887*10.23=49.99 => từ 5 độ trở lên biến kqadc đã lớn hơn 40 nên rc0 lên mức cao là phải thôi.

bạn sửa lại như dưới đây là chạy được.

kqadc=4.887*read_adc();// nếu bạn dùng biến kqadc này để so sánh sẽ không đúng
giaima7doan(kqadc);
hienthi();
kqadc=0.4887*read_adc();// thêm dòng này vào
if(kqadc>40)
tai sao ko phai la
kqadc=4.887*read_adc(); ma la kqadc=0.4887*read_adc(); zay ban
loveboom3012 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 08:59 PM   #7
toancdt
Đệ tử 2 túi
 
toancdt's Avatar
 
Tham gia ngày: Apr 2011
Bài gửi: 31
:
Send a message via Yahoo to toancdt
Trích:
Nguyên văn bởi loveboom3012 View Post
tai sao ko phai la
kqadc=4.887*read_adc(); ma la kqadc=0.4887*read_adc(); zay ban
trích:
Dùng ADC 10 bít, điện áp lấy mẫu Vdd = 5V, sensor LM35 (10 mV / 1 độ C)
Xác định nhiệt độ đo được qua số đo trên chân ADC:
Ta có: 5000 mV --- ứng với --- 1023 (thang đo ADC 10 bít)
Vậy: 10 mV --- ứng với --- 10 x 1023/5000 = 2.046
Con số 2.046 tính được đó chính là lượng thay đổi trên chân ADC ứng với thay đổi 10mV ở đầu ra LM35 hay ứng với thay đổi 1 độ C trên LM35.

Suy ra nhiệt độ đo được: Nhiệt độ = read_adc / 2.046 (1/2.046=0.4887)
-----------------------------------------------------------------------------------------
__________________
[email]toancdt09@gmail.com
toancdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2012, 11:59 PM   #8
loveboom3012
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 18
:
mình đã làm được rồi, mô phỏng chạy nhưng protues báo lỗi thế này bạn xem giùm mình nha, code
Code:
#include <16f877a.h>
#include <def_877a.h>
#device ADC=10
#fuses nowdt,noprotect,nolvp,hs
#use delay(clock=20000000)
const unsigned char ma7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int16 kqadc;
int dem,dv,ch,tr,ng,i;
unsigned char mdv,mch,mtr,mng;
void giaima7doan(int16 tam)
{
	ng=tam/1000;
	tam=tam%1000;
	tr=tam/100;
	tam=tam%100;
	ch=tam/10;
	dv=tam%10;
	mng=ma7[ng];
	mtr=ma7[tr];
	mch=ma7[ch];
	mdv=ma7[dv];
	mch=mch&0x7f;
}
//hien thi quet led
void hienthi()
{
	for(i=0;i<=30;i++)
	{
	output_d(mdv);	output_low(pin_b2);	delay_us(100);	output_high(pin_b2);
	output_d(mch);	output_low(pin_b3);	delay_us(100);	output_high(pin_b3);
	output_d(mtr);	output_low(pin_b4);	delay_us(100);	output_high(pin_b4);
	output_d(0x9c); output_low(pin_b1);	delay_us(100);	output_high(pin_b1);
	output_d(0xc6);	output_low(pin_b0);	delay_us(100);	output_high(pin_b0);	
}
}
void main()
{
	set_tris_A(0b00000001);
	set_tris_D(0x00);
	set_tris_b(0x00);
//	set_tris_C(0x00);
	portb=0xff;
	setup_ADC(ADC_clock_div_32);
	setup_adc_ports(AN0);
	set_adc_channel(0);
	while(1)
		{
			kqadc=0;
			for(i=0;i<10;i++)
			{kqadc=kqadc+read_adc();}
				kqadc=kqadc/10;
				kqadc=kqadc*4.887;
				giaima7doan(kqadc);
				hienthi();
			kqadc=0.4887*read_adc();
			if(kqadc>40)
				{
					output_high(pin_c0);
				}
			else
				{
					output_low(pin_c0);
				}	
		
		}
}
báo lỗi
Hình Kèm Theo
File Type: jpg untitled.JPG (281.9 KB, 3 lần tải)
loveboom3012 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-08-2012, 10:26 AM   #9
toancdt
Đệ tử 2 túi
 
toancdt's Avatar
 
Tham gia ngày: Apr 2011
Bài gửi: 31
:
Send a message via Yahoo to toancdt
proteus: http://www.mediafire.com/?mcp28259cwgwmup
ccs : http://www.mediafire.com/?pwd053o8i5yco9x

code và mô phỏng trên đây chạy như yêu cầu của bạn, nếu bạn chạy thấy bị lỗi nữa thì kiểm tra lại 2 phần mềm đó coi bị lỗi gì không.
__________________
[email]toancdt09@gmail.com

thay đổi nội dung bởi: toancdt, 11-08-2012 lúc 12:07 PM. Lý do: bổ sung
toancdt 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à 05:42 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