Thông báo

Collapse
No announcement yet.

Đo nhiệt độ ADC 0809+LM35+89C52 cần giúp đỡ?

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

  • Đo nhiệt độ ADC 0809+LM35+89C52 cần giúp đỡ?

    Mình có làm cái mạch đo nhiệt độ dùng ADC 0809, LM35,và con 89c52. Mình thấy hiển thị tốt nhưng bị một chỗ là nó bị sai :VD Lúc ngoài trời là 30 oC mình chỉnh là 30oc, khi nhiệt độ giảm còn 25oC thì nó lại hiển thị 27 oC? , Mấy bác cao thủ nào biết chỉ em với tại sao bị như zậy, e cảm ơn nhìu lắm.

  • #2
    cậu up mạch lên đi...
    mình xem tí ^^

    Comment


    • #3
      các bạn có thể giải thích các hàm trong phan code giao tiếp adc0809 với 8051 này không.có mấy caí hàm mình không hiểu được nè.như uint,uchar..thanhk các bạn
      code như sau: chuẩn rồi.chạy trên mô phỏng ok

      #include <reg52.h>
      #define uint unsigned int
      #define uchar unsigned char

      uchar code LEDData[]=
      {
      0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
      };
      sbit OE = P1^0;
      sbit EOC = P1^1;
      sbit ST = P1^2;
      sbit CLK = P1^3;

      void DelayMS(uint ms)
      {
      uchar i;
      while(ms--)
      {
      for(i=0;i<120;i++);
      }
      }

      void Display_Result(uchar d)
      {
      P2 = 0xf7;
      P0 = LEDData[d%10];
      DelayMS(5);
      P2 = 0xfb;
      P0 = LEDData[d%100/10];
      DelayMS(5);
      P2 = 0xfd;
      P0 = LEDData[d/100];
      DelayMS(5);
      }

      void main()
      {
      TMOD = 0x02;
      TH0 = 0x14;
      TL0 = 0x00;
      IE = 0x82;
      TR0 = 1;
      P1 = 0x3f;
      while(1)
      {
      ST = 0;
      ST = 1;
      ST = 0;
      while(EOC == 0);
      OE = 1;
      Display_Result(P3);
      OE = 0;
      }
      }

      void Timer0_INT() interrupt 1
      {
      CLK = !CLK;
      }

      Comment


      • #4
        Click image for larger version

