chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

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?

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