اطلاعیه

Collapse
No announcement yet.

DS18S20

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

    DS18S20

    سلام
    دوستان میخوام جندتا DS18S20 رو باهم وصل کنم به 16F877Aراهنمایی لطفا

    #2
    پاسخ : DS18S20

    سخت افزارش آماده است ؟ با چه کامپایلری میخواید انجام بدید؟
    گل سرخ گل سرخ است و خار , خار . نه خار بد است و نه گل سرخ خوب . اگر انسان از روي زمين محو شود , گلها آنجا خواهند بود و خارها نيز آنجا . اما ديگر كسي نيست كه بگويد گلهاي سرخ خوبند و خارها بد !

    دیدگاه


      #3
      پاسخ : DS18S20

      نه اگه میشه کلا یه راهنمایی کنید و اینکه از کامپایلر ccs استفاده میکنم

      دیدگاه


        #4
        پاسخ : DS18S20

        ابتدا عبارت زیر را در گوگل سرچ میکنیم. این عبارت از گوگل می خواهد که عبارت "DS1820" را در سایت ccsinfo جستجو کند.
        کد:
        DS1820 site:ccsinfo.com
        روی نتیجه دوم که به نظر مناسب می آید کلیک میکنیم. CCS :: View topic - DS18S20 & DS18B20 Codes
        در این تاپیک کد لازم برای راه اندازی یک سنسور آمده است.
        ابتدا یک سنسور را راه اندازی میکنیم. سپس با مطالعه دیتاشیت چند سنسور را اضافه میکنیم.

        موفق باشید.

        دیدگاه


          #5
          پاسخ : DS18S20

          سلام
          دوست عزیز من اینارو مطالعه کردم اما کدهایی که تو نت هست رو نمیدونم چطور تو ccs ازشون تست بگیرم

          اضافه شده در تاریخ :
          برای مثال این کد که گفته واسه بیشتر از یکی کار نمیکنه.میشه راهنمایی کنید با ccs v14.130 چطور از این کد استفاده کنم ؟من تاپیکهای ساخت پروزه رو خوندم اما مراحلش فرق داره تو این ورژن

          دیدگاه


            #6
            پاسخ : DS18S20

            کد هایی که در اون تاپیک انجمن CCS داده رو در فایل های جداگانه در یک پوشه ذخیره کنید. فایل main رو با IDE باز کنید و کامپایل کنید. بعدسخت افزار رو ببندید و تست کنید. از پروتیوس هم میتونید استفاده کنید ولی زیاد بهش اعتماد نکنید.

            برای آشنایی با اصول برنامه نویسی در CCS این کتاب رو یه نگاهی بندازید.(از تاپیک معرفی کتاب های آموزشی برای میکروکنترلرهای PIC در بالای انجمن)

            دیدگاه


              #7
              پاسخ : DS18S20

              دوست عزیز من با CCS کار میکنم اگه میشه تو این محیط راهنمایی کنید
              [code=c]#include <main.h>
              #define ONE_WIRE_PIN PIN_A0
              #USE RS232(BAUD=9600, XMIT=PIN_c7, RCV=PIN_c6)

              int8 tH,tL,Conf;
              void onewire_reset(void);
              void onewire_write(int data);
              int onewire_read();
              float ds1820_read();


              void main()
              {
              printf("Temperature"
              float temperature;
              //for 10 bit resolution mod
              onewire_write(0xCC);
              onewire_write(0x4E);

              onewire_write(125);
              onewire_write(-55); //this should be done for proper working of DS18B20
              onewire_write(127);

              onewire_reset();
              onewire_write(0xCC);
              onewire_write(0x48);
              delay_ms(15);

              setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit) ; //102 us overflow


              //Example blinking LED program
              while(true)
              {
              temperature = ds1820_read();
              printf("Temperature= %3.1f\n\r",temperature);
              output_low(LED);
              delay_ms(DELAY);
              output_high(LED);
              delay_ms(DELAY);
              }

              }





              /*******************1-wire communication functions********************/


              void onewire_reset() // OK if just using a single permanently connected device
              {output_low(ONE_WIRE_PIN);
              delay_us( 500 ); // pull 1-wire low for reset pulse
              output_float(ONE_WIRE_PIN); // float 1-wire high
              delay_us( 500 ); // wait-out remaining initialisation window.
              output_float(ONE_WIRE_PIN);
              }

              /*********************** onewire_write() ********************************/

              void onewire_write(int data)
              {
              int count;

              for (count=0; count<8; ++count)
              {
              output_low(ONE_WIRE_PIN);
              delay_us( 2 ); // pull 1-wire low to initiate write time-slot.
              output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire
              delay_us( 60 ); // wait until end of write slot.
              output_float(ONE_WIRE_PIN); // set 1-wire high again,
              delay_us( 2 ); // for more than 1us minimum.
              }
              }

              /*********************** read1wire() *********************************/
              int onewire_read()
              {
              int count, data;

              for (count=0; count<8; ++count)
              {
              output_low(ONE_WIRE_PIN);
              delay_us( 2 ); // pull 1-wire low to initiate read time-slot.
              output_float(ONE_WIRE_PIN); // now let 1-wire float high,
              delay_us( 8 ); // let device state stabilise,
              shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result.
              delay_us( 120 ); // wait until end of read slot.
              }

              return( data );
              }
              //*********************** ds1820_read() *********************************/

              float ds1820_read()
              {
              int8 busy=0, temp1, temp2;
              signed int16 temp3;
              float result;

              onewire_reset();
              onewire_write(0xCC);
              onewire_write(0x44);
              delay_ms(200);
              while (busy == 0)
              busy = onewire_read();

              onewire_reset();
              onewire_write(0xCC);
              onewire_write(0xBE);
              temp1 = onewire_read();
              temp2 = onewire_read();
              tH=onewire_read();
              tL=onewire_read();
              Conf=onewire_read();
              temp3 = make16(temp2, temp1);

              //result = (float) temp3 / 2.0; // 0.5 deg C resolution
              result = (float) temp3 / 16.0; //0.1 deg C resolution
              delay_ms(200);
              return(result);
              } [/code]

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

              اضافه شده در تاریخ :
              سوال دیگه اینکه چطور میشه 1WIREرو فعال کنم تو کدم؟

              دیدگاه


                #8
                پاسخ : DS18S20

                نوشته اصلی توسط asmira
                سوال دیگه اینکه چطور میشه 1WIREرو فعال کنم تو کدم؟
                فعال کردن معنی نداره. PIC ماجول 1Wire نداره که بخواد فعال بشه. باید بصورت نرم فزاری سیگنال داده بشه که توی کد شما موجوده.
                در ضمن ورژن ccs v14.130 نداریم. احتمالا 4.130 هست.

                XMIT=PIN_c7 به نظر غلط میاد. پایه ارسال C6 هست. اینجوری بنویسید:
                کد:
                #USE RS232(BAUD=9600,uart1,errors)
                1- آیا کدتون رو از تاپیکی که من لینک دادم تدوین کردید؟
                2- وقتی میگید کار نمیکنه یعنی چی؟ توی ترمینال چیزی نشون نمیده؟ LED چشمک نمیزنه؟ دما رو درست نشون نمیده؟ یا چی؟
                3- محتویات فایل main.h رو ارسال کنید.
                4- فایل شبیه سازی پروتیوس رو ارسال کنید.
                5- مقاومت پول پ گزاشتید روی خط دیتا؟


                دیدگاه


                  #9
                  پاسخ : DS18S20

                  با سلام و خسته نباشید.
                  دوست عزیز من کد رو که کامپایل میکنم error نمیده و اینکه نه روی سریال چیزی نشون میده نه ledروشن میشه هیچ عکس العملی نداره.بله همون کدی که شما فرمودید و اینکه مقاومت puulup هم گذاشتم.[code=c]#include <main.h>
                  #define ONE_WIRE_PIN PIN_A0
                  #USE RS232(BAUD=9600, XMIT=PIN_c7, RCV=PIN_c6)

                  int8 tH,tL,Conf;
                  void onewire_reset(void);
                  void onewire_write(int data);
                  int onewire_read();
                  float ds1820_read();


                  void main()
                  {
                  printf("Temperature"
                  float temperature;
                  //for 10 bit resolution mod
                  onewire_write(0xCC);
                  onewire_write(0x4E);

                  onewire_write(125);
                  onewire_write(-55); //this should be done for proper working of DS18B20
                  onewire_write(127);

                  onewire_reset();
                  onewire_write(0xCC);
                  onewire_write(0x48);
                  delay_ms(15);

                  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit) ; //102 us overflow


                  //Example blinking LED program
                  while(true)
                  {
                  temperature = ds1820_read();
                  printf("Temperature= %3.1f\n\r",temperature);
                  output_low(LED);
                  delay_ms(DELAY);
                  output_high(LED);
                  delay_ms(DELAY);
                  }

                  }





                  /*******************1-wire communication functions********************/


                  void onewire_reset() // OK if just using a single permanently connected device
                  {output_low(ONE_WIRE_PIN);
                  delay_us( 500 ); // pull 1-wire low for reset pulse
                  output_float(ONE_WIRE_PIN); // float 1-wire high
                  delay_us( 500 ); // wait-out remaining initialisation window.
                  output_float(ONE_WIRE_PIN);
                  }

                  /*********************** onewire_write() ********************************/

                  void onewire_write(int data)
                  {
                  int count;

                  for (count=0; count<8; ++count)
                  {
                  output_low(ONE_WIRE_PIN);
                  delay_us( 2 ); // pull 1-wire low to initiate write time-slot.
                  output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire
                  delay_us( 60 ); // wait until end of write slot.
                  output_float(ONE_WIRE_PIN); // set 1-wire high again,
                  delay_us( 2 ); // for more than 1us minimum.
                  }
                  }

                  /*********************** read1wire() *********************************/
                  int onewire_read()
                  {
                  int count, data;

                  for (count=0; count<8; ++count)
                  {
                  output_low(ONE_WIRE_PIN);
                  delay_us( 2 ); // pull 1-wire low to initiate read time-slot.
                  output_float(ONE_WIRE_PIN); // now let 1-wire float high,
                  delay_us( 8 ); // let device state stabilise,
                  shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result.
                  delay_us( 120 ); // wait until end of read slot.
                  }

                  return( data );
                  }
                  //*********************** ds1820_read() *********************************/

                  float ds1820_read()
                  {
                  int8 busy=0, temp1, temp2;
                  signed int16 temp3;
                  float result;

                  onewire_reset();
                  onewire_write(0xCC);
                  onewire_write(0x44);
                  delay_ms(200);
                  while (busy == 0)
                  busy = onewire_read();

                  onewire_reset();
                  onewire_write(0xCC);
                  onewire_write(0xBE);
                  temp1 = onewire_read();
                  temp2 = onewire_read();
                  tH=onewire_read();
                  tL=onewire_read();
                  Conf=onewire_read();
                  temp3 = make16(temp2, temp1);

                  //result = (float) temp3 / 2.0; // 0.5 deg C resolution
                  result = (float) temp3 / 16.0; //0.1 deg C resolution
                  delay_ms(200);
                  return(result);
                  } [/code]

                  دیدگاه


                    #10
                    پاسخ : DS18S20

                    نوشته اصلی توسط freedom_truth
                    3- محتویات فایل main.h رو ارسال کنید.
                    4- فایل شبیه سازی پروتیوس رو ارسال کنید.

                    دیدگاه


                      #11
                      پاسخ : DS18S20

                      [code=c]void main()
                      {
                      printf("Temperature"
                      float temperature;
                      //for 10 bit resolution mod
                      onewire_write(0xCC);
                      onewire_write(0x4E);

                      onewire_write(125);
                      onewire_write(-55); //this should be done for proper working of DS18B20
                      onewire_write(127);

                      onewire_reset();
                      onewire_write(0xCC);
                      onewire_write(0x48);
                      delay_ms(15);

                      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit) ; //102 us overflow


                      //Example blinking LED program
                      while(true)
                      {
                      temperature = ds1820_read();
                      printf("Temperature= %3.1f\n\r",temperature);
                      output_low(LED);
                      delay_ms(DELAY);
                      output_high(LED);
                      delay_ms(DELAY);
                      }

                      }[/code]
                      این محتویات main
                      هرچقدر تلاش میکنم گزینه ای پیدا نمیکنم فایل پروتئوس رو قرار بدم
                      iv] مهندس اگه امکان داره mail بدید ارسال کنم

                      دیدگاه


                        #12
                        پاسخ : DS18S20

                        محتویات فایل main.h رو ارسال کنید. شما تابع main رو ارسال کردید که قبلاً هم ارسال کرده بودید.
                        فایل پروتیوس رو هم تو یه سایت مثل persiangig یا picofile پلود کنید و لینکش رو اینجا پست کنید.

                        دیدگاه


                          #13
                          پاسخ : DS18S20

                          [code=c]#include <16F877A.h>
                          #device ADC=16

                          #FUSES NOWDT //No Watch Dog Timer
                          #FUSES NOBROWNOUT //No brownout reset
                          #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

                          #use delay(crystal=10000000)
                          #use FIXED_IO( A_outputs=PIN_A0 )
                          #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8,stream=PORT1)

                          #define LED PIN_A1
                          #define DELAY 1000

                          [/code]
                          http://s4.picofile.com/file/8163929526/2.zip.html

                          اضافه شده در تاریخ :
                          http://s5.picofile.com/file/8163929884/DS18S20_PRJ.zip.html

                          اینم فالی برنامه در تاپیک قبلی فایل پروتئوس رو گذاشتم

                          دیدگاه


                            #14
                            پاسخ : DS18S20

                            خط use FIXED_IO رو از فایل h حذف کنید. این خط باعث میشه پین A0 همیشه خروجی بشه که غلطه. چون باید موقع خوندن ورودی بشه.
                            مقاومت پول پ اصلا وصل نیست. پاک کن دوباره بکش.
                            آخر تابع ds1820_read ، خط تقسیم بر 16 رو کامنت کن و اون یکی رو از حالت کامنت خارج کن.

                            اگر بازم کار نکرد فایلهاش رو یکجا پلود کن.

                            دیدگاه


                              #15
                              پاسخ : DS18S20

                              ممنون از وقتی که گذاشتید کار کرد حالا برای اینکه چندتا ds1820 رو بتونم کنترل کنم چکار باید بکنم؟

                              دیدگاه

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