Thông báo

Collapse
No announcement yet.

[Thắc mắc]Đo nhiệt độ 8 kênh không chính xác dùng LM35 và 89C51

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

  • [Thắc mắc]Đo nhiệt độ 8 kênh không chính xác dùng LM35 và 89C51

    Chào mọi người, mình đang làm một đồ án về VĐK có đề bài là " Xây dựng hệ thống đo nhiệt độ 8 kênh, hiển thị lên LCD các giá trị nhiệt độ lớn nhất và nhỏ nhất. Việc chọn kênh được thực hiện thông qua bàn phím và giá trị kênh được chọn đưa lên LCD". Cái này thì chỉ cần mô phỏng trên Proteus thôi chứ ko cần mạch thật. Mình sử dụng 8 cảm biến LM35 và ADC 0808 để thực hiện việc đo nhiệt độ trên các kênh. Còn thuật toán thì mình thu lần lượt từ các kênh lưu vào RAM rồi so sánh và hiển thị. Mình mới chỉ làm yêu cầu thứ nhất và mô phỏng thì có vấn đề như sau:
    _ Nếu mình đưa địa chỉ một kênh cố định, thì LCD hiển thị đúng. Nếu mình hiển thị 2 kênh trên 2 dòng, ví dụ mình dùng LCD 20x4, dòng 3 hiển thị kênh 0 và dòng 4 hiển thị kênh 1 thì giá trị hiển thị không chính xác, và khi mình chỉ tăng nhiệt độ cảm biến ứng với kênh 1 thôi thì nhiệt độ trên cả hai kênh đều tăng.Chẳng hạn như hình dưới đây chỉ đúng được 1 kênh.

    Click image for larger version

