unsigned char readAdc1(void){ unsigned char readValue = 0; I2C_START_WAIT(LightSensorAddress+I2C_WRITE_FLAG); I2C_WRITE(0x83); I2C_REP_START(LightSensorAddress+I2C_READ_FLAG); readValue = I2C_READ_ACK(); return readValue; }
int getTemperature(void){ int temperature=0; unsigned char temp; WakeUpMode(); /* Wait data temperature available */ do { I2C_START_WAIT(TemperatureSensorAddress+I2C_WRITE_FLAG); I2C_WRITE(0x04); // CONTROLS/STATUS REGISTER I2C_REP_START(TemperatureSensorAddress+I2C_READ_FLAG); // Send a responce request temp = I2C_READ_NACK(); // Read the response I2C_STOP(); } while(!(temp & 0x01)); // While Data Available Flag is not set /* Read the TEMPERATURE DATA REGISTER */ I2C_START_WAIT(TemperatureSensorAddress+I2C_WRITE_FLAG); I2C_WRITE(0x00); // Write the temperature data register 0x00 I2C_REP_START(TemperatureSensorAddress+I2C_READ_FLAG); // Send a responce request temperature = I2C_READ_NACK()<<8; // Read the response I2C_WRITE(0x10); // Write the temperature hight byte data register 0x00 I2C_REP_START(TemperatureSensorAddress+I2C_READ_FLAG); // Send a responce request temperature = I2C_READ_NACK()<<8; // Read the response I2C_WRITE(0x11); // Write the temperature low byte data register 0x00 I2C_REP_START(TemperatureSensorAddress+I2C_READ_FLAG); // Send a responce request temperature |= I2C_READ_NACK(); // Read the response I2C_STOP(); /* Go to sleep mode */ sleepMode(); return temperature/128; }
// odczyt danych z pamiêci EEPROM void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf) { while (len--) { I2C_START(); i2cPutbyte(device | ((subAddr>>8)<<1) ); i2cPutbyte(subAddr); I2C_REP_START(); i2cPutbyte(device + 1); *buf++ = i2cGetbyte( NACK ); I2C_STOP(); subAddr++; } }
unsigned char WakeUpModeLight(void){ unsigned char ret = -1; unsigned char count = 0; do { ret = I2C_START(LightSensorAddress+I2C_WRITE_FLAG); if(ret == 0){ I2C_WRITE(0x03); I2C_REP_START(LightSensorAddress+I2C_READ_FLAG); ret = I2C_READ_ACK(); } if(count++ > 10) return 1; } while(ret != 0x03); // While Response of command WakeUp is not 0x03 return 0; }