با توجه به اینکه از این سنسور باید duty-cycle را خواند و خروجی اش به صورت فرکانس است لطفا راهنمایی کنید چجوری میتونم این نسبتو با میکرو به دست بیارم؟؟؟؟؟؟؟
اطلاعیه
Collapse
No announcement yet.
مشکل در استفاده از سنسور دما smt-160با 16f877a
Collapse
X
-
پاسخ : مشکل در استفاده از سنسور دما smt-160با 16f877a
بهترین روش برای اینکار استفاده از مود CAPTURE تایمر است.
تایمر کپچر به این صورت عمل میکنه که با تغییر لبه سیگنال ورودی CCp تایمر مربوطش شروع به کار میکنه و میتونه به اینتراپت خودش هم پاسخ بده و مقادیر تایمر رو اونجا قرائت کنی!!
Capture رو میتونی تو CCP میکرو پیدا کنی!! اگه به زبان Cآ بخای میتونم راهنمائیت کنم!!
-
پاسخ : مشکل در استفاده از سنسور دما smt-160با 16f877a
با این سنسور قبلا کار کردم البته با pic16f84 اما چون برنامه اش به زبان C هست ممکنه به دردتون بخوره.
توضیحاتی هم در آخر دادم اما توصیه میکنم برای پروژه های تجاری از این سنسور استفاده نکنید.زمان زیادی از وقت میکرو را به خودش اختصاص میده و دقت خوبی هم نداره.البته اگه از ماژول capture استفاده کنید زمان کمتری رو میگیره. توصیه میکنم از ds1820 استفاده کنید چون دقت بهتری داره کار کردن باهاش آسونتره و زمانی از میکرو نمیگیره و فاصله اش هم از میکرو میتونه خیلی دور باشه(در حد متر)
#define INPORT PORTA&0x10 //RA04
unsigned short bdo;
unsigned long ci,di;
unsigned long fres;
unsigned short mdig,ldig,new_din,old_din,si;
void interrupt()
{
if(INTCON&4)
{
TMR0=206;
INTCON=0xA0;
if(bdo)
{
old_din=new_din;
if(new_din=INPORT)di++;
ci++;
}
}
}
void main()
{
unsigned short cnt;
TRISA=0x10;
TRISB=0x0;
PORTB=0;
OPTION_REG=0x88;
TMR0=206;
INTCON=0xA0;
while(1)
{
di=0;
ci=0;
si=0;
bdo=0;
old_din=new_din=1;
while(INPORT);
while(!(INPORT));
bdo=1;
do
{
bdo=1;
if(new_din && !old_din)
{
si++;
}
}while(si<255);
bdo=0;
fres=di*100000/ci;
fres-=32000;
fres/=470;//long
///////////////////////////////////////////////////////////شروع نمایش یر روی سون سگمنت
mdig=(unsigned short int)fres/10;
ldig=(unsigned short int)fres%10;
for(cnt=0;cnt<50;cnt++)
{
PORTB=mdig&0x0F;
PORTB|=64;
if(cnt>44) PORTB|=0x10;
Delay_ms(5);
PORTB=ldig&0x0F;
PORTB|=32;
if(cnt>44) PORTB|=0x10;
Delay_ms(5);
}
PORTB=0x0f;
}
}
کریستال 20 هست و نتیجه رو در متغیر fres قرار میده و روی سون سگمنت نشون میده.از اوجایی که مشخص کردم رو میتونید خذف کنید و از محتویات fres اونطوری که لازمه استفاده کنید.
این تنها یه پروژه آموزشی بود.در عمل تست شده و مشکلی نداره .دقت کار برنامه رو هم با duty cycle readerتست کردم و دقیق کار میکنه اما همونطوری که گفتم smt160 زباد پایدار نیست .
امیدوارم مفید براتون مفید باشه
دیدگاه
دیدگاه