// write to an address void I2Cwrite(char addr, char subaddr, char value) { char tmp; i2c_start(); tmp = send_i2c_byte(addr); tmp = send_i2c_byte(subaddr); tmp = send_i2c_byte(value); reset_i2c_bus(); }
//read from an address char I2Cread(char addr, char subaddr) { char temp; i2c_start(); send_i2c_byte(addr); send_i2c_byte(subaddr); microcontroller_delay_us(10); i2c_restart(); send_i2c_byte(addr | 0x01); temp = i2c_read_byte(); reset_i2c_bus(); return temp; }
/* * Function: firmwareTest() * -------------------- * * Requests the firmare version from si7020. Function used to test i2c communication. * */ void firmwareTest() { i2c_start(); send_i2c_byte(0x80); // address +0 write send_i2c_byte(0x84); /// FIRMWARE!!!!!!!!! send_i2c_byte(0xB8); /// FIRMWARE!!!!!!!!! //0x84 =0b10000100 //0xB8 =0b10111000 i2c_start(); /// FIRMWARE!!!!!!!!! send_i2c_byte(0x81); /// FIRMWARE!!!!!!!!! // cc3=i2c_read(); // i2c_stop(); }
/* * Function: measureRH() * -------------------- * Used to send the RH measurement command and read the result */ void measureRH() { i2c_start(); send_i2c_byte(SI7020ADR_W); // address +0 write send_i2c_byte(MEASURE_HUM_HOLD_CMD); //0xE5 =0b11100101 i2c_repeatedStart(); send_i2c_byte(SI7020ADR_R); //adresss +1 read i2c_mIdleI2C1(); hhLSB = i2c_read_ack(); i2c_ack(); i2c_mIdleI2C1(); i2c_ack(); hhMSB = i2c_read_ack(); i2c_mIdleI2C1(); /////////////////////// maybe? i2c_nack(); i2c_stop(); humidityCode.b[0] = hhLSB; humidityCode.b[1] = hhMSB; }
/* * Function: measureT() * -------------------- * Used to send the temperature measurement command and read the result */ void measureT() { i2c_start(); send_i2c_byte(SI7020ADR_W); // address +0 write send_i2c_byte(MEASURE_TEMP_HOLD_CMD); //0xE3 =0b11100011 i2c_repeatedStart(); //i2c_start(); send_i2c_byte(SI7020ADR_R); //adresss +1 read i2c_mIdleI2C1(); ttLSB = i2c_read_ack(); i2c_ack(); i2c_mIdleI2C1(); i2c_ack(); ttMSB = i2c_read_ack(); i2c_mIdleI2C1(); /////////////////////// maybe? i2c_nack(); i2c_stop(); temperatureCode.b[0] = ttLSB; temperatureCode.b[1] = ttMSB; }
/* * Function: getLastTemp() * -------------------- * Used to retrieve last temperature measurement, idea is to save some time on * conversion-> because SI7020 does relative humidity(RH) measurement it also measures * temperature. */ void getLastTemp() { i2c_start(); send_i2c_byte(SI7020ADR_W); // address +0 write send_i2c_byte(READ_LAST_TEMP_CMD); i2c_repeatedStart(); //i2c_start(); send_i2c_byte(SI7020ADR_R); //adresss +1 read i2c_mIdleI2C1(); ttLSB = i2c_read_ack(); i2c_ack(); i2c_mIdleI2C1(); i2c_ack(); ttMSB = i2c_read_ack(); i2c_mIdleI2C1(); /////////////////////// maybe? i2c_nack(); i2c_stop(); temperatureCode.b[0] = ttLSB; temperatureCode.b[1] = ttMSB; }