Ds1820

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • dannynvu
    Thành viên mới
    • Dec 2008
    • 4

    #1

    Ds1820

    chao ca'c ba.n,

    minh muon dung con chip nay de viet mot program dung Labview de do nhiet do khi con chip nay duoc dat tren mot DUT(device under test) trong mot ca'i ma'y Oven.

    Ca'c ban co' the nao cho minh biet ca'ch chay day lam sao de co' the doc duoc data tu con chip nay hong

    ca'm on va chu'c ca'c ban thanh cong
  • phucsonv
    Registered User
    • Jun 2008
    • 3

    #2
    bạn nên tham khảo diễn đàn AVR hay sử dụng codevision có phần này

    Comment

    • Wolfverine
      Thành viên mới
      • Oct 2007
      • 6

      #3
      Giúp mình với đây là code của mình chạy con ds 1820 giao tiếp với 89.Mình hiển thị ra led ma trận mà nó chỉ hiện ra 85 độ C.Ko hiểu sai ở đâu nữa.Mình sắp phải nộp bài tập cảm biến cho thầy rồi.

      #include <t89c51rd2.h>
      #include <intrins.h>

      sbit DQ = P3^0;
      signed char T=50;
      unsigned char Rdata,count,count2,temp;
      unsigned char SPAD[8];
      unsigned int i;
      unsigned int Tf;
      bit FSerial;
      bit presence=0;
      unsigned char dem,count,count2;
      unsigned int count1;
      unsigned char cot[8] ={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
      unsigned char so0[4] ={0x00,0x3E,0x41,0x3E};
      unsigned char so1[4] ={0x00,0x10,0x20,0x7F};
      unsigned char so2[4] ={0x00,0x4F,0x49,0x79};
      unsigned char so3[4] ={0x00,0x49,0x49,0x36};
      unsigned char so4[4] ={0x00,0x78,0x08,0x1F};
      unsigned char so5[4] ={0x00,0x79,0x79,0x4E};
      unsigned char so6[4] ={0x00,0x7F,0x49,0x4F};
      unsigned char so7[4] ={0x00,0x40,0x40,0x7F};
      unsigned char so8[4] ={0x00,0x36,0x49,0x36};
      unsigned char so9[4] ={0x00,0x79,0x49,0x7F};
      unsigned char dau_tru[4] ={0x00,0x10,0x10,0x10};
      unsigned char do_c[6] ={0x00,0xC0,0xC0,0x3E,0x41,0x22};


      void delay_ms(unsigned char time)
      {unsigned char x;
      unsigned int y;
      for(x=0;x<time;x++)
      for(y=0;y<330;y++);}

      void hien_thi_so(unsigned char so)
      {
      switch(so)
      {case 0 : P1=so0[dem+count2];break;
      case 1 : P1=so1[dem+count2];break;
      case 2 : P1=so2[dem+count2];break;
      case 3 : P1=so3[dem+count2];break;
      case 4 : P1=so4[dem+count2];break;
      case 5 : P1=so5[dem+count2];break;
      case 6 : P1=so6[dem+count2];break;
      case 7 : P1=so7[dem+count2];break;
      case 8 : P1=so8[dem+count2];break;
      case 9 : P1=so9[dem+count2];break;
      case 10: P1=dau_tru[dem+count2];break;}
      }

      void hien_thi_nhiet_do(signed char nhiet_do) //cot P1 hang P2 5v hang 0v cot
      {
      unsigned char a,b,c;
      if (nhiet_do>=0) {c=nhiet_do%10;nhiet_do=nhiet_do/10;b=nhiet_do%10;nhiet_do=nhiet_do/10;a=nhiet_do;}
      else {nhiet_do=-nhiet_do;c=nhiet_do%10;nhiet_do=nhiet_do/10;b=nhiet_do%10;a=10;}
      for(count=0;count<15;count++)
      for(count1=0;count1<40;count1++)
      for(dem=0;dem<8;dem++)
      {
      P2=0xFF;
      if((dem+count)<=4)
      {count2=count; P2=cot[dem];hien_thi_so(a);}
      else if((dem+count)<=8)
      {count2=count-4;P2=cot[dem];hien_thi_so(b);}
      else if((dem+count)<=12)
      {count2=count-8;P2=cot[dem];hien_thi_so(c);}
      else if((dem+count)<=17)
      {count2=count-12;P2=cot[dem];P1=do_c[dem+count2];}
      else P1=0x00;
      delay_ms(1);
      P1=0x00;
      }
      }

      void Delay(unsigned int time) //
      {for (i=0;i<time;i++);}

      Init_1W()
      { DQ=0;
      Delay(50);
      DQ=1;
      Delay(10);
      if (DQ==0)
      {presence=1;}
      else
      {presence=0;}}

      void Write_1W(unsigned char Data)
      {
      bit outbit;
      for (count=1;count<=8;count++)
      {
      outbit=Data & 0x01;
      Data=Data>>1;
      if (outbit==1)
      {DQ=0;
      _nop_(); _nop_();
      DQ=1;
      Delay(5);
      }
      else
      {
      DQ=0;
      Delay(5);
      DQ=1;
      _nop_();_nop_();_nop_();
      }}}

      Read_1W()
      {
      bit Ibit;
      Rdata=0;
      EA=0;
      for (count=1;count<=8;count++)
      {
      Rdata=Rdata>>1;
      DQ=0;
      _nop_();_nop_();
      DQ=1;
      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_n op_();_nop_();_nop_();
      Ibit=DQ;
      if (Ibit==1)
      Rdata=Rdata|0x80;
      Delay(6);
      EA=1;
      }
      }

      Get_Temperature()
      {
      DQ=1;Delay(300);
      Init_1W();
      if (presence==1)
      {
      Write_1W(0x44);
      while (Rdata==0x00)
      {
      Read_1W();
      Delay(1000);
      }
      Init_1W();
      Delay(3300);
      Write_1W(0xCC);
      Write_1W(0XBE);
      Delay(3400);
      for (count2=0;count2<9;count2++) {
      Read_1W();
      SPAD[count2]=Rdata;
      }
      Init_1W();
      T=SPAD[0]>>4;
      T=T|(SPAD[1]<<4);
      hien_thi_nhiet_do(T); } }

      void main()
      {i=0;
      DQ=1;
      while(1)
      {Get_Temperature();}}
      Attached Files

      Comment

      • Wolfverine
        Thành viên mới
        • Oct 2007
        • 6

        #4
        Đệ up cả phần mô phỏng trên proteus ở bài trên.Các huynh chạy thử rùi sửa giúp em với.Thanks nhìu!

        Comment

        • thientaisodo
          Thành viên tích cực
          • Aug 2007
          • 106

          #5
          Nguyên văn bởi Wolfverine Xem bài viết

          Get_Temperature()
          {
          DQ=1;Delay(300);
          Init_1W();
          if (presence==1)
          { <---------------- Write_1W(0xCC); Thêm lệnh này vào là ok
          Write_1W(0x44);
          while (Rdata==0x00)
          {
          Read_1W();
          Delay(1000);
          }
          Init_1W();
          Delay(3300);
          Write_1W(0xCC);
          Write_1W(0XBE);
          Delay(3400);
          for (count2=0;count2<9;count2++) {
          Read_1W();
          SPAD[count2]=Rdata;
          }
          Init_1W();
          T=SPAD[0]>>4;
          T=T|(SPAD[1]<<4);
          hien_thi_nhiet_do(T);

          Lý do đọc chỉ mỗi 85 độ C là do lúc đầu bạn chưa ra lệnh convert nhiệt độ cho con DS1820. Nói đúng hơn là bạn đã ra lệnh con vert temp (Write_1W(0x44); ) nhưng mà trước đó bạn chưa nói cho 1820 bỏ qua đọc ROM (Write_1W(0xCC); )... bạn đọc datasheet thì hiểu thôi

          Comment

          • Wolfverine
            Thành viên mới
            • Oct 2007
            • 6

            #6
            Thanks huynh nhiều.

            Comment

            • dannynvu
              Thành viên mới
              • Dec 2008
              • 4

              #7
              Wolfverine,

              Ba.n co' the^? na`o chi? cho minh bie^'t schematic, la`m sao de^? giao tiep vo'i con chip na`y qua co^?ng na`o va` co' can phai tai? software na`o de^? chay. codes ma` ban vie^'t ne^u tre^n hong

              Comment

              • Wolfverine
                Thành viên mới
                • Oct 2007
                • 6

                #8
                Ah, để dịch chương trình trên sang mã hex rùi lạp cho VDK mình dùng keilc. Còn để mô phỏng mình dùng bản proteus 7. Sau khi dịch chương trình sang mã hex. Vẽ mạch bằng proteus nạp chương trình cho vi điều khiển trên phần mềm proteus là có thể chạy mô phỏng dc luôn.

                Comment

                • huyplc1
                  Thành viên mới
                  • Sep 2009
                  • 7

                  #9
                  cho mỗi cái proteus thế kìa ko cho file hex thì cho làm gi bạn

                  Comment

                  • nosion
                    Thành viên mới
                    • Nov 2008
                    • 2

                    #10
                    minh da doi lai roi nhung co thay j dau may huynh

                    Comment

                    • nosion
                      Thành viên mới
                      • Nov 2008
                      • 2

                      #11
                      van la 85* ma

                      Comment

                      • vansang
                        Thành viên mới
                        • Apr 2010
                        • 4

                        #12
                        có ai bít cách giao tiếp giữa fpga và ds 1820(ds18b20) không giúp mình với ?

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...