chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

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?

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