mbed API implementation for AT30TSE75X , EEPROM + Temperature sensor.

Committer:
akhilpanayam
Date:
Tue Mar 22 04:58:03 2016 +0000
Revision:
0:0e430cef393b
Initial Commit with implementations.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akhilpanayam 0:0e430cef393b 1 #include "AT30TSE75X.h"
akhilpanayam 0:0e430cef393b 2
akhilpanayam 0:0e430cef393b 3 AT30TSE75X::AT30TSE75X(PinName sda, PinName scl) : at30tse75x_i2c(sda, scl), resolution(AT30TSE_CONFIG_RES_9_bit) {
akhilpanayam 0:0e430cef393b 4 at30tse75x_i2c.frequency(10000);
akhilpanayam 0:0e430cef393b 5 }
akhilpanayam 0:0e430cef393b 6 AT30TSE75X::~AT30TSE75X() { }
akhilpanayam 0:0e430cef393b 7
akhilpanayam 0:0e430cef393b 8 float AT30TSE75X::read_temp() {
akhilpanayam 0:0e430cef393b 9 uint8_t bufferwrite[1];
akhilpanayam 0:0e430cef393b 10 uint8_t buffer[2];
akhilpanayam 0:0e430cef393b 11 float temperature;
akhilpanayam 0:0e430cef393b 12 uint16_t data;
akhilpanayam 0:0e430cef393b 13 buffer[0] = 0;
akhilpanayam 0:0e430cef393b 14 buffer[1] = 0;
akhilpanayam 0:0e430cef393b 15
akhilpanayam 0:0e430cef393b 16 at30tse75x_i2c.read((AT30TSE_TEMPERATURE_TWI_ADDR << 1 ),(char *)buffer,AT30TSE_TEMPERATURE_REG_SIZE,false);
akhilpanayam 0:0e430cef393b 17
akhilpanayam 0:0e430cef393b 18
akhilpanayam 0:0e430cef393b 19 data = (buffer[0] << 8) | buffer[1];
akhilpanayam 0:0e430cef393b 20 int8_t sign = 1;
akhilpanayam 0:0e430cef393b 21
akhilpanayam 0:0e430cef393b 22 /* Check if negative and clear sign bit. */
akhilpanayam 0:0e430cef393b 23 if (data & (1 << 15)) {
akhilpanayam 0:0e430cef393b 24 sign *= -1;
akhilpanayam 0:0e430cef393b 25 data &= ~(1 << 15);
akhilpanayam 0:0e430cef393b 26 }
akhilpanayam 0:0e430cef393b 27
akhilpanayam 0:0e430cef393b 28 /* Convert to temperature. */
akhilpanayam 0:0e430cef393b 29 switch (this->resolution) {
akhilpanayam 0:0e430cef393b 30 case AT30TSE_CONFIG_RES_9_bit:
akhilpanayam 0:0e430cef393b 31 data = (data >> 7);
akhilpanayam 0:0e430cef393b 32 (temperature) = data * sign * 0.5;
akhilpanayam 0:0e430cef393b 33 break;
akhilpanayam 0:0e430cef393b 34
akhilpanayam 0:0e430cef393b 35 case AT30TSE_CONFIG_RES_10_bit:
akhilpanayam 0:0e430cef393b 36 data = (data >> 6);
akhilpanayam 0:0e430cef393b 37 (temperature) = data * sign * 0.25;
akhilpanayam 0:0e430cef393b 38 break;
akhilpanayam 0:0e430cef393b 39
akhilpanayam 0:0e430cef393b 40 case AT30TSE_CONFIG_RES_11_bit:
akhilpanayam 0:0e430cef393b 41 data = (data >> 5);
akhilpanayam 0:0e430cef393b 42 (temperature) = data * sign * 0.125;
akhilpanayam 0:0e430cef393b 43 break;
akhilpanayam 0:0e430cef393b 44
akhilpanayam 0:0e430cef393b 45 case AT30TSE_CONFIG_RES_12_bit:
akhilpanayam 0:0e430cef393b 46 data = (data >> 4);
akhilpanayam 0:0e430cef393b 47 (temperature) = data * sign * 0.0625;
akhilpanayam 0:0e430cef393b 48 break;
akhilpanayam 0:0e430cef393b 49
akhilpanayam 0:0e430cef393b 50 default:
akhilpanayam 0:0e430cef393b 51 break;
akhilpanayam 0:0e430cef393b 52 }
akhilpanayam 0:0e430cef393b 53 return temperature;
akhilpanayam 0:0e430cef393b 54 }
akhilpanayam 0:0e430cef393b 55
akhilpanayam 0:0e430cef393b 56 uint8_t AT30TSE75X:: read_eeprom(uint8_t *data, uint8_t length, uint8_t word_addr, uint8_t page) {
akhilpanayam 0:0e430cef393b 57 uint8_t buff[20];
akhilpanayam 0:0e430cef393b 58 buff[0] = (word_addr & 0x0F) | ((0x0F & page) << 4);
akhilpanayam 0:0e430cef393b 59
akhilpanayam 0:0e430cef393b 60 at30tse75x_i2c.write((int)(AT30TSE_EEPROM_TWI_ADDR << 1),(char *)buff,1,false);
akhilpanayam 0:0e430cef393b 61 return at30tse75x_i2c.read((int)(AT30TSE_EEPROM_TWI_ADDR << 1),(char *)data,length,false);
akhilpanayam 0:0e430cef393b 62 }
akhilpanayam 0:0e430cef393b 63
akhilpanayam 0:0e430cef393b 64 uint8_t AT30TSE75X:: write_eeprom(uint8_t *data, uint8_t length, uint8_t word_addr, uint8_t page)
akhilpanayam 0:0e430cef393b 65 {
akhilpanayam 0:0e430cef393b 66 uint8_t buff[length+1];;
akhilpanayam 0:0e430cef393b 67 buff[0] = (word_addr & 0x0F) | ((0x0F & page) << 4);
akhilpanayam 0:0e430cef393b 68 for(int i = 0; i < length; i++)
akhilpanayam 0:0e430cef393b 69 {
akhilpanayam 0:0e430cef393b 70 buff[i+1] = *data++;
akhilpanayam 0:0e430cef393b 71 }
akhilpanayam 0:0e430cef393b 72 return at30tse75x_i2c.write((int)(AT30TSE_EEPROM_TWI_ADDR << 1),(char *)buff,(length + 1),false);
akhilpanayam 0:0e430cef393b 73 }