Name:	Untitled.jpg
Views:	1
Size:	139.0 KB
ID:	1417648
    Với 2 kênh mà còn như vậy nên tất nhiên với 8 kênh chương trình tìm min,max cũng không hoạt động đúng. Mong các bạn xem code và góp ý cho mình vấn đề ở chỗ nào. Code và mô phỏng đây.Xin cảm ơn các bạn!
    do_nhietdo.zip

  • #2
    Mình nghi ngờ vấn đề do việc định thời giữa các kênh không đúng. Mong các cao thủ tư vấn

    Comment


    • #3
      giờ mấy ai còn xài kiểu này đâu, với mấy con 89s51 52 vs 89c51 52 ko có ADC hỗ trợ nếu muốn đo nhiệt độ nhiều bộ thì nên xài các con như ds18b20 giao tiếp còn ko thì xài các họ khác như pic,avr cho dễ,rẻ
      Website chính thức đổi địa chỉ website thành
      Mời các bạn ghé thăm !!!

      Comment


      • #4
        Đúng nhu bạn mast090 nói. Nhưng đây là đồ án mình làm với 89c51 cơ bản, mình đã kiểm tra code và chưa thấy lỗi sai nào cả, tất nhiên chỉ là với mô phỏng thôi. Còn ds18b20 mình cũng làm thử rồi, với một sensor thì khá đơn giản, song với trường hợp nhiều sensor sử dụng giao tiếp 1-wire thì mình ko hiểu mô phỏng qua dạng code ROM của sensor thế nào với 8 sensor. Mong các bạn xem qua code của mình và góp ý cho mình với. mình cũng ko còn nhiều thời gian. Cám ơn nhìu^^

        Comment


        • #5
          Nguyên văn bởi bonniss Xem bài viết
          Đúng nhu bạn mast090 nói. Nhưng đây là đồ án mình làm với 89c51 cơ bản, mình đã kiểm tra code và chưa thấy lỗi sai nào cả, tất nhiên chỉ là với mô phỏng thôi. Còn ds18b20 mình cũng làm thử rồi, với một sensor thì khá đơn giản, song với trường hợp nhiều sensor sử dụng giao tiếp 1-wire thì mình ko hiểu mô phỏng qua dạng code ROM của sensor thế nào với 8 sensor. Mong các bạn xem qua code của mình và góp ý cho mình với. mình cũng ko còn nhiều thời gian. Cám ơn nhìu^^
          cậu chụp 1 cái ảnh màn hình của proteus lúc mô phỏng lên với up code vào thẻ CODE cho mọi người tiện xem.

          Comment


          • #6
            Bạn thử hiển thị giá trị ADC đo được của từng kênh xem,vì bạn viết bằng asm nên mình cũng k giúp được,bạn dùng ngắt để đọc giá trị chuyển đổi ở từng kênh hay sử dụng delay? nếu dùng delay thì nên xem datasheet để xem thời gian chuyển đổi 1 kênh hết bnh rồi delay cho phù hợp

            Comment


            • #7
              Code mình đã attach rồi mà hình ảnh cũng chụp rồi mà.
              Nguyên văn bởi thinking Xem bài viết
              Bạn thử hiển thị giá trị ADC đo được của từng kênh xem,vì bạn viết bằng asm nên mình cũng k giúp được,bạn dùng ngắt để đọc giá trị chuyển đổi ở từng kênh hay sử dụng delay? nếu dùng delay thì nên xem datasheet để xem thời gian chuyển đổi 1 kênh hết bnh rồi delay cho phù hợp
              Mình hiển thị riêng từng kênh thì đúng, nhưng khi thu giá trị các kênh vào vùng nhớ ram và đọc ra hiển thị nhiều kênh thì không đúng chút nào. ADC này delay 100ms mình hiển thị được rồi nên mình nghĩ là đúng.

              Comment


              • #8
                hiển thị từng kênh cùng lúc chứ không phải là hiển thị từng kênh 1,có lẽ do thuật toán lẫy mẫu ở từng kênh của bạn bị sai nên giá trị đọc đồng thời không chính xác

                Comment


                • #9
                  Thế này nhé, mình sử dụng 8 ô nhớ trong RAM để lưu giá trị cho 8 kênh nhiệt độ,khởi tạo là thu kênh 0-> chờ 100ms để chuyển đổi-> chuyển vào ô nhớ-> tăng địa chỉ ADC lên kênh tiếp theo,cứ như vậy hết 8 kênh. Sau đó, lôi giá trị 8 kênh ra so sánh, xem cái nào min, max=> rồi hiển thị lên LCD. Thuật toán rất tường minh. Nhưng khi thu nhiều kênh nó hiển thị sai hết
                  Mình nghi ngờ mô phỏng Proteus, nhưng nghĩ đây cũng là ứng dụng không phức tạp, nên vẫn cho rằng code của mình có vấn đề mà sửa mãi ko ra. Bác nào thạo ASM cho cao kiến với

                  Comment


                  • #10
                    Nguyên văn bởi bonniss Xem bài viết
                    Thế này nhé, mình sử dụng 8 ô nhớ trong RAM để lưu giá trị cho 8 kênh nhiệt độ,khởi tạo là thu kênh 0-> chờ 100ms để chuyển đổi-> chuyển vào ô nhớ-> tăng địa chỉ ADC lên kênh tiếp theo,cứ như vậy hết 8 kênh. Sau đó, lôi giá trị 8 kênh ra so sánh, xem cái nào min, max=> rồi hiển thị lên LCD. Thuật toán rất tường minh. Nhưng khi thu nhiều kênh nó hiển thị sai hết
                    Mình nghi ngờ mô phỏng Proteus, nhưng nghĩ đây cũng là ứng dụng không phức tạp, nên vẫn cho rằng code của mình có vấn đề mà sửa mãi ko ra. Bác nào thạo ASM cho cao kiến với
                    Góp ý: bạn quá phụ thuộc vào mô phỏng... tôi có thử dùng qua rồi đã gọi là mô phỏng thì sẽ không bao giờ, không bao giờ đúng với sự thật...
                    tôi có 1 mạch chạy đúng với mạch thật (làm pcb board đàng hoàng), load code vào trong Proteus, chạy sai không tưởng nỗi.
                    Mãi đi tìm vàng.

                    Comment


                    • #11
                      Nguyên văn bởi KVLV Xem bài viết
                      Góp ý: bạn quá phụ thuộc vào mô phỏng... tôi có thử dùng qua rồi đã gọi là mô phỏng thì sẽ không bao giờ, không bao giờ đúng với sự thật...
                      tôi có 1 mạch chạy đúng với mạch thật (làm pcb board đàng hoàng), load code vào trong Proteus, chạy sai không tưởng nỗi.
                      chuẩn men, ngày xưa còn sv thì hay lọ mọ mô phỏng còn giờ toàn xây dựng ý tưởng trong đầu rồi vẽ mạch, đặt mạch, xong xuôi mới code, còn cái protues giờ hiếm khi mò tới. càng ngày càng ghét đồ mô phỏng protues
                      Website chính thức đổi địa chỉ website thành
                      Mời các bạn ghé thăm !!!

                      Comment


                      • #12
                        Nguyên văn bởi mast090 Xem bài viết
                        chuẩn men, ngày xưa còn sv thì hay lọ mọ mô phỏng còn giờ toàn xây dựng ý tưởng trong đầu rồi vẽ mạch, đặt mạch, xong xuôi mới code, còn cái protues giờ hiếm khi mò tới. càng ngày càng ghét đồ mô phỏng protues
                        Chính xác là Proteus đúng chỉ là mô phỏng, bởi có vài module trong này mình đã chạy trên mạch thật rồi mà đưa vào đây vẫn phải sửa lại ì èo mãi nó mới mô phỏng cho. Mô phỏng mà là thật thì còn gọi gì là mô phỏng nữa. Nhưng yêu cầu đồ án này là mô phỏng nên mình vẫn cứ nộp thôi. Còn dạo này mình cũng đang bận quá nên ko làm được mạch thật.

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X