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