اطلاعیه

Collapse
No announcement yet.

مشکل با سنسور DS18B20

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

    #16
    پاسخ : مشکل با سنسور DS18B20

    اقای احسان
    اولا اون تاخیر اخر برنامه باید بیشتر از 800 میلی ثانیه باشه
    -2 از دستور اسپرینتف استفاده نکن
    به جاش از توابع دیگه مثل این استفاده کن
    void ftoa(float n,unsigned char decimals,char *str);
    برنامه تو ارایه ادرس نداره باید احتمال کار کردنش بیشتر باشه
    درضمن از کدویزن های پایین تر استفاده کن 2.3.9
    فعلا این ها رو انجام بده ببینیم چی میشه

    دیدگاه


      #17
      پاسخ : مشکل با سنسور DS18B20

      نوشته اصلی توسط sahel2013
      اقای احسان
      اولا اون تاخیر اخر برنامه باید بیشتر از 800 میلی ثانیه باشه
      -2 از دستور اسپرینتف استفاده نکن
      به جاش از توابع دیگه مثل این استفاده کن
      void ftoa(float n,unsigned char decimals,char *str);
      برنامه تو ارایه ادرس نداره باید احتمال کار کردنش بیشتر باشه
      درضمن از کدویزن های پایین تر استفاده کن 2.3.9
      فعلا این ها رو انجام بده ببینیم چی میشه
      آقا من با آنالیزی که انجام دادم متوجه شدم که عددی که داخل متغیر temp هست بیشتر از عدد 100000 هست !!!
      برای همین وقتی به 10 تقسیم میشه حاصلش 2 رقمی میشه و رو 7سگمنت چیزی نشون نمیده !
      حالا اینکه چرا رو LCD درسته و رو سگمنت نه رو خدا میدونه.

      دوستان دیگر هم لطفا کمک کنند،این یه مشکلیه که خیلی ها ممکنه تو کار با این سنسور بهش بربخورند !
      * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
      * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
      *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
      حضرت علی(ع)
      آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

      دیدگاه


        #18
        پاسخ : مشکل با سنسور DS18B20

        سلام اقا احسان
        من خوب به برنامتون توجه نکردم
        گویا اشکال شما جزیی
        temp=ds18b20_temperature(0);
        sprintf(buffer,"T=%5.3f\xdfC",temp);
        اولا که این باید اینجوری بنویسی
        %5.3f\xdfC
        %3.1f\xdfC
        بعد به احتمال شما عدد فلوت رو اول توسط تابع مخصوص که فکر کنم اسمش روند هست / قسمت اعشارشو
        حذف نمیکنید و تبدیل به اینت نمیکنید بعد تقسیم و این کار ها رو برای نمایش عددد انجام بدید
        گویا عدد فلوت رو تقسیم میکنید برای نمایش
        متوجه شدید ؟

        یا اینکه یه اشکال تو برنامه سگمنت هاست
        مطمینم اشکال نرم افزاریه
        بهت قول میدم


        دیدگاه


          #19
          پاسخ : مشکل با سنسور DS18B20

          دوستان منم دقیقا همین مشکل رو با DS18B20 دارم ولی با این تفاوت که بعضی وقت ها درست دما رو میخونه و بیشتر وقتها ERROR میده
          خداوند جهاد را برای سرافرازی اسلام واجب کرد.
          حضرت فاطمه (س)

          دیدگاه


            #20
            پاسخ : مشکل با سنسور DS18B20

            سلام کسی هست جواب بنده را بده؟
            این برنامه مشکلش کجاست؟
            جرا کار نمیده!!

            temp=ds1820_temperature_10(0);
            sprintf(b,"T = %5.3f\xdfC",temp);
            lcd_gotoxy(0,0);
            lcd_puts(b);
            delay_ms(1000);


            ds18b20 سنسور منه
            ضمناً سنسور را به پایه d0 وصل کردم

            دیدگاه


              #21
              پاسخ : مشکل با سنسور DS18B20

              سلام ب همه دوستان
              وقتتون بخیر
              من مشکل شما ها رو داشتم ولی بعد از دو روز مشکلات حل شد
              حالا مشکل هارو در زیر دیل میکنم و در نهایت هم پروژرو براتون فرار میدم فقط تشکر فراموش نشه :biggrin: :mrgreen: :applause:
              اولین مشکل عدم نمایش دما رو نمایشگر بود ک بخاطر تنظیمات داخل کانفیگور پروژه بود که باید در قسمت sprintf رو رو حالت اخری ک فلوت هم ساپورت میکنه قرار بدید ولی مشکلی ک ایجاد میکنه ک کد تولیدتون خیلی زیاد میشه.
              حالا برای حل مشکل بالا از کتابخانهstring استفاده کردم ک فلوت را به استرینگ تبدیل میکند و با دقت 2رقم بعد اعشار درون ارایه استرینگی قرار میدهد ک کار باهاش خیلی راحته.
              مشکل دوم ک زیاد جدی نیست یهویی -9999 نشون میده ولی گزراست شاید 2ساعت یکبار که با یک مقایسه نمونه قبلی و حاضر راحت میشه برطرفش کرد ولی هنوز کامل دلیلشو نفهمیدم.

              کد:
              /*****************************************************
              This program was produced by the
              CodeWizardAVR V2.05.3 Standard
              Automatic Program Generator
              © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
              http://www.hpinfotech.com
              
              Project : 
              Version : 
              Date  : 04/18/2015
              Author : PerTic@n
              Company : If You Like This Software,Buy It
              Comments: 
              
              
              Chip type        : ATmega16A
              Program type      : Application
              AVR Core Clock frequency: 8.000000 MHz
              Memory model      : Small
              External RAM size    : 0
              Data Stack size     : 256
              *****************************************************/
              
              #include <mega16a.h>
              #include <delay.h>
              #include <string.h>
              
              #include <STDLIB.H> 
              #include <stdio.h> 
              
              // 1 Wire Bus interface functions
              #include <1wire.h>
              
              // DS1820 Temperature Sensor functions
              #include <ds18b20.h>
              
              // Alphanumeric LCD functions
              #include <alcd.h>
              
              // Declare your global variables here
              /* maximum number of DS1820/DS18S20 connected to the bus */
              #define MAX_DEVICES 8
              
              
              /* DS1820/DS18S20 devices ROM code storage area,
                9 bytes are used for each device
                (see the w1_search function description),
                but only the first 8 bytes contain the ROM code
                and CRC */
              unsigned char rom_codes[MAX_DEVICES][9],j;
              unsigned char i,devices,buffer_lcd[30],buffer[30];
              float temp=0;
              unsigned char alarm_rom_codes[MAX_DEVICES][9];
              
              void main(void)
              {
              // Declare your local variables here
              
              // Input/Output Ports initialization
              // Port A initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTA=0x00;
              DDRA=0x00;
              
              // Port B initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTB=0x00;
              DDRB=0x00;
              
              // Port C initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTC=0x00;
              DDRC=0x00;
              
              // Port D initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTD=0x00;
              DDRD=0x00;
              
              // Timer/Counter 0 initialization
              // Clock source: System Clock
              // Clock value: Timer 0 Stopped
              // Mode: Normal top=0xFF
              // OC0 output: Disconnected
              TCCR0=0x00;
              TCNT0=0x00;
              OCR0=0x00;
              
              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: Timer1 Stopped
              // Mode: Normal top=0xFFFF
              // OC1A output: Discon.
              // OC1B output: Discon.
              // 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=0x00;
              TCCR1B=0x00;
              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=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;
              
              // External Interrupt(s) initialization
              // INT0: Off
              // INT1: Off
              // INT2: Off
              MCUCR=0x00;
              MCUCSR=0x00;
              
              // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=0x00;
              
              // USART initialization
              // USART disabled
              UCSRB=0x00;
              
              // Analog Comparator initialization
              // Analog Comparator: Off
              // Analog Comparator Input Capture by Timer/Counter 1: Off
              ACSR=0x80;
              SFIOR=0x00;
              
              // ADC initialization
              // ADC disabled
              ADCSRA=0x00;
              
              // SPI initialization
              // SPI disabled
              SPCR=0x00;
              
              // TWI initialization
              // TWI disabled
              TWCR=0x00;
              
              // 1 Wire Bus initialization
              // 1 Wire Data port: PORTB
              // 1 Wire Data bit: 0
              // Note: 1 Wire port settings are specified in the
              // Project|Configure|C Compiler|Libraries|1 Wire menu.
              w1_init();
              
              // Alphanumeric LCD initialization
              // Connections are specified in the
              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
              // RS - PORTA Bit 0
              // RD - PORTA Bit 1
              // EN - PORTA Bit 2
              // D4 - PORTA Bit 6
              // D5 - PORTA Bit 5
              // D6 - PORTA Bit 4
              // D7 - PORTA Bit 3
              // Characters/line: 16
              lcd_init(16);
              
                lcd_clear();
                lcd_putsf(" Test DS18B20  "); 
                delay_ms(1500); 
                lcd_clear();
                //sprintf(buffer_lcd,"Rnd= %u",iii);
              		//lcd_puts(buffer_lcd);
                ///printf(" newcount befor = %lu \r\n",newcount_delay);
                 
                /* detect how many DS1820/DS18S20 devices
                are connected to the bus and
                store their ROM codes in the rom_codes array */
                devices=w1_search(0xf0,rom_codes); 
                
                /* display the number */
                //printf("%-u DEVICE(S) DETECTED\n\r",devices);
                sprintf(buffer_lcd,"%u DEV DETECTED",devices);
                lcd_puts(buffer_lcd);
                delay_ms(500);
                lcd_clear();
              
                /* if no devices were detected then halt */   
                if (devices==0) 
                {
                  lcd_putsf("no devices were detected");
                  while (1); /* loop forever */
                }
                
                for (i=0;i<devices;i++)
                {
              
                 sprintf(buffer_lcd,"INIT DEVICE #%-u  ",i+1);
                 lcd_puts(buffer_lcd);
                 if (ds18b20_init(&rom_codes[i][0],25,45,DS18B20_12BIT_RES))
                  //putsf("OK"); 
                  lcd_putsf("OK init");
                 else 
                  //putsf("ERROR");
                  lcd_putsf("ERROR init"); 
                };  
                delay_ms(500);
                lcd_clear();
                
                /*if (devices)
                {
                for (i=0;i<devices;i++)
                  {
                  sprintf(buffer_lcd,"Device #%u ROM\nCode is:",i+1);
                  lcd_clear();
                  lcd_puts(buffer_lcd);
                  delay_ms(2000);
                  lcd_clear();
                  for (j=0;j<8;j++)
                    {
                    sprintf(buffer_lcd,"%02X ",rom_codes[i][j]);
                    lcd_puts(buffer_lcd);
                    if (j==3) lcd_gotoxy(0,1);
                    };
                  delay_ms(5000);
                  };
                } */
                
              while (1)
                 {
                      temp=ds18b20_temperature(&rom_codes[0][0]);
                    
                      ftoa( temp , 2 , buffer );
              
                    //sprintf(buffer_lcd,"t%u=%+.3f\xdfC",j+1,ds18b20_temperature(&rom_codes[i][0]));
                      sprintf(buffer_lcd,"Temp=%s\xdfC",buffer);
                    lcd_clear();
                    lcd_puts(buffer_lcd);
                    ///delay_ms(1000);
              
                    /* display the number of devices which
                      generated an alarm */ 
                    if ( w1_search(0xec,alarm_rom_codes) )
                    {   
                     sprintf(buffer_lcd,"ALARM GEN BY %u DEVICE(S)\n\r",w1_search(0xec,alarm_rom_codes)); 
                     lcd_puts(buffer_lcd); 
                    }
                   
              
                 }
              }
              هیچ و دگر هیچ

              دیدگاه


                #22
                پاسخ : مشکل با سنسور DS18B20

                سلام
                مدارمو بستم و تو پروتیوس جواب میده ولی تو مدار واقعیش نه!!!!!1
                مقاومت pullup هم گذاشتم پایه هاشم چک کردم ولی همش -9999.0 نشون میده!!
                مشکل چیه؟!؟!؟!؟!

                دیدگاه


                  #23
                  پاسخ : مشکل با سنسور DS18B20

                  سلام دوستان یکی کمک کنه لطفا!
                  من از ds18b20 استفاده میکنم با میکرو mega8 همه چیز درسته ولی نمی دونم چرا میکرو نمیتونه ارتباط با سنسور رو برقرار کنه البته تو شبیه سازی کار میکنه رو برد که میزنم ال سی دی شرط
                  برنامشم اینه
                  کد:
                  /*****************************************************
                  This program was produced by the
                  CodeWizardAVR V2.05.0 Advanced
                  
                  Project : 
                  Version : 
                  Date  : 19/02/2011 1389-12-01
                  Author : 
                  Company : 
                  Comments: 
                  
                  Chip type        : ATmega16
                  Program type      : Application
                  AVR Core Clock frequency: 8.000000 MHz
                  Memory model      : Small
                  External RAM size    : 0
                  Data Stack size     : 256
                  *****************************************************/
                  
                  #include <mega8.h>        
                  #include <delay.h>
                  #include <lcd.h>         
                  #include <1wire.h>       
                  #include <ds18b20.h>       
                  #include <stdio.h> 
                  #define xtal 8000000       
                  #asm
                    .equ __w1_port=0x12 ;PORTD
                    .equ __w1_bit=1
                  #endasm
                  #asm
                    .equ __lcd_port=0x18 ;PORTB
                  #endasm
                         
                  char buffer[32];
                        
                    void main(void){
                      unsigned char iman;     
                      int temp;            
                  
                      lcd_init(16);          
                      iman=w1_init();        
                     while(iman>0){
                       temp=ds18b20_temperature(0);
                         
                       sprintf(buffer,"dama=%i\xdfC",temp);  
                       lcd_clear();
                       lcd_gotoxy(4,0);         
                       lcd_puts(buffer);    
                       lcd_gotoxy(0,1);         
                       lcd_puts("download-electro");
                       delay_ms(100);
                      delay_ms(10);    
                     }
                    }

                  دیدگاه


                    #24
                    پاسخ : مشکل با سنسور DS18B20

                    کسی با این مشکل رو به رو نشده کسی میتونه کمک کنه؟

                    دیدگاه


                      #25
                      پاسخ : مشکل با سنسور DS18B20

                      نوشته اصلی توسط loverdead
                      کسی با این مشکل رو به رو نشده کسی میتونه کمک کنه؟
                      برنامه اشتباه داره

                      ببین مثلا
                      temp=ds18b20_temperature(0);
                      خروجی این تابع یه عدد فلوت نه اینتجر
                      یا
                      lcd_puts("download-electro"

                      lcd_putsf ( "... &quot
                      باید از مدل فلش استفاده کنی نه رم

                      خب جانم برنامه اماده که زیاده ..
                      ____________________________________

                      نوشته اصلی توسط explode
                      سلام ب همه دوستان
                      وقتتون بخیر
                      من مشکل شما ها رو داشتم ولی بعد از دو روز مشکلات حل شد
                      حالا مشکل هارو در زیر دیل میکنم و در نهایت هم پروژرو براتون فرار میدم فقط تشکر فراموش نشه :biggrin: :mrgreen: :applause:
                      اولین مشکل عدم نمایش دما رو نمایشگر بود ک بخاطر تنظیمات داخل کانفیگور پروژه بود که باید در قسمت sprintf رو رو حالت اخری ک فلوت هم ساپورت میکنه قرار بدید ولی مشکلی ک ایجاد میکنه ک کد تولیدتون خیلی زیاد میشه.
                      حالا برای حل مشکل بالا از کتابخانهstring استفاده کردم ک فلوت را به استرینگ تبدیل میکند و با دقت 2رقم بعد اعشار درون ارایه استرینگی قرار میدهد ک کار باهاش خیلی راحته.
                      مشکل دوم ک زیاد جدی نیست یهویی -9999 نشون میده ولی گزراست شاید 2ساعت یکبار که با یک مقایسه نمونه قبلی و حاضر راحت میشه برطرفش کرد ولی هنوز کامل دلیلشو نفهمیدم.

                      کد:
                      /*****************************************************
                      This program was produced by the
                      CodeWizardAVR V2.05.3 Standard
                      Automatic Program Generator
                      © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                      http://www.hpinfotech.com
                      
                      Project : 
                      Version : 
                      Date  : 04/18/2015
                      Author : PerTic@n
                      Company : If You Like This Software,Buy It
                      Comments: 
                      
                      
                      Chip type        : ATmega16A
                      Program type      : Application
                      AVR Core Clock frequency: 8.000000 MHz
                      Memory model      : Small
                      External RAM size    : 0
                      Data Stack size     : 256
                      *****************************************************/
                      
                      #include <mega16a.h>
                      #include <delay.h>
                      #include <string.h>
                      
                      #include <STDLIB.H> 
                      #include <stdio.h> 
                      
                      // 1 Wire Bus interface functions
                      #include <1wire.h>
                      
                      // DS1820 Temperature Sensor functions
                      #include <ds18b20.h>
                      
                      // Alphanumeric LCD functions
                      #include <alcd.h>
                      
                      // Declare your global variables here
                      /* maximum number of DS1820/DS18S20 connected to the bus */
                      #define MAX_DEVICES 8
                      
                      
                      /* DS1820/DS18S20 devices ROM code storage area,
                        9 bytes are used for each device
                        (see the w1_search function description),
                        but only the first 8 bytes contain the ROM code
                        and CRC */
                      unsigned char rom_codes[MAX_DEVICES][9],j;
                      unsigned char i,devices,buffer_lcd[30],buffer[30];
                      float temp=0;
                      unsigned char alarm_rom_codes[MAX_DEVICES][9];
                      
                      void main(void)
                      {
                      // Declare your local variables here
                      
                      // Input/Output Ports initialization
                      // Port A initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTA=0x00;
                      DDRA=0x00;
                      
                      // Port B initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTB=0x00;
                      DDRB=0x00;
                      
                      // Port C initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTC=0x00;
                      DDRC=0x00;
                      
                      // Port D initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTD=0x00;
                      DDRD=0x00;
                      
                      // Timer/Counter 0 initialization
                      // Clock source: System Clock
                      // Clock value: Timer 0 Stopped
                      // Mode: Normal top=0xFF
                      // OC0 output: Disconnected
                      TCCR0=0x00;
                      TCNT0=0x00;
                      OCR0=0x00;
                      
                      // Timer/Counter 1 initialization
                      // Clock source: System Clock
                      // Clock value: Timer1 Stopped
                      // Mode: Normal top=0xFFFF
                      // OC1A output: Discon.
                      // OC1B output: Discon.
                      // 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=0x00;
                      TCCR1B=0x00;
                      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=0x00;
                      TCCR2=0x00;
                      TCNT2=0x00;
                      OCR2=0x00;
                      
                      // External Interrupt(s) initialization
                      // INT0: Off
                      // INT1: Off
                      // INT2: Off
                      MCUCR=0x00;
                      MCUCSR=0x00;
                      
                      // Timer(s)/Counter(s) Interrupt(s) initialization
                      TIMSK=0x00;
                      
                      // USART initialization
                      // USART disabled
                      UCSRB=0x00;
                      
                      // Analog Comparator initialization
                      // Analog Comparator: Off
                      // Analog Comparator Input Capture by Timer/Counter 1: Off
                      ACSR=0x80;
                      SFIOR=0x00;
                      
                      // ADC initialization
                      // ADC disabled
                      ADCSRA=0x00;
                      
                      // SPI initialization
                      // SPI disabled
                      SPCR=0x00;
                      
                      // TWI initialization
                      // TWI disabled
                      TWCR=0x00;
                      
                      // 1 Wire Bus initialization
                      // 1 Wire Data port: PORTB
                      // 1 Wire Data bit: 0
                      // Note: 1 Wire port settings are specified in the
                      // Project|Configure|C Compiler|Libraries|1 Wire menu.
                      w1_init();
                      
                      // Alphanumeric LCD initialization
                      // Connections are specified in the
                      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                      // RS - PORTA Bit 0
                      // RD - PORTA Bit 1
                      // EN - PORTA Bit 2
                      // D4 - PORTA Bit 6
                      // D5 - PORTA Bit 5
                      // D6 - PORTA Bit 4
                      // D7 - PORTA Bit 3
                      // Characters/line: 16
                      lcd_init(16);
                      
                        lcd_clear();
                        lcd_putsf(" Test DS18B20  "); 
                        delay_ms(1500); 
                        lcd_clear();
                        //sprintf(buffer_lcd,"Rnd= %u",iii);
                      		//lcd_puts(buffer_lcd);
                        ///printf(" newcount befor = %lu \r\n",newcount_delay);
                         
                        /* detect how many DS1820/DS18S20 devices
                        are connected to the bus and
                        store their ROM codes in the rom_codes array */
                        devices=w1_search(0xf0,rom_codes); 
                        
                        /* display the number */
                        //printf("%-u DEVICE(S) DETECTED\n\r",devices);
                        sprintf(buffer_lcd,"%u DEV DETECTED",devices);
                        lcd_puts(buffer_lcd);
                        delay_ms(500);
                        lcd_clear();
                      
                        /* if no devices were detected then halt */   
                        if (devices==0) 
                        {
                          lcd_putsf("no devices were detected");
                          while (1); /* loop forever */
                        }
                        
                        for (i=0;i<devices;i++)
                        {
                      
                         sprintf(buffer_lcd,"INIT DEVICE #%-u  ",i+1);
                         lcd_puts(buffer_lcd);
                         if (ds18b20_init(&rom_codes[i][0],25,45,DS18B20_12BIT_RES))
                          //putsf("OK"); 
                          lcd_putsf("OK init");
                         else 
                          //putsf("ERROR");
                          lcd_putsf("ERROR init"); 
                        };  
                        delay_ms(500);
                        lcd_clear();
                        
                        /*if (devices)
                        {
                        for (i=0;i<devices;i++)
                          {
                          sprintf(buffer_lcd,"Device #%u ROM\nCode is:",i+1);
                          lcd_clear();
                          lcd_puts(buffer_lcd);
                          delay_ms(2000);
                          lcd_clear();
                          for (j=0;j<8;j++)
                            {
                            sprintf(buffer_lcd,"%02X ",rom_codes[i][j]);
                            lcd_puts(buffer_lcd);
                            if (j==3) lcd_gotoxy(0,1);
                            };
                          delay_ms(5000);
                          };
                        } */
                        
                      while (1)
                         {
                              temp=ds18b20_temperature(&rom_codes[0][0]);
                            
                              ftoa( temp , 2 , buffer );
                      
                            //sprintf(buffer_lcd,"t%u=%+.3f\xdfC",j+1,ds18b20_temperature(&rom_codes[i][0]));
                              sprintf(buffer_lcd,"Temp=%s\xdfC",buffer);
                            lcd_clear();
                            lcd_puts(buffer_lcd);
                            ///delay_ms(1000);
                      
                            /* display the number of devices which
                              generated an alarm */ 
                            if ( w1_search(0xec,alarm_rom_codes) )
                            {   
                             sprintf(buffer_lcd,"ALARM GEN BY %u DEVICE(S)\n\r",w1_search(0xec,alarm_rom_codes)); 
                             lcd_puts(buffer_lcd); 
                            }
                           
                      
                         }
                      }

                      دیدگاه


                        #26
                        پاسخ : مشکل با سنسور DS18B20

                        این یه برنامه که دو سال پیش ازش استفاده کردم فقط قسمت پیکر بندی سون سگمنتش خودم با تست تکتک پایه های سون سگمنت نوشتم اگه یکم گیج شدین شرمنده
                        ونکته دیگه شما از این سنسور فقط هر 750 میلی ثانیه میتونید بخونید تو تمام برنامه هاتون باید یه چنین تاخیری رو مد نظر داشته باشین که من برای نمایش روی سون سگمنت استفاده کردم البته فقط برنامه رو واسه نشون دادن دما مثبت نوشتم
                        کد:
                        #include <io.h>
                        #asm
                            .equ __w1_port=0x18
                            .equ __w1_bit=7
                          #endasm
                        #include <ds18b20.h>
                        #include <1wire.h>
                        #define seg_ddr DDRD
                        #define seg_port PORTD
                        
                        
                        
                        void main(void)
                        {
                        
                        unsigned char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                        int a[3],b=1;
                        
                        unsigned char rom_codes[1][9];
                        int temp=0,t2;
                        float t3;
                        int t;
                        DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
                        seg_ddr=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
                        seg_port=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
                        PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) |(0 <<PORTB4) | (0<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
                        delay_ms(2000);
                        
                        PORTB=0x00;
                        a[0]=0;
                        a[1]=0;
                        a[2]=0;
                        
                        w1_search(0xf0,rom_codes);
                        ds18b20_init(&rom_codes[0][0],0,80,3);
                        while (1)
                           {
                           t3=ds18b20_temperature(&rom_codes[0][0]);
                           t2=t3*10;
                           t=t2;
                           
                         a[2]=t%10;
                         a[1]=(t/10)%10;
                         a[0]=(t/100)%10;
                         for(b=0;b<125;b++){
                         PORTB.0=1;
                         seg_port=seg[a[0]];
                         delay_ms(4);
                         PORTB.0=0;
                         PORTB.1=1;
                         seg_port=seg[a[1]];
                         delay_ms(4);
                         PORTB.1=0;
                         PORTB.2=1;
                         seg_port=seg[a[2]];
                         delay_ms(4);
                         PORTB.2=0;
                         delay_ms(4);
                         PORTB.0=0;
                         PORTB.1=0;
                         PORTB.2=0;
                         }
                         }
                        }
                        سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                        دیدگاه


                          #27
                          پاسخ : مشکل با سنسور DS18B20

                          جوابی نگرفتم اصلا انگار سنسور اطلاعاتشو به میکرو ارسال نمیکنه مشکل از کجاست ؟؟ سنسور هم مطمنم سالمه با آردونیو تستش کردم

                          دیدگاه


                            #28
                            پاسخ : مشکل با سنسور DS18B20

                            نوشته اصلی توسط loverdead
                            جوابی نگرفتم اصلا انگار سنسور اطلاعاتشو به میکرو ارسال نمیکنه مشکل از کجاست ؟؟ سنسور هم مطمنم سالمه با آردونیو تستش کردم
                            سنسور به کدوم پورت وبه کدوم پین متصل کردین خروجی رو پول اپ کردین
                            کد:
                            #asm
                                .equ __w1_port=0x18
                                .equ __w1_bit=7
                              #endasm
                            قسمت بالا رو به برنامتون اضافه کنید خروجی سنسور رو با یه مقاومت 4.7 کیلو پول اپ کنید و به بیت 7 پورت B وصل کنید تغذیه هم درست اتصال بدین ولتاژ استاندارد تغذیه هم 5 ولت هست ایشالا مشکلتون حل میشه
                            اگه حل نشد برنامتون قرار بدین
                            سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                            دیدگاه


                              #29
                              پاسخ : مشکل با سنسور DS18B20

                              حتما مقدار مقاومت باید 4.7 باشه ؟؟
                              کد اینه
                              کد:
                              #include <mega8.h>        
                              #include <delay.h>
                              #include <lcd.h>         
                              #include <1wire.h>       
                              #include <ds18b20.h>       
                              #include <stdio.h>        
                              #asm
                                .equ __w1_port=0x12 ;PORTD
                                .equ __w1_bit=1
                              #endasm
                              #asm
                                .equ __lcd_port=0x18 ;PORTB
                              #endasm
                                     
                              char buffer[32];
                                    
                                void main(void){
                                  unsigned char devices;     
                                  float temp;            
                                  lcd_init(16);          
                                  devices=w1_init();        
                                 while(devices>0){
                                   temp=ds18b20_temperature(0);  
                                   sprintf(buffer,"T=%5.3f\xdf",temp);  
                                   lcd_clear();        
                                   lcd_puts(buffer);    
                                   delay_ms(300);       
                                 }
                                }

                              دیدگاه


                                #30
                                پاسخ : مشکل با سنسور DS18B20

                                دوست من از هر جایی این سنسور رو میخری مراقب باش تقلبیش رو بهت ندن.حتما اورجینالش رو بگیر.

                                دیدگاه

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