//definice adres #define _HTS_address 0xBE //teplotni adresy #define T_out1 0x2A #define T_out2 0x2B #define T0_out1 0x3C #define T0_out2 0x3D #define T1_out1 0x3E #define T1_out2 0x3F #define T0_degC_8x 0x32 #define T1_degC_8X 0x33 #define degC_Msb 0x35 // vlhkostni adresy #define H_out1 0x28 #define H_out2 0x29 #define H0_out1 0x36 #define H0_out2 0x37 #define H1_out1 0x3A #define H1_out2 0x3B #define H0_degC_x2 0x30 #define H1_degC_x2 0x31 // LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // Zapis void HTS221_Write(unsigned short address, unsigned short data1) { I2C1_Start(); // issue I2C start signal I2C1_Wr(0xBE); // send byte via I2C (device address + W) I2C1_Wr(address); // send byte (address of the location) I2C1_Wr(data1); // send data (data to be written) I2C1_Stop(); // issue I2C stop signal } // cteni unsigned short HTS221_Read(unsigned short address) { unsigned short tmp = 0; I2C1_Start(); // issue I2C start signal I2C1_Wr(_HTS_address); // send byte via I2C (device address + W) I2C1_Wr(address); // send byte (data address) I2C1_Start(); // issue I2C signal repeated start I2C1_Wr(0xBE+1); // send byte (device address + R) tmp = I2C1_Rd(0); // Read the data (NO acknowledge) I2C1_Stop(); // issue I2C stop signal return tmp; } // cteni a skladani registru TEPLOTY int HTS_ReadT(void) { char low_byte; int T_out; T_out = HTS221_Read(T_out2); low_byte = HTS221_Read(T_out1); T_out = (T_out << 8); T_out = (T_out | low_byte); return T_out; } int HTS_ReadT0(void) { char low_byte; int T0_out; T0_out = HTS221_Read(T0_out2 ); low_byte = HTS221_Read(T0_out1 ); T0_out = (T0_out << 8); T0_out = (T0_out | low_byte); return T0_out; } int HTS_ReadT1(void) { char low_byte; int T1_out; T1_out = HTS221_Read(T1_out2 ); low_byte = HTS221_Read(T1_out1 ); T1_out = (T1_out << 8); T1_out = (T1_out | low_byte); return T1_out; } int HTS_ReadT0_deg(void) { char low_byte; int T0_degC; T0_degC = HTS221_Read(degC_Msb); low_byte = HTS221_Read(T0_degC_8x); T0_degC = (T0_degC << 14); T0_degC = (T0_degC >> 6); T0_degC = (T0_degC | low_byte); return T0_degC; } int HTS_ReadT1_deg(void) { char low_byte; int T1_degC; T1_degC = HTS221_Read(degC_Msb); low_byte = HTS221_Read(T0_degC_8x); T1_degC = (T1_degC >> 2); T1_degC = (T1_degC << 14); T1_degC = (T1_degC >> 6); T1_degC = (T1_degC | low_byte); return T1_degC; } // cteni a skladani registru VLHKOSTI int HTS_ReadH(void) { char low_byte; int H_out; H_out = HTS221_Read(T_out2); low_byte = HTS221_Read(T_out1); H_out = (H_out << 8); H_out = (H_out | low_byte); return H_out; } int HTS_ReadH0(void) { char low_byte; int H0_out; H0_out = HTS221_Read(H0_out2 ); low_byte = HTS221_Read(H0_out1 ); H0_out = (H0_out << 8); H0_out = (H0_out | low_byte); return H0_out; } int HTS_ReadH1(void) { char low_byte; int H1_out; H1_out = HTS221_Read(H1_out2 ); low_byte = HTS221_Read(H1_out1 ); H1_out = (H1_out << 8); H1_out = (H1_out | low_byte); return H1_out; } int HTS_ReadH0_degC(void) { char low_byte; int H0_degC; H0_degC = HTS221_Read(H0_degC_x2 ); return H0_degC; } int HTS_ReadH1_degC(void) { char low_byte; int H1_degC; H1_degC = HTS221_Read(H1_degC_x2 ); return H1_degC; } // deklarace promenych //teplota int T = 0; int T0_out = 0; int T1_out = 0; int T1_degC = 0; int T0_degC = 0; float teplota = 0; float teplota1= 0; // vlhkost int H = 0; int H0_out = 0; int H1_out = 0; int H1_degC = 0; int H0_degC = 0; int vlhkost = 0; unsigned char vypis[16]; unsigned char vypis1[16]; void main() { // hlavni metoda anselC=0; anselB=0; PORTC = 0; PORTB = 0; TRISC = 0; TRISB = 0; TRISD = 1; I2C1_Init(10000) ; Lcd_Init(); Lcd_cmd(_LCD_CURSOR_OFF); T0_out = HTS_ReadT0(); T1_out = HTS_ReadT1(); T1_degC = HTS_ReadT1_deg()/8; T0_degC = HTS_ReadT0_deg()/8; H0_out = HTS_ReadH0(); H1_out = HTS_ReadH1(); H1_degC = HTS_ReadH1_degC()/2; H0_degC = HTS_ReadH0_degC()/2; // nekonecna smycka pro vypocet a vypis teploty while(1) { T = HTS_ReadT(); teplota = ((T1_degC - T0_degC)*(T-T0_out))/(T1_out-T0_out)+ T0_degC-10; wordToStr(Teplota,vypis); H = HTS_ReadT(); vlhkost = ((H1_degC - H0_degC)*(H-H0_out))/(H1_out-H0_out)+ H0_degC; wordToStr(vlhkost,vypis1); Lcd_cmd(_LCD_CLEAR); Lcd_out(1,1,"temp :") ; Lcd_out(1,7,vypis) ; Lcd_out(2,1,"hum :") ; Lcd_out(2,7,vypis1) ; delay_ms(300); } }