Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystemVSG mbed
Fork of VSG_DataLogger1 by
main.cpp@5:e4b1de08bb87, 2018-08-13 (annotated)
- Committer:
- jtrojan
- Date:
- Mon Aug 13 21:19:30 2018 +0000
- Revision:
- 5:e4b1de08bb87
- Parent:
- 4:ea7c4356f84c
- Child:
- 6:bd675690d831
System now samples in batches determined by slow sampling speed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JoeMiller | 2:d2c2e2d3f1e5 | 1 | // VSG Board 18-axes mag Datalogger prototype |
JoeMiller | 2:d2c2e2d3f1e5 | 2 | // install debug jumper for console output only |
JoeMiller | 2:d2c2e2d3f1e5 | 3 | // remove debug jumper to log data to SDcard only |
JoeMiller | 2:d2c2e2d3f1e5 | 4 | |
JoeMiller | 2:d2c2e2d3f1e5 | 5 | // set system parameters ------------------------- |
jtrojan | 4:ea7c4356f84c | 6 | #define SAMPLE_RATE (4) //Hz |
jtrojan | 4:ea7c4356f84c | 7 | #define SAMPLE_RATE_HIGH (240) //Hz |
jtrojan | 4:ea7c4356f84c | 8 | #define TMRC_VLOW (0x99) // TMRC hex value corresponding to reading/rate |
jtrojan | 5:e4b1de08bb87 | 9 | #define TMRC_VHIGH (0x93) // TMRC hex value corresponding to reading/rate |
jtrojan | 4:ea7c4356f84c | 10 | #define SAMPLE_PERIOD (60) // seconds |
jtrojan | 4:ea7c4356f84c | 11 | #define SAMPLE_DELAY (5) // seconds -to allow time to seal unit and place in the field |
JoeMiller | 2:d2c2e2d3f1e5 | 12 | #define CYCLE_COUNT (50) |
JoeMiller | 2:d2c2e2d3f1e5 | 13 | //------------------------------------------------ |
JoeMiller | 2:d2c2e2d3f1e5 | 14 | |
JoeMiller | 2:d2c2e2d3f1e5 | 15 | |
mbed_official | 0:bdbd3d6fc5d5 | 16 | #include "mbed.h" |
mbed_official | 0:bdbd3d6fc5d5 | 17 | #include "SDFileSystem.h" |
JoeMiller | 2:d2c2e2d3f1e5 | 18 | // NOTICE: SDFileSystem.cpp was modified. See //JM comments |
JoeMiller | 2:d2c2e2d3f1e5 | 19 | #include "main.h" |
mbed_official | 0:bdbd3d6fc5d5 | 20 | |
JoeMiller | 2:d2c2e2d3f1e5 | 21 | #define SAMPLE_INTERVAL (1.0/SAMPLE_RATE) |
jtrojan | 4:ea7c4356f84c | 22 | #define MAX_COUNT (SAMPLE_PERIOD * SAMPLE_RATE * 4) |
JoeMiller | 2:d2c2e2d3f1e5 | 23 | #define MCC ((CYCLE_COUNT >> 8) & 0xff) |
JoeMiller | 2:d2c2e2d3f1e5 | 24 | #define LCC (CYCLE_COUNT & 0xff) |
JoeMiller | 2:d2c2e2d3f1e5 | 25 | #define MAX_MAG_VALUE (8388608) // positive 23 bits |
JoeMiller | 2:d2c2e2d3f1e5 | 26 | #define NEGATIVE_ADJUST (MAX_MAG_VALUE + MAX_MAG_VALUE) //signed 24 bits |
JoeMiller | 2:d2c2e2d3f1e5 | 27 | |
JoeMiller | 2:d2c2e2d3f1e5 | 28 | // resource assignments |
JoeMiller | 2:d2c2e2d3f1e5 | 29 | DigitalIn rdy1a(DRDY1A); |
JoeMiller | 2:d2c2e2d3f1e5 | 30 | DigitalIn rdy1b(DRDY1B); |
JoeMiller | 2:d2c2e2d3f1e5 | 31 | DigitalIn rdy1c(DRDY1C); |
JoeMiller | 2:d2c2e2d3f1e5 | 32 | DigitalIn rdy2a(DRDY2A); |
JoeMiller | 2:d2c2e2d3f1e5 | 33 | DigitalIn rdy2b(DRDY2B); |
JoeMiller | 2:d2c2e2d3f1e5 | 34 | DigitalIn rdy2c(DRDY2C); |
JoeMiller | 2:d2c2e2d3f1e5 | 35 | DigitalIn debugPin(DEBUG_MODE); |
JoeMiller | 2:d2c2e2d3f1e5 | 36 | |
JoeMiller | 2:d2c2e2d3f1e5 | 37 | DigitalOut sel1a(SSM1A); |
JoeMiller | 2:d2c2e2d3f1e5 | 38 | DigitalOut sel1b(SSM1B); |
JoeMiller | 2:d2c2e2d3f1e5 | 39 | DigitalOut sel1c(SSM1C); |
JoeMiller | 2:d2c2e2d3f1e5 | 40 | DigitalOut sel2a(SSM2A); |
JoeMiller | 2:d2c2e2d3f1e5 | 41 | DigitalOut sel2b(SSM2B); |
JoeMiller | 2:d2c2e2d3f1e5 | 42 | DigitalOut sel2c(SSM2C); |
JoeMiller | 2:d2c2e2d3f1e5 | 43 | |
JoeMiller | 2:d2c2e2d3f1e5 | 44 | DigitalOut LED(DEBUG_LED); |
jtrojan | 4:ea7c4356f84c | 45 | |
jtrojan | 4:ea7c4356f84c | 46 | // sample code from mbed nucleo library |
jtrojan | 4:ea7c4356f84c | 47 | //mbed Declaration left here as example |
jtrojan | 4:ea7c4356f84c | 48 | AnalogIn analog_value(A0); |
jtrojan | 4:ea7c4356f84c | 49 | DigitalOut selt(LED1); |
jtrojan | 4:ea7c4356f84c | 50 | //ST HAL For ADC since we want to access the internal channels |
jtrojan | 4:ea7c4356f84c | 51 | ADC_HandleTypeDef hadc1; |
mbed_official | 0:bdbd3d6fc5d5 | 52 | |
JoeMiller | 2:d2c2e2d3f1e5 | 53 | SPI mag(SPI_MOSI, SPI_MISO, SPI_SCK); |
JoeMiller | 2:d2c2e2d3f1e5 | 54 | SDFileSystem sd(SD_MOSI, SD_MISO, SD_SCK, SD_CSN, "sd"); // the pinout on the mbed Cool Components workshop board |
JoeMiller | 2:d2c2e2d3f1e5 | 55 | Serial console(PA_2, PA_3,115200); // debug port |
JoeMiller | 2:d2c2e2d3f1e5 | 56 | Ticker magTimer; |
jtrojan | 4:ea7c4356f84c | 57 | Timer t; |
JoeMiller | 2:d2c2e2d3f1e5 | 58 | |
JoeMiller | 2:d2c2e2d3f1e5 | 59 | char takeAsample_F; |
jtrojan | 4:ea7c4356f84c | 60 | int islow = 1; |
jtrojan | 4:ea7c4356f84c | 61 | int nhigh = 0; |
jtrojan | 4:ea7c4356f84c | 62 | float tprev = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 63 | |
JoeMiller | 2:d2c2e2d3f1e5 | 64 | void sampletimer() { |
JoeMiller | 2:d2c2e2d3f1e5 | 65 | takeAsample_F = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 66 | // printf("*"); |
JoeMiller | 2:d2c2e2d3f1e5 | 67 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 68 | |
JoeMiller | 2:d2c2e2d3f1e5 | 69 | |
mbed_official | 0:bdbd3d6fc5d5 | 70 | int main() { |
jtrojan | 4:ea7c4356f84c | 71 | t.start(); |
jtrojan | 4:ea7c4356f84c | 72 | ADC_ChannelConfTypeDef sConfig; //Declare the ST HAL ADC object |
JoeMiller | 2:d2c2e2d3f1e5 | 73 | |
jtrojan | 4:ea7c4356f84c | 74 | /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) |
jtrojan | 4:ea7c4356f84c | 75 | */ |
jtrojan | 4:ea7c4356f84c | 76 | hadc1.Instance = ADC1; |
jtrojan | 4:ea7c4356f84c | 77 | hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; |
jtrojan | 4:ea7c4356f84c | 78 | hadc1.Init.Resolution = ADC_RESOLUTION12b; |
jtrojan | 4:ea7c4356f84c | 79 | hadc1.Init.ScanConvMode = DISABLE; |
jtrojan | 4:ea7c4356f84c | 80 | hadc1.Init.ContinuousConvMode = DISABLE; |
jtrojan | 4:ea7c4356f84c | 81 | hadc1.Init.DiscontinuousConvMode = DISABLE; |
jtrojan | 4:ea7c4356f84c | 82 | hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; |
jtrojan | 4:ea7c4356f84c | 83 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; |
jtrojan | 4:ea7c4356f84c | 84 | hadc1.Init.NbrOfConversion = 1; |
jtrojan | 4:ea7c4356f84c | 85 | hadc1.Init.DMAContinuousRequests = DISABLE; |
jtrojan | 4:ea7c4356f84c | 86 | hadc1.Init.EOCSelection = EOC_SINGLE_CONV; |
jtrojan | 4:ea7c4356f84c | 87 | HAL_ADC_Init(&hadc1); //Go turn on the ADC |
jtrojan | 4:ea7c4356f84c | 88 | |
jtrojan | 4:ea7c4356f84c | 89 | sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; //ADC_CHANNEL_VREFINT, ADC_CHANNEL_VBAT |
jtrojan | 4:ea7c4356f84c | 90 | sConfig.Rank = 1; |
jtrojan | 4:ea7c4356f84c | 91 | |
JoeMiller | 2:d2c2e2d3f1e5 | 92 | int response; |
JoeMiller | 2:d2c2e2d3f1e5 | 93 | unsigned int count = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 94 | char SDOK; |
jtrojan | 5:e4b1de08bb87 | 95 | char disp_buffer[128]; |
jtrojan | 5:e4b1de08bb87 | 96 | char disp_char[32]; |
jtrojan | 5:e4b1de08bb87 | 97 | int dbuf_size = 0; |
jtrojan | 5:e4b1de08bb87 | 98 | int X,Y,Z; |
JoeMiller | 2:d2c2e2d3f1e5 | 99 | mag.lock(); |
jtrojan | 4:ea7c4356f84c | 100 | // magTimer.attach(&sampletimer,SAMPLE_INTERVAL); |
JoeMiller | 2:d2c2e2d3f1e5 | 101 | |
JoeMiller | 2:d2c2e2d3f1e5 | 102 | sel1a = sel1b = sel1c = sel2a = sel2b = sel2c = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 103 | |
JoeMiller | 2:d2c2e2d3f1e5 | 104 | |
JoeMiller | 2:d2c2e2d3f1e5 | 105 | printf("\r\nVSG Datalogger\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 106 | printf("Timer interval = %f (sec)\r\n",SAMPLE_INTERVAL); |
JoeMiller | 2:d2c2e2d3f1e5 | 107 | printf("Cycle Counts = %d \r\n", CYCLE_COUNT); |
JoeMiller | 2:d2c2e2d3f1e5 | 108 | |
JoeMiller | 2:d2c2e2d3f1e5 | 109 | for(char i=0; i<6; i++) { //wakeup blink 6 times |
JoeMiller | 2:d2c2e2d3f1e5 | 110 | LED = !LED; |
JoeMiller | 2:d2c2e2d3f1e5 | 111 | wait(0.1F); |
JoeMiller | 2:d2c2e2d3f1e5 | 112 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 113 | wait(1.0F); |
JoeMiller | 2:d2c2e2d3f1e5 | 114 | |
JoeMiller | 2:d2c2e2d3f1e5 | 115 | if (debugPin == 0){ |
JoeMiller | 2:d2c2e2d3f1e5 | 116 | SDOK = 1; //initialize |
JoeMiller | 2:d2c2e2d3f1e5 | 117 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 118 | |
JoeMiller | 2:d2c2e2d3f1e5 | 119 | printf("\r\nOpening log file for append write\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 120 | // cannot make fopen conditional on debugPin - compiler does not understand |
JoeMiller | 2:d2c2e2d3f1e5 | 121 | FILE *sd = fopen("/sd/sdtest.txt", "a"); |
JoeMiller | 2:d2c2e2d3f1e5 | 122 | if(sd == NULL) { |
JoeMiller | 2:d2c2e2d3f1e5 | 123 | printf("\r\nRetry opening log file\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 124 | wait(2); |
JoeMiller | 2:d2c2e2d3f1e5 | 125 | FILE *sd = fopen("/sd/sdtest.txt", "a"); |
JoeMiller | 2:d2c2e2d3f1e5 | 126 | if(sd == NULL) { |
JoeMiller | 2:d2c2e2d3f1e5 | 127 | printf("\r\n....one more retry opening log file\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 128 | wait(2); |
JoeMiller | 2:d2c2e2d3f1e5 | 129 | FILE *sd = fopen("/sd/sdtest.txt", "a"); |
JoeMiller | 2:d2c2e2d3f1e5 | 130 | if(sd == NULL) { |
JoeMiller | 2:d2c2e2d3f1e5 | 131 | printf("\r\n>>>>>> Could not open file for write try restarting\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 132 | SDOK = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 133 | while(!debugPin); // stay here if in log mode |
JoeMiller | 2:d2c2e2d3f1e5 | 134 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 135 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 136 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 137 | |
mbed_official | 0:bdbd3d6fc5d5 | 138 | |
JoeMiller | 2:d2c2e2d3f1e5 | 139 | |
JoeMiller | 2:d2c2e2d3f1e5 | 140 | if (SDOK) { |
JoeMiller | 2:d2c2e2d3f1e5 | 141 | printf("LOGGING MODE\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 142 | for(char i=0; i<6; i++) { //blink 6 times to show logging mode has been initiated |
JoeMiller | 2:d2c2e2d3f1e5 | 143 | LED = !LED; |
JoeMiller | 2:d2c2e2d3f1e5 | 144 | wait(0.1F); |
JoeMiller | 2:d2c2e2d3f1e5 | 145 | } |
jtrojan | 4:ea7c4356f84c | 146 | //fprintf(sd, "count,temp,X1a,Y1a,Z1a,X1b,Y1b,Z1b,X1c,Y1c,Z1c,X2a,Y2a,Z2a,X2b,Y2b,Z2b,X2c,Y2c,Z2c\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 147 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 148 | |
JoeMiller | 2:d2c2e2d3f1e5 | 149 | |
JoeMiller | 2:d2c2e2d3f1e5 | 150 | // BIST Built-In-Self-Test Mag senosrs and ASIC |
JoeMiller | 2:d2c2e2d3f1e5 | 151 | // only in debug mode. Print axis OK bit flags for ZYX in that order |
JoeMiller | 2:d2c2e2d3f1e5 | 152 | if (debugPin == 1) { |
JoeMiller | 2:d2c2e2d3f1e5 | 153 | printf("Starting BIST (7 = all axes on this device are OK)\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 154 | |
JoeMiller | 2:d2c2e2d3f1e5 | 155 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 156 | response = mag.write(BIST_REG); // BIST register addr |
JoeMiller | 2:d2c2e2d3f1e5 | 157 | response = mag.write(0x8F); // Set Self test enable bit |
JoeMiller | 2:d2c2e2d3f1e5 | 158 | sel1a = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 159 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 160 | response = mag.write(MAG_REG); // Mag single measurement Register |
JoeMiller | 2:d2c2e2d3f1e5 | 161 | response = mag.write(ALL_AXES); // start single measurement - all Axes |
JoeMiller | 2:d2c2e2d3f1e5 | 162 | sel1a = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 163 | while (!rdy1a); |
JoeMiller | 2:d2c2e2d3f1e5 | 164 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 165 | response = mag.write(BIST_REG); // BIST register addr |
JoeMiller | 2:d2c2e2d3f1e5 | 166 | response = mag.write(0); // Read back BIST results |
JoeMiller | 2:d2c2e2d3f1e5 | 167 | sel1a = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 168 | printf("1a = %d\r\n",((response>>4) & 0x07)); |
JoeMiller | 2:d2c2e2d3f1e5 | 169 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 170 | response = mag.write(BIST_REG); // BIST register addr |
JoeMiller | 2:d2c2e2d3f1e5 | 171 | response = mag.write(0); // Set Self test enable bit |
JoeMiller | 2:d2c2e2d3f1e5 | 172 | sel1a = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 173 | |
JoeMiller | 2:d2c2e2d3f1e5 | 174 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 175 | |
JoeMiller | 2:d2c2e2d3f1e5 | 176 | |
JoeMiller | 2:d2c2e2d3f1e5 | 177 | // BIST Complete |
JoeMiller | 2:d2c2e2d3f1e5 | 178 | |
JoeMiller | 2:d2c2e2d3f1e5 | 179 | // Set Cycle Count on all 6 devices simultaniously |
jtrojan | 4:ea7c4356f84c | 180 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 181 | response = mag.write(CC_REG); // Mag single measurement Register |
JoeMiller | 2:d2c2e2d3f1e5 | 182 | for (char i=0; i<3;i++) { |
jtrojan | 4:ea7c4356f84c | 183 | response = mag.write(MCC); |
jtrojan | 4:ea7c4356f84c | 184 | response = mag.write(LCC); |
JoeMiller | 2:d2c2e2d3f1e5 | 185 | } |
jtrojan | 4:ea7c4356f84c | 186 | sel1a = 1; |
JoeMiller | 2:d2c2e2d3f1e5 | 187 | |
JoeMiller | 2:d2c2e2d3f1e5 | 188 | |
jtrojan | 4:ea7c4356f84c | 189 | //if (debugPin) printf("count,temp,X1a,Y1a,Z1a,X1b,Y1b,Z1b,X1c,Y1c,Z1c,X2a,Y2a,Z2a,X2b,Y2b,Z2b,X2c,Y2c,Z2c\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 190 | |
JoeMiller | 2:d2c2e2d3f1e5 | 191 | // log start delay when Flash card datalogging to give to to button up and place unit |
JoeMiller | 2:d2c2e2d3f1e5 | 192 | if (SDOK) { |
JoeMiller | 2:d2c2e2d3f1e5 | 193 | LED = 1; // LED to show logging is in wait phase |
JoeMiller | 2:d2c2e2d3f1e5 | 194 | wait(SAMPLE_DELAY); |
mbed_official | 0:bdbd3d6fc5d5 | 195 | } |
jtrojan | 4:ea7c4356f84c | 196 | |
jtrojan | 4:ea7c4356f84c | 197 | sel1a = 0; |
jtrojan | 4:ea7c4356f84c | 198 | response = mag.write(CMM_REG); // Mag single measurement Register |
jtrojan | 4:ea7c4356f84c | 199 | response = mag.write(ALL_AXES+START_BIT); // start single measurement - all Axes |
jtrojan | 4:ea7c4356f84c | 200 | sel1a = 1; |
jtrojan | 5:e4b1de08bb87 | 201 | //Now go read the STM internal channel selected above |
jtrojan | 5:e4b1de08bb87 | 202 | HAL_ADC_ConfigChannel(&hadc1, &sConfig); |
jtrojan | 5:e4b1de08bb87 | 203 | HAL_ADC_Start(&hadc1); // Start conversion |
jtrojan | 5:e4b1de08bb87 | 204 | |
JoeMiller | 2:d2c2e2d3f1e5 | 205 | |
JoeMiller | 2:d2c2e2d3f1e5 | 206 | while(count < MAX_COUNT) { |
jtrojan | 4:ea7c4356f84c | 207 | if (islow > 0) { |
jtrojan | 4:ea7c4356f84c | 208 | sel1a = 0; |
jtrojan | 4:ea7c4356f84c | 209 | response = mag.write(TMRC_REG); // Mag continuous measurement Register |
jtrojan | 4:ea7c4356f84c | 210 | response = mag.write(TMRC_VLOW); // start continuous measurement - all Axes |
jtrojan | 4:ea7c4356f84c | 211 | sel1a = 1; |
jtrojan | 4:ea7c4356f84c | 212 | islow = 0; |
jtrojan | 4:ea7c4356f84c | 213 | nhigh = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 214 | } |
jtrojan | 4:ea7c4356f84c | 215 | else { |
jtrojan | 4:ea7c4356f84c | 216 | if (nhigh < 1) { |
jtrojan | 4:ea7c4356f84c | 217 | sel1a = 0; |
jtrojan | 4:ea7c4356f84c | 218 | response = mag.write(TMRC_REG); // Mag continuous measurement Register |
jtrojan | 4:ea7c4356f84c | 219 | response = mag.write(TMRC_VHIGH); // start continuous measurement - all Axes |
jtrojan | 4:ea7c4356f84c | 220 | sel1a = 1; |
jtrojan | 4:ea7c4356f84c | 221 | } |
jtrojan | 4:ea7c4356f84c | 222 | nhigh++; |
jtrojan | 4:ea7c4356f84c | 223 | if (nhigh > 2) islow = 1; |
jtrojan | 4:ea7c4356f84c | 224 | } |
jtrojan | 4:ea7c4356f84c | 225 | |
jtrojan | 4:ea7c4356f84c | 226 | |
jtrojan | 4:ea7c4356f84c | 227 | while (!(rdy1a)){ |
jtrojan | 4:ea7c4356f84c | 228 | wait_us(10); // required |
jtrojan | 4:ea7c4356f84c | 229 | // spin here until all Data Ready signals go high |
jtrojan | 4:ea7c4356f84c | 230 | } |
jtrojan | 4:ea7c4356f84c | 231 | |
jtrojan | 4:ea7c4356f84c | 232 | /*while(!takeAsample_F){ |
jtrojan | 4:ea7c4356f84c | 233 | wait_us(10); // required |
jtrojan | 4:ea7c4356f84c | 234 | }*/ |
JoeMiller | 2:d2c2e2d3f1e5 | 235 | takeAsample_F = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 236 | |
jtrojan | 4:ea7c4356f84c | 237 | // Wait end of conversion and get value |
jtrojan | 4:ea7c4356f84c | 238 | //if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) { |
jtrojan | 4:ea7c4356f84c | 239 | uint16_t value = HAL_ADC_GetValue(&hadc1); //} |
jtrojan | 5:e4b1de08bb87 | 240 | //Now go read the STM internal channel selected above |
jtrojan | 5:e4b1de08bb87 | 241 | HAL_ADC_Start(&hadc1); // Start conversion |
jtrojan | 5:e4b1de08bb87 | 242 | |
jtrojan | 5:e4b1de08bb87 | 243 | |
JoeMiller | 2:d2c2e2d3f1e5 | 244 | |
JoeMiller | 2:d2c2e2d3f1e5 | 245 | sel1a = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 246 | response = mag.write(MX_REG); // Read back mag data |
JoeMiller | 2:d2c2e2d3f1e5 | 247 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 248 | X = response << 16; |
JoeMiller | 2:d2c2e2d3f1e5 | 249 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 250 | X += (response << 8); |
JoeMiller | 2:d2c2e2d3f1e5 | 251 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 252 | X += response; |
JoeMiller | 2:d2c2e2d3f1e5 | 253 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 254 | Y = response << 16; |
JoeMiller | 2:d2c2e2d3f1e5 | 255 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 256 | Y += (response << 8); |
JoeMiller | 2:d2c2e2d3f1e5 | 257 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 258 | Y += response; |
JoeMiller | 2:d2c2e2d3f1e5 | 259 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 260 | Z = response << 16; |
JoeMiller | 2:d2c2e2d3f1e5 | 261 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 262 | Z += (response << 8); |
jtrojan | 5:e4b1de08bb87 | 263 | response = mag.write(0); |
jtrojan | 5:e4b1de08bb87 | 264 | Z += response; |
JoeMiller | 2:d2c2e2d3f1e5 | 265 | sel1a = 1; |
jtrojan | 4:ea7c4356f84c | 266 | |
jtrojan | 4:ea7c4356f84c | 267 | // send/save data after receiving it |
jtrojan | 5:e4b1de08bb87 | 268 | if (X > (0x07FFFFF)) X -= 0x1000000; |
jtrojan | 5:e4b1de08bb87 | 269 | if (Y > (0x07FFFFF)) Y -= 0x1000000; |
jtrojan | 5:e4b1de08bb87 | 270 | if (Z > (0x07FFFFF)) Z -= 0x1000000; |
jtrojan | 5:e4b1de08bb87 | 271 | |
jtrojan | 5:e4b1de08bb87 | 272 | |
jtrojan | 5:e4b1de08bb87 | 273 | if (SDOK) { |
jtrojan | 5:e4b1de08bb87 | 274 | sprintf(disp_char,"%d,%0.3f,%i, %d,%d,%d\r\n",count,t.read(),value,X,Y,Z); |
jtrojan | 5:e4b1de08bb87 | 275 | } |
jtrojan | 5:e4b1de08bb87 | 276 | else { |
jtrojan | 5:e4b1de08bb87 | 277 | sprintf(disp_char,"%d,%0.3f,%i, %d,%d,%d\r\n",count,t.read(),value,X,Y,Z); |
jtrojan | 5:e4b1de08bb87 | 278 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 279 | |
jtrojan | 5:e4b1de08bb87 | 280 | if (nhigh == 0) { |
jtrojan | 5:e4b1de08bb87 | 281 | strcpy(disp_buffer,disp_char); |
jtrojan | 5:e4b1de08bb87 | 282 | } |
jtrojan | 5:e4b1de08bb87 | 283 | else { |
jtrojan | 5:e4b1de08bb87 | 284 | strcat(disp_buffer,disp_char); |
jtrojan | 5:e4b1de08bb87 | 285 | } |
jtrojan | 5:e4b1de08bb87 | 286 | |
jtrojan | 5:e4b1de08bb87 | 287 | if (nhigh > 2) { |
jtrojan | 5:e4b1de08bb87 | 288 | if (debugPin) { //SDOK |
jtrojan | 5:e4b1de08bb87 | 289 | printf("%s",disp_buffer); |
jtrojan | 4:ea7c4356f84c | 290 | } |
jtrojan | 5:e4b1de08bb87 | 291 | else { |
jtrojan | 5:e4b1de08bb87 | 292 | fprintf(sd,"%s",disp_buffer); |
jtrojan | 5:e4b1de08bb87 | 293 | //printf("%s",disp_buffer); |
jtrojan | 5:e4b1de08bb87 | 294 | } |
jtrojan | 4:ea7c4356f84c | 295 | } |
jtrojan | 5:e4b1de08bb87 | 296 | count++; |
JoeMiller | 2:d2c2e2d3f1e5 | 297 | LED = !LED; |
JoeMiller | 2:d2c2e2d3f1e5 | 298 | |
JoeMiller | 2:d2c2e2d3f1e5 | 299 | } // end of while(1) |
JoeMiller | 2:d2c2e2d3f1e5 | 300 | |
JoeMiller | 2:d2c2e2d3f1e5 | 301 | |
JoeMiller | 2:d2c2e2d3f1e5 | 302 | if (!debugPin) { |
JoeMiller | 2:d2c2e2d3f1e5 | 303 | // optional get SDCard available space |
JoeMiller | 2:d2c2e2d3f1e5 | 304 | // FATFS* fs; |
JoeMiller | 2:d2c2e2d3f1e5 | 305 | // DWORD fre_clust; |
JoeMiller | 2:d2c2e2d3f1e5 | 306 | // f_getfree("0:",&fre_clust,&fs); |
JoeMiller | 2:d2c2e2d3f1e5 | 307 | // const float frs = float(fs->csize)*float(fs->free_clust) |
JoeMiller | 2:d2c2e2d3f1e5 | 308 | // #if _MAX_SS != 512 |
JoeMiller | 2:d2c2e2d3f1e5 | 309 | // *(fs->ssize); |
JoeMiller | 2:d2c2e2d3f1e5 | 310 | // #else |
JoeMiller | 2:d2c2e2d3f1e5 | 311 | // *512; |
JoeMiller | 2:d2c2e2d3f1e5 | 312 | // #endif |
JoeMiller | 2:d2c2e2d3f1e5 | 313 | // printf("free space = %g MB, %g KB\r\n", frs/1048576.0, frs/1024.0); |
JoeMiller | 2:d2c2e2d3f1e5 | 314 | |
JoeMiller | 2:d2c2e2d3f1e5 | 315 | fclose(sd); |
JoeMiller | 2:d2c2e2d3f1e5 | 316 | |
JoeMiller | 2:d2c2e2d3f1e5 | 317 | } |
JoeMiller | 2:d2c2e2d3f1e5 | 318 | |
JoeMiller | 2:d2c2e2d3f1e5 | 319 | LED = 0; |
JoeMiller | 2:d2c2e2d3f1e5 | 320 | printf("\r\nDONE\r\n"); |
JoeMiller | 2:d2c2e2d3f1e5 | 321 | |
JoeMiller | 2:d2c2e2d3f1e5 | 322 | magTimer.detach(); |
JoeMiller | 2:d2c2e2d3f1e5 | 323 | mag.unlock(); |
jtrojan | 4:ea7c4356f84c | 324 | t.stop(); |
mbed_official | 0:bdbd3d6fc5d5 | 325 | } |