chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

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?

UserRevisionLine numberNew 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