Name:	nguyen ly.jpg
Views:	1
Size:	702.4 KB
ID:	1373117
        Sơ đồ mạch của mình đây, bạn xem thử

        Comment


        • #5
          sao cậu biết nhiệt độ ngoài trời lúc đo chính xác là 30 và 25 độ C..???

          Comment


          • #6
            Nguyên văn bởi tan0710 Xem bài viết
            sao cậu biết nhiệt độ ngoài trời lúc đo chính xác là 30 và 25 độ C..???
            nhà mình có lịch vạn niên mà

            Comment


            • #7
              :v thế cậu k nghĩ là lịch vạn niên sai mạch cậu làm chạy đúng ah...?

              Comment


              • #8
                nhưn ban đêm mình thấy lạnh lắm mà nó cứ 26-27 độ a`

                Comment


                • #9
                  vậy có thể do LM35 cậu để gần nguồn nhiệt or chỗ có nhiệt độ cao hơn nhiệt độ phòng nên nó vậy
                  hoặc cậu thử kiểm tra lại lại tín hiệu chân ngưỡng so sánh của ADC xem

                  Comment


                  • #10
                    Nguyên văn bởi nbaoic Xem bài viết
                    Sơ đồ mạch của mình đây, bạn xem thử
                    - Tạo Vref cho ADC0809 mà bạn dùng mạch phân áp thế là không ổn, lại còn dùng trở đến tận 20k (trở kháng ra của mạch tạo Vref quá lớn)... Đây chính là nguyên nhân gây sai số cho mạch đo của bạn. Nên có mạch lặp bằng OPAM..
                    Theo tôi:
                    - Nên để Vref=Vcc, và ở đầu ra LM35 dùng mạch khuếch đại (hệ số khoảng 3 - 3.3 lần).
                    - Khi hiệu chỉnh kết quả đo thì không nên để ở nhiệt độ môi trường, cần tạo ra các điểm đo càng xa nhau càng tốt.
                    - Cũng cần để ý xem LM35 có nằm cạnh "cái lò sưởi nào không"...
                    Hôm nay trời nắng chang chang.
                    Mèo con đi học chẳng mang thứ gì.
                    Chỉ mang một cái bút chì.
                    Và mang một mẩu bánh mì con con.

                    Comment


                    • #11
                      Các bác, mình cũng đang định làm cái mạch này, mình muốn hỏi mấy ý:
                      - Mình có thể tạo dao động Clock cho con ADC0809 bằng timer của 89c51 được không, hay dùng bằng mạch ngoài hay hơn
                      - mình cũng định dùng mach phân áp để tạo Vref, nhưng thấy mấy bác bảo như thế trở kháng sẽ lớn ( mình chưa hiểu đoạn này lắm, bác giải thích cho mình với)

                      Comment


                      • #12
                        Nguyên văn bởi hoailinh761 Xem bài viết
                        các bạn có thể giải thích các hàm trong phan code giao tiếp adc0809 với 8051 này không.có mấy caí hàm mình không hiểu được nè.như uint,uchar..thanhk các bạn
                        code như sau: chuẩn rồi.chạy trên mô phỏng ok

                        #include <reg52.h>
                        #define uint unsigned int
                        #define uchar unsigned char

                        uchar code LEDData[]=
                        {
                        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
                        };
                        sbit OE = P1^0;
                        sbit EOC = P1^1;
                        sbit ST = P1^2;
                        sbit CLK = P1^3;

                        void DelayMS(uint ms)
                        {
                        uchar i;
                        while(ms--)
                        {
                        for(i=0;i<120;i++);
                        }
                        }

                        void Display_Result(uchar d)
                        {
                        P2 = 0xf7;
                        P0 = LEDData[d%10];
                        DelayMS(5);
                        P2 = 0xfb;
                        P0 = LEDData[d%100/10];
                        DelayMS(5);
                        P2 = 0xfd;
                        P0 = LEDData[d/100];
                        DelayMS(5);
                        }

                        void main()
                        {
                        TMOD = 0x02;
                        TH0 = 0x14;
                        TL0 = 0x00;
                        IE = 0x82;
                        TR0 = 1;
                        P1 = 0x3f;
                        while(1)
                        {
                        ST = 0;
                        ST = 1;
                        ST = 0;
                        while(EOC == 0);
                        OE = 1;
                        Display_Result(P3);
                        OE = 0;
                        }
                        }

                        void Timer0_INT() interrupt 1
                        {
                        CLK = !CLK;
                        }

                        // theo mình hiểu thì thế này nhé!
                        Mặc định của câu lệnh #define nó là dạng khai báo theo kiểu định nghĩa, hiểu nôm na là nó sẽ đặt tên cho biến nào đó một giá trị có nghĩa, cũng gần giống như Sbit thôi.
                        theo mình hiểu thì câu lệnh trên đã định nghĩa 2 biến uint và uchar mang giá trị kiểu unsigned int và unsigned char. nên có thể coi giá trị là như nhau nên thay vì gọi cả câu lệnh thì ta chỉ cần gọi uint , và uchar.

                        Comment


                        • #13
                          Nguyên văn bởi tien191919 Xem bài viết
                          Các bác, mình cũng đang định làm cái mạch này, mình muốn hỏi mấy ý:
                          - Mình có thể tạo dao động Clock cho con ADC0809 bằng timer của 89c51 được không, hay dùng bằng mạch ngoài hay hơn
                          - mình cũng định dùng mach phân áp để tạo Vref, nhưng thấy mấy bác bảo như thế trở kháng sẽ lớn ( mình chưa hiểu đoạn này lắm, bác giải thích cho mình với)
                          tạo clock bằng mạch ngoài tốt hơn, nếu dùng ngắt timer thì tần số thấp nhất phải tạo là 100kHz vậy timer phải tràn trong 5uS => đa số thời gian 89 toàn chạy ngắt cho timer.

                          Nguyên văn bởi lee_nguyen Xem bài viết
                          // theo mình hiểu thì thế này nhé!
                          Mặc định của câu lệnh #define nó là dạng khai báo theo kiểu định nghĩa, hiểu nôm na là nó sẽ đặt tên cho biến nào đó một giá trị có nghĩa, cũng gần giống như Sbit thôi.
                          theo mình hiểu thì câu lệnh trên đã định nghĩa 2 biến uint và uchar mang giá trị kiểu unsigned int và unsigned char. nên có thể coi giá trị là như nhau nên thay vì gọi cả câu lệnh thì ta chỉ cần gọi uint , và uchar.
                          #define là định nghĩa. uint và uchar ko phải là biến mà là chỉ dẫn, uchar tương đương unsigned char (cũng như thằng Tèo là tên ở nhà còn thằng T là tên khai sanh, 2 cái tên để gọi 1 thằng), vì người ta làm biếng viết unsigned char nó dài nên định nghĩa lại thành uchar cho ngắn.
                          Last edited by chung1608; 02-02-2013, 14:26.

                          Comment


                          • #14
                            Giao tiếp ADC với 89 ko hiện thị được.

                            Mình viết CT giao tiếp ADC với 89 nhưng kô hiển thị được trên led 7 đoạn được. Bác nào rành xem hộ mình nhé.
                            Attached Files

                            Comment


                            • #15
                              Nguyên văn bởi catbuivagio Xem bài viết
                              Mình viết CT giao tiếp ADC với 89 nhưng kô hiển thị được trên led 7 đoạn được. Bác nào rành xem hộ mình nhé.
                              - Khai báo sai cổng LED với ADC,
                              - Chân điều khiển chọn LED cũng sai thứ tự
                              - ADC data thì lộn bít cao, bít thấp
                              - Chương trình cũng có vài chỗ chưa ổn
                              ...
                              Nói chung bạn rất cẩu thả....

                              Thường thì mình không thích trả lời những bài viết như thế này.

                              Nhưng ở đây có một điểm mình đã nói ở bài trước: Không nên tạo Vref cho ADC0808/0809 bằng trở phân áp, sẽ gây sai số cho ADC.
                              Vì:
                              - ADC loại này dùng thang điện trở bên trong nên tiêu thụ dòng khá lớn. Nếu sài Biến trở để phân áp sẽ bị sụt áp ngay ở Vref --> Vref không còn chính xác.
                              - Muốn sài trở phân áp thì giá trị của nó phải rất nhỏ. Bạn cứ thử đổi lại thành 5k như trong sơ đồ của bạn sẽ thấy kết quả đo sai ngay...
                              Attached Files
                              Last edited by Acxen_lupine; 28-02-2013, 01:21.
                              Hôm nay trời nắng chang chang.
                              Mèo con đi học chẳng mang thứ gì.
                              Chỉ mang một cái bút chì.
                              Và mang một mẩu bánh mì con con.

                              Comment

                              Về tác giả

                              Collapse

                              nbaoic Tìm hiểu thêm về nbaoic

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

                              Collapse

                              Đang tải...
                              X