با سلام ،
دوست عزیز شما در حال استفاده از ورژنی قدیمی از اینترنت اکسپلورر هستید ، برای اینکه مشکلات ناشی از نمایش را نداشته باشید ، لطفا اقدام به دریافت مرورگری مناسب کرده و یا از ورژن قدیمی ما استفاده نمایید.


امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
سگمنت
#1
دما سنج با ds18b20

با سلام

یه سوال داشتم :
من یه دماسنج با ds18b20 و پروتکل 1-wire ساختم و توی LCd نشون دادم که درست کار می کرد ولی حالا که می خوام روی سون سگمنت نشون بدم عدد دهگان چشمک میزنه یعنی دما درسته یکان هم ثابته ولی دهگان چشمک زن شده و درضمن delay برای سگمنت ها در روش مولتی پلکس درست تنظیم شدن چون اگه یه عدد خاص رو بخوام نشون بدم اعداد درست و ثابت نمایش داده می شن.
ممنون
وقتی نتونی از دشمنات پیش دوستات حرفی بزنی وقت رفتنه...
پاسخ
#2
سلام

یاسر جان توی عمل چشمک میزنه یا توی پروتئوس ؟

اگه به زبان سی باشه میتونم کمکتون کنم .
آدم تا چیزی رو به کسی یاد نده خودش یاد نمیگیره !
پاسخ
#3
(28 تير 1392، 10:59 عصر)حسام مغربی نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
سلام

یاسر جان توی عمل چشمک میزنه یا توی پروتئوس ؟

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

هم توی پروتئوس و هم توی واقعیت یه فیلم کم حجم از نمونه ی واقعی گذاشتم.
اینم برنامه :
کد php:
#include <mega16.h> 
 #include <delay.h> 
 #include <1wire.h> 
 #include <ds18b20.h> 
 #include <stdio.h> 
 #include <stdlib.h> 
 #define xtal 8000000  

 #asm 
 
.equ __w1_port=0x12 ;PORTD 
 
.equ __w1_bit=
 
#endasm 

 
char buffer[32]; 
 
char buffer1[32];
 
int i;  
unsigned char seg[]={0x7E,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6F};
unsigned char control[]={0x0b,0x07};
unsigned char data[]; 
unsigned char yekan dahgan ;   
 
 
void main(void){   
 
unsigned char devices
 
int temp
 
devices=w1_init(); 
 
PORTC=0x00;
 
DDRC=0xFF
 
PORTB=0x00;
 
DDRB=0xFF
 while(
devices>0){       
                    
    
temp=ds18b20_temperature(0); 
    
     
dahgan temp 10
     
yekan =  temp 10;
     if(
dahgan==1){
       
data[0] = seg[1];
     }
     else if(
dahgan==2){
       
data[0] = seg[2];    
     }
     else if(
dahgan==3){
       
data[0] = seg[3];    
     }
     else if(
dahgan==4){
       
data[0] = seg[4];    
     }
     else if(
dahgan==5){
       
data[0] = seg[5];    
     }
     else if(
dahgan==6){
       
data[0] = seg[6];    
     }
     else if(
dahgan==7){
       
data[0] = seg[7];    
     }  
     else if(
dahgan==8){
       
data[0] = seg[8];    
     }
     else if(
dahgan==9){
       
data[0] = seg[9];    
     }
     else{
       
data[0] = seg[0];
     }   
     
//-------------------------------
     
if(yekan==1){
       
data[1] = seg[1];
     }
     else if(
yekan==2){
       
data[1] = seg[2];    
     }
     else if(
yekan==3){
       
data[1] = seg[3];    
     }
     else if(
yekan==4){
       
data[1] = seg[4];    
     }
     else if(
yekan==5){
       
data[1] = seg[5];    
     }
     else if(
yekan==6){
       
data[1] = seg[6];    
     }
     else if(
yekan==7){
       
data[1] = seg[7];    
     }
     else if(
yekan==8){
       
data[1] = seg[8];    
     }
     else if(
yekan==9){
       
data[1] = seg[9];    
     }
     else{
       
data[1] = seg[6];    
     }
     for (
i=0i<2i++){
      
PORTB control[i];
      
PORTC data[i];
      
delay_ms(2);
     } 
     


 } 
 } 


