embed simulator

Dependencies:   mbed C12832

Committer:
kwstasfane1
Date:
Tue Apr 20 12:05:58 2021 +0000
Revision:
3:e3e73c36a565
Parent:
0:167e85b50250
Child:
4:ce121f9e6db5
Works up to 5KHz, calculates everything needed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kwstasfane1 0:167e85b50250 1 /*
kwstasfane1 0:167e85b50250 2 Created by Konstantinos Fane
kwstasfane1 0:167e85b50250 3 copy this code to Mbed online simulator
kwstasfane1 0:167e85b50250 4 to run the designed application
kwstasfane1 0:167e85b50250 5 */
kwstasfane1 0:167e85b50250 6
kwstasfane1 0:167e85b50250 7 #include "mbed.h"
kwstasfane1 0:167e85b50250 8 #include <string>
kwstasfane1 0:167e85b50250 9 #include "C12832.h"
kwstasfane1 0:167e85b50250 10
kwstasfane1 0:167e85b50250 11 // LCD display
kwstasfane1 0:167e85b50250 12 C12832 lcd(p5, p7, p6, p8, p11);
kwstasfane1 0:167e85b50250 13
kwstasfane1 0:167e85b50250 14 //dummy measurement values
kwstasfane1 0:167e85b50250 15 float m_freq_hz; // = 120730.546423; //*10^6 Hz
kwstasfane1 3:e3e73c36a565 16 float m_t_interval_ms; //= 988.056475;
kwstasfane1 0:167e85b50250 17
kwstasfane1 0:167e85b50250 18 //result to be displayed
kwstasfane1 0:167e85b50250 19 float m_result;
kwstasfane1 0:167e85b50250 20
kwstasfane1 0:167e85b50250 21 //variables used for frequency, period and time interval measruements
kwstasfane1 0:167e85b50250 22 float count1 = 0.0;
kwstasfane1 3:e3e73c36a565 23 float ton = 0.0;
kwstasfane1 3:e3e73c36a565 24 float toff = 0.0;
kwstasfane1 3:e3e73c36a565 25 float period = 0.0;
kwstasfane1 0:167e85b50250 26
kwstasfane1 0:167e85b50250 27 const char* range_scale [3][3] = {
kwstasfane1 0:167e85b50250 28 {"MHz","KHz","Hz"},
kwstasfane1 0:167e85b50250 29 {"ms","ms","s"},
kwstasfane1 0:167e85b50250 30 {"ms","ms","s"}
kwstasfane1 0:167e85b50250 31 };
kwstasfane1 0:167e85b50250 32
kwstasfane1 0:167e85b50250 33 /* flag to hold which measurement mode to display
kwstasfane1 0:167e85b50250 34 * 0 = Frequency Measurement
kwstasfane1 0:167e85b50250 35 * 1 = Period Measurement
kwstasfane1 0:167e85b50250 36 * 2 = Time interval Measurement
kwstasfane1 0:167e85b50250 37 * to match the index of message display arrays */
kwstasfane1 0:167e85b50250 38 int dsp_mode = 0;
kwstasfane1 0:167e85b50250 39 const char* mode_msg [] = {"Frequency", "Period", "Time Interval"};
kwstasfane1 0:167e85b50250 40
kwstasfane1 0:167e85b50250 41 /* flag to hold which measurement range to display
kwstasfane1 0:167e85b50250 42 * 0 = High Range
kwstasfane1 0:167e85b50250 43 * 1 = Medium Range
kwstasfane1 0:167e85b50250 44 * 2 = Low Range */
kwstasfane1 0:167e85b50250 45 int dsp_range = 0;
kwstasfane1 0:167e85b50250 46 const char* range_msg [] = {"High Resolution", "Medium Resolution", "Low Resolution"};
kwstasfane1 0:167e85b50250 47
kwstasfane1 0:167e85b50250 48 int dsp_time_interval = 0; //0=R-R, 1=F-F, 2=R-F, 3=F-R
kwstasfane1 0:167e85b50250 49
kwstasfane1 3:e3e73c36a565 50 //result string
kwstasfane1 3:e3e73c36a565 51 const char* res[] = {""};
kwstasfane1 3:e3e73c36a565 52
kwstasfane1 0:167e85b50250 53 //Interrupt to be used in actual implementation to read the input square wave signal
kwstasfane1 0:167e85b50250 54 //InterruptIn squareIN(p#) //# = the pin number where the actual signal would be conected to
kwstasfane1 0:167e85b50250 55
kwstasfane1 0:167e85b50250 56 InterruptIn squareIN(p17);
kwstasfane1 0:167e85b50250 57
kwstasfane1 0:167e85b50250 58 //User interface measurement mode and range selection buttons
kwstasfane1 0:167e85b50250 59 InterruptIn mode(p12);
kwstasfane1 3:e3e73c36a565 60 InterruptIn range(p15);
kwstasfane1 3:e3e73c36a565 61 InterruptIn time_interval(p13);
kwstasfane1 0:167e85b50250 62
kwstasfane1 3:e3e73c36a565 63 /*For simulation purposes only, multiplier for the count1, to achieve higher simulated frequencies
kwstasfane1 0:167e85b50250 64 InterruptIn incr_freq(p15);
kwstasfane1 0:167e85b50250 65 InterruptIn decr_freq(p16);
kwstasfane1 0:167e85b50250 66 float multi = 1.0;
kwstasfane1 0:167e85b50250 67 void incr();
kwstasfane1 3:e3e73c36a565 68 void decr();*/
kwstasfane1 0:167e85b50250 69
kwstasfane1 0:167e85b50250 70 //user defined functions to implement the user interface
kwstasfane1 0:167e85b50250 71 void user_interface_disp();
kwstasfane1 0:167e85b50250 72 void mode_select();
kwstasfane1 0:167e85b50250 73 void range_select();
kwstasfane1 0:167e85b50250 74 void time_interval_type_select();
kwstasfane1 0:167e85b50250 75 void result_calculator();
kwstasfane1 0:167e85b50250 76
kwstasfane1 0:167e85b50250 77 //interrupt service routines
kwstasfane1 0:167e85b50250 78 void counter1_isr();
kwstasfane1 0:167e85b50250 79 void freq_calc_isr();
kwstasfane1 3:e3e73c36a565 80 void start_t1_isr();
kwstasfane1 3:e3e73c36a565 81 void start_t2_isr();
kwstasfane1 0:167e85b50250 82
kwstasfane1 0:167e85b50250 83 //Timeout task2;
kwstasfane1 0:167e85b50250 84 Ticker tick1; //generate a tick
kwstasfane1 3:e3e73c36a565 85 Ticker ui_disp; //generate the 1s interrupt, to measure frequency (direct frequency measurement)
kwstasfane1 3:e3e73c36a565 86 Ticker result_calc;
kwstasfane1 3:e3e73c36a565 87 Timer t1;
kwstasfane1 3:e3e73c36a565 88 Timer t2;
kwstasfane1 0:167e85b50250 89
kwstasfane1 0:167e85b50250 90 int main()
kwstasfane1 0:167e85b50250 91 {
kwstasfane1 0:167e85b50250 92
kwstasfane1 0:167e85b50250 93 //ticker, where it is done periodically, timeout only does it once
kwstasfane1 0:167e85b50250 94 //Direct frequency measurement, measures the number of rising edges every time they occur
kwstasfane1 3:e3e73c36a565 95 //squareIN.attach_us(&counter1_isr,100);
kwstasfane1 3:e3e73c36a565 96 squareIN.rise(&start_t1_isr);
kwstasfane1 3:e3e73c36a565 97 squareIN.fall(&start_t2_isr);
kwstasfane1 0:167e85b50250 98 //For simulation purposes only
kwstasfane1 0:167e85b50250 99 //tick1.attach_us(&counter1_isr, 1); //generate a tick every 100 us = 0.0001s 1us = 100000 s (period)
kwstasfane1 0:167e85b50250 100
kwstasfane1 3:e3e73c36a565 101 ui_disp.attach(&user_interface_disp, 1); //update the screen every 1 second
kwstasfane1 3:e3e73c36a565 102 result_calc.attach_us(&result_calculator,100); //calculate a new measurement result every 100us
kwstasfane1 0:167e85b50250 103
kwstasfane1 0:167e85b50250 104 //interrupt routine for mode and range selection user input
kwstasfane1 0:167e85b50250 105 mode.rise(&mode_select);
kwstasfane1 0:167e85b50250 106 range.rise(&range_select);
kwstasfane1 0:167e85b50250 107 time_interval.rise(&time_interval_type_select);
kwstasfane1 0:167e85b50250 108
kwstasfane1 3:e3e73c36a565 109 /*interrupt routine for multiplier increase/decrease user input
kwstasfane1 0:167e85b50250 110 incr_freq.rise(&incr);
kwstasfane1 3:e3e73c36a565 111 decr_freq.rise(&decr);*/
kwstasfane1 3:e3e73c36a565 112
kwstasfane1 3:e3e73c36a565 113 //start the timer t1
kwstasfane1 3:e3e73c36a565 114 t1.start();
kwstasfane1 0:167e85b50250 115
kwstasfane1 0:167e85b50250 116 while(1)
kwstasfane1 0:167e85b50250 117 {
kwstasfane1 3:e3e73c36a565 118 //user_interface_disp(); //didnt refresh properly when tested on the mbed board
kwstasfane1 3:e3e73c36a565 119 //wait(0.1);
kwstasfane1 0:167e85b50250 120 }
kwstasfane1 0:167e85b50250 121
kwstasfane1 0:167e85b50250 122
kwstasfane1 0:167e85b50250 123 }
kwstasfane1 0:167e85b50250 124
kwstasfane1 3:e3e73c36a565 125 //dID NOT PROVIDE A GOOD MEASUREMENT OF TON
kwstasfane1 3:e3e73c36a565 126 void start_t1_isr()
kwstasfane1 3:e3e73c36a565 127 {
kwstasfane1 3:e3e73c36a565 128 period = t1.read_us();
kwstasfane1 3:e3e73c36a565 129 t1.reset();
kwstasfane1 3:e3e73c36a565 130 t2.start();
kwstasfane1 3:e3e73c36a565 131 //t2.stop();
kwstasfane1 3:e3e73c36a565 132 //toff=t2.read();
kwstasfane1 3:e3e73c36a565 133 }
kwstasfane1 3:e3e73c36a565 134
kwstasfane1 3:e3e73c36a565 135 void start_t2_isr()
kwstasfane1 3:e3e73c36a565 136 {
kwstasfane1 3:e3e73c36a565 137 //t2.start();
kwstasfane1 3:e3e73c36a565 138 ton = t2.read_us();
kwstasfane1 3:e3e73c36a565 139 t2.reset();
kwstasfane1 3:e3e73c36a565 140 //period = ton+toff;
kwstasfane1 3:e3e73c36a565 141 }
kwstasfane1 3:e3e73c36a565 142
kwstasfane1 0:167e85b50250 143 //ISR to count the occurences of incoming signal rising edges
kwstasfane1 0:167e85b50250 144 void counter1_isr()
kwstasfane1 0:167e85b50250 145 {
kwstasfane1 0:167e85b50250 146 //increment counter by 1
kwstasfane1 0:167e85b50250 147 count1 = count1 + 1;
kwstasfane1 0:167e85b50250 148 }
kwstasfane1 0:167e85b50250 149
kwstasfane1 0:167e85b50250 150 //ISR to calculate the period of incoming signal, every 1 second
kwstasfane1 0:167e85b50250 151 void freq_calc_isr()
kwstasfane1 0:167e85b50250 152 {
kwstasfane1 3:e3e73c36a565 153 //m_freq_hz = 1/period;
kwstasfane1 3:e3e73c36a565 154 //m_freq_hz = multi * count1;
kwstasfane1 3:e3e73c36a565 155 //count1 = 0;
kwstasfane1 0:167e85b50250 156 }
kwstasfane1 0:167e85b50250 157
kwstasfane1 3:e3e73c36a565 158 /*simulation only
kwstasfane1 0:167e85b50250 159 void incr()
kwstasfane1 0:167e85b50250 160 {
kwstasfane1 0:167e85b50250 161 multi = multi + 1500.5;
kwstasfane1 0:167e85b50250 162 }
kwstasfane1 0:167e85b50250 163
kwstasfane1 0:167e85b50250 164 void decr()
kwstasfane1 0:167e85b50250 165 {
kwstasfane1 0:167e85b50250 166 multi = multi - 100.5;
kwstasfane1 0:167e85b50250 167 if (multi<10.5)
kwstasfane1 0:167e85b50250 168 {
kwstasfane1 0:167e85b50250 169 multi = 0.5;
kwstasfane1 0:167e85b50250 170 }
kwstasfane1 3:e3e73c36a565 171 }*/
kwstasfane1 0:167e85b50250 172
kwstasfane1 0:167e85b50250 173 void user_interface_disp()
kwstasfane1 0:167e85b50250 174 {
kwstasfane1 0:167e85b50250 175
kwstasfane1 0:167e85b50250 176 //At startup just print a few things on the lcd and then enter a loop until the user does something
kwstasfane1 0:167e85b50250 177 lcd.cls(); //clear screen
kwstasfane1 0:167e85b50250 178 lcd.locate(1,1);
kwstasfane1 0:167e85b50250 179 lcd.printf("Mode: %s", mode_msg[dsp_mode]);
kwstasfane1 0:167e85b50250 180
kwstasfane1 0:167e85b50250 181 //display the type of time interval measurement if the mode is selected
kwstasfane1 0:167e85b50250 182 if(dsp_mode ==2)
kwstasfane1 0:167e85b50250 183 {
kwstasfane1 0:167e85b50250 184 lcd.locate(90,1);
kwstasfane1 0:167e85b50250 185 if(dsp_time_interval == 0)
kwstasfane1 0:167e85b50250 186 {
kwstasfane1 0:167e85b50250 187 lcd.printf("(R->R)");
kwstasfane1 0:167e85b50250 188 }
kwstasfane1 0:167e85b50250 189 else if(dsp_time_interval == 1)
kwstasfane1 0:167e85b50250 190 {
kwstasfane1 0:167e85b50250 191 lcd.printf("(F->F)");
kwstasfane1 0:167e85b50250 192 }
kwstasfane1 0:167e85b50250 193 else if(dsp_time_interval == 2)
kwstasfane1 0:167e85b50250 194 {
kwstasfane1 0:167e85b50250 195 lcd.printf("(R->F)");
kwstasfane1 0:167e85b50250 196 }
kwstasfane1 0:167e85b50250 197 else if(dsp_time_interval == 3)
kwstasfane1 0:167e85b50250 198 {
kwstasfane1 0:167e85b50250 199 lcd.printf("(F->R)");
kwstasfane1 0:167e85b50250 200 }
kwstasfane1 0:167e85b50250 201
kwstasfane1 0:167e85b50250 202 }
kwstasfane1 3:e3e73c36a565 203 /*else
kwstasfane1 0:167e85b50250 204 {
kwstasfane1 0:167e85b50250 205 //simulation only - to display the current multiplier
kwstasfane1 0:167e85b50250 206 lcd.locate(78,1);
kwstasfane1 0:167e85b50250 207 lcd.printf("(x%1.1f)",multi);
kwstasfane1 3:e3e73c36a565 208 }*/
kwstasfane1 0:167e85b50250 209
kwstasfane1 0:167e85b50250 210 lcd.locate(1,10);
kwstasfane1 0:167e85b50250 211 lcd.printf("Range: %s", range_msg[dsp_range]);
kwstasfane1 0:167e85b50250 212 lcd.locate(1,20);
kwstasfane1 0:167e85b50250 213 //call the result calculator function
kwstasfane1 3:e3e73c36a565 214 //result_calculator();
kwstasfane1 3:e3e73c36a565 215 //print the result
kwstasfane1 3:e3e73c36a565 216 lcd.printf(*res,m_result,range_scale[dsp_mode][dsp_range]);
kwstasfane1 0:167e85b50250 217
kwstasfane1 0:167e85b50250 218 }
kwstasfane1 0:167e85b50250 219
kwstasfane1 0:167e85b50250 220 void time_interval_type_select()
kwstasfane1 0:167e85b50250 221 {
kwstasfane1 0:167e85b50250 222 if (dsp_time_interval <3)
kwstasfane1 0:167e85b50250 223 {
kwstasfane1 0:167e85b50250 224 dsp_time_interval++;
kwstasfane1 0:167e85b50250 225 }
kwstasfane1 0:167e85b50250 226 else
kwstasfane1 0:167e85b50250 227 {
kwstasfane1 0:167e85b50250 228 dsp_time_interval = 0;
kwstasfane1 0:167e85b50250 229 }
kwstasfane1 0:167e85b50250 230 }
kwstasfane1 0:167e85b50250 231
kwstasfane1 0:167e85b50250 232 //Interrupt service routine to handle the measurement mode selection
kwstasfane1 0:167e85b50250 233 void mode_select()
kwstasfane1 0:167e85b50250 234 {
kwstasfane1 0:167e85b50250 235 if (dsp_mode < 2)
kwstasfane1 0:167e85b50250 236 {
kwstasfane1 0:167e85b50250 237 dsp_mode++;
kwstasfane1 0:167e85b50250 238 }
kwstasfane1 0:167e85b50250 239 else
kwstasfane1 0:167e85b50250 240 {
kwstasfane1 0:167e85b50250 241 dsp_mode = 0;
kwstasfane1 0:167e85b50250 242 }
kwstasfane1 0:167e85b50250 243 }
kwstasfane1 0:167e85b50250 244
kwstasfane1 0:167e85b50250 245 //Interrupt service routine to handle the measurement range selection
kwstasfane1 0:167e85b50250 246 void range_select()
kwstasfane1 0:167e85b50250 247 {
kwstasfane1 0:167e85b50250 248 if (dsp_range < 2)
kwstasfane1 0:167e85b50250 249 {
kwstasfane1 0:167e85b50250 250 dsp_range++;
kwstasfane1 0:167e85b50250 251 }
kwstasfane1 0:167e85b50250 252 else
kwstasfane1 0:167e85b50250 253 {
kwstasfane1 0:167e85b50250 254 dsp_range = 0;
kwstasfane1 0:167e85b50250 255 }
kwstasfane1 0:167e85b50250 256 }
kwstasfane1 0:167e85b50250 257
kwstasfane1 0:167e85b50250 258 void result_calculator()
kwstasfane1 0:167e85b50250 259 {
kwstasfane1 0:167e85b50250 260
kwstasfane1 0:167e85b50250 261 //calculate period from frequency
kwstasfane1 3:e3e73c36a565 262 //float m_period_s = 1/m_freq_hz;
kwstasfane1 3:e3e73c36a565 263 float m_period_ms = period/1000;
kwstasfane1 3:e3e73c36a565 264 float m_freq_hz = 1/(m_period_ms/1000);
kwstasfane1 3:e3e73c36a565 265 m_t_interval_ms = ton/1000;
kwstasfane1 0:167e85b50250 266
kwstasfane1 0:167e85b50250 267 if(dsp_mode == 0) //frequency measurement
kwstasfane1 0:167e85b50250 268 {
kwstasfane1 0:167e85b50250 269 if(dsp_range == 0) //High resolution (MHz)
kwstasfane1 0:167e85b50250 270 {
kwstasfane1 0:167e85b50250 271 m_result = m_freq_hz/1000000;
kwstasfane1 0:167e85b50250 272 if(m_result <= 10.001)
kwstasfane1 0:167e85b50250 273 {
kwstasfane1 0:167e85b50250 274 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 275 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 276 }
kwstasfane1 0:167e85b50250 277 else
kwstasfane1 0:167e85b50250 278 {
kwstasfane1 0:167e85b50250 279 *res="Out-of-range... '>10 MHz !'";
kwstasfane1 0:167e85b50250 280 }
kwstasfane1 0:167e85b50250 281
kwstasfane1 0:167e85b50250 282 }
kwstasfane1 0:167e85b50250 283 else if(dsp_range == 1) //medium resolution (KHz)
kwstasfane1 0:167e85b50250 284 {
kwstasfane1 0:167e85b50250 285 m_result = m_freq_hz/1000;
kwstasfane1 0:167e85b50250 286 if(m_result <= 100.001)
kwstasfane1 0:167e85b50250 287 {
kwstasfane1 0:167e85b50250 288 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 289 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 290 }
kwstasfane1 0:167e85b50250 291 else
kwstasfane1 0:167e85b50250 292 {
kwstasfane1 0:167e85b50250 293 *res="Out-of-range... '>100 KHz !'";
kwstasfane1 0:167e85b50250 294 }
kwstasfane1 0:167e85b50250 295 }
kwstasfane1 0:167e85b50250 296 else //low resolution (Hz)
kwstasfane1 0:167e85b50250 297 {
kwstasfane1 0:167e85b50250 298 m_result = m_freq_hz;
kwstasfane1 0:167e85b50250 299 if(m_result <= 100.001)
kwstasfane1 0:167e85b50250 300 {
kwstasfane1 0:167e85b50250 301 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 302 *res="%3.3f %s";
kwstasfane1 0:167e85b50250 303 }
kwstasfane1 0:167e85b50250 304 else
kwstasfane1 0:167e85b50250 305 {
kwstasfane1 0:167e85b50250 306 *res="Out-of-range... '>100 Hz !'";
kwstasfane1 0:167e85b50250 307 }
kwstasfane1 0:167e85b50250 308
kwstasfane1 0:167e85b50250 309 }
kwstasfane1 0:167e85b50250 310
kwstasfane1 0:167e85b50250 311 /* '*res' assignment was moved inside the ifs, to that in case the current
kwstasfane1 0:167e85b50250 312 nuber to be displayed is higher that acceptable upper limit, to delete
kwstasfane1 0:167e85b50250 313 the displayed measurement, and show warning message*/
kwstasfane1 0:167e85b50250 314
kwstasfane1 0:167e85b50250 315 }
kwstasfane1 0:167e85b50250 316 else if (dsp_mode == 1) //period measurement
kwstasfane1 0:167e85b50250 317 {
kwstasfane1 0:167e85b50250 318 if(dsp_range == 0) //High resolution (2.000 +- 0.0001 ms)
kwstasfane1 0:167e85b50250 319 {
kwstasfane1 3:e3e73c36a565 320 m_result = m_period_ms;
kwstasfane1 0:167e85b50250 321 if(m_result <= 2.0001)
kwstasfane1 0:167e85b50250 322 {
kwstasfane1 0:167e85b50250 323 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 324 *res="%1.4f %s";
kwstasfane1 0:167e85b50250 325 }
kwstasfane1 0:167e85b50250 326 else
kwstasfane1 0:167e85b50250 327 {
kwstasfane1 0:167e85b50250 328 *res="Out-of-range... '>2.000 ms !'";
kwstasfane1 0:167e85b50250 329 }
kwstasfane1 0:167e85b50250 330 }
kwstasfane1 0:167e85b50250 331 else if(dsp_range == 1) //medium resolution (20.00 +- 0.01 ms)
kwstasfane1 0:167e85b50250 332 {
kwstasfane1 3:e3e73c36a565 333 m_result = m_period_ms;
kwstasfane1 0:167e85b50250 334 if(m_result <= 20.01)
kwstasfane1 0:167e85b50250 335 {
kwstasfane1 0:167e85b50250 336 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 337 *res="%2.2f %s";
kwstasfane1 0:167e85b50250 338 }
kwstasfane1 0:167e85b50250 339 else
kwstasfane1 0:167e85b50250 340 {
kwstasfane1 0:167e85b50250 341 *res="Out-of-range... '>20.00 ms !'";
kwstasfane1 0:167e85b50250 342 }
kwstasfane1 0:167e85b50250 343 }
kwstasfane1 0:167e85b50250 344 else //low resolution (2.000 +- 0.001 s)
kwstasfane1 0:167e85b50250 345 {
kwstasfane1 3:e3e73c36a565 346 m_result = m_period_ms/1000;
kwstasfane1 0:167e85b50250 347 if(m_result <= 2.001)
kwstasfane1 0:167e85b50250 348 {
kwstasfane1 0:167e85b50250 349 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 350 *res="%1.3f %s";
kwstasfane1 0:167e85b50250 351 }
kwstasfane1 0:167e85b50250 352 else
kwstasfane1 0:167e85b50250 353 {
kwstasfane1 0:167e85b50250 354 *res="Out-of-range... '>2.000 sec'";
kwstasfane1 0:167e85b50250 355 }
kwstasfane1 0:167e85b50250 356 }
kwstasfane1 0:167e85b50250 357 }
kwstasfane1 0:167e85b50250 358 else // "(dsp_mode == 2)" time interval measurement
kwstasfane1 0:167e85b50250 359 {
kwstasfane1 0:167e85b50250 360 if(dsp_range == 0) //High resolution (2.0000 +- 0.0001 ms)
kwstasfane1 0:167e85b50250 361 {
kwstasfane1 0:167e85b50250 362 m_result = m_t_interval_ms;
kwstasfane1 0:167e85b50250 363 if(m_result <= 2.0001)
kwstasfane1 0:167e85b50250 364 {
kwstasfane1 0:167e85b50250 365 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 366 *res="%1.4f %s";
kwstasfane1 0:167e85b50250 367 }
kwstasfane1 0:167e85b50250 368 else
kwstasfane1 0:167e85b50250 369 {
kwstasfane1 0:167e85b50250 370 *res="Out-of-range... '>2.000 ms !'";
kwstasfane1 0:167e85b50250 371 }
kwstasfane1 0:167e85b50250 372 }
kwstasfane1 0:167e85b50250 373 else if(dsp_range == 1) //medium resolution (20.00 +- 0.01 ms)
kwstasfane1 0:167e85b50250 374 {
kwstasfane1 0:167e85b50250 375 m_result = m_t_interval_ms;
kwstasfane1 0:167e85b50250 376 if(m_result <= 20.01)
kwstasfane1 0:167e85b50250 377 {
kwstasfane1 0:167e85b50250 378 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 379 *res="%2.2f %s";
kwstasfane1 0:167e85b50250 380 }
kwstasfane1 0:167e85b50250 381 else
kwstasfane1 0:167e85b50250 382 {
kwstasfane1 0:167e85b50250 383 *res="Out-of-range... '>20.00 ms !'";
kwstasfane1 0:167e85b50250 384 }
kwstasfane1 0:167e85b50250 385 }
kwstasfane1 0:167e85b50250 386 else //low resolution (2.000+-0.0001ms)
kwstasfane1 0:167e85b50250 387 {
kwstasfane1 0:167e85b50250 388 m_result = m_t_interval_ms/10e3;
kwstasfane1 0:167e85b50250 389 if(m_result <= 2.001)
kwstasfane1 0:167e85b50250 390 {
kwstasfane1 0:167e85b50250 391 //assigns the decimal point precision for each range
kwstasfane1 0:167e85b50250 392 *res="%1.3f %s";
kwstasfane1 0:167e85b50250 393 }
kwstasfane1 0:167e85b50250 394 else
kwstasfane1 0:167e85b50250 395 {
kwstasfane1 0:167e85b50250 396 *res="Out-of-range... '>2.000 sec'";
kwstasfane1 0:167e85b50250 397 }
kwstasfane1 0:167e85b50250 398 }
kwstasfane1 3:e3e73c36a565 399 }
kwstasfane1 0:167e85b50250 400 }
kwstasfane1 0:167e85b50250 401
kwstasfane1 0:167e85b50250 402 /*
kwstasfane1 0:167e85b50250 403 * Implemention of the vMy_Task1(), if 4 inputs are provided,
kwstasfane1 0:167e85b50250 404 * vMy_Task2 is executed.
kwstasfane1 0:167e85b50250 405 *
kwstasfane1 0:167e85b50250 406 void vMy_Task1_isr()
kwstasfane1 0:167e85b50250 407 {
kwstasfane1 0:167e85b50250 408 input_count = input_count + 1;
kwstasfane1 0:167e85b50250 409 printf("Key pressed!: %d\n", input_count);
kwstasfane1 0:167e85b50250 410 if(input_count == 4)
kwstasfane1 0:167e85b50250 411 {
kwstasfane1 0:167e85b50250 412 printf("4 inputs provided...\n");
kwstasfane1 0:167e85b50250 413 input_count = 0;
kwstasfane1 0:167e85b50250 414 printf("Will move onto task2\n");
kwstasfane1 0:167e85b50250 415
kwstasfane1 0:167e85b50250 416 //call task 2 after 2 seconds to close the led, not the same as the
kwstasfane1 0:167e85b50250 417 //ticker, where it is done periodically, timeout only does it once
kwstasfane1 0:167e85b50250 418 task2.attach(&vMy_Task2, 2.0);
kwstasfane1 0:167e85b50250 419 //call this to turn on the led, after it has been dictated to shut down after 2 secs
kwstasfane1 0:167e85b50250 420 vMy_Task2();
kwstasfane1 0:167e85b50250 421 }
kwstasfane1 0:167e85b50250 422 }
kwstasfane1 0:167e85b50250 423
kwstasfane1 0:167e85b50250 424 void vMy_Task2()
kwstasfane1 0:167e85b50250 425 {
kwstasfane1 0:167e85b50250 426 led1=!led1;
kwstasfane1 0:167e85b50250 427 printf("Task 2 Running… LED1 = %d\n", led1.read());
kwstasfane1 0:167e85b50250 428 }
kwstasfane1 0:167e85b50250 429
kwstasfane1 0:167e85b50250 430 void vMy_Task3()
kwstasfane1 0:167e85b50250 431 {
kwstasfane1 0:167e85b50250 432 led2=1;
kwstasfane1 0:167e85b50250 433 led3=0;
kwstasfane1 0:167e85b50250 434 led4=0;
kwstasfane1 0:167e85b50250 435 printf("Task 3 Running… LED2 = %d, LED3 = %d, LED4 = %d\n", led2.read(), led3.read(), led4.read());
kwstasfane1 0:167e85b50250 436 wait(0.01);
kwstasfane1 0:167e85b50250 437
kwstasfane1 0:167e85b50250 438 }
kwstasfane1 0:167e85b50250 439 */