ADC performance check

Dependencies:  

Fork of GR-PEACH_test_wo_rtos by Kenji Arai

Committer:
kenjiArai
Date:
Sun Jan 11 09:48:17 2015 +0000
Revision:
7:c87a84872d85
Parent:
6:849caec97744
ADC performance check

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 1:a399a743d109 1 /*
kenjiArai 1:a399a743d109 2 * mbed Application program for the mbed
kenjiArai 1:a399a743d109 3 * Test program for GR-PEACH
kenjiArai 1:a399a743d109 4 *
kenjiArai 1:a399a743d109 5 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 1:a399a743d109 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 1:a399a743d109 7 * http://mbed.org/users/kenjiArai/
kenjiArai 1:a399a743d109 8 * Created: November 29th, 2014
kenjiArai 7:c87a84872d85 9 * Revised: January 11th, 2015
kenjiArai 1:a399a743d109 10 *
kenjiArai 1:a399a743d109 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 1:a399a743d109 12 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 1:a399a743d109 13 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 1:a399a743d109 14 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 1:a399a743d109 15 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 1:a399a743d109 16 */
kenjiArai 1:a399a743d109 17
kenjiArai 4:76b3113c79ff 18 // Include ---------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 19 #include "mbed.h"
kenjiArai 2:3747397a1618 20
kenjiArai 4:76b3113c79ff 21 // Definition ------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 22 #define USE_COM // use Communication with PC(UART)
kenjiArai 7:c87a84872d85 23
kenjiArai 4:76b3113c79ff 24 // Com
kenjiArai 4:76b3113c79ff 25 #ifdef USE_COM
kenjiArai 4:76b3113c79ff 26 #define BAUD(x) pcx.baud(x)
kenjiArai 4:76b3113c79ff 27 #define GETC(x) pcx.getc(x)
kenjiArai 4:76b3113c79ff 28 #define PUTC(x) pcx.putc(x)
kenjiArai 4:76b3113c79ff 29 #define PRINTF(...) pcx.printf(__VA_ARGS__)
kenjiArai 4:76b3113c79ff 30 #define READABLE(x) pcx.readable(x)
kenjiArai 4:76b3113c79ff 31 #else
kenjiArai 4:76b3113c79ff 32 #define BAUD(x) {;}
kenjiArai 4:76b3113c79ff 33 #define GETC(x) {;}
kenjiArai 4:76b3113c79ff 34 #define PUTC(x) {;}
kenjiArai 4:76b3113c79ff 35 #define PRINTF(...) {;}
kenjiArai 4:76b3113c79ff 36 #define READABLE(x) {;}
kenjiArai 0:a17b3cf2f466 37 #endif
kenjiArai 0:a17b3cf2f466 38
kenjiArai 7:c87a84872d85 39 // Use TL431ACZ-AP
kenjiArai 7:c87a84872d85 40 // Akizuki NJM431 (equivalent)
kenjiArai 7:c87a84872d85 41 // http://akizukidenshi.com/catalog/g/gI-00431/
kenjiArai 7:c87a84872d85 42 #define VREF (2.478f) // measured data (not Typ. data)
kenjiArai 7:c87a84872d85 43
kenjiArai 7:c87a84872d85 44 #if defined(TARGET_RZ_A1H)
kenjiArai 7:c87a84872d85 45 //#define ADC_BUF_SIZE (4096 * 40)
kenjiArai 7:c87a84872d85 46 #define ADC_BUF_SIZE (1024)
kenjiArai 7:c87a84872d85 47 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 7:c87a84872d85 48 #define ADC_BUF_SIZE (1024)
kenjiArai 7:c87a84872d85 49 #elif defined(TARGET_K64F)
kenjiArai 7:c87a84872d85 50 #define ADC_BUF_SIZE (1024)
kenjiArai 7:c87a84872d85 51 #endif
kenjiArai 7:c87a84872d85 52
kenjiArai 7:c87a84872d85 53
kenjiArai 4:76b3113c79ff 54 // Object ----------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 55 // com
kenjiArai 4:76b3113c79ff 56 #ifdef USE_COM
kenjiArai 4:76b3113c79ff 57 Serial pcx(USBTX, USBRX); // Communication with Host
kenjiArai 4:76b3113c79ff 58 #endif
kenjiArai 7:c87a84872d85 59 // Analog
kenjiArai 7:c87a84872d85 60 AnalogIn adc0(A0); // Connect TL431ACZ-AP
kenjiArai 7:c87a84872d85 61 AnalogIn adc1(A1);
kenjiArai 7:c87a84872d85 62 AnalogIn adc2(A2);
kenjiArai 7:c87a84872d85 63 AnalogIn adc3(A3);
kenjiArai 7:c87a84872d85 64 AnalogIn adc4(A4);
kenjiArai 7:c87a84872d85 65 AnalogIn adc5(A5);
kenjiArai 7:c87a84872d85 66 // timer
kenjiArai 7:c87a84872d85 67 Timer timer;
kenjiArai 0:a17b3cf2f466 68
kenjiArai 4:76b3113c79ff 69 // RAM -------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 70 static char linebuf[64];
kenjiArai 7:c87a84872d85 71
kenjiArai 7:c87a84872d85 72 typedef struct {
kenjiArai 7:c87a84872d85 73 float adc0;
kenjiArai 7:c87a84872d85 74 float adc1;
kenjiArai 7:c87a84872d85 75 float adc2;
kenjiArai 7:c87a84872d85 76 float adc3;
kenjiArai 7:c87a84872d85 77 float adc4;
kenjiArai 7:c87a84872d85 78 float adc5;
kenjiArai 7:c87a84872d85 79 int a0_time;
kenjiArai 7:c87a84872d85 80 int a1_time;
kenjiArai 7:c87a84872d85 81 int a2_time;
kenjiArai 7:c87a84872d85 82 int a3_time;
kenjiArai 7:c87a84872d85 83 int a4_time;
kenjiArai 7:c87a84872d85 84 int a5_time;
kenjiArai 7:c87a84872d85 85 uint32_t n;
kenjiArai 7:c87a84872d85 86 } ADC_DataTypeDef;
kenjiArai 4:76b3113c79ff 87
kenjiArai 7:c87a84872d85 88 ADC_DataTypeDef data_buffer[ADC_BUF_SIZE];
kenjiArai 7:c87a84872d85 89
kenjiArai 7:c87a84872d85 90 // avarage & max.min
kenjiArai 7:c87a84872d85 91 uint32_t d_max_min[2];
kenjiArai 7:c87a84872d85 92
kenjiArai 7:c87a84872d85 93 double ave_adc0;
kenjiArai 7:c87a84872d85 94 double ave_adc1;
kenjiArai 7:c87a84872d85 95 double ave_adc2;
kenjiArai 7:c87a84872d85 96 double ave_adc3;
kenjiArai 7:c87a84872d85 97 double ave_adc4;
kenjiArai 7:c87a84872d85 98 double ave_adc5;
kenjiArai 7:c87a84872d85 99 float d_max_min0[2];
kenjiArai 7:c87a84872d85 100 float d_max_min1[2];
kenjiArai 7:c87a84872d85 101 float d_max_min2[2];
kenjiArai 7:c87a84872d85 102 float d_max_min3[2];
kenjiArai 7:c87a84872d85 103 float d_max_min4[2];
kenjiArai 7:c87a84872d85 104 float d_max_min5[2];
kenjiArai 4:76b3113c79ff 105
kenjiArai 4:76b3113c79ff 106 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 107 #if defined(TARGET_RZ_A1H)
kenjiArai 7:c87a84872d85 108 static char *const mon_msg = "ADC checking program for GR-PEACH mbed, created on "__DATE__"";
kenjiArai 7:c87a84872d85 109 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 7:c87a84872d85 110 static char *const mon_msg = "ADC checking program for Nucleo mbed, created on "__DATE__"";
kenjiArai 7:c87a84872d85 111 #elif defined(TARGET_K64F)
kenjiArai 7:c87a84872d85 112 static char *const mon_msg = "ADC checking program for K64F mbed, created on "__DATE__"";
kenjiArai 7:c87a84872d85 113 #endif
kenjiArai 4:76b3113c79ff 114
kenjiArai 4:76b3113c79ff 115 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 116
kenjiArai 4:76b3113c79ff 117 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 118 void msg_hlp (void);
kenjiArai 7:c87a84872d85 119 void reset_max_min(uint32_t *bf);
kenjiArai 7:c87a84872d85 120 void check_max_min(uint32_t dt, uint32_t *bf);
kenjiArai 7:c87a84872d85 121 void reset_f_max_min(void);
kenjiArai 7:c87a84872d85 122 void check_f_max_min(float dt, float *bf);
kenjiArai 7:c87a84872d85 123 void get_line (char *buff, int len);
kenjiArai 7:c87a84872d85 124 void blink(void const *n);
kenjiArai 7:c87a84872d85 125 void put_rn ( void );
kenjiArai 7:c87a84872d85 126 void put_r ( void );
kenjiArai 7:c87a84872d85 127 int xatoi (char **str, int32_t *res);
kenjiArai 4:76b3113c79ff 128
kenjiArai 4:76b3113c79ff 129 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 130 // Control Program
kenjiArai 4:76b3113c79ff 131 //-------------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 132 int main(void)
kenjiArai 7:c87a84872d85 133 {
kenjiArai 7:c87a84872d85 134 char *ptr;
kenjiArai 7:c87a84872d85 135 float dt;
kenjiArai 7:c87a84872d85 136 uint32_t i;
kenjiArai 7:c87a84872d85 137 uint32_t t;
kenjiArai 7:c87a84872d85 138
kenjiArai 7:c87a84872d85 139 BAUD(9600);
kenjiArai 7:c87a84872d85 140 put_rn();
kenjiArai 7:c87a84872d85 141 put_rn();
kenjiArai 7:c87a84872d85 142 PRINTF("%s [Help:'?' key]", mon_msg);
kenjiArai 7:c87a84872d85 143 put_rn();
kenjiArai 7:c87a84872d85 144 for (;;) {
kenjiArai 7:c87a84872d85 145 put_r();
kenjiArai 7:c87a84872d85 146 PUTC('>');
kenjiArai 7:c87a84872d85 147 ptr = linebuf;
kenjiArai 7:c87a84872d85 148 get_line(ptr, sizeof(linebuf));
kenjiArai 7:c87a84872d85 149 switch (*ptr++) {
kenjiArai 7:c87a84872d85 150 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 151 // Save ADC data into RAM
kenjiArai 7:c87a84872d85 152 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 153 case 's' :
kenjiArai 7:c87a84872d85 154 for (i = 0; i < ADC_BUF_SIZE; i++) {
kenjiArai 7:c87a84872d85 155 timer.reset();
kenjiArai 7:c87a84872d85 156 timer.start();
kenjiArai 7:c87a84872d85 157 dt = adc0.read();
kenjiArai 7:c87a84872d85 158 t = timer.read_us();
kenjiArai 7:c87a84872d85 159 data_buffer[i].adc0 = dt;
kenjiArai 7:c87a84872d85 160 data_buffer[i].a0_time = t;
kenjiArai 4:76b3113c79ff 161
kenjiArai 7:c87a84872d85 162 timer.reset();
kenjiArai 7:c87a84872d85 163 timer.start();
kenjiArai 7:c87a84872d85 164 dt = adc1.read();
kenjiArai 7:c87a84872d85 165 t = timer.read_us();
kenjiArai 7:c87a84872d85 166 data_buffer[i].adc1 = dt;
kenjiArai 7:c87a84872d85 167 data_buffer[i].a1_time = t;
kenjiArai 7:c87a84872d85 168
kenjiArai 7:c87a84872d85 169 timer.reset();
kenjiArai 7:c87a84872d85 170 timer.start();
kenjiArai 7:c87a84872d85 171 dt = adc2.read();
kenjiArai 7:c87a84872d85 172 t = timer.read_us();
kenjiArai 7:c87a84872d85 173 data_buffer[i].adc2 = dt;
kenjiArai 7:c87a84872d85 174 data_buffer[i].a2_time = t;
kenjiArai 7:c87a84872d85 175
kenjiArai 7:c87a84872d85 176 timer.reset();
kenjiArai 7:c87a84872d85 177 timer.start();
kenjiArai 7:c87a84872d85 178 dt = adc3.read();
kenjiArai 7:c87a84872d85 179 t = timer.read_us();
kenjiArai 7:c87a84872d85 180 data_buffer[i].adc3 = dt;
kenjiArai 7:c87a84872d85 181 data_buffer[i].a3_time = t;
kenjiArai 7:c87a84872d85 182
kenjiArai 7:c87a84872d85 183 timer.reset();
kenjiArai 7:c87a84872d85 184 timer.start();
kenjiArai 7:c87a84872d85 185 dt =adc4.read();
kenjiArai 7:c87a84872d85 186 t = timer.read_us();
kenjiArai 7:c87a84872d85 187 data_buffer[i].adc4 = dt;
kenjiArai 7:c87a84872d85 188 data_buffer[i].a4_time = t;
kenjiArai 7:c87a84872d85 189
kenjiArai 7:c87a84872d85 190 timer.reset();
kenjiArai 7:c87a84872d85 191 dt = adc5.read();
kenjiArai 7:c87a84872d85 192 t = timer.read_us();
kenjiArai 7:c87a84872d85 193 data_buffer[i].adc5 = dt;
kenjiArai 7:c87a84872d85 194 data_buffer[i].a5_time = t;
kenjiArai 4:76b3113c79ff 195
kenjiArai 7:c87a84872d85 196 data_buffer[i].n = i + 1;
kenjiArai 7:c87a84872d85 197 if (i%100 == 0) {
kenjiArai 7:c87a84872d85 198 put_rn();
kenjiArai 7:c87a84872d85 199 PRINTF("%d", i);
kenjiArai 7:c87a84872d85 200 put_rn();
kenjiArai 7:c87a84872d85 201 } else {
kenjiArai 7:c87a84872d85 202 PUTC('.');
kenjiArai 7:c87a84872d85 203 }
kenjiArai 7:c87a84872d85 204 if ( READABLE() ) {
kenjiArai 7:c87a84872d85 205 put_rn();
kenjiArai 7:c87a84872d85 206 GETC();
kenjiArai 7:c87a84872d85 207 break;
kenjiArai 7:c87a84872d85 208 }
kenjiArai 7:c87a84872d85 209 }
kenjiArai 7:c87a84872d85 210 data_buffer[i + 1].n = 0;
kenjiArai 7:c87a84872d85 211 put_rn();
kenjiArai 7:c87a84872d85 212 PRINTF("Finished at %d", i);
kenjiArai 7:c87a84872d85 213 put_rn();
kenjiArai 7:c87a84872d85 214 break;
kenjiArai 7:c87a84872d85 215 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 216 // Display saved ADC data
kenjiArai 7:c87a84872d85 217 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 218 case 'd' :
kenjiArai 7:c87a84872d85 219 put_rn();
kenjiArai 7:c87a84872d85 220 PRINTF("Show all saved data");
kenjiArai 7:c87a84872d85 221 put_rn();
kenjiArai 7:c87a84872d85 222 for (i = 0; (i < ADC_BUF_SIZE) && (data_buffer[i].n != 0) ; i++) {
kenjiArai 7:c87a84872d85 223 PRINTF("No.%5d, ", i);
kenjiArai 7:c87a84872d85 224 PRINTF("A0= %4.4f , A1= %4.4f , ", data_buffer[i].adc0, data_buffer[i].adc1);
kenjiArai 7:c87a84872d85 225 PRINTF("A2= %4.4f , A3= %4.4f , ", data_buffer[i].adc2, data_buffer[i].adc3);
kenjiArai 7:c87a84872d85 226 PRINTF("A4= %4.4f , A5= %4.4f , ", data_buffer[i].adc4, data_buffer[i].adc5);
kenjiArai 7:c87a84872d85 227 PRINTF("Time/0= %d /1= %d /2= %d /3= %d /4= %d /5= %d [uS]",
kenjiArai 7:c87a84872d85 228 data_buffer[i].a0_time, data_buffer[i].a1_time, data_buffer[i].a2_time,
kenjiArai 7:c87a84872d85 229 data_buffer[i].a3_time, data_buffer[i].a4_time, data_buffer[i].a5_time);
kenjiArai 7:c87a84872d85 230 put_rn();
kenjiArai 7:c87a84872d85 231 if ( READABLE() ) {
kenjiArai 7:c87a84872d85 232 GETC();
kenjiArai 7:c87a84872d85 233 break;
kenjiArai 7:c87a84872d85 234 }
kenjiArai 7:c87a84872d85 235 }
kenjiArai 7:c87a84872d85 236 break;
kenjiArai 7:c87a84872d85 237 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 238 // Check convertion time
kenjiArai 7:c87a84872d85 239 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 240 case 't' :
kenjiArai 7:c87a84872d85 241 uint32_t time_all = 0;
kenjiArai 7:c87a84872d85 242
kenjiArai 7:c87a84872d85 243 put_r();
kenjiArai 7:c87a84872d85 244 reset_max_min(d_max_min);
kenjiArai 7:c87a84872d85 245 for (i = 0; (i < ADC_BUF_SIZE) && (data_buffer[i].n != 0) ; i++) {
kenjiArai 7:c87a84872d85 246 time_all += (data_buffer[i].a0_time + data_buffer[i].a1_time +data_buffer[i].a2_time
kenjiArai 7:c87a84872d85 247 + data_buffer[i].a3_time + data_buffer[i].a4_time + data_buffer[i].a5_time);
kenjiArai 7:c87a84872d85 248 check_max_min(data_buffer[i].a0_time, d_max_min);
kenjiArai 7:c87a84872d85 249 check_max_min(data_buffer[i].a1_time, d_max_min);
kenjiArai 7:c87a84872d85 250 check_max_min(data_buffer[i].a2_time, d_max_min);
kenjiArai 7:c87a84872d85 251 check_max_min(data_buffer[i].a3_time, d_max_min);
kenjiArai 7:c87a84872d85 252 check_max_min(data_buffer[i].a4_time, d_max_min);
kenjiArai 7:c87a84872d85 253 check_max_min(data_buffer[i].a5_time, d_max_min);
kenjiArai 7:c87a84872d85 254 }
kenjiArai 7:c87a84872d85 255 PRINTF("Conversion time/ave = %f [uS], Number of sample %d, Max %d [uS], Min %d [uS]",
kenjiArai 7:c87a84872d85 256 (double)time_all / (i * 6), i, d_max_min[1], d_max_min[0]);
kenjiArai 7:c87a84872d85 257 put_rn();
kenjiArai 7:c87a84872d85 258 break;
kenjiArai 7:c87a84872d85 259 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 260 // Analysis saved data
kenjiArai 7:c87a84872d85 261 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 262 case 'a' :
kenjiArai 7:c87a84872d85 263 put_r();
kenjiArai 7:c87a84872d85 264 reset_f_max_min();
kenjiArai 7:c87a84872d85 265 for (i = 0; (i < ADC_BUF_SIZE) && (data_buffer[i].n != 0) ; i++) {
kenjiArai 7:c87a84872d85 266 ave_adc0 += data_buffer[i].adc0;
kenjiArai 7:c87a84872d85 267 ave_adc1 += data_buffer[i].adc1;
kenjiArai 7:c87a84872d85 268 ave_adc2 += data_buffer[i].adc2;
kenjiArai 7:c87a84872d85 269 ave_adc3 += data_buffer[i].adc3;
kenjiArai 7:c87a84872d85 270 ave_adc4 += data_buffer[i].adc4;
kenjiArai 7:c87a84872d85 271 ave_adc5 += data_buffer[i].adc5;
kenjiArai 7:c87a84872d85 272 check_f_max_min(data_buffer[i].adc0, d_max_min0);
kenjiArai 7:c87a84872d85 273 check_f_max_min(data_buffer[i].adc1, d_max_min1);
kenjiArai 7:c87a84872d85 274 check_f_max_min(data_buffer[i].adc2, d_max_min2);
kenjiArai 7:c87a84872d85 275 check_f_max_min(data_buffer[i].adc3, d_max_min3);
kenjiArai 7:c87a84872d85 276 check_f_max_min(data_buffer[i].adc4, d_max_min4);
kenjiArai 7:c87a84872d85 277 check_f_max_min(data_buffer[i].adc5, d_max_min5);
kenjiArai 7:c87a84872d85 278 }
kenjiArai 7:c87a84872d85 279 PRINTF("Number of sample %d", i);
kenjiArai 7:c87a84872d85 280 put_rn();
kenjiArai 7:c87a84872d85 281 PRINTF("ADC0/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 282 ave_adc0 / i, d_max_min0[1], d_max_min0[0], d_max_min0[1] - d_max_min0[0]);
kenjiArai 7:c87a84872d85 283 put_rn();
kenjiArai 7:c87a84872d85 284 PRINTF("ADC1/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 285 ave_adc1 / i, d_max_min1[1], d_max_min1[0], d_max_min1[1] - d_max_min1[0]);
kenjiArai 7:c87a84872d85 286 put_rn();
kenjiArai 7:c87a84872d85 287 PRINTF("ADC2/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 288 ave_adc2 / i, d_max_min2[1], d_max_min2[0], d_max_min2[1] - d_max_min2[0]);
kenjiArai 7:c87a84872d85 289 put_rn();
kenjiArai 7:c87a84872d85 290 PRINTF("ADC3/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 291 ave_adc3 / i, d_max_min3[1], d_max_min3[0], d_max_min3[1] - d_max_min3[0]);
kenjiArai 7:c87a84872d85 292 put_rn();
kenjiArai 7:c87a84872d85 293 PRINTF("ADC4/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 294 ave_adc4 / i, d_max_min4[1], d_max_min4[0], d_max_min4[1] - d_max_min4[0]);
kenjiArai 7:c87a84872d85 295 put_rn();
kenjiArai 7:c87a84872d85 296 PRINTF("ADC5/ave = %f , Max %f , Min %f , Dif %f",
kenjiArai 7:c87a84872d85 297 ave_adc5 / i, d_max_min5[1], d_max_min5[0], d_max_min5[1] - d_max_min5[0]);
kenjiArai 7:c87a84872d85 298 put_rn();
kenjiArai 7:c87a84872d85 299 break;
kenjiArai 7:c87a84872d85 300 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 301 // Buffer information
kenjiArai 7:c87a84872d85 302 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 303 case 'b' :
kenjiArai 7:c87a84872d85 304 put_r();
kenjiArai 7:c87a84872d85 305 PRINTF("Buffer information", i);
kenjiArai 7:c87a84872d85 306 put_rn();
kenjiArai 7:c87a84872d85 307 PRINTF("Start address: 0x%08x", &data_buffer[0]);
kenjiArai 7:c87a84872d85 308 put_rn();
kenjiArai 7:c87a84872d85 309 PRINTF("End address: 0x%08x", &data_buffer[ADC_BUF_SIZE - 1]);
kenjiArai 7:c87a84872d85 310 put_rn();
kenjiArai 7:c87a84872d85 311 PRINTF("Size of Buf: %d (0x%x)", sizeof(data_buffer), sizeof(data_buffer));
kenjiArai 7:c87a84872d85 312 put_rn();
kenjiArai 7:c87a84872d85 313 break;
kenjiArai 7:c87a84872d85 314 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 315 // Check Vcc
kenjiArai 7:c87a84872d85 316 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 317 case 'v' :
kenjiArai 7:c87a84872d85 318 put_r();
kenjiArai 7:c87a84872d85 319 PRINTF("This is special function only if A0 conneceted 2.5V Shunt reg. e.g. TL431, NJM431.");
kenjiArai 7:c87a84872d85 320 put_rn();
kenjiArai 7:c87a84872d85 321 PRINTF("Please make sure #define VREF as your condition.");
kenjiArai 7:c87a84872d85 322 put_rn();
kenjiArai 7:c87a84872d85 323 while(true){
kenjiArai 7:c87a84872d85 324 PRINTF("Vcc= %4.4f [v]", VREF / adc0.read());
kenjiArai 7:c87a84872d85 325 put_rn();
kenjiArai 7:c87a84872d85 326 if ( READABLE() ) {
kenjiArai 7:c87a84872d85 327 GETC();
kenjiArai 7:c87a84872d85 328 break;
kenjiArai 7:c87a84872d85 329 }
kenjiArai 7:c87a84872d85 330 wait(0.5);
kenjiArai 7:c87a84872d85 331 }
kenjiArai 7:c87a84872d85 332 break;
kenjiArai 7:c87a84872d85 333 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 334 // help
kenjiArai 7:c87a84872d85 335 //---------------------------------------------------------------------------------------------
kenjiArai 7:c87a84872d85 336 case '?' :
kenjiArai 7:c87a84872d85 337 put_r();
kenjiArai 7:c87a84872d85 338 msg_hlp();
kenjiArai 7:c87a84872d85 339 break;
kenjiArai 7:c87a84872d85 340 }
kenjiArai 7:c87a84872d85 341 }
kenjiArai 4:76b3113c79ff 342 }
kenjiArai 4:76b3113c79ff 343
kenjiArai 7:c87a84872d85 344 // Help Massage
kenjiArai 7:c87a84872d85 345 void msg_hlp (void)
kenjiArai 7:c87a84872d85 346 {
kenjiArai 7:c87a84872d85 347 PRINTF(mon_msg);
kenjiArai 7:c87a84872d85 348 put_rn();
kenjiArai 7:c87a84872d85 349 PRINTF("s - Save ADC data into RAM");
kenjiArai 7:c87a84872d85 350 put_rn();
kenjiArai 7:c87a84872d85 351 PRINTF("d - Display saved ADC data");
kenjiArai 7:c87a84872d85 352 put_rn();
kenjiArai 7:c87a84872d85 353 PRINTF("t - Check convertion time");
kenjiArai 7:c87a84872d85 354 put_rn();
kenjiArai 7:c87a84872d85 355 PRINTF("a - Analysis saved data");
kenjiArai 7:c87a84872d85 356 put_rn();
kenjiArai 7:c87a84872d85 357 PRINTF("b - Buffer information");
kenjiArai 7:c87a84872d85 358 put_rn();
kenjiArai 7:c87a84872d85 359 PRINTF("v - Check Vcc");
kenjiArai 7:c87a84872d85 360 put_rn();
kenjiArai 7:c87a84872d85 361 }
kenjiArai 7:c87a84872d85 362
kenjiArai 7:c87a84872d85 363 void reset_max_min(uint32_t *bf)
kenjiArai 7:c87a84872d85 364 {
kenjiArai 7:c87a84872d85 365 *(bf + 1) = 0;
kenjiArai 7:c87a84872d85 366 *bf = 0xffffffff;
kenjiArai 4:76b3113c79ff 367 }
kenjiArai 4:76b3113c79ff 368
kenjiArai 7:c87a84872d85 369 void check_max_min(uint32_t dt, uint32_t *bf)
kenjiArai 7:c87a84872d85 370 {
kenjiArai 7:c87a84872d85 371 if (dt > *(bf + 1)){
kenjiArai 7:c87a84872d85 372 *(bf + 1) = dt;
kenjiArai 7:c87a84872d85 373 } else if (dt < *bf){
kenjiArai 7:c87a84872d85 374 *bf = dt;
kenjiArai 7:c87a84872d85 375 }
kenjiArai 7:c87a84872d85 376 }
kenjiArai 7:c87a84872d85 377
kenjiArai 7:c87a84872d85 378 void reset_f_max_min(void)
kenjiArai 7:c87a84872d85 379 {
kenjiArai 7:c87a84872d85 380 d_max_min0[0] = 1.0f;
kenjiArai 7:c87a84872d85 381 d_max_min0[1] = 0.0f;
kenjiArai 7:c87a84872d85 382 d_max_min1[0] = 1.0f;
kenjiArai 7:c87a84872d85 383 d_max_min1[1] = 0.0f;
kenjiArai 7:c87a84872d85 384 d_max_min2[0] = 1.0f;
kenjiArai 7:c87a84872d85 385 d_max_min2[1] = 0.0f;
kenjiArai 7:c87a84872d85 386 d_max_min3[0] = 1.0f;
kenjiArai 7:c87a84872d85 387 d_max_min3[1] = 0.0f;
kenjiArai 7:c87a84872d85 388 d_max_min4[0] = 1.0f;
kenjiArai 7:c87a84872d85 389 d_max_min4[1] = 0.0f;
kenjiArai 7:c87a84872d85 390 d_max_min5[0] = 1.0f;
kenjiArai 7:c87a84872d85 391 d_max_min5[1] = 0.0f;
kenjiArai 7:c87a84872d85 392 }
kenjiArai 7:c87a84872d85 393
kenjiArai 7:c87a84872d85 394 void check_f_max_min(float dt, float *bf)
kenjiArai 7:c87a84872d85 395 {
kenjiArai 7:c87a84872d85 396 if (dt > *(bf + 1)){
kenjiArai 7:c87a84872d85 397 *(bf + 1) = dt;
kenjiArai 7:c87a84872d85 398 } else if (dt < *bf){
kenjiArai 7:c87a84872d85 399 *bf = dt;
kenjiArai 7:c87a84872d85 400 }
kenjiArai 4:76b3113c79ff 401 }
kenjiArai 4:76b3113c79ff 402
kenjiArai 7:c87a84872d85 403 ///////////////////////////////////////////////////////////////////////////////////////////////////
kenjiArai 7:c87a84872d85 404 // Get key input data
kenjiArai 7:c87a84872d85 405 void get_line (char *buff, int len)
kenjiArai 7:c87a84872d85 406 {
kenjiArai 7:c87a84872d85 407 char c;
kenjiArai 7:c87a84872d85 408 int idx = 0;
kenjiArai 7:c87a84872d85 409
kenjiArai 7:c87a84872d85 410 for (;;) {
kenjiArai 7:c87a84872d85 411 c = GETC();
kenjiArai 7:c87a84872d85 412 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 7:c87a84872d85 413 if (c == '\r') {
kenjiArai 7:c87a84872d85 414 buff[idx++] = c;
kenjiArai 7:c87a84872d85 415 break;
kenjiArai 7:c87a84872d85 416 }
kenjiArai 7:c87a84872d85 417 if ((c == '\b') && idx) {
kenjiArai 7:c87a84872d85 418 idx--;
kenjiArai 7:c87a84872d85 419 PUTC(c);
kenjiArai 7:c87a84872d85 420 PUTC(' ');
kenjiArai 7:c87a84872d85 421 PUTC(c);
kenjiArai 7:c87a84872d85 422 }
kenjiArai 7:c87a84872d85 423 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 7:c87a84872d85 424 buff[idx++] = c;
kenjiArai 7:c87a84872d85 425 PUTC(c);
kenjiArai 7:c87a84872d85 426 }
kenjiArai 4:76b3113c79ff 427 }
kenjiArai 7:c87a84872d85 428 buff[idx] = 0;
kenjiArai 7:c87a84872d85 429 PUTC('\n');
kenjiArai 4:76b3113c79ff 430 }
kenjiArai 7:c87a84872d85 431
kenjiArai 7:c87a84872d85 432 // Put \r\n
kenjiArai 7:c87a84872d85 433 void put_rn ( void )
kenjiArai 7:c87a84872d85 434 {
kenjiArai 7:c87a84872d85 435 PUTC('\r');
kenjiArai 7:c87a84872d85 436 PUTC('\n');
kenjiArai 7:c87a84872d85 437 }
kenjiArai 7:c87a84872d85 438
kenjiArai 7:c87a84872d85 439 // Put \r
kenjiArai 7:c87a84872d85 440 void put_r ( void )
kenjiArai 7:c87a84872d85 441 {
kenjiArai 7:c87a84872d85 442 PUTC('\r');
kenjiArai 7:c87a84872d85 443 }
kenjiArai 7:c87a84872d85 444
kenjiArai 7:c87a84872d85 445 int xatoi (char **str, int32_t *res)
kenjiArai 7:c87a84872d85 446 {
kenjiArai 7:c87a84872d85 447 unsigned long val;
kenjiArai 7:c87a84872d85 448 unsigned char c, radix, s = 0;
kenjiArai 7:c87a84872d85 449
kenjiArai 7:c87a84872d85 450 while ((c = **str) == ' ') (*str)++;
kenjiArai 7:c87a84872d85 451 if (c == '-') {
kenjiArai 7:c87a84872d85 452 s = 1;
kenjiArai 7:c87a84872d85 453 c = *(++(*str));
kenjiArai 7:c87a84872d85 454 }
kenjiArai 7:c87a84872d85 455 if (c == '0') {
kenjiArai 7:c87a84872d85 456 c = *(++(*str));
kenjiArai 7:c87a84872d85 457 if (c <= ' ') {
kenjiArai 7:c87a84872d85 458 *res = 0;
kenjiArai 7:c87a84872d85 459 return 1;
kenjiArai 7:c87a84872d85 460 }
kenjiArai 7:c87a84872d85 461 if (c == 'x') {
kenjiArai 7:c87a84872d85 462 radix = 16;
kenjiArai 7:c87a84872d85 463 c = *(++(*str));
kenjiArai 7:c87a84872d85 464 } else {
kenjiArai 7:c87a84872d85 465 if (c == 'b') {
kenjiArai 7:c87a84872d85 466 radix = 2;
kenjiArai 7:c87a84872d85 467 c = *(++(*str));
kenjiArai 7:c87a84872d85 468 } else {
kenjiArai 7:c87a84872d85 469 if ((c >= '0')&&(c <= '9')) {
kenjiArai 7:c87a84872d85 470 radix = 8;
kenjiArai 7:c87a84872d85 471 } else {
kenjiArai 7:c87a84872d85 472 return 0;
kenjiArai 7:c87a84872d85 473 }
kenjiArai 7:c87a84872d85 474 }
kenjiArai 7:c87a84872d85 475 }
kenjiArai 7:c87a84872d85 476 } else {
kenjiArai 7:c87a84872d85 477 if ((c < '1')||(c > '9')) {
kenjiArai 7:c87a84872d85 478 return 0;
kenjiArai 7:c87a84872d85 479 }
kenjiArai 7:c87a84872d85 480 radix = 10;
kenjiArai 7:c87a84872d85 481 }
kenjiArai 7:c87a84872d85 482 val = 0;
kenjiArai 7:c87a84872d85 483 while (c > ' ') {
kenjiArai 7:c87a84872d85 484 if (c >= 'a') c -= 0x20;
kenjiArai 7:c87a84872d85 485 c -= '0';
kenjiArai 7:c87a84872d85 486 if (c >= 17) {
kenjiArai 7:c87a84872d85 487 c -= 7;
kenjiArai 7:c87a84872d85 488 if (c <= 9) return 0;
kenjiArai 7:c87a84872d85 489 }
kenjiArai 7:c87a84872d85 490 if (c >= radix) return 0;
kenjiArai 7:c87a84872d85 491 val = val * radix + c;
kenjiArai 7:c87a84872d85 492 c = *(++(*str));
kenjiArai 7:c87a84872d85 493 }
kenjiArai 7:c87a84872d85 494 if (s) val = -val;
kenjiArai 7:c87a84872d85 495 *res = val;
kenjiArai 7:c87a84872d85 496 return 1;
kenjiArai 7:c87a84872d85 497 }