فایل‌(های) پیوست شده
.zip   New - M4H02253.zip (اندازه: 787.97 KB / تعداد دفعات دریافت: 15)
وقتی نتونی از دشمنات پیش دوستات حرفی بزنی وقت رفتنه...
پاسخ
#4
سلام
دوست عزیز پرتکل 1wire از تاخیر استاده می کنه (به صورت پیش فرض) دقیقا مثل I2C شما این خط رو
کد php:
temp=ds18b20_temperature(0); 
از حلقه ی اصلیت خارج کن
ی تایمر تعریف کن و هر چند ثانیه یک بار مقدارش سنسور رو چک کن
موفق باشید
پاسخ
#5
اومدم جواب بدم هادی عزیز زودتر زحمت کشید

تست کنید اگه نشد بفرمایید تا بیشتر پیگیری کنیم
آدم تا چیزی رو به کسی یاد نده خودش یاد نمیگیره !
پاسخ
#6
(29 تير 1392، 12:09 صبح)حسام مغربی نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
اومدم جواب بدم هادی عزیز زودتر زحمت کشید

تست کنید اگه نشد بفرمایید تا بیشتر پیگیری کنیم
من نفهمیدم چیکار کنم و تایمر رو چجوری بنویسم لطفا بیشتر راهنمایی کنید.:(
وقتی نتونی از دشمنات پیش دوستات حرفی بزنی وقت رفتنه...
پاسخ
#7
اینه چک کن
کد php:
#include <mega16.h> 
 #include <delay.h> 
 #include <1wire.h> 
 #include <ds18b20.h> 
 #include <stdio.h> 
 #include <stdlib.h> 
 #define xtal 8000000  
int a;
interrupt [TIM2_OVFvoid timer2_ovf_isr(void)
{
a++;
if (
a>10){a=0;temp=ds18b20_temperature(0);}

}

 
#asm 
 
.equ __w1_port=0x12 ;PORTD 
 
.equ __w1_bit=
 
#endasm 

 
char buffer[32]; 
 
char buffer1[32];
 
int i;  
unsigned char seg[]={0x7E,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6F};
unsigned char control[]={0x0b,0x07};
unsigned char data[]; 
unsigned char yekan dahgan ;   
 
 
void main(void){   
 
unsigned char devices
 
int temp
 
devices=w1_init(); 
 
PORTC=0x00;
 
DDRC=0xFF
 
PORTB=0x00;
 
DDRB=0xFF;
 
ASSR=0x00;
 
TCCR2=0x02;
 
TCNT2=0x00;
 
OCR2=0x00
 while(
devices>0){      
                
    
    
    
dahgan temp 10
    
yekan =  temp 10;
    if(
dahgan==1){
      
data[0] = seg[1];
    }
    else if(
dahgan==2){
      
data[0] = seg[2];    
    }
    else if(
dahgan==3){
      
data[0] = seg[3];    
    }
    else if(
dahgan==4){
      
data[0] = seg[4];    
    }
    else if(
dahgan==5){
      
data[0] = seg[5];    
    }
    else if(
dahgan==6){
      
data[0] = seg[6];    
    }
    else if(
dahgan==7){
      
data[0] = seg[7];    
    }  
    else if(
dahgan==8){
      
data[0] = seg[8];    
    }
    else if(
dahgan==9){
      
data[0] = seg[9];    
    }
    else{
      
data[0] = seg[0];
    }   
    
//-------------------------------
    
if(yekan==1){
      
data[1] = seg[1];
    }
    else if(
yekan==2){
      
data[1] = seg[2];    
    }
    else if(
yekan==3){
      
data[1] = seg[3];    
    }
    else if(
yekan==4){
      
data[1] = seg[4];    
    }
    else if(
yekan==5){
      
data[1] = seg[5];    
    }
    else if(
yekan==6){
      
data[1] = seg[6];    
    }
    else if(
yekan==7){
      
data[1] = seg[7];    
    }
    else if(
yekan==8){
      
data[1] = seg[8];    
    }
    else if(
yekan==9){
      
data[1] = seg[9];    
    }
    else{
      
data[1] = seg[6];    
    }
    for (
i=0i<2i++){
     
PORTB control[i];
     
PORTC data[i];
     
delay_ms(2);
    } 
    


 } 
 } 
اگر دیدی درست جواب نمی داده یکم این متغیر رو دست کاری کن

کد php:
(a>10
پاسخ
#8
سلام
امكانش هست كه مدارتون رو كه با lcd كار ميكنه در سايت قرار بدين تا همه استفاده كنيم ؟
ممنون
پاسخ
#9
(29 تير 1392، 01:42 صبح)amirhossain1995 نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
سلام
امكانش هست كه مدارتون رو كه با lcd كار ميكنه در سايت قرار بدين تا همه استفاده كنيم ؟
ممنون

بفرمایـیـــد :
پیوست شد.

(29 تير 1392، 01:08 صبح)hadikh73 نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
اینه چک کن
کد php:
#include <mega16.h> 
 #include <delay.h> 
 #include <1wire.h> 
 #include <ds18b20.h> 
 #include <stdio.h> 
 #include <stdlib.h> 
 #define xtal 8000000  
int a;
interrupt [TIM2_OVFvoid timer2_ovf_isr(void)
{
a++;
if (
a>10){a=0;temp=ds18b20_temperature(0);}

}

 
#asm 
 
.equ __w1_port=0x12 ;PORTD 
 
.equ __w1_bit=
 
#endasm 

 
char buffer[32]; 
 
char buffer1[32];
 
int i;  
unsigned char seg[]={0x7E,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6F};
unsigned char control[]={0x0b,0x07};
unsigned char data[]; 
unsigned char yekan dahgan ;   
 
 
void main(void){   
 
unsigned char devices
 
int temp
 
devices=w1_init(); 
 
PORTC=0x00;
 
DDRC=0xFF
 
PORTB=0x00;
 
DDRB=0xFF;
 
ASSR=0x00;
 
TCCR2=0x02;
 
TCNT2=0x00;
 
OCR2=0x00
 while(
devices>0){      
                
    
    
    
dahgan temp 10
    
yekan =  temp 10;
    if(
dahgan==1){
      
data[0] = seg[1];
    }
    else if(
dahgan==2){
      
data[0] = seg[2];    
    }
    else if(
dahgan==3){
      
data[0] = seg[3];    
    }
    else if(
dahgan==4){
      
data[0] = seg[4];    
    }
    else if(
dahgan==5){
      
data[0] = seg[5];    
    }
    else if(
dahgan==6){
      
data[0] = seg[6];    
    }
    else if(
dahgan==7){
      
data[0] = seg[7];    
    }  
    else if(
dahgan==8){
      
data[0] = seg[8];    
    }
    else if(
dahgan==9){
      
data[0] = seg[9];    
    }
    else{
      
data[0] = seg[0];
    }   
    
//-------------------------------
    
if(yekan==1){
      
data[1] = seg[1];
    }
    else if(
yekan==2){
      
data[1] = seg[2];    
    }
    else if(
yekan==3){
      
data[1] = seg[3];    
    }
    else if(
yekan==4){
      
data[1] = seg[4];    
    }
    else if(
yekan==5){
      
data[1] = seg[5];    
    }
    else if(
yekan==6){
      
data[1] = seg[6];    
    }
    else if(
yekan==7){
      
data[1] = seg[7];    
    }
    else if(
yekan==8){
      
data[1] = seg[8];    
    }
    else if(
yekan==9){
      
data[1] = seg[9];    
    }
    else{
      
data[1] = seg[6];    
    }
    for (
i=0i<2i++){
     
PORTB control[i];
     
PORTC data[i];
     
delay_ms(2);
    } 
    


 } 
 } 
اگر دیدی درست جواب نمی داده یکم این متغیر رو دست کاری کن

کد php:
(a>10

مرسی از پیگیری تون

نشد دوست عزیز اون متغیر رو هم دستکاری کردم ولی نشد
فک کنم سنسور رو شناسایی نمی کنه فایل پروتئوس و کد رو ضمیمه می کنم ببین
ممنون میشم اگه کمکم کنی.:(


فایل‌(های) پیوست شده
.zip   temp with ds18b20.zip (اندازه: 125.99 KB / تعداد دفعات دریافت: 8)
.zip   18b20.zip (اندازه: 135.05 KB / تعداد دفعات دریافت: 4)
وقتی نتونی از دشمنات پیش دوستات حرفی بزنی وقت رفتنه...
پاسخ
#10
سلام اینه امتحان کنین


فایل‌(های) پیوست شده
.rar   18b20.rar (اندازه: 50.54 KB / تعداد دفعات دریافت: 10)
پاسخ
مشترک شدن در این موضوع


پرش به انجمن:

کاربرانِ درحال بازدید از این موضوع: 1 مهمان

انتخاب پوسته :

دسترسی سریع
درباره ما
انجمن سرزمین الکترونیک در 20 شهریور 91 تاسیس شده ، که همیشه سعی کرده با ظاهری متفاوت و سرعتی خوب رضایت کاربران را جلب کند ، امیدواریم توانسته باشیم گامی کوچک در پیشرفت فناوری در ایران برداشته باشیم...
نیرو گرفته از MyBB 1.8.6 با فارسی سازی مای بی بی ایران - طراحی شده در : ملت دیزاین
© تمامی حقوق برای انجمن سرزمین الکترونیک محفوظ می باشد .

پوسته‌ی انجمن: