آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت, SAMAN, sinaset, شوراي نظارت

Rookie Poster
Rookie Poster
پست: 31
تاریخ عضویت: پنج شنبه 6 اردیبهشت 1397, 10:38 pm
سپاس‌های دریافتی: 1 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط Sirwan2 » شنبه 19 آبان 1397, 6:51 pm

لینک دانلود ورژن 3خراب است لطفا برسی کنید
باتشکر

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22090 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » شنبه 19 آبان 1397, 7:08 pm

سلام بر شما

این سرور که فایل رو درونش اپلود کردم،بعضی وقت ها به دلیل شلوغی لود نمیشه! هر وقت به همین سرور برخوردید،در ساعت دیگر یا روز دیگر مراجعه کنید،مشکل برطرف میشود.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.

Rookie Poster
Rookie Poster
پست: 31
تاریخ عضویت: پنج شنبه 6 اردیبهشت 1397, 10:38 pm
سپاس‌های دریافتی: 1 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط Sirwan2 » یک شنبه 20 آبان 1397, 3:06 pm

باسلام
چند بار ودرچند وقت امتحان کردم اما اصلا هیچی رو نمیاره
فقط یه متن انگلیسی نشون میده
برای تمام ورژن ها همینطوریه

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22090 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » یک شنبه 20 آبان 1397, 4:34 pm

باسلام

فعلا که خرابه،ولی درست میشه! این سرور همینطوری بعضی وقت ها، خراب میشه و بعد از مدتی از دوباره درست میشه! و البته از خوبی هاش اینکه،فایل ها رو بیش از 10 سال نگه میداره ..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.

New Member
پست: 5
تاریخ عضویت: دو شنبه 26 آذر 1397, 9:04 pm

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط yoham » دو شنبه 26 آذر 1397, 9:18 pm

سلام خوبی مهندس . به یه مشکل خوردم در میکس کردن برنامه دماسنج با 20 عدد سون سگمنت . یک پیغام خطا دارم که باعث میشه درست کار نکنه برنامه 
 

New Member
پست: 5
تاریخ عضویت: دو شنبه 26 آذر 1397, 9:04 pm

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط yoham » دو شنبه 26 آذر 1397, 9:23 pm

اینم برنامه که نوشتم

unsigned char DS18B20_Rom_Codes[20][9]@0x200
این خط رو خطا میده 
Warning: C:\Users\taha\Desktop\New folder\3.c(24): @ RAM location address is in the Data Stack area
این مشکل باید چطوری حل بشه 
ممنون میشم راهنمایی کنید
      
/*******************************************************
Chip type               : ATmega32A
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*******************************************************/

#include <mega32a.h>
#include <1wire.h>
#include <ds18b20.h>
#include <delay.h>


unsigned int  part1=0,part2=0,part3=0,part4=0,part5=0,part6=0,part7=0,part8=0,part9=0,part10=0,part11=0,part12=0,part13=0,part14=0,part15=0,part16=0,part17=0,part18=0,part19=0,part20=0;
int select;                                   
flash unsigned char display[]={0b01000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000  };


unsigned int temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10;

unsigned int IC_DS18B20@0x020;  
unsigned char DS18B20_Rom_Codes[20][9]@0x200; 
typedef unsigned char byte;

float Thermometer[20];   
        
    int j=0;

                   
void HEX_to_DEC1(unsigned int a)

 part1 = display[a%10];
 part2 = display[a/10%10]; 
  
}

void HEX_to_DEC2(unsigned int b)

 part3 = display[b%10];
 part4 = display[b/10%10]; 
 
}

void HEX_to_DEC3(unsigned int c)

 part5 = display[c%10];
 part6 = display[c/10%10]; 
  
}

void HEX_to_DEC4(unsigned int d)

 part7 = display[d%10];
 part8 = display[d/10%10]; 
 
}

void HEX_to_DEC5(unsigned int e)

 part9 = display[e%10];
 part10 = display[e/10%10]; 
  
}

void HEX_to_DEC6(unsigned int f)

 part11 = display[f%10];
 part12 = display[f/10%10]; 
 
}

void HEX_to_DEC7(unsigned int g)

 part13 = display[g%10];
 part14 = display[g/10%10]; 
  
}

void HEX_to_DEC8(unsigned int h)

 part15 = display[h%10];
 part16 = display[h/10%10]; 
 
}

void HEX_to_DEC9(unsigned int i)

 part17 = display[i%10];
 part18 = display[i/10%10]; 
  
}

void HEX_to_DEC10(unsigned int k)

 part19 = display[k%10];
 part20 = display[k/10%10]; 
 
}


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xd8;
// Place your code here

 select++;

   if(select==1)  
 {
  PORTA=0xf0; 
  PORTB=part20;
 } 
 
 if(select==2) 
 {
  PORTA=0xf1; 
  PORTB=part19 ;    
 }
 
 if(select==3)
 { 
  PORTA=0xf2; 
  PORTB=part18; 
 }
 
  if(select==4)
 { 
  PORTA=0xf3; 
  PORTB=part17; 
 }
 
  if(select==5)
 { 
  PORTA=0xf4; 
  PORTB=part16; 
 }
 
  if(select==6)
 { 
  PORTA=0xf5; 
  PORTB=part15; 
 }
 
  if(select==7)
 { 
  PORTA=0xf6; 
  PORTB=part14; 
 }
 
  if(select==8)
 { 
  PORTA=0xf7; 
  PORTB=part13; 
 }
 
  if(select==9)
 { 
  PORTA=0xf8; 
  PORTB=part12; 
 }
 
  if(select==10)
 { 
  PORTA=0xf9; 
  PORTB=part11; 
 }
 
  if(select==11)
 { 
  PORTA=0x0f; 
  PORTB=part10; 
 }
 
  if(select==12)
 { 
  PORTA=0x1f; 
  PORTB=part9; 
 }
 
  if(select==13)
 { 
  PORTA=0x2f; 
  PORTB=part8; 
 }
 
  if(select==14)
 { 
  PORTA=0x3f; 
  PORTB=part7; 
 }
 
  if(select==15)
 { 
  PORTA=0x4f; 
  PORTB=part6; 
 }
 
  if(select==16)
 { 
  PORTA=0x5f; 
  PORTB=part5; 
 }
 
  if(select==17)
 { 
  PORTA=0x6f; 
  PORTB=part4; 
 }
 
  if(select==18)
 { 
  PORTA=0x7f; 
  PORTB=part3; 
 }
 
  if(select==19)
 { 
  PORTA=0x8f; 
  PORTB=part2; 
 }
 
  if(select==20)
 {   
  PORTA=0x9f; 
  PORTB=part1; 
  select=0;
 }


}


