chad
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
tasks.cpp@13:ad04937ca366, 2017-03-07 (annotated)
- Committer:
- f_legge
- Date:
- Tue Mar 07 22:32:06 2017 +0000
- Revision:
- 13:ad04937ca366
- Child:
- 14:ede0e7ed2745
Changed to global Variables;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
f_legge | 13:ad04937ca366 | 1 | #include "main.h" |
f_legge | 13:ad04937ca366 | 2 | |
f_legge | 13:ad04937ca366 | 3 | // Task 1: Measure input frequency |
f_legge | 13:ad04937ca366 | 4 | void Task1(void) |
f_legge | 13:ad04937ca366 | 5 | { |
f_legge | 13:ad04937ca366 | 6 | timer.reset(); |
f_legge | 13:ad04937ca366 | 7 | |
f_legge | 13:ad04937ca366 | 8 | // If the input signal is low, wait for a rising edge to start counting |
f_legge | 13:ad04937ca366 | 9 | if (FqIn == 0) |
f_legge | 13:ad04937ca366 | 10 | { |
f_legge | 13:ad04937ca366 | 11 | while(FqIn == 0) |
f_legge | 13:ad04937ca366 | 12 | wait_us(SampFreq); |
f_legge | 13:ad04937ca366 | 13 | timer.start(); // Start timer |
f_legge | 13:ad04937ca366 | 14 | while(FqIn == 1) // Keep counting as long as signal is high |
f_legge | 13:ad04937ca366 | 15 | wait_us(SampFreq); |
f_legge | 13:ad04937ca366 | 16 | } |
f_legge | 13:ad04937ca366 | 17 | |
f_legge | 13:ad04937ca366 | 18 | // If the input signal is high, wait for a falling edge to start counting |
f_legge | 13:ad04937ca366 | 19 | else if (FqIn == 1) |
f_legge | 13:ad04937ca366 | 20 | { |
f_legge | 13:ad04937ca366 | 21 | while(FqIn == 1) |
f_legge | 13:ad04937ca366 | 22 | wait_us(SampFreq); |
f_legge | 13:ad04937ca366 | 23 | timer.start(); // Start timer |
f_legge | 13:ad04937ca366 | 24 | while(FqIn == 0) // Keep counting as long as signal is high |
f_legge | 13:ad04937ca366 | 25 | wait_us(SampFreq); |
f_legge | 13:ad04937ca366 | 26 | } |
f_legge | 13:ad04937ca366 | 27 | |
f_legge | 13:ad04937ca366 | 28 | timer.stop(); // Stop counting when signal changes |
f_legge | 13:ad04937ca366 | 29 | period = timer.read()*2; // Convert the time into a period |
f_legge | 13:ad04937ca366 | 30 | freq = 1000000/period; // Convert the period into a frequency |
f_legge | 13:ad04937ca366 | 31 | |
f_legge | 13:ad04937ca366 | 32 | lcd->locate(1,0); |
f_legge | 13:ad04937ca366 | 33 | lcd->printf("F: %d", timer.read()); |
f_legge | 13:ad04937ca366 | 34 | |
f_legge | 13:ad04937ca366 | 35 | return; |
f_legge | 13:ad04937ca366 | 36 | } |
f_legge | 13:ad04937ca366 | 37 | |
f_legge | 13:ad04937ca366 | 38 | |
f_legge | 13:ad04937ca366 | 39 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 40 | // |
f_legge | 13:ad04937ca366 | 41 | // Read Digital input switch |
f_legge | 13:ad04937ca366 | 42 | // |
f_legge | 13:ad04937ca366 | 43 | void Task2(void) |
f_legge | 13:ad04937ca366 | 44 | { |
f_legge | 13:ad04937ca366 | 45 | if (DSIn == 1) |
f_legge | 13:ad04937ca366 | 46 | switch_state = 1; |
f_legge | 13:ad04937ca366 | 47 | else if (DSIn == 0) |
f_legge | 13:ad04937ca366 | 48 | switch_state = 0; |
f_legge | 13:ad04937ca366 | 49 | else |
f_legge | 13:ad04937ca366 | 50 | switch_state = 0; |
f_legge | 13:ad04937ca366 | 51 | // switch_state = DSIn == 1 ? 1: 0; |
f_legge | 13:ad04937ca366 | 52 | return; |
f_legge | 13:ad04937ca366 | 53 | } |
f_legge | 13:ad04937ca366 | 54 | |
f_legge | 13:ad04937ca366 | 55 | |
f_legge | 13:ad04937ca366 | 56 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 57 | // |
f_legge | 13:ad04937ca366 | 58 | // Output watchdog timer pulse |
f_legge | 13:ad04937ca366 | 59 | // |
f_legge | 13:ad04937ca366 | 60 | void Task3(void) |
f_legge | 13:ad04937ca366 | 61 | { |
f_legge | 13:ad04937ca366 | 62 | WD_pulse = 1; // Pulse High |
f_legge | 13:ad04937ca366 | 63 | wait_us(WD); // Leave high for specified length |
f_legge | 13:ad04937ca366 | 64 | WD_pulse = 0; |
f_legge | 13:ad04937ca366 | 65 | return; |
f_legge | 13:ad04937ca366 | 66 | } |
f_legge | 13:ad04937ca366 | 67 | |
f_legge | 13:ad04937ca366 | 68 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 69 | // |
f_legge | 13:ad04937ca366 | 70 | // Read and filter 2 analogue inputs |
f_legge | 13:ad04937ca366 | 71 | // 3.3V max |
f_legge | 13:ad04937ca366 | 72 | // |
f_legge | 13:ad04937ca366 | 73 | void Task4(void) |
f_legge | 13:ad04937ca366 | 74 | { |
f_legge | 13:ad04937ca366 | 75 | A1_val = 0; |
f_legge | 13:ad04937ca366 | 76 | A2_val = 0; |
f_legge | 13:ad04937ca366 | 77 | |
f_legge | 13:ad04937ca366 | 78 | for(int i=0; i<3; i++) |
f_legge | 13:ad04937ca366 | 79 | { |
f_legge | 13:ad04937ca366 | 80 | A1_val = A1_val + A1_val + (A1_in * 3.3); |
f_legge | 13:ad04937ca366 | 81 | A2_val = A2_val + A2_val + (A2_in * 3.3); |
f_legge | 13:ad04937ca366 | 82 | } |
f_legge | 13:ad04937ca366 | 83 | |
f_legge | 13:ad04937ca366 | 84 | A1_val = (A1_val / 3); |
f_legge | 13:ad04937ca366 | 85 | A2_val = (A2_val / 3); |
f_legge | 13:ad04937ca366 | 86 | |
f_legge | 13:ad04937ca366 | 87 | return; |
f_legge | 13:ad04937ca366 | 88 | } |
f_legge | 13:ad04937ca366 | 89 | |
f_legge | 13:ad04937ca366 | 90 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 91 | // |
f_legge | 13:ad04937ca366 | 92 | // Display Frequency, digital and filterd analogue values on LCD |
f_legge | 13:ad04937ca366 | 93 | // |
f_legge | 13:ad04937ca366 | 94 | void Task5(void) |
f_legge | 13:ad04937ca366 | 95 | { |
f_legge | 13:ad04937ca366 | 96 | lcd->cls(); |
f_legge | 13:ad04937ca366 | 97 | lcd->locate(0,0); |
f_legge | 13:ad04937ca366 | 98 | //lcd->printf("F%d S%d% A1d% A2d",freq,switch_state,A1_val,A2_val); |
f_legge | 13:ad04937ca366 | 99 | lcd->printf("F%d",freq); |
f_legge | 13:ad04937ca366 | 100 | //lcd->printf("test"); |
f_legge | 13:ad04937ca366 | 101 | |
f_legge | 13:ad04937ca366 | 102 | return; |
f_legge | 13:ad04937ca366 | 103 | } |
f_legge | 13:ad04937ca366 | 104 | |
f_legge | 13:ad04937ca366 | 105 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 106 | // |
f_legge | 13:ad04937ca366 | 107 | // Error check |
f_legge | 13:ad04937ca366 | 108 | // If switch_1 is ON & (average_analogue_in_1 > average_analogue_in_2) error code 3 |
f_legge | 13:ad04937ca366 | 109 | // Else error code 0 |
f_legge | 13:ad04937ca366 | 110 | // |
f_legge | 13:ad04937ca366 | 111 | void Task6(void) |
f_legge | 13:ad04937ca366 | 112 | {/* |
f_legge | 13:ad04937ca366 | 113 | if(switch_state == 1 && (A1_val > A2_val)) |
f_legge | 13:ad04937ca366 | 114 | error_code = 3; |
f_legge | 13:ad04937ca366 | 115 | else |
f_legge | 13:ad04937ca366 | 116 | error_code = 0;*/ |
f_legge | 13:ad04937ca366 | 117 | |
f_legge | 13:ad04937ca366 | 118 | error_code++; |
f_legge | 13:ad04937ca366 | 119 | |
f_legge | 13:ad04937ca366 | 120 | //lcd->cls(); |
f_legge | 13:ad04937ca366 | 121 | lcd->locate(1,0); |
f_legge | 13:ad04937ca366 | 122 | lcd->printf("Error: %d", error_code); |
f_legge | 13:ad04937ca366 | 123 | |
f_legge | 13:ad04937ca366 | 124 | wait_us(100); |
f_legge | 13:ad04937ca366 | 125 | return; |
f_legge | 13:ad04937ca366 | 126 | } |
f_legge | 13:ad04937ca366 | 127 | |
f_legge | 13:ad04937ca366 | 128 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 129 | // |
f_legge | 13:ad04937ca366 | 130 | // Log frequency, digital and filtered analogue values to uSD |
f_legge | 13:ad04937ca366 | 131 | // |
f_legge | 13:ad04937ca366 | 132 | void Task7(void) |
f_legge | 13:ad04937ca366 | 133 | { |
f_legge | 13:ad04937ca366 | 134 | logcount++; |
f_legge | 13:ad04937ca366 | 135 | fprintf(fp,"Log: %d,Freq: %dHz,Digital_In: %d,Analogue_1: %d,Analogue_2: %d\n",logcount,freq,switch_state,A1_val,A2_val); |
f_legge | 13:ad04937ca366 | 136 | |
f_legge | 13:ad04937ca366 | 137 | return; |
f_legge | 13:ad04937ca366 | 138 | } |
f_legge | 13:ad04937ca366 | 139 | |
f_legge | 13:ad04937ca366 | 140 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 13:ad04937ca366 | 141 | // |
f_legge | 13:ad04937ca366 | 142 | // Shutdown on switch |
f_legge | 13:ad04937ca366 | 143 | // |
f_legge | 13:ad04937ca366 | 144 | /*void Task8() |
f_legge | 13:ad04937ca366 | 145 | { |
f_legge | 13:ad04937ca366 | 146 | if(DS_sIn == 1) |
f_legge | 13:ad04937ca366 | 147 | { |
f_legge | 13:ad04937ca366 | 148 | tick.detach(); |
f_legge | 13:ad04937ca366 | 149 | fprintf(fp, "\nTask 5 took %dms to complete\n", T5.read_ms()); |
f_legge | 13:ad04937ca366 | 150 | fprintf(fp, "\nCyclic Executive stopped\n"); |
f_legge | 13:ad04937ca366 | 151 | fclose(fp); |
f_legge | 13:ad04937ca366 | 152 | } |
f_legge | 13:ad04937ca366 | 153 | else{ |
f_legge | 13:ad04937ca366 | 154 | } |
f_legge | 13:ad04937ca366 | 155 | } |
f_legge | 13:ad04937ca366 | 156 | */ |