Thông báo

Collapse
No announcement yet.

Ds1820

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

  • 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

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

    Comment


    • #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


      • #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


        • #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


          • #6
            Thanks huynh nhiều.

            Comment


            • #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


              • #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


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

                  Comment


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

                    Comment


                    • #11
                      van la 85* ma

                      Comment


                      • #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...
                        X