void main(void)
{

// Declare your local variables here

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

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

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

// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
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: 15.625 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 4.992 ms
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0xd8;
OCR0=0x00;


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

// 1 Wire Bus initialization
// 1 Wire Data port: PORTC
// 1 Wire Data bit: 0
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init();
IC_DS18B20=w1_search(0xf0,DS18B20_Rom_Codes); 
          
// Global enable interrupts
#asm("sei")

while (1)
  { 
  
   
      for (j=0;j<IC_DS18B20;j++)  
      {
        Thermometer[j] = ds18b20_temperature(DS18B20_Rom_Codes[j]);  
                            
      }
   
      temp1=Thermometer[0];
      temp2=Thermometer[1];
      temp3=Thermometer[2];
      temp4=Thermometer[3];
      temp5=Thermometer[4];
      temp6=Thermometer[5];
      temp7=Thermometer[6];
      temp8=Thermometer[7];
      temp9=Thermometer[8];
      temp10=Thermometer[9];
      
      HEX_to_DEC1(temp1);    
      HEX_to_DEC2(temp2);
      HEX_to_DEC3(temp3);
      HEX_to_DEC4(temp4);
      HEX_to_DEC5(temp5);    
      HEX_to_DEC6(temp6);
      HEX_to_DEC7(temp7); 
      HEX_to_DEC8(temp8);
      HEX_to_DEC9(temp9);
      HEX_to_DEC10(temp10);
   
   
   }

}
      
            

New Member
پست: 5
تاریخ عضویت: دو شنبه 26 آذر 1397, 9:04 pm

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط yoham » دو شنبه 26 آذر 1397, 10:54 pm

تصویر
اینم ارور برنامه و شماتیک
تصویر

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22090 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » سه شنبه 27 آذر 1397, 7:51 am

سلام بر شما.
 این چیزی که شما گذاشتید اخطاره نه ارور . ارور قرمز رنگه و به مشگل بر میخوردید ولی اینطوری نه..و فقط اعلامه برای اطلاعه.
می تونید 0x200@و0x020@ رو حذف کنید از اخر دو متغییر.(اون اخطار  رو احتمالا برطرف میکنه،هرچند تاثیر بعید میدونم در برنامه داشته باشه)
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.

New Member
پست: 5
تاریخ عضویت: دو شنبه 26 آذر 1397, 9:04 pm

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط yoham » سه شنبه 27 آذر 1397, 1:11 pm

سلام ممنون که جواب دادین .
این کد رو  0x200@و0x020@ حذف کنم دیگه دما رو نشون نمیده . 
البته این مشکل رو با قرار دادن عدد 0x300@و0x020@ در atmega 32  بر طرف شده مدار خوب کار می کنه .
ولی می خوام با atmega64  اینکار رو انجام بدم . این خطا رو میده و مدار درست کار نمیکنه ( دمای 2 تا سنسور رو نشون میده و 8 تا دیگه رو نشون نمیده.
هرکاری میکنم نمیتونم برطرفش کنم.
نمیدونم مشکل دیگه چیه؟

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22090 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » سه شنبه 27 آذر 1397, 2:46 pm

سلام بر شما

نباید اروری بده! این قسمت ها را حذف کنید "@0x200" وقتی ادرسی برای ذخیره در رم داده نشه! به صورت رندم یک ادرسی انتخاب میشه!

ولی اگر به دلیل ! (که من درست نمی دون چی هستش! شاید بدرستی حذف نمی کنید!) این ادرس 200 رو بیشترش کنید، 400 و 500 و 600 و اینا اعداد رو بیشتر کنید! 0x020@ رو هم همینطور روی 350 و 450 و 550 و 650 بگذارید..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.

New Member
پست: 5
تاریخ عضویت: دو شنبه 26 آذر 1397, 9:04 pm

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط yoham » سه شنبه 27 آذر 1397, 2:58 pm

این مشکل رو برداشتم تا حدودی حل شده .
ولی مشکل درسرعت هستش. حدود 8.5 ثانیه طول میکشه تا 10 تا آی سی دما ( ds18b20 )  رو بخونه و هر بار همینطور. نمیشه این زمان رو کم کنه.این تاخیر باعث میشه خروجی هام که به المنت متصل هستش . نتونه دما رو دقیق تنظیم کنه.

بازم ممنون

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22090 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » سه شنبه 27 آذر 1397, 4:40 pm

سلام بر شما

کاربر محترم،من اطلاع ندارم برنامه که شما نوشته اید دقیقا چه چیزی می باشد. 

فرکانس را روی 16 مگاهرتز بگذارید اگر مشکلاتان در محاسبه می باشد..

در هر صورت من دقیق نمی دانم در حاضر مشکل کجاست..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”