First Version
Dependencies: EthernetInterface mbed-rtos mbed
main.cpp@2:bf4bbf7d6793, 2016-03-04 (annotated)
- Committer:
- rebonatto
- Date:
- Fri Mar 04 21:18:48 2016 +0000
- Revision:
- 2:bf4bbf7d6793
- Parent:
- 1:ce016c668e34
- Child:
- 3:94a128e0f316
Mudado sistemas de aquisi??o (sem DMA) e retirados c?digos desnecess?rios.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:9df41090ba33 | 1 | /* |
rebonatto | 0:9df41090ba33 | 2 | Novo projeto PMED_Calibra |
rebonatto | 0:9df41090ba33 | 3 | Criado para: |
rebonatto | 0:9df41090ba33 | 4 | - Auxiliar no processo de calibração dos valores de offset e ganho das tomadas |
rebonatto | 0:9df41090ba33 | 5 | - Faciliar os testes da leitura de RFID nas tomadas |
rebonatto | 2:bf4bbf7d6793 | 6 | - Alterado para usar captura sem DMA |
rebonatto | 0:9df41090ba33 | 7 | |
rebonatto | 0:9df41090ba33 | 8 | */ |
rebonatto | 0:9df41090ba33 | 9 | #include <stdio.h> |
rebonatto | 0:9df41090ba33 | 10 | |
rebonatto | 0:9df41090ba33 | 11 | #include "mbed.h" |
rebonatto | 0:9df41090ba33 | 12 | #include "rtos.h" |
rebonatto | 0:9df41090ba33 | 13 | #include "cmsis_os.h" |
rebonatto | 0:9df41090ba33 | 14 | #include "EthernetInterface.h" |
rebonatto | 0:9df41090ba33 | 15 | #include "Settings.h" |
rebonatto | 0:9df41090ba33 | 16 | #include "Capture.h" |
rebonatto | 0:9df41090ba33 | 17 | #include "SignalProcessor.h" |
rebonatto | 0:9df41090ba33 | 18 | |
rebonatto | 0:9df41090ba33 | 19 | extern "C" void mbed_reset(); |
rebonatto | 0:9df41090ba33 | 20 | |
rebonatto | 0:9df41090ba33 | 21 | EthernetInterface eth; |
rebonatto | 0:9df41090ba33 | 22 | |
rebonatto | 0:9df41090ba33 | 23 | void InitializeEthernetLink(); |
rebonatto | 0:9df41090ba33 | 24 | int SelectOption(); |
rebonatto | 1:ce016c668e34 | 25 | int SelectOutlet(); |
rebonatto | 0:9df41090ba33 | 26 | void ShowRMSValues(); |
rebonatto | 0:9df41090ba33 | 27 | void ShowMeanValues(); |
rebonatto | 0:9df41090ba33 | 28 | void ShowSamplesFromChannel(); |
rebonatto | 0:9df41090ba33 | 29 | int SelectChannel(); |
rebonatto | 0:9df41090ba33 | 30 | void SetOffset(); |
rebonatto | 0:9df41090ba33 | 31 | void SetGain(); |
rebonatto | 0:9df41090ba33 | 32 | void TestRFID(); |
rebonatto | 1:ce016c668e34 | 33 | void TestManyTimesRFID(); |
rebonatto | 0:9df41090ba33 | 34 | |
rebonatto | 0:9df41090ba33 | 35 | void thread1(void const *args) |
rebonatto | 0:9df41090ba33 | 36 | { |
rebonatto | 0:9df41090ba33 | 37 | DigitalOut led1(LED1); |
rebonatto | 2:bf4bbf7d6793 | 38 | int op = 0; |
rebonatto | 2:bf4bbf7d6793 | 39 | |
rebonatto | 2:bf4bbf7d6793 | 40 | Capture::InitializeAD(); |
rebonatto | 0:9df41090ba33 | 41 | |
rebonatto | 0:9df41090ba33 | 42 | while(1) |
rebonatto | 0:9df41090ba33 | 43 | { |
rebonatto | 0:9df41090ba33 | 44 | op = SelectOption(); |
rebonatto | 0:9df41090ba33 | 45 | |
rebonatto | 0:9df41090ba33 | 46 | switch (op) { |
rebonatto | 0:9df41090ba33 | 47 | case (1): ShowRMSValues(); break; |
rebonatto | 0:9df41090ba33 | 48 | case (2): ShowMeanValues(); break; |
rebonatto | 0:9df41090ba33 | 49 | case (3): ShowSamplesFromChannel(); break; |
rebonatto | 0:9df41090ba33 | 50 | case (4): SetOffset(); break; |
rebonatto | 0:9df41090ba33 | 51 | case (5): SetGain(); break; |
rebonatto | 0:9df41090ba33 | 52 | case (6): TestRFID(); break; |
rebonatto | 1:ce016c668e34 | 53 | case (7): TestManyTimesRFID(); break; |
rebonatto | 0:9df41090ba33 | 54 | case (8): mbed_reset(); break; |
rebonatto | 0:9df41090ba33 | 55 | } |
rebonatto | 0:9df41090ba33 | 56 | } |
rebonatto | 0:9df41090ba33 | 57 | } |
rebonatto | 0:9df41090ba33 | 58 | |
rebonatto | 0:9df41090ba33 | 59 | int main() { |
rebonatto | 0:9df41090ba33 | 60 | FILE *f; |
rebonatto | 0:9df41090ba33 | 61 | |
rebonatto | 0:9df41090ba33 | 62 | Settings::ReadFile(); |
rebonatto | 0:9df41090ba33 | 63 | //printf("Passou Settings, carregou arquivo\n"); |
rebonatto | 0:9df41090ba33 | 64 | //Settings::ShowValues(); |
rebonatto | 0:9df41090ba33 | 65 | |
rebonatto | 0:9df41090ba33 | 66 | InitializeEthernetLink(); |
rebonatto | 2:bf4bbf7d6793 | 67 | printf("\nIP Address is NEW %s\n", eth.getIPAddress()); |
rebonatto | 2:bf4bbf7d6793 | 68 | |
rebonatto | 0:9df41090ba33 | 69 | /* |
rebonatto | 0:9df41090ba33 | 70 | unsigned short vet[256] = {2105,2105,2113,2127,2127,2125,2112,2113,2130,2130,2123,2112,2112,2128,2128,2123,2112,2113,2136,2136,2374,2551,2671,2869,2887,3036,2964,2964,2964,3145,3145,3206,3209,3298,3298,3264,3261,3208,3239,3239,3197,3197,3113,3032,3065,3065,3000,2901,2943,2943,2900,2852,2844,2863,2863,2838,2764,2791,2724,2724,2668,2710,2636,2658,2658,2606,2527,2443,2434,2434,2258,2066,2061,2080,2080,2063,2055,2055,2070,2070,2064,2051,2054,2069,2069,2062,2054,2058,2066,2309,2062,2052,2054,2067,2067,2063,2051,2049,2068,2068,2060,2053,2050,2067,2066,2069,2051,2053,2070,2070,2064,2050,2053,2070,2070,2062,2052,2055,2068,2068,2065,2052,2057,2072,2072,2064,2054,2054,2072,2072,2064,2053,2052,2069,2069,2064,2052,2053,2064,2064,2062,2049,2051,2067,2067,2059,2051,2050,2068,2068,2058,2046,2050,2068,2068,2061,2052,2058,2068,2068,2059,2052,2053,2067,2067,1744,1526,1471,1289,1289,1137,1142,1055,1120,1120,997,967,894,941,941,928,887,1001,949,949,1028,1105,1079,1191,1191,1223,1211,1223,1267,1267,1325,1267,1356,1327,1327,1369,1439,1381,1498,1498,1503,1503,1527,1545,1545,1635,1650,1778,1792,1792,1971,2108,2109,2126,2126,2124,2117,2118,2131,2131,2126,2118,2118,2138,2138,2134,2124,2114,2135,2135,2129,2121,2120,2136,2136,2128,2122,2122,2143,2120,2130,2120,2121,2139,2139,2130,2119,2121,2136,2136,2129}; |
rebonatto | 0:9df41090ba33 | 71 | float sen[12],cos[12],vm; |
rebonatto | 0:9df41090ba33 | 72 | SignalProcessor::CalculateFFT(vet,sen,cos,&vm,1); |
rebonatto | 0:9df41090ba33 | 73 | |
rebonatto | 0:9df41090ba33 | 74 | printf("VM = %f\n",vm); |
rebonatto | 0:9df41090ba33 | 75 | for(int i=0;i<12;i++) |
rebonatto | 0:9df41090ba33 | 76 | { |
rebonatto | 0:9df41090ba33 | 77 | printf("SEN%d = %f, COS%d = %f\n",i,sen[i],i,cos[i]); |
rebonatto | 0:9df41090ba33 | 78 | } |
rebonatto | 0:9df41090ba33 | 79 | */ |
rebonatto | 0:9df41090ba33 | 80 | //Jump to the capture routine(will run on this thread) |
rebonatto | 0:9df41090ba33 | 81 | thread1(NULL); |
rebonatto | 0:9df41090ba33 | 82 | |
rebonatto | 0:9df41090ba33 | 83 | while(1){//never reaches here |
rebonatto | 0:9df41090ba33 | 84 | printf("Reset\n"); |
rebonatto | 0:9df41090ba33 | 85 | f = fopen(FILENAMERESET, "a"); |
rebonatto | 0:9df41090ba33 | 86 | if (f == NULL) |
rebonatto | 0:9df41090ba33 | 87 | f = fopen(FILENAMERESET, "w"); |
rebonatto | 0:9df41090ba33 | 88 | fprintf(f, "Laco Errado\n"); |
rebonatto | 0:9df41090ba33 | 89 | fclose(f); |
rebonatto | 0:9df41090ba33 | 90 | Thread::yield(); |
rebonatto | 0:9df41090ba33 | 91 | } |
rebonatto | 0:9df41090ba33 | 92 | } |
rebonatto | 1:ce016c668e34 | 93 | void TestManyTimesRFID(){ |
rebonatto | 1:ce016c668e34 | 94 | char rfid_number[9], reads[100][9]; |
rebonatto | 1:ce016c668e34 | 95 | int vezes[100]; |
rebonatto | 1:ce016c668e34 | 96 | bool achou; |
rebonatto | 1:ce016c668e34 | 97 | int num_tom = 0, difs, i, j; |
rebonatto | 1:ce016c668e34 | 98 | |
rebonatto | 1:ce016c668e34 | 99 | num_tom = SelectOutlet(); |
rebonatto | 1:ce016c668e34 | 100 | difs = 0; |
rebonatto | 1:ce016c668e34 | 101 | for(i=0; i < 10; i++){ |
rebonatto | 1:ce016c668e34 | 102 | vezes[i] = 0; |
rebonatto | 1:ce016c668e34 | 103 | strcpy(reads[i], "VVVVVVVV"); // 'V' isn't valid digit (Hex) |
rebonatto | 1:ce016c668e34 | 104 | } |
rebonatto | 1:ce016c668e34 | 105 | for(i =0; i < 100; i++){ |
rebonatto | 1:ce016c668e34 | 106 | Capture::ReadRFID(num_tom,rfid_number); |
rebonatto | 1:ce016c668e34 | 107 | //printf("\n{%s} - difs %d", rfid_number, difs); |
rebonatto | 1:ce016c668e34 | 108 | achou = false; |
rebonatto | 1:ce016c668e34 | 109 | for(j=0; j < difs; j++){ |
rebonatto | 1:ce016c668e34 | 110 | if (strcmp(rfid_number, reads[j]) == 0){ |
rebonatto | 1:ce016c668e34 | 111 | vezes[j] = vezes[j] + 1; |
rebonatto | 1:ce016c668e34 | 112 | achou = true; |
rebonatto | 1:ce016c668e34 | 113 | } |
rebonatto | 1:ce016c668e34 | 114 | } |
rebonatto | 1:ce016c668e34 | 115 | if (! achou){ |
rebonatto | 1:ce016c668e34 | 116 | strcpy(reads[j], rfid_number); |
rebonatto | 1:ce016c668e34 | 117 | vezes[j] = 1; |
rebonatto | 1:ce016c668e34 | 118 | difs++; |
rebonatto | 1:ce016c668e34 | 119 | } |
rebonatto | 1:ce016c668e34 | 120 | } |
rebonatto | 1:ce016c668e34 | 121 | |
rebonatto | 1:ce016c668e34 | 122 | for(i=0; i < difs; i++) |
rebonatto | 1:ce016c668e34 | 123 | printf("\nRFID {%s} read %d times.", reads[i], vezes[i]); |
rebonatto | 1:ce016c668e34 | 124 | } |
rebonatto | 1:ce016c668e34 | 125 | |
rebonatto | 0:9df41090ba33 | 126 | |
rebonatto | 0:9df41090ba33 | 127 | void TestRFID(){ |
rebonatto | 1:ce016c668e34 | 128 | char rfid_number[9], read[9]; |
rebonatto | 1:ce016c668e34 | 129 | bool first = true; |
rebonatto | 1:ce016c668e34 | 130 | char c='%'; |
rebonatto | 1:ce016c668e34 | 131 | float perc; |
rebonatto | 1:ce016c668e34 | 132 | int num_tom = 0, zero, ok, i; |
rebonatto | 1:ce016c668e34 | 133 | |
rebonatto | 1:ce016c668e34 | 134 | num_tom = SelectOutlet(); |
rebonatto | 1:ce016c668e34 | 135 | |
rebonatto | 1:ce016c668e34 | 136 | zero = ok = 0; |
rebonatto | 1:ce016c668e34 | 137 | for(i =0; i < 5; i++){ |
rebonatto | 1:ce016c668e34 | 138 | Capture::ReadRFID(num_tom,rfid_number); |
rebonatto | 1:ce016c668e34 | 139 | if (strcmp(rfid_number, "00000000") == 0) |
rebonatto | 1:ce016c668e34 | 140 | zero++; |
rebonatto | 1:ce016c668e34 | 141 | else{ |
rebonatto | 1:ce016c668e34 | 142 | if (first){ |
rebonatto | 1:ce016c668e34 | 143 | ok++; |
rebonatto | 1:ce016c668e34 | 144 | strcpy(read, rfid_number); |
rebonatto | 1:ce016c668e34 | 145 | first = false; |
rebonatto | 1:ce016c668e34 | 146 | } |
rebonatto | 1:ce016c668e34 | 147 | else |
rebonatto | 1:ce016c668e34 | 148 | if (strcmp(rfid_number, read) == 0) |
rebonatto | 1:ce016c668e34 | 149 | ok++; |
rebonatto | 1:ce016c668e34 | 150 | } |
rebonatto | 1:ce016c668e34 | 151 | if (ok == 3) |
rebonatto | 0:9df41090ba33 | 152 | break; |
rebonatto | 0:9df41090ba33 | 153 | } |
rebonatto | 1:ce016c668e34 | 154 | i = i == 5 ? 5 : i+1; |
rebonatto | 0:9df41090ba33 | 155 | |
rebonatto | 1:ce016c668e34 | 156 | if(ok == 3) |
rebonatto | 1:ce016c668e34 | 157 | perc = (float) ok/i; |
rebonatto | 1:ce016c668e34 | 158 | else{ |
rebonatto | 1:ce016c668e34 | 159 | perc = (float) zero/i ; |
rebonatto | 1:ce016c668e34 | 160 | |
rebonatto | 1:ce016c668e34 | 161 | strcpy(read, "00000000"); |
rebonatto | 1:ce016c668e34 | 162 | } |
rebonatto | 2:bf4bbf7d6793 | 163 | perc = perc * 100 ; |
rebonatto | 2:bf4bbf7d6793 | 164 | printf("\nRFID SERIAL NUMBER: {%8s} with %.2f%c of hit.\n", read, perc, c); |
rebonatto | 0:9df41090ba33 | 165 | } |
rebonatto | 0:9df41090ba33 | 166 | |
rebonatto | 0:9df41090ba33 | 167 | void SetGain(){ |
rebonatto | 0:9df41090ba33 | 168 | float rms[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 169 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 170 | float corrente = 0; |
rebonatto | 0:9df41090ba33 | 171 | int num_canal = 0; |
rebonatto | 0:9df41090ba33 | 172 | float soma_rms = 0; |
rebonatto | 0:9df41090ba33 | 173 | unsigned int cont = 0; |
rebonatto | 0:9df41090ba33 | 174 | float ganho = 0; |
rebonatto | 0:9df41090ba33 | 175 | |
rebonatto | 0:9df41090ba33 | 176 | printf("\n\nGain Adjustment:\n"); |
rebonatto | 0:9df41090ba33 | 177 | printf("\nFor Adjust the gain, ALL gains in config file (PMED.TXT) MUST be 1 (one)"); |
rebonatto | 0:9df41090ba33 | 178 | num_canal = SelectChannel(); |
rebonatto | 0:9df41090ba33 | 179 | if (Settings::get_Gain(num_canal) != 1){ |
rebonatto | 0:9df41090ba33 | 180 | printf("\n\nIt is impossibile to continue.\n"); |
rebonatto | 0:9df41090ba33 | 181 | printf("\nThe gain in channel %d is %f and MUST be be equal to 1 (one).", num_canal, Settings::get_Gain(num_canal)); |
rebonatto | 0:9df41090ba33 | 182 | printf("\nPut in the config file (PMED.TXT)\n\ngain%d=1\n", num_canal); |
rebonatto | 0:9df41090ba33 | 183 | printf("\nAfter save the config file, you MUST restart the mbed."); |
rebonatto | 0:9df41090ba33 | 184 | return; |
rebonatto | 0:9df41090ba33 | 185 | } |
rebonatto | 0:9df41090ba33 | 186 | |
rebonatto | 0:9df41090ba33 | 187 | printf("\nConnect the plug with the current used to adjustment (%s)", num_canal%2==0?"Phase":"Leakage"); |
rebonatto | 0:9df41090ba33 | 188 | printf("\nSwitch on the charge and with an ammeter verify the current (RMS) consumed."); |
rebonatto | 0:9df41090ba33 | 189 | printf("\nType the current in ammeter (%s): ", num_canal%2==0?"A":"mA"); |
rebonatto | 0:9df41090ba33 | 190 | scanf("%f", &corrente); |
rebonatto | 0:9df41090ba33 | 191 | |
rebonatto | 0:9df41090ba33 | 192 | printf("\nWait aproximatelly 0.5s\n"); |
rebonatto | 0:9df41090ba33 | 193 | |
rebonatto | 0:9df41090ba33 | 194 | while(cont<30) |
rebonatto | 0:9df41090ba33 | 195 | { |
rebonatto | 2:bf4bbf7d6793 | 196 | //get sample values from 6 channels |
rebonatto | 2:bf4bbf7d6793 | 197 | Capture::AcquireValues(); |
rebonatto | 2:bf4bbf7d6793 | 198 | |
rebonatto | 0:9df41090ba33 | 199 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 200 | soma_rms += rms[num_canal]; |
rebonatto | 0:9df41090ba33 | 201 | cont++; |
rebonatto | 0:9df41090ba33 | 202 | } |
rebonatto | 0:9df41090ba33 | 203 | soma_rms /= 30; |
rebonatto | 0:9df41090ba33 | 204 | ganho = soma_rms/corrente; |
rebonatto | 0:9df41090ba33 | 205 | printf("\nPut in the configuration file (PMED.TXT)\ngain%d=%.4f\n\n",num_canal,ganho); |
rebonatto | 0:9df41090ba33 | 206 | printf("\nRepeat this procedure for the others channels and at the end, reset the Mbed.\n"); |
rebonatto | 0:9df41090ba33 | 207 | } |
rebonatto | 0:9df41090ba33 | 208 | |
rebonatto | 0:9df41090ba33 | 209 | void SetOffset(){ |
rebonatto | 0:9df41090ba33 | 210 | unsigned char tecla=0; |
rebonatto | 0:9df41090ba33 | 211 | unsigned int soma[6]={0,0,0,0,0,0}; |
rebonatto | 0:9df41090ba33 | 212 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 213 | float rms[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 214 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 215 | |
rebonatto | 0:9df41090ba33 | 216 | printf("\n\nAdjustment of Offset\n"); |
rebonatto | 0:9df41090ba33 | 217 | printf("\nSwitch off all plugs from outlets."); |
rebonatto | 0:9df41090ba33 | 218 | printf("\nKeep the Protegemed on.\n"); |
rebonatto | 0:9df41090ba33 | 219 | printf("\nType any key and press <ENTER> when ready!\n"); |
rebonatto | 0:9df41090ba33 | 220 | scanf("%c", &tecla); |
rebonatto | 0:9df41090ba33 | 221 | |
rebonatto | 0:9df41090ba33 | 222 | printf("Wait aproximatelly 0.5s\n"); |
rebonatto | 0:9df41090ba33 | 223 | |
rebonatto | 0:9df41090ba33 | 224 | while(cont<30) |
rebonatto | 0:9df41090ba33 | 225 | { |
rebonatto | 2:bf4bbf7d6793 | 226 | //get sample values from 6 channels |
rebonatto | 2:bf4bbf7d6793 | 227 | Capture::AcquireValues(); |
rebonatto | 2:bf4bbf7d6793 | 228 | |
rebonatto | 0:9df41090ba33 | 229 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 230 | for (int i=0; i<6;i++) |
rebonatto | 0:9df41090ba33 | 231 | { |
rebonatto | 0:9df41090ba33 | 232 | soma[i] += mv2[i]; |
rebonatto | 0:9df41090ba33 | 233 | } |
rebonatto | 0:9df41090ba33 | 234 | cont++; |
rebonatto | 0:9df41090ba33 | 235 | } |
rebonatto | 0:9df41090ba33 | 236 | for (int i=0; i<6 ; i++) |
rebonatto | 0:9df41090ba33 | 237 | { |
rebonatto | 0:9df41090ba33 | 238 | soma[i] = soma[i]/30; |
rebonatto | 0:9df41090ba33 | 239 | } |
rebonatto | 0:9df41090ba33 | 240 | printf("\n\nPut in file PMED.TXT an save it:\n"); |
rebonatto | 0:9df41090ba33 | 241 | for (int i=0; i<6 ; i++) |
rebonatto | 0:9df41090ba33 | 242 | { |
rebonatto | 0:9df41090ba33 | 243 | printf("offset%d=%u\n", i, soma[i]); |
rebonatto | 0:9df41090ba33 | 244 | } |
rebonatto | 0:9df41090ba33 | 245 | |
rebonatto | 0:9df41090ba33 | 246 | printf("\n\nReset the Mbed.\n"); |
rebonatto | 0:9df41090ba33 | 247 | printf("\n\nYou MUST in the sequence adjust the gain!!!\n\n"); |
rebonatto | 0:9df41090ba33 | 248 | } |
rebonatto | 0:9df41090ba33 | 249 | |
rebonatto | 1:ce016c668e34 | 250 | int SelectOutlet(){ |
rebonatto | 1:ce016c668e34 | 251 | int num = 0; |
rebonatto | 1:ce016c668e34 | 252 | while(1){ |
rebonatto | 1:ce016c668e34 | 253 | printf("\nSelect an outlet to test (1 to 3): "); |
rebonatto | 1:ce016c668e34 | 254 | scanf("%d", &num); |
rebonatto | 1:ce016c668e34 | 255 | if ( (num > 3) || (num < 1) ) |
rebonatto | 1:ce016c668e34 | 256 | printf("\n\n\nInvalid Outlet! - Retype a valid outlet\n\n\n "); |
rebonatto | 1:ce016c668e34 | 257 | else |
rebonatto | 1:ce016c668e34 | 258 | break; |
rebonatto | 1:ce016c668e34 | 259 | } |
rebonatto | 1:ce016c668e34 | 260 | return num; |
rebonatto | 1:ce016c668e34 | 261 | } |
rebonatto | 1:ce016c668e34 | 262 | |
rebonatto | 0:9df41090ba33 | 263 | int SelectChannel(){ |
rebonatto | 0:9df41090ba33 | 264 | int num_channel = 0; |
rebonatto | 0:9df41090ba33 | 265 | while(1){ |
rebonatto | 0:9df41090ba33 | 266 | printf("\n\nOdd channels are leakage and even channels are phase!!"); |
rebonatto | 0:9df41090ba33 | 267 | printf("\nSelect a channel to visualize samples(0 to 5): "); |
rebonatto | 0:9df41090ba33 | 268 | scanf("%d", &num_channel); |
rebonatto | 0:9df41090ba33 | 269 | if ( (num_channel > 5) || (num_channel < 0) ) |
rebonatto | 0:9df41090ba33 | 270 | printf("\n\n\nInvalid Channel! - Retype a valid channel\n\n\n "); |
rebonatto | 0:9df41090ba33 | 271 | else |
rebonatto | 0:9df41090ba33 | 272 | break; |
rebonatto | 0:9df41090ba33 | 273 | } |
rebonatto | 0:9df41090ba33 | 274 | return num_channel; |
rebonatto | 0:9df41090ba33 | 275 | } |
rebonatto | 0:9df41090ba33 | 276 | |
rebonatto | 0:9df41090ba33 | 277 | |
rebonatto | 0:9df41090ba33 | 278 | void ShowSamplesFromChannel(){ |
rebonatto | 2:bf4bbf7d6793 | 279 | float samples[NUMBER_OF_SAMPLES]; |
rebonatto | 0:9df41090ba33 | 280 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 281 | int num_channel = SelectChannel(); |
rebonatto | 0:9df41090ba33 | 282 | |
rebonatto | 0:9df41090ba33 | 283 | |
rebonatto | 0:9df41090ba33 | 284 | printf("\nValues of %d samples from channel %d.\n\n", NUMBER_OF_SAMPLES, num_channel ); |
rebonatto | 0:9df41090ba33 | 285 | |
rebonatto | 0:9df41090ba33 | 286 | while(cont < 5) |
rebonatto | 0:9df41090ba33 | 287 | { |
rebonatto | 2:bf4bbf7d6793 | 288 | //get sample values from 6 channels |
rebonatto | 2:bf4bbf7d6793 | 289 | Capture::AcquireValues(); |
rebonatto | 2:bf4bbf7d6793 | 290 | |
rebonatto | 0:9df41090ba33 | 291 | Capture::CopyBuffer(num_channel, samples); |
rebonatto | 0:9df41090ba33 | 292 | printf("\n******* %da. sequence of samples (%s)\n\n", cont+1, num_channel%2==0?"Phase":"Leakage"); |
rebonatto | 0:9df41090ba33 | 293 | for (int k=0; k< NUMBER_OF_SAMPLES; k++) |
rebonatto | 0:9df41090ba33 | 294 | { |
rebonatto | 2:bf4bbf7d6793 | 295 | printf("%.0f ", samples[k]); |
rebonatto | 0:9df41090ba33 | 296 | } |
rebonatto | 0:9df41090ba33 | 297 | printf("\n"); |
rebonatto | 0:9df41090ba33 | 298 | cont++; |
rebonatto | 0:9df41090ba33 | 299 | } |
rebonatto | 0:9df41090ba33 | 300 | } |
rebonatto | 0:9df41090ba33 | 301 | |
rebonatto | 0:9df41090ba33 | 302 | int SelectOption() |
rebonatto | 0:9df41090ba33 | 303 | { |
rebonatto | 0:9df41090ba33 | 304 | int option; |
rebonatto | 0:9df41090ba33 | 305 | |
rebonatto | 0:9df41090ba33 | 306 | while (true) |
rebonatto | 0:9df41090ba33 | 307 | { |
rebonatto | 0:9df41090ba33 | 308 | printf("\n\n"); |
rebonatto | 0:9df41090ba33 | 309 | printf("+-------------------------------------+\n"); |
rebonatto | 0:9df41090ba33 | 310 | printf("| PMED_Calibra: MENU |\n"); |
rebonatto | 0:9df41090ba33 | 311 | printf("| 1. RMS Values. |\n"); |
rebonatto | 0:9df41090ba33 | 312 | printf("| 2. Mean Values. |\n"); |
rebonatto | 0:9df41090ba33 | 313 | printf("| 3. Read samples from 1 channel. |\n"); |
rebonatto | 0:9df41090ba33 | 314 | printf("| 4. Offset adjust. |\n"); |
rebonatto | 0:9df41090ba33 | 315 | printf("| 5. Gain adjust. |\n"); |
rebonatto | 0:9df41090ba33 | 316 | printf("| 6. Read RFID tag. |\n"); |
rebonatto | 0:9df41090ba33 | 317 | printf("| 7. Test RFID Read (many times). |\n"); |
rebonatto | 0:9df41090ba33 | 318 | printf("| 8. Reset the Mbed |\n"); |
rebonatto | 0:9df41090ba33 | 319 | printf("+-------------------------------------+\n"); |
rebonatto | 0:9df41090ba33 | 320 | printf("Select an Option: "); |
rebonatto | 0:9df41090ba33 | 321 | |
rebonatto | 0:9df41090ba33 | 322 | scanf("%d", &option); |
rebonatto | 0:9df41090ba33 | 323 | if ( (option > 8) || (option < 1) ){ |
rebonatto | 0:9df41090ba33 | 324 | printf("\n\n\nInvalid Option! - Retype a valid option\n\n\n "); |
rebonatto | 0:9df41090ba33 | 325 | } |
rebonatto | 0:9df41090ba33 | 326 | else |
rebonatto | 0:9df41090ba33 | 327 | break; |
rebonatto | 0:9df41090ba33 | 328 | } |
rebonatto | 0:9df41090ba33 | 329 | |
rebonatto | 0:9df41090ba33 | 330 | return option; |
rebonatto | 0:9df41090ba33 | 331 | } |
rebonatto | 0:9df41090ba33 | 332 | |
rebonatto | 0:9df41090ba33 | 333 | |
rebonatto | 0:9df41090ba33 | 334 | void ShowMeanValues(){ |
rebonatto | 0:9df41090ba33 | 335 | float rms[NUMBER_OF_CHANNELS], avg[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 336 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 337 | |
rebonatto | 0:9df41090ba33 | 338 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 339 | avg[0] = avg[1] = avg[2] = avg[3] = avg[4] = avg[5] = 0; |
rebonatto | 0:9df41090ba33 | 340 | printf("\n\n------------------------------Mean VALUES-------------------------------"); |
rebonatto | 0:9df41090ba33 | 341 | printf("\nCHANNEL\t0\t1\t\t2\t3\t\t4\t5"); |
rebonatto | 0:9df41090ba33 | 342 | printf("\n\tPhase1\tLeakage1\tPhase2\tLeakage2\tPhase3\tLeakage3"); |
rebonatto | 0:9df41090ba33 | 343 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 344 | while (cont < 10) |
rebonatto | 0:9df41090ba33 | 345 | { |
rebonatto | 2:bf4bbf7d6793 | 346 | //get sample values from 6 channels |
rebonatto | 2:bf4bbf7d6793 | 347 | Capture::AcquireValues(); |
rebonatto | 2:bf4bbf7d6793 | 348 | |
rebonatto | 0:9df41090ba33 | 349 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 350 | printf("\n%2d\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f", cont+1,mv2[0],mv2[1],mv2[2],mv2[3],mv2[4],mv2[5]); |
rebonatto | 0:9df41090ba33 | 351 | avg[0] += mv2[0]; |
rebonatto | 0:9df41090ba33 | 352 | avg[1] += mv2[1]; |
rebonatto | 0:9df41090ba33 | 353 | avg[2] += mv2[2]; |
rebonatto | 0:9df41090ba33 | 354 | avg[3] += mv2[3]; |
rebonatto | 0:9df41090ba33 | 355 | avg[4] += mv2[4]; |
rebonatto | 0:9df41090ba33 | 356 | avg[5] += mv2[5]; |
rebonatto | 0:9df41090ba33 | 357 | cont++; |
rebonatto | 0:9df41090ba33 | 358 | } |
rebonatto | 0:9df41090ba33 | 359 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 360 | printf("\nAvg:\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f",avg[0]/cont,avg[1]/cont,avg[2]/cont,avg[3]/cont,avg[4]/cont,avg[5]/cont); |
rebonatto | 0:9df41090ba33 | 361 | printf("\n------------------------------------------------------------------------\n\n"); |
rebonatto | 0:9df41090ba33 | 362 | } |
rebonatto | 0:9df41090ba33 | 363 | |
rebonatto | 0:9df41090ba33 | 364 | void ShowRMSValues(){ |
rebonatto | 0:9df41090ba33 | 365 | float rms[NUMBER_OF_CHANNELS], avg[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 366 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 367 | |
rebonatto | 0:9df41090ba33 | 368 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 369 | avg[0] = avg[1] = avg[2] = avg[3] = avg[4] = avg[5] = 0; |
rebonatto | 0:9df41090ba33 | 370 | printf("\n\n-------------------------------RMS VALUES-------------------------------"); |
rebonatto | 0:9df41090ba33 | 371 | printf("\nCHANNEL\t0\t1\t\t2\t3\t\t4\t5"); |
rebonatto | 0:9df41090ba33 | 372 | printf("\n\tPhase1\tLeakage1\tPhase2\tLeakage2\tPhase3\tLeakage3"); |
rebonatto | 0:9df41090ba33 | 373 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 374 | while (cont < 10) |
rebonatto | 0:9df41090ba33 | 375 | { |
rebonatto | 2:bf4bbf7d6793 | 376 | //get sample values from 6 channels |
rebonatto | 2:bf4bbf7d6793 | 377 | Capture::AcquireValues(); |
rebonatto | 2:bf4bbf7d6793 | 378 | |
rebonatto | 0:9df41090ba33 | 379 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 380 | printf("\n%2d\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f", cont+1,rms[0],rms[1],rms[2],rms[3],rms[4],rms[5]); |
rebonatto | 0:9df41090ba33 | 381 | avg[0] += rms[0]; |
rebonatto | 0:9df41090ba33 | 382 | avg[1] += rms[1]; |
rebonatto | 0:9df41090ba33 | 383 | avg[2] += rms[2]; |
rebonatto | 0:9df41090ba33 | 384 | avg[3] += rms[3]; |
rebonatto | 0:9df41090ba33 | 385 | avg[4] += rms[4]; |
rebonatto | 0:9df41090ba33 | 386 | avg[5] += rms[5]; |
rebonatto | 0:9df41090ba33 | 387 | cont++; |
rebonatto | 0:9df41090ba33 | 388 | } |
rebonatto | 0:9df41090ba33 | 389 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 390 | printf("\nAvg:\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f",avg[0]/cont,avg[1]/cont,avg[2]/cont,avg[3]/cont,avg[4]/cont,avg[5]/cont); |
rebonatto | 0:9df41090ba33 | 391 | printf("\n------------------------------------------------------------------------\n\n"); |
rebonatto | 0:9df41090ba33 | 392 | } |
rebonatto | 0:9df41090ba33 | 393 | |
rebonatto | 0:9df41090ba33 | 394 | void InitializeEthernetLink() |
rebonatto | 0:9df41090ba33 | 395 | { |
rebonatto | 0:9df41090ba33 | 396 | if(Settings::get_Dhcp()) |
rebonatto | 0:9df41090ba33 | 397 | //EthernetIf::Initialize(); //Use DHCP |
rebonatto | 0:9df41090ba33 | 398 | eth.init(); //Use DHCP |
rebonatto | 0:9df41090ba33 | 399 | else |
rebonatto | 0:9df41090ba33 | 400 | //EthernetIf::Initialize(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway()); |
rebonatto | 0:9df41090ba33 | 401 | eth.init(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway()); |
rebonatto | 0:9df41090ba33 | 402 | |
rebonatto | 0:9df41090ba33 | 403 | //EthernetIf::Connect(); |
rebonatto | 0:9df41090ba33 | 404 | eth.connect(); |
rebonatto | 0:9df41090ba33 | 405 | //printf("IP Address is %s\n", EthernetIf::get_IpAddress()); |
rebonatto | 0:9df41090ba33 | 406 | } |