با سلام خدمت دوستان و اساتید گرامی
طی یک پروژه بنا هست تا سنسور دما و رطوبت SHT21 را که جدید ترین عضو خانواده سنسور های سری SHTxx هست که ساخت شرکت معظم Sensirionهستند. نمونه های قبلی این سنسور ها به شماره های SHT1x و SHT7x هستند که از پروتکلی مشابه به i2c استفاده میکردند ولی سری جدید سنسور هایی که توسط این شرکت ارائه شده (SHT2x) از پروتکل i2c استفاده میکنند.
سنسوری که بنده تهیه کردم SHT21 هست
اینم دیتاشیت سنسور مورد نظرم
http://www.sensirion.com/fileadmin/u...tasheet_V4.pdf
این سنسور فوق العاده کوچک و ظریفه، ما برای استفاده از اون مجبور به طراحی و سفارش یک بورد مدار چاپی شدیم و برای مونتاژ سنسور روی برد هم به دلیل وجود شکاف روی سنسور هم با سختی زیادی این کار صورت گرفت. چون برای این کار نه میشد حرارت رو از بالا بدیم و نه از بغل، بلکه باید از زیر بورد رو گرم میکردیم که منجر به تغییر رنگ فیبر شد.
بگذریم
پروتکل ارتباتی این سنسور i2c هست که از صفحه 8 دیتاشیت نحوه برقراری ارتباط بیان شده
اما مشکل بنده
این اولین پروژه ای هست که از این پروتکل بصورت خام استفاده میکنم چون قبلا با DS1307 و LM75 کار کردم و البته این چیپ ها دارای کتابخانه آماده هستند و کار باهاشون بسیار سادست ولی برای ارتباط گرفتن با SHT21 باید خودم استارت، آدرس و دستور رو صادر کنم
بعد از مطالعه چند باره دیتا پیش و کتاب مهندس ره افروز و سمپل کد کدویژن یک برنامه نوشتم ولی متاسفانه جواب نگرفتم
حالا از دوستان و اساتید عزیز درخواست دارم که کمک کنن تا این سنسور رو راه اندازی کنم
این هم از برنامه ای که نوشتم
#include <mega16.h>
// I2C Bus functions
#include <i2c.h>
// Alphanumeric LCD functions
#include <alcd.h>
// TWI functions
#include <twi.h>
// Delay functions
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
unsigned int temp1;
unsigned char Temp1,Temp2;
unsigned char temperature[16],Temp15[16];
float a,temp;
// Declare your global variables here
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;
// TWI initialization
// Mode: TWI Master
// Bit Rate: 100 kHz
twi_master_init(100);
i2c_init();
lcd_init(16);
// Global enable interrupts
#asm("sei"
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" SHT21 Sensor "
;
lcd_gotoxy(0,1);
lcd_putsf("Temp & Humidity "
;
delay_ms(1000);
lcd_clear();
while (1)
{
// Place your code here
i2c_start();
i2c_write(0b10000000);
i2c_write(0b11100011);
i2c_write(0b10000001);
Temp1=i2c_read(0b10000001);
Temp2=i2c_read(0b10000001);
i2c_stop();
lcd_clear();
sprintf(Temp15,"%c",Temp1);
temp1=Temp1<<8;
temp1=temp1+Temp2;
a=temp1/65536;
a=a*175.72;
temp=a-46.85;
ftoa(temp,2,temperature);
lcd_gotoxy(0,0);
lcd_puts(temperature);
lcd_putsf(" "
;
lcd_gotoxy(0,1);
lcd_puts(Temp15);
delay_ms(1000);
}
}
در نهایت فقط مقدار -46.85 روی ال سی دی نمایش داده میشه
ممنون میشم کمک کنید
بابت طولانی شده عذر میخوام
طی یک پروژه بنا هست تا سنسور دما و رطوبت SHT21 را که جدید ترین عضو خانواده سنسور های سری SHTxx هست که ساخت شرکت معظم Sensirionهستند. نمونه های قبلی این سنسور ها به شماره های SHT1x و SHT7x هستند که از پروتکلی مشابه به i2c استفاده میکردند ولی سری جدید سنسور هایی که توسط این شرکت ارائه شده (SHT2x) از پروتکل i2c استفاده میکنند.
سنسوری که بنده تهیه کردم SHT21 هست
اینم دیتاشیت سنسور مورد نظرم
http://www.sensirion.com/fileadmin/u...tasheet_V4.pdf
این سنسور فوق العاده کوچک و ظریفه، ما برای استفاده از اون مجبور به طراحی و سفارش یک بورد مدار چاپی شدیم و برای مونتاژ سنسور روی برد هم به دلیل وجود شکاف روی سنسور هم با سختی زیادی این کار صورت گرفت. چون برای این کار نه میشد حرارت رو از بالا بدیم و نه از بغل، بلکه باید از زیر بورد رو گرم میکردیم که منجر به تغییر رنگ فیبر شد.
بگذریم
پروتکل ارتباتی این سنسور i2c هست که از صفحه 8 دیتاشیت نحوه برقراری ارتباط بیان شده
اما مشکل بنده
این اولین پروژه ای هست که از این پروتکل بصورت خام استفاده میکنم چون قبلا با DS1307 و LM75 کار کردم و البته این چیپ ها دارای کتابخانه آماده هستند و کار باهاشون بسیار سادست ولی برای ارتباط گرفتن با SHT21 باید خودم استارت، آدرس و دستور رو صادر کنم
بعد از مطالعه چند باره دیتا پیش و کتاب مهندس ره افروز و سمپل کد کدویژن یک برنامه نوشتم ولی متاسفانه جواب نگرفتم
حالا از دوستان و اساتید عزیز درخواست دارم که کمک کنن تا این سنسور رو راه اندازی کنم
این هم از برنامه ای که نوشتم
#include <mega16.h>
// I2C Bus functions
#include <i2c.h>
// Alphanumeric LCD functions
#include <alcd.h>
// TWI functions
#include <twi.h>
// Delay functions
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
unsigned int temp1;
unsigned char Temp1,Temp2;
unsigned char temperature[16],Temp15[16];
float a,temp;
// Declare your global variables here
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;
// TWI initialization
// Mode: TWI Master
// Bit Rate: 100 kHz
twi_master_init(100);
i2c_init();
lcd_init(16);
// Global enable interrupts
#asm("sei"

lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" SHT21 Sensor "

lcd_gotoxy(0,1);
lcd_putsf("Temp & Humidity "

delay_ms(1000);
lcd_clear();
while (1)
{
// Place your code here
i2c_start();
i2c_write(0b10000000);
i2c_write(0b11100011);
i2c_write(0b10000001);
Temp1=i2c_read(0b10000001);
Temp2=i2c_read(0b10000001);
i2c_stop();
lcd_clear();
sprintf(Temp15,"%c",Temp1);
temp1=Temp1<<8;
temp1=temp1+Temp2;
a=temp1/65536;
a=a*175.72;
temp=a-46.85;
ftoa(temp,2,temperature);
lcd_gotoxy(0,0);
lcd_puts(temperature);
lcd_putsf(" "

lcd_gotoxy(0,1);
lcd_puts(Temp15);
delay_ms(1000);
}
}
در نهایت فقط مقدار -46.85 روی ال سی دی نمایش داده میشه
ممنون میشم کمک کنید
بابت طولانی شده عذر میخوام
دیدگاه