BAP TUDelft / ADS1015_v2
Committer:
xorjoep
Date:
Mon Jul 02 10:18:02 2018 +0000
Revision:
3:6ee79a02cf4c
Parent:
2:2bf91fd23a1a
Child:
4:4edb1d9173db
doet he tnu

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 3:6ee79a02cf4c 4 #define ADS1015_CONFIG_DEFAULT 0x81E3
xorjoep 1:c1ddf7c2d65b 5
xorjoep 3:6ee79a02cf4c 6 double getDifSample(I2C* i2c_plate, uint8_t ADC_address, uint16_t channel)
xorjoep 1:c1ddf7c2d65b 7 {
xorjoep 3:6ee79a02cf4c 8 uint16_t config = ADS1015_CONFIG_DEFAULT | channel | AD1015_CONFIG_FSR_4096;
xorjoep 3:6ee79a02cf4c 9
xorjoep 3:6ee79a02cf4c 10 startSingleShotConversion(i2c_plate, ADC_address, config);
xorjoep 3:6ee79a02cf4c 11 wait_ms(0.4);
xorjoep 3:6ee79a02cf4c 12 //startSingleShotConversion(i2c_plate, ADC_address, config);
xorjoep 3:6ee79a02cf4c 13 //wait_ms(0.3);
xorjoep 3:6ee79a02cf4c 14
xorjoep 3:6ee79a02cf4c 15 return readConversionResult(i2c_plate, ADC_address, config);
xorjoep 1:c1ddf7c2d65b 16 }
xorjoep 1:c1ddf7c2d65b 17
xorjoep 2:2bf91fd23a1a 18 double getSingleSample(I2C* i2c_plate, uint8_t ADC_address, uint16_t channel)
xorjoep 3:6ee79a02cf4c 19 {
xorjoep 3:6ee79a02cf4c 20 uint16_t config = ADS1015_CONFIG_DEFAULT | AD1015_CONFIG_FSR_6144;
xorjoep 3:6ee79a02cf4c 21
xorjoep 2:2bf91fd23a1a 22 switch (channel) {
xorjoep 2:2bf91fd23a1a 23 case (0):
xorjoep 2:2bf91fd23a1a 24 config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
xorjoep 2:2bf91fd23a1a 25 break;
xorjoep 2:2bf91fd23a1a 26 case (1):
xorjoep 2:2bf91fd23a1a 27 config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
xorjoep 2:2bf91fd23a1a 28 break;
xorjoep 2:2bf91fd23a1a 29 case (2):
xorjoep 2:2bf91fd23a1a 30 config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
xorjoep 2:2bf91fd23a1a 31 break;
xorjoep 2:2bf91fd23a1a 32 case (3):
xorjoep 2:2bf91fd23a1a 33 config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
xorjoep 2:2bf91fd23a1a 34 break;
xorjoep 2:2bf91fd23a1a 35 }
xorjoep 3:6ee79a02cf4c 36
xorjoep 2:2bf91fd23a1a 37 startSingleShotConversion(i2c_plate, ADC_address, config);
xorjoep 3:6ee79a02cf4c 38 wait_ms(0.4);
xorjoep 3:6ee79a02cf4c 39 //startSingleShotConversion(i2c_plate, ADC_address, config);
xorjoep 3:6ee79a02cf4c 40 //wait_ms(0.3);
xorjoep 3:6ee79a02cf4c 41
xorjoep 2:2bf91fd23a1a 42 return readConversionResult(i2c_plate, ADC_address, config);
xorjoep 2:2bf91fd23a1a 43 }
xorjoep 2:2bf91fd23a1a 44
xorjoep 0:94493b8b0fb0 45 void startSingleShotConversion(I2C* i2c_plate, uint8_t address, uint16_t config)
xorjoep 0:94493b8b0fb0 46 {
xorjoep 0:94493b8b0fb0 47 char txbuf[10];
xorjoep 0:94493b8b0fb0 48 // set mux to correct input
xorjoep 0:94493b8b0fb0 49 txbuf[0] = AD1015_REG_CONFIG;
xorjoep 0:94493b8b0fb0 50 txbuf[1] = config >> 8;
xorjoep 0:94493b8b0fb0 51 txbuf[2] = config & 0xFF;
xorjoep 0:94493b8b0fb0 52 i2c_plate->write(address, txbuf, 3);
xorjoep 0:94493b8b0fb0 53 }
xorjoep 0:94493b8b0fb0 54
xorjoep 0:94493b8b0fb0 55 double readConversionResult(I2C* i2c_plate, uint8_t address, uint16_t config)
xorjoep 0:94493b8b0fb0 56 {
xorjoep 0:94493b8b0fb0 57 int16_t raw_data;
xorjoep 0:94493b8b0fb0 58 char rxbuf[10];
xorjoep 0:94493b8b0fb0 59 char txbuf[10];
xorjoep 0:94493b8b0fb0 60 txbuf[0] = AD1015_REG_CONVERSION_RESULT;
xorjoep 0:94493b8b0fb0 61 i2c_plate->write(address, txbuf, 1, true);
xorjoep 0:94493b8b0fb0 62 i2c_plate->read(address, rxbuf, 2);
xorjoep 0:94493b8b0fb0 63 raw_data = (rxbuf[0] << 8) | rxbuf[1];
xorjoep 0:94493b8b0fb0 64 return data_to_voltage(raw_data, config);
xorjoep 0:94493b8b0fb0 65 }
xorjoep 0:94493b8b0fb0 66
xorjoep 0:94493b8b0fb0 67 double data_to_voltage(int16_t data, uint16_t config)
xorjoep 0:94493b8b0fb0 68 {
xorjoep 0:94493b8b0fb0 69 double voltage;
xorjoep 0:94493b8b0fb0 70 data = data >> 4;
xorjoep 0:94493b8b0fb0 71 switch(config & 0x0E00) {
xorjoep 0:94493b8b0fb0 72 case AD1015_CONFIG_FSR_6144:
xorjoep 0:94493b8b0fb0 73 voltage = 0.003 * (double)data;
xorjoep 0:94493b8b0fb0 74 break;
xorjoep 0:94493b8b0fb0 75 case AD1015_CONFIG_FSR_4096:
xorjoep 0:94493b8b0fb0 76 voltage = 0.002 * (double)data;
xorjoep 0:94493b8b0fb0 77 break;
xorjoep 0:94493b8b0fb0 78 case AD1015_CONFIG_FSR_2048:
xorjoep 0:94493b8b0fb0 79 voltage = 0.001 * (double)data;
xorjoep 0:94493b8b0fb0 80 break;
xorjoep 0:94493b8b0fb0 81 case AD1015_CONFIG_FSR_1024:
xorjoep 0:94493b8b0fb0 82 voltage = 0.0005 * (double)data;
xorjoep 0:94493b8b0fb0 83 break;
xorjoep 0:94493b8b0fb0 84 case AD1015_CONFIG_FSR_0512:
xorjoep 0:94493b8b0fb0 85 voltage = 0.00025 * (double)data;
xorjoep 0:94493b8b0fb0 86 break;
xorjoep 0:94493b8b0fb0 87 case AD1015_CONFIG_FSR_0256:
xorjoep 0:94493b8b0fb0 88 voltage = 0.000125 * (double)data;
xorjoep 0:94493b8b0fb0 89 break;
xorjoep 0:94493b8b0fb0 90 default:
xorjoep 0:94493b8b0fb0 91 break;
xorjoep 0:94493b8b0fb0 92 }
xorjoep 0:94493b8b0fb0 93 return voltage;
xorjoep 0:94493b8b0fb0 94 }