Thông báo

Collapse
No announcement yet.

Đo nhiệt độ

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Đo nhiệt độ

    Các bác cho hỏi sao mạch đo nhiệt độ của e lại nhảy lung tung thế này nhỉ đây là code
    #include <REGX51.H>
    #include <stdio.H>
    ///////////////////////////////////////
    //thiet lap cong ADC
    sbit ADC_RD = P2^2;
    sbit ADC_WR = P2^1;
    sbit ADC_INTR = P2^0;
    ///////////////////////////////////////
    // dat chan dieu khien led
    sbit b=P2^3;
    sbit c=P2^4;
    sbit d=P2^5;
    sbit e=P2^6;
    float volt;
    unsigned char u[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
    unsigned char v[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0};
    unsigned char dem,x;
    float ketqua,ketqua1=0,ketqua2=0;
    ///////////////////////////////////////
    void delay(unsigned int t)
    { unsigned int i;
    for(i=0;i<t;i++);
    }
    ///////////////////////////////////////
    void quet(unsigned int a)
    { unsigned int nghin,tram,chuc,donvi;
    //__________________________________________________ ____________________

    nghin=a/1000;
    tram=(a%1000)/100;
    chuca%1000)%100)/10;
    donvia%1000)%100)%10;
    //__________________________________________________ _______________________



    P0=u[nghin]; b=1;
    delay(50);

    P0=b=0;

    P0=v[tram]; c=1;
    delay(50);

    P0=c=0;

    P0=u[chuc]; d=1;
    delay(50);

    P0=d=0;

    P0=u[donvi];e=1;
    delay(50);

    P0=e=0;
    }
    void tre(unsigned int time)
    { int k,i;
    for(k=0;k<129;k++)
    {for( i=0;i<time;i++)
    ;
    }}
    ////////////////////////////////////////
    // dieu khien ADC
    void DK_ADC(void)
    { // tham do ADC
    ADC_WR = 1;
    ADC_RD = 1;
    delay(50);
    ADC_WR = 0; // bat dau chuyen doi
    ADC_RD = 0;
    while(!ADC_INTR); // cho chuyen doi xong
    dem++;
    x = P1 ;// xuat du lieu vao P1
    volt (5*x*1.0)/255));
    ketqua = (int)(volt*100);
    ketqua1 = ketqua1+ketqua;
    if(dem==30)
    { dem=0;
    ketqua2= ketqua1/30;
    ketqua2 = ketqua2*100;
    ketqua1=0;
    }
    }

    ///////////////////////////
    void main()
    {
    while(1)
    {
    DK_ADC();
    quet(ketqua2);
    }
    }



  • #2
    cái này là do bạn bắt adc chuyển đổi và hiển thị giá trị liên tục. nó nhảy nhiệt độ nhưng chỉ nhảy trong vòng 1 độ
    khắc phục bằng cách giảm số lần chuyển đổi đi trong 1s hoặc tính trung bình nhiều lần chuyển đổi rồi mới hiển thị lên
    ngoài ra việc đặt Vref cũng gây hiện tượng trên, bạn phải đảm bảo sao cho Vreff ổn định và đúng thang đo
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      Vref e để hở . Đo 30 lần rồi chia cho 30 lấy trung bình

      Comment


      • #4
        Help me !!!!!!!!!!!!!!!!

        Comment


        • #5
          xem lại delay, mình đã từng mô phỏng thành công với mạch đo nhiệt độ bằng protues nhưng khi làm mạch thật thì phải ấn reset thì nó mới cập nhật được nhiệt độ chuẩn, cuối cùng xem lại do đặt delay quá ngắn. bạn thử lại xem tn

          Comment


          • #6
            Cảm ơn a sau khi e sửa thế này
            #include <REGX51.H>
            #include <stdio.H>
            ///////////////////////////////////////
            //thiet lap cong ADC
            sbit ADC_RD = P2^2;
            sbit ADC_WR = P2^1;
            sbit ADC_INTR = P2^0;
            ///////////////////////////////////////
            // dat chan dieu khien led
            sbit b=P2^3;
            sbit c=P2^4;
            sbit d=P2^5;
            sbit e=P2^6;
            float volt;
            unsigned char u[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
            unsigned char v[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0};
            unsigned char dem,x;
            float ketqua,ketqua1=0,ketqua2=0;
            ///////////////////////////////////////
            void delay(unsigned int t)
            { unsigned int i;
            for(i=0;i<t;i++);
            }
            ///////////////////////////////////////
            void quet(unsigned int a)
            { unsigned int nghin,tram,chuc,donvi;
            //__________________________________________________ ____________________

            nghin=a/1000;
            tram=(a%1000)/100;
            chuca%1000)%100)/10;
            donvia%1000)%100)%10;
            //__________________________________________________ _______________________



            P0=u[nghin]; b=1;
            delay(50);

            P0=b=0;

            P0=v[tram]; c=1;
            delay(50);

            P0=c=0;

            P0=u[chuc]; d=1;
            delay(50);

            P0=d=0;

            P0=u[donvi];e=1;
            delay(50);

            P0=e=0;
            }
            void tre( unsigned int time)
            { int k,h;
            for(k=0;k<129;k++)
            {for( h=0;h<time;h++)
            ;
            } }
            ////////////////////////////////////////
            // dieu khien ADC
            void DK_ADC(void)
            { // tham do ADC
            ADC_WR = 1;
            ADC_RD = 1;
            tre(10);
            ADC_WR = 0; // bat dau chuyen doi
            ADC_RD = 0;
            while(!ADC_INTR); // cho chuyen doi xong
            dem++;
            x = P1 ;// xuat du lieu vao P1
            volt (5*x*1.0)/255));
            ketqua = (int)(volt*100);
            ketqua1 = ketqua1+ketqua;
            if(dem==30)
            { dem=0;
            ketqua2= ketqua1/30;
            ketqua2 = ketqua2*100;
            ketqua1=0;
            }
            }

            ///////////////////////////
            void main()
            {
            while(1)
            {
            DK_ADC();
            quet(ketqua2);
            }
            }

            thì chỉ nhảy 2 số hàng thập phân và nhảy chậm hơn nhưng led sáng yếu hơn nếu tăng tre thì ko hiển thị được

            Comment


            • #7
              cho mình xin cái file sơ đô mạch với layout dc ko bạn
              mình thấy hứng thú mà chưa bik làm...

              Comment


              • #8
                File đây b
                do nhiet do.rar

                Comment


                • #9
                  cách khắc phục rõ ràng thế còn help j nữa. trong 1 khoảng thời gian nhất định giả sử 1s hay 2s bạn đo lấy 10 hoặc 20 lần. mỗi lần đo xong lưu vào 1 biến, sau đó cộng vào tính trung bình ra. còn muốn đơn giản hơn thì tăng delay. mỗi s đo 1 lần thôi nhưng cách này cập nhật ko được hay
                  Website chính thức đổi địa chỉ website thành
                  Mời các bạn ghé thăm !!!

                  Comment

                  Về tác giả

                  Collapse

                  quang_le_pt yahoo: quang_le_haui@yahoo.com.vn phone: 01656290153 Tìm hiểu thêm về quang_le_pt

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X