chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

Committer:
f_legge
Date:
Tue Mar 07 22:32:06 2017 +0000
Revision:
13:ad04937ca366
Child:
14:ede0e7ed2745
Changed to global Variables;

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