اطلاعیه

Collapse
No announcement yet.

راه اندازی DS1820

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

    راه اندازی DS1820

    سلام،
    میشه راهنمایی کنید چطور میشه این سنسور رو با کدویژن راه اندازی کرد؟
    در واقع چیزی که تو سایت بود DS18b20 بود اما اون کد برای DS1820 کار نمی کنه!
    من کد زیر رو نوشتم ولی تو شبیه سازی همش 0 نشون میده:
    #include <mega32.h>
    #include <delay.h>
    #include <stdio.h>
    #include <math.h>
    // 1 Wire Bus functions
    #include <1wire.h>
    // DS1820 Temperature Sensor functions
    #include <ds1820.h>
    // maximum number of DS1820 devices
    // connected to the 1 Wire bus
    #define MAX_DS1820 2
    // number of DS1820 devices
    // connected to the 1 Wire bus
    unsigned char ds1820_devices;
    // DS1820 devices ROM code storage area,
    // 9 bytes are used for each device

    unsigned char rom_codes[MAX_DS1820][9];
    unsigned char i;
    #asm
    .equ __lcd_port=0x15 ;PORTA
    #endasm
    #include <lcd.h>
    void main(void)
    {
    char lcd_array[16];

    PORTA=0x00;
    DDRA=0x00;

    PORTC=0x00;
    DDRC=0x00;

    ds1820_devices=w1_search(0xf0,rom_codes);
    lcd_init(16);
    for (i=0;i<ds1820_devices;i++)
    {
    sprintf(lcd_array,"INIT DEVICE #%-u ",i+1);
    lcd_clear();
    lcd_puts(lcd_array);
    lcd_gotoxy(0,1);
    delay_ms(1000);
    }
    lcd_clear();
    while (1)
    {

    sprintf(lcd_array,"%f",ds1820_temperatur e_10(&rom_codes[0][0])); //celsius
    lcd_gotoxy(0,0);
    lcd_puts(lcd_array);


    };
    };

    #2
    پاسخ : راه اندازی DS1820

    تا الان نشده اینجا پستی بزنم و یه جواب درست درمون بگیرم!

    دیدگاه


      #3
      پاسخ : راه اندازی DS1820

      درست شد آقا:
      /************************************************** *****
      This program was created by the
      CodeWizardAVR V3.12 Advanced
      Automatic Program Generator
      © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com

      Project :
      Version :
      Date : 7/12/2015
      Author :
      Company :
      Comments:


      Chip type : ATmega32A
      Program type : Application
      AVR Core Clock frequency: 8.000000 MHz
      Memory model : Small
      External RAM size : 0
      Data Stack size : 512
      ************************************************** *****/

      #include <mega32a.h>

      // 1 Wire Bus interface functions
      #include <1wire.h>

      // DS1820 Temperature Sensor functions
      #include <ds1820.h>

      // Alphanumeric LCD functions
      #include <alcd.h>
      #include <stdio.h>
      #include <delay.h>
      unsigned char rom_codes[2][9];
      int point=0;
      int baghie=0;
      char buffer[20];
      int temp=10;
      // Declare your global variables here
      unsigned char ds1820_devices;
      void main(void)
      {
      // Declare your local variables here

      // Input/Output Ports initialization
      // Port A initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

      // Port B initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

      // Port C initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

      // Port D initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=0xFF
      // OC0 output: Disconnected
      TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
      TCNT0=0x00;
      OCR0=0x00;

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Disconnected
      // OC1B output: Disconnected
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
      TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0<<AS2;
      TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
      TCNT2=0x00;
      OCR2=0x00;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
      MCUCSR=(0<<ISC2);

      // USART initialization
      // USART disabled
      UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

      // Analog Comparator initialization
      // Analog Comparator: Off
      // The Analog Comparator's positive input is
      // connected to the AIN0 pin
      // The Analog Comparator's negative input is
      // connected to the AIN1 pin
      ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
      SFIOR=(0<<ACME);

      // ADC initialization
      // ADC disabled
      ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

      // SPI initialization
      // SPI disabled
      SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

      // TWI initialization
      // TWI disabled
      TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

      // 1 Wire Bus initialization
      // 1 Wire Data port: PORTD
      // 1 Wire Data bit: 6
      // Note: 1 Wire port settings are specified in the
      // Project|Configure|C Compiler|Libraries|1 Wire menu.
      w1_init();
      ds1820_devices=w1_search(0xf0,rom_codes);
      // Alphanumeric LCD initialization
      // Connections are specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTC Bit 0
      // RD - PORTC Bit 1
      // EN - PORTC Bit 2
      // D4 - PORTC Bit 4
      // D5 - PORTC Bit 5
      // D6 - PORTC Bit 6
      // D7 - PORTC Bit 7
      // Characters/line: 16
      lcd_init(16);

      while (1)
      {
      // Place your code here
      temp=ds1820_temperature_10(&rom_codes[0][0]);
      point=temp%10;
      baghie=(temp-point)/10;
      sprintf(buffer,"Temp: %d.%d",baghie,point);
      lcd_gotoxy(0,0);
      lcd_puts(buffer);
      delay_ms(500);


      }
      }

      دیدگاه


        #4
        پاسخ : راه اندازی DS1820

        آقا الان این کد در پروتئوس با DS18S20 جواب می ده ولی وقتی تو واقعیت مدار رو با DS1820 می بندم -9999 نشون می ده که یعنی Error کسی می دونه مشکل چیه؟

        دیدگاه


          #5
          پاسخ : راه اندازی DS1820

          درود.
          من تازه میخوام این سنسور رو بخرم.
          نمونه کدی هم که تو اینترنت پیدا کردم اینه.
          http://s6.picofile.com/file/8200078034/ds18b20.rar.html
          ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

          کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

          دیدگاه


            #6
            پاسخ : راه اندازی DS1820

            ممنون که جواب دادید ولی این برنامه ای که گذاشتید مربوط به DS18b20 هست نه DS1820 و اینا با هم فرق دارن.

            دیدگاه


              #7
              پاسخ : راه اندازی DS1820

              درود.
              فرقی نداره.مهم اینه که جفتشون از پروتکل 1wire واسه ارتباط استفاده میکنن.
              میکرو چیه ؟؟؟؟

              یه نمونه کد میزارم واسه میکرو pic


              کد:
              #include<stdio.h>
              #include<pic.h>
              #include "delay.c" __CONFIG(0x3f72);
              #define DQ     RC0
              #define DQ_DIR   TRISC0
              #define FOSC    10000
              #define BAUD_RATE 9.6   // 9600 Baudrate
              #define BAUD_VAL  (char)(FOSC/ (16 * BAUD_RATE )) - 1;   
              // Calculation For 9600 Baudrate @10Mhz
              unsigned char i=0;
              float Temerature=0;
              void ds1820_init();
              void Reset(void);
              void write(unsigned char);
              unsigned char Read(void);
              void Serial_init();
              void main()
              {
                unsigned char Temp[9];
                DelayMs(100);
                Serial_init();
                ds1820_init();
                DelayMs(100);
                printf("\033[2J");  // Clear the Hyper terminal;
                while(1)
                {
                 Reset();
                 write(0xcc);
                 write(0x44);
                 DQ_DIR  = 1;
                 DelayUs(10);
                 while(!DQ);
               // this will be raised after finishing conversion
                 Reset();
                 write(0xcc);
                 write(0xbe); 
                 for(i=0;i<9;i++)
                 Temp[i] = Read();   // Read 9 bytes 
                 for(i=0;i<9;i++)
                 printf("%d ",Temp[i]);  
                 printf("Temperature:%3.1f%cC",(float)Temp[0]/2,0xf8);
                 printf("\r");
                 DelayMs(250);
                 DelayMs(250);
                 DelayMs(250);
                 DelayMs(250);
                }
              }
               
              void ds1820_init()
              {
                 DQ  = 1;
                 DQ_DIR = 1;     // pull up
              }
               
              void Reset(void)
              {
                 DQ_DIR  = 0;
                 DQ   = 0;
                 DelayMs(1);
                 DelayUs(250);   // 500us
                 DQ_DIR  = 1;
                 DelayUs(100);   // 40us
                 while(DQ==1);   // wait until presence pulse
                 DelayMs(1);
                 DelayUs(250);   // 500us
              }
               
              void write(unsigned char cmd)
              {
                 for(i=0;i<8;i++){
                 DQ_DIR  = 0;        // pull down
                 DQ   = 0;
                 DelayUs(25);         // 10us
                 DQ    = (cmd & 0x01)?1:0; // Send bit
                 cmd   = cmd >> 1;
                 DelayUs(120);        // >45us
                 DQ_DIR  = 1;        // release
                 }   
              }
               
              unsigned char Read(void)
              {
                 unsigned char temp=0,RecDat=0;
                 for(i=0;i<8;i++)
                 {
                   DQ_DIR  = 0;
                   DQ   = 0;    // pull down
                DelayUs(25);    // 10us
                DQ_DIR  = 1;   // release
                  DelayUs(25);    // 10us
                  temp  = DQ;    // read bit
                  temp  = temp<<i;
                  RecDat |= temp;
                  DelayUs(70);    // 30us
                 }
                 return RecDat;   
              }
              void Serial_init()
              {
                 TRISC=0xc0;    // RC7,RC6 set to usart mode(INPUT)
                 TXSTA=0x24;    // Transmit Enable
                 SPBRG=BAUD_VAL;  // 9600 baud at 10Mhz
                 RCSTA=0x90; // USART Enable, Continuous receive enable
                 TXIF=1;      // Start Transmit
              }
               
              void putch(unsigned char Data) // data TX required for printf
              {
                   while(TXIF==0);
                   TXREG = Data;
              }
              ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

              کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

              دیدگاه


                #8
                پاسخ : راه اندازی DS1820

                شما خودتون تست کزدید؟

                دیدگاه


                  #9
                  پاسخ : راه اندازی DS1820

                  تا جائی که یادمه، DS1820 مقدار دما را به صورت یک عدد 9 بیتی گزارش می دهد ولی DS18S20 (با دقت کمتر) و نیز DS18B20 (با دقت بیشتر)، دما را به صورت یک عدد 12 بیتی می فرستند.

                  دیدگاه


                    #10
                    پاسخ : راه اندازی DS1820

                    ممنون بابت جوابتون،
                    پس کد ds18b20 رو نمی تونیم برای ds1820 استفاده کنیم درسته؟

                    دیدگاه


                      #11
                      پاسخ : راه اندازی DS1820

                      نوشته اصلی توسط smehdia
                      شما خودتون تست کزدید؟
                      درود.
                      من هنوز سنسور به دستم نرسیده.
                      شما که سنسور تو دستته امتحان کن.مطمعن باش جواب میگیری.


                      نوشته اصلی توسط smehdia
                      ممنون بابت جوابتون،
                      پس کد ds18b20 رو نمی تونیم برای ds1820 استفاده کنیم درسته؟
                      همونطور که در بالا گفتم فرقی نداره.مهم اینه که جفتشون از پروتکل 1wire واسه ارتباط استفاده میکنن.
                      12 بیت یا 9 بیت فقط اعدادشون فرق میکنه.
                      موفق باشید.
                      ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

                      کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

                      دیدگاه


                        #12
                        پاسخ : راه اندازی DS1820

                        من تست کردم جواب نگرفتم.

                        دیدگاه


                          #13
                          پاسخ : راه اندازی DS1820

                          نوشته اصلی توسط smehdia
                          ممنون بابت جوابتون،
                          پس کد ds18b20 رو نمی تونیم برای ds1820 استفاده کنیم درسته؟
                          بله دیگه؛ بهترین راهنما، دیتا شیت این سه نوع سه سنسور است.

                          دیدگاه


                            #14
                            پاسخ : راه اندازی DS1820

                            سلام. دقت 18b20 با 1820 فرق میکنه. من توی پروژه ای با 18b20 کار کردم ولی سر پروژه دیگه ای چون سنسوراشون1820 بود مشکل پیدا کردم که حل شد. شما دیتاشیت 1820 رو بخونید قسمت رجیستر های دما رو لطفا. من با بیسیک نوشتم اما اگه مشکل حل نشد. بگو تا کمکت کنم

                            دیدگاه

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