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