Custom project for driving a STC3100 sensor

Dependencies:   mbed

Committer:
tommienator
Date:
Sun Oct 29 00:11:17 2017 +0000
Revision:
0:014d4be7a437
Custom project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tommienator 0:014d4be7a437 1 /**
tommienator 0:014d4be7a437 2 * Driver for the STC3100
tommienator 0:014d4be7a437 3 */
tommienator 0:014d4be7a437 4 #include "mbed.h"
tommienator 0:014d4be7a437 5 #include "STC3100Sensor.h"
tommienator 0:014d4be7a437 6
tommienator 0:014d4be7a437 7 /**
tommienator 0:014d4be7a437 8 * Configuring the STC3100
tommienator 0:014d4be7a437 9 * ------------------------
tommienator 0:014d4be7a437 10 * This is done for the user automatically. See datasheet STC3100 page 15 for the
tommienator 0:014d4be7a437 11 * configuration that is applied.
tommienator 0:014d4be7a437 12 */
tommienator 0:014d4be7a437 13 void stc3100Configure(void) {
tommienator 0:014d4be7a437 14
tommienator 0:014d4be7a437 15 //The user need to provide the first address of the register, an increment
tommienator 0:014d4be7a437 16 //will be done automatically.
tommienator 0:014d4be7a437 17 char writeData[3];
tommienator 0:014d4be7a437 18 //REG_MODE address
tommienator 0:014d4be7a437 19 writeData[0] = 0x00;
tommienator 0:014d4be7a437 20 //Configuration REG_MODE
tommienator 0:014d4be7a437 21 writeData[1] = 0x1c;
tommienator 0:014d4be7a437 22 //Configuration REG_CTRL
tommienator 0:014d4be7a437 23 writeData[2] = 0x03;
tommienator 0:014d4be7a437 24
tommienator 0:014d4be7a437 25 i2c.write(STC3100_ADRESS_WRITE, writeData, 3);
tommienator 0:014d4be7a437 26 }
tommienator 0:014d4be7a437 27
tommienator 0:014d4be7a437 28 /**
tommienator 0:014d4be7a437 29 * Reading the whole memory block (that is been declared) and save it to the byteArray
tommienator 0:014d4be7a437 30 * of the ustc3100Data union.
tommienator 0:014d4be7a437 31 */
tommienator 0:014d4be7a437 32 void stc3100ReadChip(void) {
tommienator 0:014d4be7a437 33
tommienator 0:014d4be7a437 34 i2c.read(STC3100_ADDRESS_READ, &(stc3100Data.byteArray[0]), 10);
tommienator 0:014d4be7a437 35 }
tommienator 0:014d4be7a437 36
tommienator 0:014d4be7a437 37 /**
tommienator 0:014d4be7a437 38 * Calculating of the data, they will be stored in the stc3100ActualData struct.
tommienator 0:014d4be7a437 39 */
tommienator 0:014d4be7a437 40 void updateData(void) {
tommienator 0:014d4be7a437 41
tommienator 0:014d4be7a437 42 unsigned int high_byte = 0;
tommienator 0:014d4be7a437 43 int value = 0;
tommienator 0:014d4be7a437 44
tommienator 0:014d4be7a437 45 stc3100ReadChip();
tommienator 0:014d4be7a437 46
tommienator 0:014d4be7a437 47 // Converting to voltage
tommienator 0:014d4be7a437 48 high_byte = (unsigned int) stc3100Data.VoltageHigh;
tommienator 0:014d4be7a437 49 high_byte <<= 8;
tommienator 0:014d4be7a437 50 value = (high_byte & 0xFF00) | stc3100Data.VoltageLow;
tommienator 0:014d4be7a437 51 stc3100ActualData.voltage = (float) value * 2.44;
tommienator 0:014d4be7a437 52
tommienator 0:014d4be7a437 53 // Converting to current
tommienator 0:014d4be7a437 54 high_byte = (unsigned int) stc3100Data.CurrentHigh;
tommienator 0:014d4be7a437 55 high_byte <<= 8;
tommienator 0:014d4be7a437 56 value = (high_byte & 0xFF00) | stc3100Data.CurrentLow;
tommienator 0:014d4be7a437 57 value <<= 2;
tommienator 0:014d4be7a437 58 stc3100ActualData.current =
tommienator 0:014d4be7a437 59 ((((float) value * 11.77) / 10.0) / 4.0) > 0.0 ?
tommienator 0:014d4be7a437 60 ((((float) value * 11.77) / 10.0) / 4.0) :
tommienator 0:014d4be7a437 61 -((((float) value * 11.77) / 10.0) / 4.0);
tommienator 0:014d4be7a437 62 stc3100ActualData.current -= 54.0;
tommienator 0:014d4be7a437 63
tommienator 0:014d4be7a437 64 // Converting to charge
tommienator 0:014d4be7a437 65 high_byte = (unsigned int) stc3100Data.ChargeHigh;
tommienator 0:014d4be7a437 66 high_byte <<= 8;
tommienator 0:014d4be7a437 67 value = (high_byte & 0xFF00) | stc3100Data.ChargeLow;
tommienator 0:014d4be7a437 68 stc3100ActualData.charge = ((float) value * 6.70) / 10.0;
tommienator 0:014d4be7a437 69
tommienator 0:014d4be7a437 70 // // Converting to temperature
tommienator 0:014d4be7a437 71 // high_byte = (unsigned int) stc3100Data.TemperatureHigh;
tommienator 0:014d4be7a437 72 // high_byte <<= 8;
tommienator 0:014d4be7a437 73 // value = (high_byte & 0xFF00) | stc3100Data.TemperatureLow;
tommienator 0:014d4be7a437 74 // value <<= 4;
tommienator 0:014d4be7a437 75 // stc3100ActualData.temperature = ((float) value * 0.125) / 16.0;
tommienator 0:014d4be7a437 76
tommienator 0:014d4be7a437 77 }
tommienator 0:014d4be7a437 78
tommienator 0:014d4be7a437 79 /**
tommienator 0:014d4be7a437 80 * Method for returning the voltage
tommienator 0:014d4be7a437 81 */
tommienator 0:014d4be7a437 82 float getVoltage(void) {
tommienator 0:014d4be7a437 83 return stc3100ActualData.voltage;
tommienator 0:014d4be7a437 84 }
tommienator 0:014d4be7a437 85
tommienator 0:014d4be7a437 86 /**
tommienator 0:014d4be7a437 87 * Method for returning the current
tommienator 0:014d4be7a437 88 */
tommienator 0:014d4be7a437 89 float getCurrent(void) {
tommienator 0:014d4be7a437 90 return stc3100ActualData.current;
tommienator 0:014d4be7a437 91 }
tommienator 0:014d4be7a437 92
tommienator 0:014d4be7a437 93 /**
tommienator 0:014d4be7a437 94 * Method for returning the charge
tommienator 0:014d4be7a437 95 */
tommienator 0:014d4be7a437 96 float getCharge(void) {
tommienator 0:014d4be7a437 97 return stc3100ActualData.charge;
tommienator 0:014d4be7a437 98 }