chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

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?

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