ADC performance check
Fork of GR-PEACH_test_wo_rtos by
main.cpp@7:c87a84872d85, 2015-01-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |