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