chad
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
main.cpp@12:d088f8024cf0, 2017-03-07 (annotated)
- Committer:
- f_legge
- Date:
- Tue Mar 07 21:18:02 2017 +0000
- Revision:
- 12:d088f8024cf0
- Parent:
- 11:b48ff77c664a
- Child:
- 13:ad04937ca366
Using tck;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
f_legge | 4:70553c83c65a | 1 | // Paramater Allocation |
f_legge | 4:70553c83c65a | 2 | // Paramater: 17 |
f_legge | 4:70553c83c65a | 3 | // Log Option: 1 (uSD) |
f_legge | 4:70553c83c65a | 4 | // Watchdog Pulse Length: 6ms |
f_legge | 4:70553c83c65a | 5 | // Watchdog Repetion Rate: 0.5 |
f_legge | 4:70553c83c65a | 6 | // Error Display: 1 (LCD) |
f_legge | 4:70553c83c65a | 7 | // Execution time display: Task5 (LDC display) |
f_legge | 4:70553c83c65a | 8 | |
f_legge | 4:70553c83c65a | 9 | |
f_legge | 4:70553c83c65a | 10 | |
f_legge | 0:10e3e2697134 | 11 | #include "mbed.h" |
f_legge | 4:70553c83c65a | 12 | #include "MCP23017.h" |
f_legge | 4:70553c83c65a | 13 | #include "WattBob_TextLCD.h" |
f_legge | 11:b48ff77c664a | 14 | #include "SDFileSystem.h" |
f_legge | 11:b48ff77c664a | 15 | #include "tasks.h" |
f_legge | 12:d088f8024cf0 | 16 | #include "rtos.h" |
f_legge | 4:70553c83c65a | 17 | |
f_legge | 4:70553c83c65a | 18 | #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT) |
f_legge | 4:70553c83c65a | 19 | #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT) |
f_legge | 0:10e3e2697134 | 20 | |
f_legge | 4:70553c83c65a | 21 | // Pointers to LCD Screen |
f_legge | 4:70553c83c65a | 22 | MCP23017 *par_port; // pointer to 16-bit parallel I/O chip |
f_legge | 4:70553c83c65a | 23 | WattBob_TextLCD *lcd; // pointer to 2*16 character LCD object |
f_legge | 7:71a923f423f4 | 24 | FILE *fo; // pointer to uSD object |
f_legge | 4:70553c83c65a | 25 | |
f_legge | 4:70553c83c65a | 26 | // Digital I/O p11 to p20 |
f_legge | 10:2414d28be4ba | 27 | DigitalIn Fq(p11); // Digital frequency in for measurement |
f_legge | 10:2414d28be4ba | 28 | DigitalIn DS(p12); // Digital switch input |
f_legge | 10:2414d28be4ba | 29 | DigitalIn DS_s(p13); // Digital shutdown switch |
f_legge | 10:2414d28be4ba | 30 | DigitalOut WD_pulse_out(p14); // Watchdog Pulse |
f_legge | 12:d088f8024cf0 | 31 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //uSD pinout |
f_legge | 4:70553c83c65a | 32 | |
f_legge | 4:70553c83c65a | 33 | // Analogue I/O p15 to p20 |
f_legge | 11:b48ff77c664a | 34 | AnalogIn A1_(p15); // Analogue input to be filtered |
f_legge | 11:b48ff77c664a | 35 | AnalogIn A2_(p16); // Analogue input to be filtered |
f_legge | 4:70553c83c65a | 36 | |
f_legge | 4:70553c83c65a | 37 | // Timer objects |
f_legge | 12:d088f8024cf0 | 38 | Thread tick; // Clock timer for CycExec |
f_legge | 4:70553c83c65a | 39 | Timer timer; // Frequency Timer |
f_legge | 9:d04a313420c7 | 40 | Timer T5; // Timer for idle states |
f_legge | 4:70553c83c65a | 41 | |
f_legge | 4:70553c83c65a | 42 | // Constant Declaration |
f_legge | 5:e1ade53bce83 | 43 | const int SampFreq = 100; // Sampling Frequency |
f_legge | 5:e1ade53bce83 | 44 | const int WD = 6000; // Watchdog pulse length |
f_legge | 4:70553c83c65a | 45 | |
f_legge | 4:70553c83c65a | 46 | // Variable Declaration |
f_legge | 4:70553c83c65a | 47 | long int tck = 0; // Used to define what task is called (CycExec) |
f_legge | 0:10e3e2697134 | 48 | |
f_legge | 10:2414d28be4ba | 49 | bool FqIn = Fq; // Frequency input boolean |
f_legge | 4:70553c83c65a | 50 | int period = 0; // Frequency timer variable (Frequency Check) |
f_legge | 4:70553c83c65a | 51 | int freq = 0; // Frequency return variable (Frequency Check) |
f_legge | 4:70553c83c65a | 52 | |
f_legge | 10:2414d28be4ba | 53 | bool DSIn = DS; // Switch Input boolean |
f_legge | 12:d088f8024cf0 | 54 | int switch_state = 0; // Switch high or low (Digital In) |
f_legge | 10:2414d28be4ba | 55 | |
f_legge | 12:d088f8024cf0 | 56 | int WD_pulse; |
f_legge | 12:d088f8024cf0 | 57 | |
f_legge | 10:2414d28be4ba | 58 | |
f_legge | 11:b48ff77c664a | 59 | int A1_in = A1_; // Analogue 1 input variable |
f_legge | 11:b48ff77c664a | 60 | int A2_in = A2_; // Analogue 2 input variable |
f_legge | 4:70553c83c65a | 61 | int A1_val = 0; // Analogue 1 return variable (Analogue In) |
f_legge | 4:70553c83c65a | 62 | int A2_val = 0; // Analogue 2 return variable (Analogue In) |
f_legge | 4:70553c83c65a | 63 | |
f_legge | 11:b48ff77c664a | 64 | bool DS_sIn = DS_s; // Shutdown Switch boolean |
f_legge | 9:d04a313420c7 | 65 | int error_code = 0; // Error code variable |
f_legge | 6:c538f317f426 | 66 | |
f_legge | 9:d04a313420c7 | 67 | int logcount = 0; // Keep track of log number |
f_legge | 4:70553c83c65a | 68 | |
f_legge | 4:70553c83c65a | 69 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 4:70553c83c65a | 70 | // |
f_legge | 4:70553c83c65a | 71 | // Main Program |
f_legge | 4:70553c83c65a | 72 | // |
f_legge | 11:b48ff77c664a | 73 | void CycExec(); |
f_legge | 4:70553c83c65a | 74 | |
f_legge | 4:70553c83c65a | 75 | int main() |
f_legge | 4:70553c83c65a | 76 | { |
f_legge | 4:70553c83c65a | 77 | // LCD Init |
f_legge | 4:70553c83c65a | 78 | par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip |
f_legge | 4:70553c83c65a | 79 | lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display |
f_legge | 4:70553c83c65a | 80 | par_port->write_bit(1,BL_BIT); // turn LCD backlight ON |
f_legge | 4:70553c83c65a | 81 | lcd->cls(); // clear display |
f_legge | 4:70553c83c65a | 82 | |
f_legge | 4:70553c83c65a | 83 | // .csv log Init |
f_legge | 12:d088f8024cf0 | 84 | fo = fopen ("/sd/log.txt", "a"); // Pointer to log file on uSD |
f_legge | 7:71a923f423f4 | 85 | fprintf(fo, "Log of Frazer Legge's Embedded Software Assignment 2\n\n"); |
f_legge | 4:70553c83c65a | 86 | |
f_legge | 4:70553c83c65a | 87 | // |
f_legge | 12:d088f8024cf0 | 88 | // tick.attach(&CycExec, 0.025); // Period set to 25ms |
f_legge | 4:70553c83c65a | 89 | while(1){ |
f_legge | 12:d088f8024cf0 | 90 | tick.start(&CycExec); |
f_legge | 12:d088f8024cf0 | 91 | wait_ms(25); |
f_legge | 4:70553c83c65a | 92 | } |
f_legge | 0:10e3e2697134 | 93 | } |
f_legge | 4:70553c83c65a | 94 | |
f_legge | 4:70553c83c65a | 95 | void CycExec() |
f_legge | 4:70553c83c65a | 96 | { |
f_legge | 11:b48ff77c664a | 97 | if(tck % 40 == 4){ // Every Second (needs offset) |
f_legge | 9:d04a313420c7 | 98 | Task1(timer, FqIn, SampFreq, period, freq); |
f_legge | 9:d04a313420c7 | 99 | } |
f_legge | 11:b48ff77c664a | 100 | else if(tck % 13 == 8){ // Every 1/3 sec |
f_legge | 9:d04a313420c7 | 101 | Task2(DSIn, switch_state); |
f_legge | 9:d04a313420c7 | 102 | } |
f_legge | 11:b48ff77c664a | 103 | else if(tck % 80 == 7){ // Every 2 sec |
f_legge | 12:d088f8024cf0 | 104 | Task3(WD_pulse_out, WD); |
f_legge | 9:d04a313420c7 | 105 | } |
f_legge | 11:b48ff77c664a | 106 | else if(tck % 20 == 0){ // Every 1/2 sec |
f_legge | 9:d04a313420c7 | 107 | Task4(A1_val, A2_val, A1_in, A2_in); |
f_legge | 9:d04a313420c7 | 108 | } |
f_legge | 11:b48ff77c664a | 109 | else if(tck % 80 == 1){ // Every 2 sec |
f_legge | 10:2414d28be4ba | 110 | Task5(freq, switch_state, A1_val, A2_val); |
f_legge | 10:2414d28be4ba | 111 | } |
f_legge | 11:b48ff77c664a | 112 | else if(tck % 20 == 3){ // Every 0.5 sec |
f_legge | 10:2414d28be4ba | 113 | Task6(switch_state, A1_val, A2_val, error_code); |
f_legge | 9:d04a313420c7 | 114 | } |
f_legge | 11:b48ff77c664a | 115 | else if(tck % 20 == 10){ // Every 1/2 sec |
f_legge | 10:2414d28be4ba | 116 | Task7(logcount, freq, switch_state, A1_val, A2_val); |
f_legge | 9:d04a313420c7 | 117 | } |
f_legge | 12:d088f8024cf0 | 118 | //else{ |
f_legge | 12:d088f8024cf0 | 119 | // Task8(DS_sIn, tick, T5); |
f_legge | 12:d088f8024cf0 | 120 | //} |
f_legge | 10:2414d28be4ba | 121 | tck++; |
f_legge | 12:d088f8024cf0 | 122 | WD_pulse_out = WD_pulse; |
f_legge | 9:d04a313420c7 | 123 | } |
f_legge | 8:0e46cf19fc45 | 124 | |
f_legge | 8:0e46cf19fc45 | 125 | |
f_legge | 8:0e46cf19fc45 | 126 | |
f_legge | 8:0e46cf19fc45 | 127 | |
f_legge | 8:0e46cf19fc45 | 128 | |
f_legge | 8:0e46cf19fc45 | 129 | |
f_legge | 8:0e46cf19fc45 | 130 | |
f_legge | 8:0e46cf19fc45 | 131 | |
f_legge | 8:0e46cf19fc45 | 132 | |
f_legge | 8:0e46cf19fc45 | 133 | |
f_legge | 8:0e46cf19fc45 | 134 | |
f_legge | 4:70553c83c65a | 135 | |
f_legge | 4:70553c83c65a | 136 | |
f_legge | 4:70553c83c65a | 137 | |
f_legge | 4:70553c83c65a | 138 |