BAP TUDelft / ADS1015_v2
Committer:
xorjoep
Date:
Wed Jun 27 09:11:26 2018 +0000
Revision:
1:c1ddf7c2d65b
Parent:
0:94493b8b0fb0
Child:
2:2bf91fd23a1a
Now works + getSample function applied

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xorjoep 0:94493b8b0fb0 1 #include "mbed.h"
xorjoep 0:94493b8b0fb0 2 #include "ADS1015.h"
xorjoep 0:94493b8b0fb0 3
xorjoep 1:c1ddf7c2d65b 4 #define CONFIG 0x81E3 | AD1015_CONFIG_FSR_4096
xorjoep 1:c1ddf7c2d65b 5
xorjoep 1:c1ddf7c2d65b 6 double getSample(I2C* i2c_plate, uint8_t ADC_address, uint16_t sensor_address)
xorjoep 1:c1ddf7c2d65b 7 {
xorjoep 1:c1ddf7c2d65b 8 sensor_address = CONFIG | sensor_address;
xorjoep 1:c1ddf7c2d65b 9
xorjoep 1:c1ddf7c2d65b 10 startSingleShotConversion(i2c_plate, ADC_address, sensor_address);
xorjoep 1:c1ddf7c2d65b 11 wait_ms(0.1);
xorjoep 1:c1ddf7c2d65b 12 startSingleShotConversion(i2c_plate, ADC_address, sensor_address);
xorjoep 1:c1ddf7c2d65b 13 wait_ms(0.3);
xorjoep 1:c1ddf7c2d65b 14
xorjoep 1:c1ddf7c2d65b 15 return readConversionResult(i2c_plate, ADC_address, sensor_address);
xorjoep 1:c1ddf7c2d65b 16 }
xorjoep 1:c1ddf7c2d65b 17
xorjoep 0:94493b8b0fb0 18 void startSingleShotConversion(I2C* i2c_plate, uint8_t address, uint16_t config)
xorjoep 0:94493b8b0fb0 19 {
xorjoep 0:94493b8b0fb0 20 char txbuf[10];
xorjoep 0:94493b8b0fb0 21 // set mux to correct input
xorjoep 0:94493b8b0fb0 22 txbuf[0] = AD1015_REG_CONFIG;
xorjoep 0:94493b8b0fb0 23 txbuf[1] = config >> 8;
xorjoep 0:94493b8b0fb0 24 txbuf[2] = config & 0xFF;
xorjoep 0:94493b8b0fb0 25 i2c_plate->write(address, txbuf, 3);
xorjoep 0:94493b8b0fb0 26 }
xorjoep 0:94493b8b0fb0 27
xorjoep 0:94493b8b0fb0 28 double readConversionResult(I2C* i2c_plate, uint8_t address, uint16_t config)
xorjoep 0:94493b8b0fb0 29 {
xorjoep 0:94493b8b0fb0 30 int16_t raw_data;
xorjoep 0:94493b8b0fb0 31 char rxbuf[10];
xorjoep 0:94493b8b0fb0 32 char txbuf[10];
xorjoep 0:94493b8b0fb0 33 txbuf[0] = AD1015_REG_CONVERSION_RESULT;
xorjoep 0:94493b8b0fb0 34 i2c_plate->write(address, txbuf, 1, true);
xorjoep 0:94493b8b0fb0 35 i2c_plate->read(address, rxbuf, 2);
xorjoep 0:94493b8b0fb0 36 raw_data = (rxbuf[0] << 8) | rxbuf[1];
xorjoep 0:94493b8b0fb0 37 return data_to_voltage(raw_data, config);
xorjoep 0:94493b8b0fb0 38 }
xorjoep 0:94493b8b0fb0 39
xorjoep 0:94493b8b0fb0 40 double data_to_voltage(int16_t data, uint16_t config)
xorjoep 0:94493b8b0fb0 41 {
xorjoep 0:94493b8b0fb0 42 double voltage;
xorjoep 0:94493b8b0fb0 43 data = data >> 4;
xorjoep 0:94493b8b0fb0 44 switch(config & 0x0E00) {
xorjoep 0:94493b8b0fb0 45 case AD1015_CONFIG_FSR_6144:
xorjoep 0:94493b8b0fb0 46 voltage = 0.003 * (double)data;
xorjoep 0:94493b8b0fb0 47 break;
xorjoep 0:94493b8b0fb0 48 case AD1015_CONFIG_FSR_4096:
xorjoep 0:94493b8b0fb0 49 voltage = 0.002 * (double)data;
xorjoep 0:94493b8b0fb0 50 break;
xorjoep 0:94493b8b0fb0 51 case AD1015_CONFIG_FSR_2048:
xorjoep 0:94493b8b0fb0 52 voltage = 0.001 * (double)data;
xorjoep 0:94493b8b0fb0 53 break;
xorjoep 0:94493b8b0fb0 54 case AD1015_CONFIG_FSR_1024:
xorjoep 0:94493b8b0fb0 55 voltage = 0.0005 * (double)data;
xorjoep 0:94493b8b0fb0 56 break;
xorjoep 0:94493b8b0fb0 57 case AD1015_CONFIG_FSR_0512:
xorjoep 0:94493b8b0fb0 58 voltage = 0.00025 * (double)data;
xorjoep 0:94493b8b0fb0 59 break;
xorjoep 0:94493b8b0fb0 60 case AD1015_CONFIG_FSR_0256:
xorjoep 0:94493b8b0fb0 61 voltage = 0.000125 * (double)data;
xorjoep 0:94493b8b0fb0 62 break;
xorjoep 0:94493b8b0fb0 63 default:
xorjoep 0:94493b8b0fb0 64 break;
xorjoep 0:94493b8b0fb0 65 }
xorjoep 0:94493b8b0fb0 66 return voltage;
xorjoep 0:94493b8b0fb0 67 }