اطلاعیه

Collapse
No announcement yet.

[آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #76
    پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

    نوشته اصلی توسط سساماننن
    سلام بچه ها. .´™ مَسِِــــح`. خوب هستید ؟ تشکر بایت آموزشتون.
    اقا من توی پروتئوس جواب میگیرم ولی توی عمل که میبندم جواب نمیده. :cry2:
    توی پروتئوس وقتی میزنم بهم 1 رو برمیگردونه که یعنی سنسور رو شناخته ولی توی عمل 0 رو نشون میده. :angry:
    مقاومت 4.7 چقدر مهم هست. مقدار دیگه باشه مثلا 10 کیلو خیلی فرق داره ؟
    ممکنه سنسور سوخته باشه ؟
    اتصالات رو چک کنید
    بله مقتومت 4.7 کیلو بزارید.
    بله ممکنه.
    .The best question deserves a better answer
    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
    «پناه»می برم «به خدا»
    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

    دیدگاه


      #77
      پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

      سلام
      خدمت دوستان
      من سنسور رو را اندازی کردم
      خوب هم جواب می ده
      ولی مشکل من اینه که وقتی از این سنسور استفاده می کنم سرعت عملکرد دیگر برنامه هام کاهش پیدا میکنه
      مثل کلید زنی ..
      مثل 7 سگمنت که هی رفرش رو می تونید ببینید

      کسی می تونه راهنمایی کنه چیکار کنم که این کندی سرعت از بین بره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
      از مگا 32 و کریستال خارجی 16 مگ استفاده می کنم....

      آخه من مدار دیدم داشت عملی کار می کرد و هیچ مشکلی هم نداشت
      ولی مداری که من درست کردم سرعتش با این وجود پایین هستش

      دیدگاه


        #78
        پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

        درود
        توابع موجود در فایل lib رو ببین و تغییر بده.
        داخل توابع delay وجود داره که برای 12 بین 700 800 میلی ثانیه delay داره. برای بالا بردن سرعت اول دستور شروع تبدیل رو بفرست و کار های دیگه رو انجام بده و بعد از حدود 700 800 میلی ثانیه دستور خوندن رو ارسال کن.
        مـن هیچ ندانم که مرا آن که سرشت
        از اهل بهشت کرد یا دوزخ زشت
        جامی و بتی و بربطی بر لب کشت
        این هر سه مرا نقد و تو را نسیه بهشت

        دیدگاه


          #79
          پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

          سلام
          شما فرض کن که من مبتدی هستم

          میشه با مثال توضیح بدهید...؟

          این فایل lib
          باید کجاشو تغیر بدم


          کد:
          /*
           CodeVisionAVR C Compiler
           (C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L.
          
           Dallas Semiconductor DS18B20 1 Wire bus temperature sensor functions
          */
          
          #include <delay.h>
          #include <ds18b20.h>
          
          struct __ds18b20_scratch_pad_struct __ds18b20_scratch_pad;
          
          // temp. conversion time [ms] depending on the resolution
          static flash int conv_delay[4]={100,200,400,800};
          // valid temp. bit mask depending on the resolution
          static flash unsigned bit_mask[4]={0xFFF8,0xFFFC,0xFFFE,0xFFFF};
          
          unsigned char ds18b20_select(unsigned char *addr)
          {
          unsigned char i;
          if (w1_init()==0) return 0;
          if (addr)
            {
            w1_write(0x55);
            i=0;
            do
             w1_write(*(addr++));
            while (++i<8);
            }
          else w1_write(0xcc);
          return 1;
          }
          
          unsigned char ds18b20_read_spd(unsigned char *addr)
          {
          unsigned char i;
          unsigned char *p;
          if (ds18b20_select(addr)==0) return 0;
          w1_write(0xbe);
          i=0;
          p=(char *) &__ds18b20_scratch_pad;
          do
           *(p++)=w1_read();
          while (++i<9);
          return !w1_dow_crc8(&__ds18b20_scratch_pad,9);
          }
          
          float ds18b20_temperature(unsigned char *addr)
          {
          unsigned char resolution;
          if (ds18b20_read_spd(addr)==0) return -9999;
          resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
          if (ds18b20_select(addr)==0) return -9999;
          w1_write(0x44);
          delay_ms(conv_delay[resolution]);
          if (ds18b20_read_spd(addr)==0) return -9999;
          w1_init();
          return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
          }
          
          unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
          unsigned char resolution)
          {
          if (ds18b20_select(addr)==0) return 0;
          resolution=(resolution<<5) | 0x1f;
          w1_write(0x4e);
          w1_write(temp_high);
          w1_write(temp_low);
          w1_write(resolution);
          if (ds18b20_read_spd(addr)==0) return 0;
          if ((__ds18b20_scratch_pad.temp_low!=temp_low) ||
            (__ds18b20_scratch_pad.temp_high!=temp_high) ||
            (__ds18b20_scratch_pad.conf_register!=resolution)) return 0;
          if (ds18b20_select(addr)==0) return 0;
          w1_write(0x48);
          delay_ms(15);
          return w1_init();
          }
          [/left][/left][/center][/right][/pre][/left][/left]

          دیدگاه


            #80
            پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

            فایل رو برا استقاده استاندارد تغییر نده.
            یه فایل هدر درست کن توابع زیر رو درش تعریف کن:

            float ds18b20_send_read_command2(unsigned char *addr)
            {
            unsigned char resolution;
            if (ds18b20_read_spd2(addr)==0) return -9999;
            resolution=(__ds18b20_scratch_pad.conf_register&gt ;>5) & 3;
            if (ds18b20_select(addr)==0) return -9999;
            w1_write(0x44);
            return 0;
            }

            *********
            float ds18b20_temperature2(unsigned char *addr)
            {
            unsigned char resolution;
            //if (ds18b20_read_spd(addr)==0) return -9999;
            resolution=(__ds18b20_scratch_pad.conf_register&gt ;>5) & 3;
            //if (ds18b20_select2(addr)==0) return -9999;
            //w1_write(0x44);

            if (ds18b20_read_spd(addr)==0) return -9999;
            w1_init();
            return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
            }
            ***********
            void delay_ms_18b20(void)
            {
            unsigned char resolution;
            //if (ds18b20_read_spd(addr)==0) return -9999;
            resolution=(__ds18b20_scratch_pad.conf_register&gt ;>5) & 3;
            delay_ms(conv_delay[resolution]);
            }
            **********



            برای کار، اول دستور زیر رو بفرست:
            temp1 = ds18b20_send_read_command2(&rom_codes[0][0]);

            جالا تا کار سنسور تموم بشه وقت داری کار دیگه انجام بدی. (باید حداقل 800 مبلی ثانبه صبر کنی)
            جالا دستور زیر رو بفرست:
            temp1 = ds18b20_temperature2(&rom_codes[0][0]);
            مـن هیچ ندانم که مرا آن که سرشت
            از اهل بهشت کرد یا دوزخ زشت
            جامی و بتی و بربطی بر لب کشت
            این هر سه مرا نقد و تو را نسیه بهشت

            دیدگاه


              #81
              پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

              سلام و خسته نباشید
              من اینو برای4 تا سنسور نوشتم اما دمای همه رو 2 نشون میده خواهشا راهنمایی کنید
              اینم کل برنامه و پروتئوس

              دیدگاه


                #82
                پاسخ : [آموزش] راه اندازی سنسور دمای DS18B20 با کد ویژن

                سلام.
                ایا مطلب یا نوتی هست که تمام توابع موجود در کتابخانه ds18b20 در کدویژن رو توضیح داده باشه؟؟ ممنون میشم قرار بدید

                دیدگاه

                لطفا صبر کنید...
                X