Communication with LDC1101. Working version, ready for extensive calibration tests for resolution, linearity, etc.

Dependencies:   Bob DS1825 LDC1101 SDFileSystem mbed

Fork of Inductive_Sensor by Bob Giesberts

Committer:
bobgiesberts
Date:
Fri Dec 18 15:50:58 2015 +0000
Revision:
2:1a203732fc95
Parent:
1:22c272515015
Child:
4:ae441c5727b9
Working version to calibrate the sensor. Now tweaking for optimal resolution, linearity, range, etc.; 20 Hz output (time, L: "%.2f;%d\n")

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bobgiesberts 0:e81b68888268 1 #include "mbed.h"
bobgiesberts 0:e81b68888268 2 #include "LDC1101.h"
bobgiesberts 1:22c272515015 3 #include "SDFileSystem.h"
bobgiesberts 2:1a203732fc95 4 #include "Bob.h"
bobgiesberts 0:e81b68888268 5 #include <iostream>
bobgiesberts 0:e81b68888268 6 using namespace std;
bobgiesberts 0:e81b68888268 7
bobgiesberts 2:1a203732fc95 8 /**
bobgiesberts 2:1a203732fc95 9 * @file main.cpp
bobgiesberts 2:1a203732fc95 10 * @brief This file programs the processor for the inductive force sensor
bobgiesberts 2:1a203732fc95 11 * using the library LDC1101.h and LDC1101.cpp.
bobgiesberts 2:1a203732fc95 12 * - Red Led: processing communication with LDC1101
bobgiesberts 2:1a203732fc95 13 * - Green Led: processing SD card
bobgiesberts 2:1a203732fc95 14 *
bobgiesberts 2:1a203732fc95 15 * @author Bob Giesberts
bobgiesberts 2:1a203732fc95 16 *
bobgiesberts 2:1a203732fc95 17 * @date 2015-12-17
bobgiesberts 2:1a203732fc95 18 */
bobgiesberts 0:e81b68888268 19
bobgiesberts 2:1a203732fc95 20 Bob bob(PTB0, PTB1, PTC3, PTE0); // red led, green led, sd_enable, sd_present
bobgiesberts 0:e81b68888268 21 Serial pc(USBTX, USBRX);
bobgiesberts 0:e81b68888268 22
bobgiesberts 0:e81b68888268 23 int main(void){
bobgiesberts 0:e81b68888268 24
bobgiesberts 2:1a203732fc95 25 /** --- Connection to LDC1101 --- */
bobgiesberts 2:1a203732fc95 26 pc.printf("Connect to LDC1101...");
bobgiesberts 2:1a203732fc95 27 LDC1101 ldc(PTC6, PTC7, PTC5, PTC4, 120E-12, 16E6); // mosi, miso, sck, cs, capacitor (F), f_CLKIN (Hz)
bobgiesberts 2:1a203732fc95 28 pc.printf("success!\r\n");
bobgiesberts 2:1a203732fc95 29 bob.flash(2);
bobgiesberts 2:1a203732fc95 30 wait(0.2);
bobgiesberts 0:e81b68888268 31
bobgiesberts 2:1a203732fc95 32 /** --- Connection to sensor --- */
bobgiesberts 2:1a203732fc95 33 pc.printf("Connect to sensor...");
bobgiesberts 2:1a203732fc95 34 if(ldc.get_LHR_Data() != 16777215)
bobgiesberts 2:1a203732fc95 35 {
bobgiesberts 2:1a203732fc95 36 pc.printf("success!\r\n");
bobgiesberts 2:1a203732fc95 37 bob.flash_red(2);
bobgiesberts 2:1a203732fc95 38 }else{
bobgiesberts 2:1a203732fc95 39 pc.printf("failed!\r\n");
bobgiesberts 2:1a203732fc95 40 bob.red();
bobgiesberts 2:1a203732fc95 41 }
bobgiesberts 2:1a203732fc95 42
bobgiesberts 2:1a203732fc95 43 /** --- Start measuring! --- */
bobgiesberts 2:1a203732fc95 44 while(1)
bobgiesberts 2:1a203732fc95 45 {
bobgiesberts 2:1a203732fc95 46 clock_t t = clock();
bobgiesberts 2:1a203732fc95 47 int L = ldc.get_LHR_Data();
bobgiesberts 2:1a203732fc95 48 pc.printf("%.2f;%d\n", t/100.0, L);
bobgiesberts 2:1a203732fc95 49 wait(0.05); // 20 Hz
bobgiesberts 2:1a203732fc95 50 }
bobgiesberts 2:1a203732fc95 51
bobgiesberts 1:22c272515015 52
bobgiesberts 0:e81b68888268 53
bobgiesberts 2:1a203732fc95 54
bobgiesberts 2:1a203732fc95 55
bobgiesberts 2:1a203732fc95 56
bobgiesberts 2:1a203732fc95 57 /* let's leave this part out while calibrating the sensor
bobgiesberts 2:1a203732fc95 58
bobgiesberts 2:1a203732fc95 59 // --- Connection to SD card ---
bobgiesberts 2:1a203732fc95 60 pc.printf("Connect to SD card...");
bobgiesberts 2:1a203732fc95 61 if(bob.checkSD() == 1){
bobgiesberts 2:1a203732fc95 62 pc.printf("success!\r\n");
bobgiesberts 2:1a203732fc95 63 }else{
bobgiesberts 2:1a203732fc95 64 pc.printf("failed!\r\n");
bobgiesberts 2:1a203732fc95 65 }
bobgiesberts 2:1a203732fc95 66
bobgiesberts 2:1a203732fc95 67 // Load SD File system
bobgiesberts 1:22c272515015 68 SDFileSystem SD(PTD6, PTD7, PTD5, PTD4, "sd"); // mosi, miso, sclk, cs, sd_name
bobgiesberts 2:1a203732fc95 69
bobgiesberts 2:1a203732fc95 70 // Open or create data file
bobgiesberts 2:1a203732fc95 71 pc.printf("Opening data file...");
bobgiesberts 1:22c272515015 72 mkdir("/sd/mydir", 0777);
bobgiesberts 2:1a203732fc95 73 FILE *fp = fopen("/sd/data.txt", "w");
bobgiesberts 2:1a203732fc95 74 if(fp != NULL) {
bobgiesberts 2:1a203732fc95 75 pc.printf("success!\r\n");
bobgiesberts 2:1a203732fc95 76 }else{
bobgiesberts 2:1a203732fc95 77 pc.printf("failed!\r\n");
bobgiesberts 1:22c272515015 78 }
bobgiesberts 2:1a203732fc95 79
bobgiesberts 2:1a203732fc95 80 // Write current settings to data file
bobgiesberts 2:1a203732fc95 81 fprintf(fp, "DIVIDER : %d\r\n", ldc.get_divider());
bobgiesberts 2:1a203732fc95 82 fprintf(fp, "RESPONSETIME : %d\r\n", ldc.get_responsetime());
bobgiesberts 2:1a203732fc95 83 fprintf(fp, "RP_MIN : %f\r\n", ldc.get_RPmin());
bobgiesberts 2:1a203732fc95 84 fprintf(fp, "LHR_RCOUNT : %d\r\n", ldc.get_Rcount());
bobgiesberts 2:1a203732fc95 85 fprintf(fp, "\r\n\r\n");
bobgiesberts 1:22c272515015 86 fclose(fp);
bobgiesberts 0:e81b68888268 87
bobgiesberts 2:1a203732fc95 88
bobgiesberts 2:1a203732fc95 89
bobgiesberts 0:e81b68888268 90 while(1)
bobgiesberts 2:1a203732fc95 91 {
bobgiesberts 2:1a203732fc95 92 clock_t t = clock();
bobgiesberts 2:1a203732fc95 93
bobgiesberts 2:1a203732fc95 94 // get value from sensor
bobgiesberts 2:1a203732fc95 95 int L = ldc.get_LHR_Data();
bobgiesberts 1:22c272515015 96
bobgiesberts 2:1a203732fc95 97 // if the sensor is connected
bobgiesberts 2:1a203732fc95 98 if(L != 16777215) {
bobgiesberts 2:1a203732fc95 99
bobgiesberts 2:1a203732fc95 100 // settings
bobgiesberts 2:1a203732fc95 101 pc.printf("ResponseTime: %d", ldc.get_responsetime());
bobgiesberts 2:1a203732fc95 102 pc.printf(", Divider: %d", ldc.get_divider());
bobgiesberts 2:1a203732fc95 103 pc.printf(", RP_MIN: %.0f", ldc.get_RPmin());
bobgiesberts 2:1a203732fc95 104 pc.printf(", R_COUNT: %d", ldc.get_Rcount());
bobgiesberts 2:1a203732fc95 105 pc.printf(", Q: %.2f", ldc.get_Q());
bobgiesberts 2:1a203732fc95 106 pc.printf("\r\n");
bobgiesberts 2:1a203732fc95 107
bobgiesberts 2:1a203732fc95 108 // results
bobgiesberts 2:1a203732fc95 109 pc.printf("Time = %.2f", t/100.0);
bobgiesberts 2:1a203732fc95 110 pc.printf(", L_DATA = %d", L);
bobgiesberts 2:1a203732fc95 111 pc.printf(", f_sensor = %.2f MHz", ldc.get_fsensor()/1000000);
bobgiesberts 2:1a203732fc95 112 pc.printf(", L = %.2f uH", 1000000*ldc.get_Inductance());
bobgiesberts 2:1a203732fc95 113 pc.printf("\r\n");
bobgiesberts 2:1a203732fc95 114 pc.printf("\r\n");
bobgiesberts 2:1a203732fc95 115
bobgiesberts 2:1a203732fc95 116
bobgiesberts 2:1a203732fc95 117 // feedback: it's working
bobgiesberts 2:1a203732fc95 118 bob.flash_red(1);
bobgiesberts 2:1a203732fc95 119
bobgiesberts 2:1a203732fc95 120
bobgiesberts 2:1a203732fc95 121 // Store data on SD card
bobgiesberts 2:1a203732fc95 122 if( bob.checkSD() == 1 ) {
bobgiesberts 2:1a203732fc95 123 fp = fopen("/sd/data.txt", "a");
bobgiesberts 2:1a203732fc95 124 //for(int i = 0; i < 100; i++){ Store one continuous stream of data, 30 seconds
bobgiesberts 2:1a203732fc95 125 fprintf(fp, "%.2f, ", t/100.0);
bobgiesberts 2:1a203732fc95 126 fprintf(fp, "%d\r\n", L);
bobgiesberts 2:1a203732fc95 127 //}
bobgiesberts 2:1a203732fc95 128 fclose(fp);
bobgiesberts 2:1a203732fc95 129 }else{
bobgiesberts 2:1a203732fc95 130 pc.printf("Error: SD card disconnected, please reinsert.\r\n");
bobgiesberts 2:1a203732fc95 131 bob.green();
bobgiesberts 2:1a203732fc95 132 }
bobgiesberts 2:1a203732fc95 133
bobgiesberts 2:1a203732fc95 134 }else{
bobgiesberts 2:1a203732fc95 135 pc.printf("Error: Sensor disconnected, please reconnect.\r\n");
bobgiesberts 2:1a203732fc95 136 bob.red();
bobgiesberts 2:1a203732fc95 137 }
bobgiesberts 2:1a203732fc95 138
bobgiesberts 1:22c272515015 139
bobgiesberts 2:1a203732fc95 140 // Telkens een periode van 10 - 30 seconden continue meten, dan een half uur pauze.
bobgiesberts 2:1a203732fc95 141 // In die pauze alles op laagste vermogen (LDC1101 in shutdown modus, SD uit, leds uit)
bobgiesberts 2:1a203732fc95 142 // ldc.sleep(); sd_pin = 0;
bobgiesberts 2:1a203732fc95 143 // wait(1800); // FOR LATER: wait half an hour, 60 * 30 = 1800
bobgiesberts 2:1a203732fc95 144 // ldc.wakeup(); sd_pin = 1;
bobgiesberts 2:1a203732fc95 145
bobgiesberts 0:e81b68888268 146 }
bobgiesberts 2:1a203732fc95 147 */
bobgiesberts 0:e81b68888268 148 }