سلام به دوستان خوبم.
کل انجمن رو سرچ کردم کسی مشکل من رو نداشت پس لطفا نگین که برو بگرد و........
از دوستان درخواست دارم که اگه دوستی از سنسور رطوبت و دمای SHT11 جواب گرفته منو کمک کنه.
من نیاز به یه برنامه صحیح با زبان C دارم که بتونم این سنسور رو راه اندازی کنم.
برنامه ای که میذارم برگرفته از برنامه ای هست که خود شرکت سازنده ی این سنسور گذاشته اما تو پروتئوس جواب نمیده.
اگه امکان داره دوستی که از این سنسور جواب گرفته برنامه رو ببینه واگه احتیاج به اصلاح داره زحمتش رو بکشه.
برای دانلود کل پروژه اینجا رو کلیک کنیدhttp://s2.picofile.com/file/7327299565/SHT11.rar.html
عکس پروتئوس:

کل انجمن رو سرچ کردم کسی مشکل من رو نداشت پس لطفا نگین که برو بگرد و........
از دوستان درخواست دارم که اگه دوستی از سنسور رطوبت و دمای SHT11 جواب گرفته منو کمک کنه.
من نیاز به یه برنامه صحیح با زبان C دارم که بتونم این سنسور رو راه اندازی کنم.
برنامه ای که میذارم برگرفته از برنامه ای هست که خود شرکت سازنده ی این سنسور گذاشته اما تو پروتئوس جواب نمیده.
اگه امکان داره دوستی که از این سنسور جواب گرفته برنامه رو ببینه واگه احتیاج به اصلاح داره زحمتش رو بکشه.
برای دانلود کل پروژه اینجا رو کلیک کنیدhttp://s2.picofile.com/file/7327299565/SHT11.rar.html
کد:
#include <mega8.h> // Alphanumeric LCD Module functions #include <alcd.h> #include <stdio.h> #include <delay.h> #define DATA PINB.0 #define SCK PORTB.1 #define DATAO PORTB.0 #define DATAD DDRB.0 #define MEASURE_TEMP 0x03 #define MEASURE_HUMI 0x05 #define RESET 0x1e void sht_start(void) { DATAD = 1; // DATA is output DATAO = 1; SCK = 0; SCK = 1; DATAO = 0; SCK = 0; SCK = 1; DATAO = 1; SCK = 0; //DATAO = 0; } //########################################################################## char sht_write(unsigned char Byte) { unsigned char i, error = 0; DATAD = 1; // Data is an output delay_us(5); for(i = 0x80; i > 0; i /= 2) { SCK = 0; if(i & Byte) { DATAO = 1; } else { DATAO = 0; } SCK = 1; } SCK = 0; DATAD = 0; // DATA is input SCK = 1; error = DATA; SCK = 0; return(error); } //################################################### unsigned char sht_read(unsigned char ack) { unsigned char i, val = 0; DATAD = 0; // DATA is INPUT for(i = 0x80; i > 0; i /= 2) { SCK = 1; if(DATA) { val = val | i; } SCK = 0; } DATAD = 1; // DATA is output DATAO = ! ack; SCK = 1; SCK = 0; return(val); } //######################################################## void connection_reset(void) { unsigned char i; DATAD=1; DATAO=1; for (i=0;i<9;i++) { SCK=1; delay_us(2); SCK=0; delay_us(2); } DATAO=1; sht_start(); delay_ms(100); } //#################################################### void sht_reset() { sht_start(); sht_write(RESET); delay_ms(100); } //##################################################### // Read the sensor value. Reg is register to read from unsigned int ReadSensor(int Reg) { unsigned char msb, lsb, crc; sht_start(); sht_write(Reg); while(DATA); msb = sht_read(1); lsb = sht_read(1); crc = sht_read(0); return(((unsigned short) msb << 8) | (unsigned short) lsb); } //###################################################### float read_sensor(char humidity0temperture1) { long int income,temp; float out,out0,t; switch(humidity0temperture1) { case 0: income = ReadSensor(MEASURE_HUMI); out0=(-2.0468+(0.0367*income)+(-1.5955E-6*(income*income))); temp=income; delay_ms(500); ReadSensor(MEASURE_TEMP); t = -40.1 + 0.01*income; out=(t-25)*(0.01+0.00008*temp)+out0; break; case 1: income = ReadSensor(MEASURE_TEMP); out = -40.1 + 0.01*income; break; } return(out); } void main(void) { float temp=0,hum=0; unsigned char str[16]; DDRB.1=1; lcd_init(16); delay_ms(100); sht_start(); while (1) { temp=read_sensor(1); hum=read_sensor(0); lcd_clear(); lcd_gotoxy(0,0); sprintf(str,"temp=%2.2f",temp); lcd_puts(str); lcd_gotoxy(0,1); sprintf(str,"hum=%2.2f",hum); lcd_puts(str); sht_reset(); delay_ms(1000); } }
عکس پروتئوس:

دیدگاه