This lib is supposed to be used as a sensor's calibration or control program. This makes Cubic Spline Model from some sample plots(sets of (value, voltage)), and then discretize the model (dividing the range of voltage into some steps) in order to use the calibrated model data without getting the INVERSE function.

Committer:
aktk
Date:
Thu Jun 30 17:41:14 2016 +0000
Revision:
22:eaaaa42a0ccb
Parent:
19:ee2558b13570
The filename that SPT::TRP105FS::printCalibrationLOG() makes has become ADLOG%2d.TXT.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 8:9eaa9772e1e7 1 #include "TRP105FS_SPIWrapper.h"
aktk 8:9eaa9772e1e7 2
aktk 8:9eaa9772e1e7 3 //
aktk 8:9eaa9772e1e7 4 // Make instance of static member
aktk 8:9eaa9772e1e7 5 //
aktk 11:d60fb729eacf 6 SPI
aktk 8:9eaa9772e1e7 7 SPI_TRP105FS::spi(p5, p6, p7); // mosi(out), miso(in), sclk(clock)
aktk 8:9eaa9772e1e7 8
aktk 8:9eaa9772e1e7 9 DigitalOut
aktk 8:9eaa9772e1e7 10 SPI_TRP105FS::cs(p8); // cs (the chip select signal)
aktk 8:9eaa9772e1e7 11
aktk 8:9eaa9772e1e7 12 //
aktk 8:9eaa9772e1e7 13 // For SPI, Define static method
aktk 8:9eaa9772e1e7 14 //
aktk 11:d60fb729eacf 15 int
aktk 8:9eaa9772e1e7 16 SPI_TRP105FS::ADread(int channel)
aktk 8:9eaa9772e1e7 17 {
aktk 8:9eaa9772e1e7 18 int command_high=0x06|((channel&0x04)>>2);
aktk 8:9eaa9772e1e7 19 int command_low=(channel&0x03)<<14;
aktk 8:9eaa9772e1e7 20 __disable_irq(); // 割り込み禁止
aktk 8:9eaa9772e1e7 21 cs = 0;
aktk 8:9eaa9772e1e7 22 spi.write(command_high);
aktk 8:9eaa9772e1e7 23 int resultbyte=spi.write(command_low) & 0xfff;
aktk 8:9eaa9772e1e7 24 cs = 1;
aktk 8:9eaa9772e1e7 25 __enable_irq(); // 割り込み許可
aktk 8:9eaa9772e1e7 26 return(resultbyte);
aktk 8:9eaa9772e1e7 27 }
aktk 8:9eaa9772e1e7 28
aktk 8:9eaa9772e1e7 29 //
aktk 8:9eaa9772e1e7 30 // Define Constructor
aktk 8:9eaa9772e1e7 31 //
aktk 8:9eaa9772e1e7 32 SPI_TRP105FS::SPI_TRP105FS()
aktk 8:9eaa9772e1e7 33 :channel(0)
aktk 8:9eaa9772e1e7 34 ,nsample(5)
aktk 8:9eaa9772e1e7 35 ,trp(TRP105FS(nsample))
aktk 8:9eaa9772e1e7 36 ,filename("\0")
aktk 8:9eaa9772e1e7 37 {}
aktk 8:9eaa9772e1e7 38
aktk 8:9eaa9772e1e7 39 SPI_TRP105FS::SPI_TRP105FS(unsigned int arg_ch)
aktk 8:9eaa9772e1e7 40 :channel(arg_ch)
aktk 8:9eaa9772e1e7 41 ,nsample(5)
aktk 8:9eaa9772e1e7 42 ,trp(TRP105FS(nsample))
aktk 8:9eaa9772e1e7 43 ,filename("\0")
aktk 8:9eaa9772e1e7 44 {}
aktk 8:9eaa9772e1e7 45
aktk 19:ee2558b13570 46 SPI_TRP105FS::SPI_TRP105FS(unsigned int arg_ns, unsigned int arg_ch)
aktk 19:ee2558b13570 47 :channel(arg_ch)
aktk 19:ee2558b13570 48 ,nsample(arg_ns)
aktk 19:ee2558b13570 49 ,trp(TRP105FS(nsample))
aktk 19:ee2558b13570 50 ,filename("\0")
aktk 19:ee2558b13570 51 {}
aktk 19:ee2558b13570 52
aktk 11:d60fb729eacf 53 void
aktk 8:9eaa9772e1e7 54 SPI_TRP105FS::setSample(unsigned short arg_x)
aktk 8:9eaa9772e1e7 55 {
aktk 8:9eaa9772e1e7 56 trp.setSample(arg_x, (unsigned short)ADread(channel));
aktk 8:9eaa9772e1e7 57 }
aktk 8:9eaa9772e1e7 58
aktk 11:d60fb729eacf 59 void
aktk 8:9eaa9772e1e7 60 SPI_TRP105FS::calibrate()
aktk 8:9eaa9772e1e7 61 {
aktk 8:9eaa9772e1e7 62 trp.calibrate();
aktk 8:9eaa9772e1e7 63 }
aktk 8:9eaa9772e1e7 64
aktk 11:d60fb729eacf 65 unsigned short
aktk 8:9eaa9772e1e7 66 SPI_TRP105FS::getDistance()
aktk 8:9eaa9772e1e7 67 {
aktk 8:9eaa9772e1e7 68 return trp.getDistance((unsigned short)ADread(channel));
aktk 8:9eaa9772e1e7 69 }
aktk 8:9eaa9772e1e7 70
aktk 11:d60fb729eacf 71 unsigned int
aktk 8:9eaa9772e1e7 72 SPI_TRP105FS::getChannel()
aktk 8:9eaa9772e1e7 73 {
aktk 8:9eaa9772e1e7 74 return channel;
aktk 8:9eaa9772e1e7 75 }
aktk 8:9eaa9772e1e7 76
aktk 11:d60fb729eacf 77 unsigned int
aktk 8:9eaa9772e1e7 78 SPI_TRP105FS::getNsample()
aktk 8:9eaa9772e1e7 79 {
aktk 8:9eaa9772e1e7 80 return nsample;
aktk 8:9eaa9772e1e7 81 }
aktk 8:9eaa9772e1e7 82
aktk 16:c2b0f3ca63dd 83 #if defined(HAS_LOCAL_FILE_SYSTEM)
aktk 11:d60fb729eacf 84 void
aktk 8:9eaa9772e1e7 85 SPI_TRP105FS::savedata()
aktk 8:9eaa9772e1e7 86 {
aktk 8:9eaa9772e1e7 87 if (filename[0] == '\0')
aktk 8:9eaa9772e1e7 88 sprintf(filename, "SENSOR%02d.SAV", channel);
aktk 8:9eaa9772e1e7 89 trp.saveSetting(filename);
aktk 8:9eaa9772e1e7 90 }
aktk 8:9eaa9772e1e7 91
aktk 11:d60fb729eacf 92 void
aktk 8:9eaa9772e1e7 93 SPI_TRP105FS::loaddata()
aktk 8:9eaa9772e1e7 94 {
aktk 8:9eaa9772e1e7 95 if (filename[0] == '\0')
aktk 8:9eaa9772e1e7 96 sprintf(filename, "SENSOR%02d.SAV", channel);
aktk 8:9eaa9772e1e7 97 trp.loadSetting(filename);
aktk 8:9eaa9772e1e7 98 }
aktk 11:d60fb729eacf 99 void
aktk 8:9eaa9772e1e7 100 SPI_TRP105FS::printCalibrationiLOG()
aktk 8:9eaa9772e1e7 101 {
aktk 22:eaaaa42a0ccb 102 char lfilename[13];
aktk 22:eaaaa42a0ccb 103
aktk 22:eaaaa42a0ccb 104 sprintf(lfilename, "ADLOG%2d.TXT", channel);
aktk 22:eaaaa42a0ccb 105 trp.printOutData(lfilename);
aktk 16:c2b0f3ca63dd 106 }
aktk 16:c2b0f3ca63dd 107 #endif