اطلاعیه

Collapse
No announcement yet.

مشکل در استفاده از سنسور دما smt-160با 16f877a

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در استفاده از سنسور دما smt-160با 16f877a

    با توجه به اینکه از این سنسور باید duty-cycle را خواند و خروجی اش به صورت فرکانس است لطفا راهنمایی کنید چجوری میتونم این نسبتو با میکرو به دست بیارم؟؟؟؟؟؟؟

    #2
    پاسخ : مشکل در استفاده از سنسور دما smt-160با 16f877a

    بهترین روش برای اینکار استفاده از مود CAPTURE تایمر است.
    تایمر کپچر به این صورت عمل میکنه که با تغییر لبه سیگنال ورودی CCp تایمر مربوطش شروع به کار میکنه و میتونه به اینتراپت خودش هم پاسخ بده و مقادیر تایمر رو اونجا قرائت کنی!!
    Capture رو میتونی تو CCP میکرو پیدا کنی!! اگه به زبان Cآ‌ بخای میتونم راهنمائیت کنم!!

    دیدگاه


      #3
      پاسخ : مشکل در استفاده از سنسور دما smt-160با 16f877a

      اگه لطف کنی به زبون سی سی اس یا سی راهنمایی کنی ممنون میشم

      دیدگاه


        #4
        پاسخ : مشکل در استفاده از سنسور دما 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 زباد پایدار نیست .
        امیدوارم مفید براتون مفید باشه

        دیدگاه

        لطفا صبر کنید...
        X