|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
|
Ðiều Chỉnh | Xếp Bài |
16-04-2012, 11:40 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 3
: |
Giúp đỡ về SHT11 và 16f877a +LCD
E có tham khảo được code ở trên mạng, và đã đọc cái datasheet để viết hàm main hiển thị lên lcd nhưng k hiểu sao giá trị nhiệt độ thì đúng mà độ ẩm lại sai.Mong các bác xem hộ file đính kèm ở dưới.e cũng đã tham khảo 1 số code của sht11 trên mạng thì thấy cái sht11 e down về có thiếu 1 hàm nhưng lúc paste và edit thì có lỗi mà mãi e k sửa được.Bác nào xem hộ e ở file đính kèm phía dưới với ạ. File pdf ở trong chính là cái code e tham khảo để so sánh với code của e.Hình ảnh mô phỏng ạ, cái độ ẩm nó bị âm
|
17-04-2012, 11:50 AM | #2 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
/////////////////////////////////////////////////////////////////////////////// #define ACK 0 // Command byte values adr cmd r/w #define Reset 0x1e // 000 1111 0 #define MeasureTemp 0x03 // 000 0001 1 #define MeasureHumi 0x05 // 000 0010 1 #define WrStatusReg 0x06 // 000 0011 0 #define RdStatusReg 0x07 // 000 0011 1 // Define Data & Clock Pins #define Data PIN_B4 #define Sck PIN_B5 short error, chkCRC, Acknowledge; int TimeOut,err; ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// long CalcTempValues(long Lx){ long value; float Fx; Fx=0.01*(float)Lx; Fx=Fx-40; Value=Fx; return(value); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// long CalcHumiValues(long Lx){ long Value; float Fx, Fy; Fx=(float)Lx*(float)Lx; Fx=Fx*(-0.0000028); Fy=(float)Lx*0.0405; Fx=Fx+Fy; Fx=Fx-4; Value=Fx; return(value); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// void TransmitStart(){ output_high(Data); output_low(Sck); delay_us(2); output_high(SCK); delay_us(2); output_low(Data); delay_us(2); output_low(SCK); delay_us(6); output_high(SCK); delay_us(2); output_high(Data);delay_us(2); output_low(SCK); delay_us(2); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// void RST_Connection(){ int i; output_high(Data); for(i=1;i<=10;++i) { output_high(SCK); delay_us(2); output_low(SCK); delay_us(2); } TransmitStart(); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// void RST_Software(){ } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// int WriteStatReg(int command){ } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// int ReadStatReg(int command){ } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// long ReadValue(){ byte i, ByteHigh=0, ByteLow=0; long Lx; for(i=1;i<=8;++i){ // read high byte VALUE from SHT11 output_high(SCK); delay_us(2); shift_left(&ByteHigh,1,input(Data)); output_low(SCK); delay_us(2); } output_low(Data); delay_us(2); output_high(SCK); delay_us(2); output_low(SCK); output_float(Data); delay_us(2); for(i=1;i<=8;++i){ // read low byte VALUE from SHT11 output_high(SCK); delay_us(2); shift_left(&ByteLow,1,input(Data)); output_low(SCK); delay_us(2); } output_high(Data); delay_us(2); output_high(SCK); delay_us(2); output_low(SCK); output_float(Data); delay_us(2); Lx=make16(ByteHigh,ByteLow); return(Lx); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// void SendCommand(int Command){ byte i; for(i=128;i>0;i/=2){ if(i & Command) output_high(Data); else output_low(Data); delay_us(2); output_high(SCK); delay_us(2); output_low(SCK); } output_float(Data); delay_us(2); output_high(SCK); delay_us(2); output_low(SCK); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// long ReadTemperature(){ short Acknowledge; long Lx,Value; TransmitStart(); SendCommand(MeasureTemp); while(input(Data)); delay_us(2); Lx=ReadValue(); // Read temperature value Value=CalcTempValues(Lx); return(Value); } ///////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////// long ReadHumidity(){ long Lx,Value; TransmitStart(); SendCommand(MeasureHumi); while(input(Data)); delay_us(2); Lx=ReadValue(); // Read humidity value Value=CalcHumiValues(Lx); return(Value); } //----------------------------------------------- float calc_dewpoint(float h,float t) //----------------------------------------------- // calculates dew point // input: humidity [%RH], temperature [°C] // output: dew point [°C] { float k,dew_point ; k = (log10(h)-2)/0.4343 + (17.62*t)/(243.12+t); dew_point = 243.12*k/(17.62-k); return dew_point; } Code:
#include <16F877A.H> #fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP #use delay(clock =20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7) #include <LCD.h> #include <math.h> #include <sht11.h> int8 temp=34; lcd_init(); int R; float fRh_lin; float fRh_true; float fTemp_true; float fDew_point; long lValue_rh; long lValue_temp; void main() { port_b_pullups(true); lcd_init(); RST_Connection(); delay_ms(2); lcd_send_byte(0,0x80); printf(lcd_putc "SHT15 Humidity &"); lcd_send_byte(0,0xC0); printf(lcd_putc " Temperrature "); while (TRUE) { fTemp_true=ReadTemperature(); fRh_true=ReadHumidity(); fDew_point=calc_dewpoint(fRh_true,fTemp_true); printf("T=%3.2f C\r\n",fTemp_true); printf("H=%3.2f%%\r\n",fRh_true); printf("Dew Point: %3.6fC\r\n",fDew_point); delay_ms(1000); lcd_send_byte(0,0x80); printf(lcd_putc "T:%3.2f ",fTemp_true); printf(lcd_putc "H:%3.3f ",fRh_true); lcd_send_byte(0,0xC0); printf(lcd_putc "D/P:%3.6fC",fDew_point); delay_ms(1000); } }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
20-04-2012, 12:14 PM | #3 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 3
: |
hay quá, thanks bác nhiều nhe :X
|
|
|