chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

Committer:
f_legge
Date:
Tue Mar 07 17:31:42 2017 +0000
Revision:
9:d04a313420c7
Parent:
8:0e46cf19fc45
Child:
10:2414d28be4ba
Added cyc exec timings, not offset yet

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 4:70553c83c65a 14 #include "SDFileSystem"
f_legge 4:70553c83c65a 15
f_legge 4:70553c83c65a 16 #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT)
f_legge 4:70553c83c65a 17 #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT)
f_legge 0:10e3e2697134 18
f_legge 4:70553c83c65a 19 // Pointers to LCD Screen
f_legge 4:70553c83c65a 20 MCP23017 *par_port; // pointer to 16-bit parallel I/O chip
f_legge 4:70553c83c65a 21 WattBob_TextLCD *lcd; // pointer to 2*16 character LCD object
f_legge 7:71a923f423f4 22 FILE *fo; // pointer to uSD object
f_legge 4:70553c83c65a 23
f_legge 4:70553c83c65a 24 // Digital I/O p11 to p20
f_legge 4:70553c83c65a 25 DigitalIn FqIn(p11); // Digital frequency in for measurement
f_legge 4:70553c83c65a 26 DigitalIn DSIn(p12); // Digital switch input
f_legge 9:d04a313420c7 27 DigitalIn DS_sIn(p13); // Digital shutdown switch
f_legge 4:70553c83c65a 28 DigitalOut WD_pulse(p14); // Watchdog Pulse
f_legge 4:70553c83c65a 29 SDFileSystem uSD(p5, p6, p7, p8, "uSD"); //uSD pinout
f_legge 4:70553c83c65a 30
f_legge 4:70553c83c65a 31 // Analogue I/O p15 to p20
f_legge 4:70553c83c65a 32 AnalogIn A1_in(p15); // Analogue input to be filtered
f_legge 4:70553c83c65a 33 AnalogIn A2_in(p16); // Analogue input to be filtered
f_legge 4:70553c83c65a 34
f_legge 4:70553c83c65a 35 // Timer objects
f_legge 9:d04a313420c7 36 Ticker tick; // Clock timer for CycExec
f_legge 4:70553c83c65a 37 Timer timer; // Frequency Timer
f_legge 9:d04a313420c7 38 Timer T5; // Timer for idle states
f_legge 4:70553c83c65a 39
f_legge 4:70553c83c65a 40 // Constant Declaration
f_legge 5:e1ade53bce83 41 const int SampFreq = 100; // Sampling Frequency
f_legge 5:e1ade53bce83 42 const int WD = 6000; // Watchdog pulse length
f_legge 4:70553c83c65a 43
f_legge 4:70553c83c65a 44 // Variable Declaration
f_legge 4:70553c83c65a 45 long int tck = 0; // Used to define what task is called (CycExec)
f_legge 0:10e3e2697134 46
f_legge 4:70553c83c65a 47 int period = 0; // Frequency timer variable (Frequency Check)
f_legge 4:70553c83c65a 48 int freq = 0; // Frequency return variable (Frequency Check)
f_legge 4:70553c83c65a 49
f_legge 4:70553c83c65a 50 bool switch_state = 0; // Switch high or low (Digital In)
f_legge 4:70553c83c65a 51
f_legge 4:70553c83c65a 52 int A1_val = 0; // Analogue 1 return variable (Analogue In)
f_legge 4:70553c83c65a 53 int A2_val = 0; // Analogue 2 return variable (Analogue In)
f_legge 4:70553c83c65a 54
f_legge 9:d04a313420c7 55 int error_code = 0; // Error code variable
f_legge 6:c538f317f426 56
f_legge 9:d04a313420c7 57 int logcount = 0; // Keep track of log number
f_legge 4:70553c83c65a 58
f_legge 4:70553c83c65a 59 ////////////////////////////////////////////////////////////////////////////////
f_legge 4:70553c83c65a 60 //
f_legge 4:70553c83c65a 61 // Main Program
f_legge 4:70553c83c65a 62 //
f_legge 4:70553c83c65a 63
f_legge 4:70553c83c65a 64 int main()
f_legge 4:70553c83c65a 65 {
f_legge 4:70553c83c65a 66 // LCD Init
f_legge 4:70553c83c65a 67 par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
f_legge 4:70553c83c65a 68 lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display
f_legge 4:70553c83c65a 69 par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
f_legge 4:70553c83c65a 70 lcd->cls(); // clear display
f_legge 4:70553c83c65a 71
f_legge 4:70553c83c65a 72 // .csv log Init
f_legge 7:71a923f423f4 73 fo = fopen ("/uSD/log.csv", "a"); // Pointer to log file on uSD
f_legge 7:71a923f423f4 74 fprintf(fo, "Log of Frazer Legge's Embedded Software Assignment 2\n\n");
f_legge 4:70553c83c65a 75
f_legge 4:70553c83c65a 76 //
f_legge 4:70553c83c65a 77 tick.attach(&CycExec, 0.025); // Period set to 25ms
f_legge 4:70553c83c65a 78 while(1){
f_legge 4:70553c83c65a 79 }
f_legge 0:10e3e2697134 80 }
f_legge 4:70553c83c65a 81
f_legge 4:70553c83c65a 82 void CycExec()
f_legge 4:70553c83c65a 83 {
f_legge 9:d04a313420c7 84 if(tck % 40 = 0){ // Every Second (needs offset)
f_legge 9:d04a313420c7 85 Task1(timer, FqIn, SampFreq, period, freq);
f_legge 9:d04a313420c7 86 }
f_legge 9:d04a313420c7 87 else if(tck % 13 = 0){ // Every 1/3 sec
f_legge 9:d04a313420c7 88 Task2(DSIn, switch_state);
f_legge 9:d04a313420c7 89 }
f_legge 9:d04a313420c7 90 else if(tck % 80 = 0){ // Every 2 sec
f_legge 9:d04a313420c7 91 Task3(WD_pulse, WD);
f_legge 9:d04a313420c7 92 }
f_legge 9:d04a313420c7 93 else if(tck % 20 = 0){ // Every 1/2 sec
f_legge 9:d04a313420c7 94 Task4(A1_val, A2_val, A1_in, A2_in);
f_legge 9:d04a313420c7 95 }
f_legge 9:d04a313420c7 96 else if(tck % 80 = 0){ // Every 2 sec
f_legge 9:d04a313420c7 97 Task5(lcd, freq, switch_state, A1_val, A2_val);
f_legge 9:d04a313420c7 98 }
f_legge 9:d04a313420c7 99 else if(tck % 20 = 0){ // Every 1/2 sec
f_legge 9:d04a313420c7 100 Task7(logcount, fo, freq, switch_state, A1_val, A2_val);
f_legge 9:d04a313420c7 101 }
f_legge 9:d04a313420c7 102 else{
f_legge 9:d04a313420c7 103 Task8(DS_sIn, ticker, fo, T5);
f_legge 9:d04a313420c7 104 }
f_legge 9:d04a313420c7 105 }
f_legge 8:0e46cf19fc45 106
f_legge 8:0e46cf19fc45 107
f_legge 8:0e46cf19fc45 108
f_legge 8:0e46cf19fc45 109
f_legge 8:0e46cf19fc45 110
f_legge 8:0e46cf19fc45 111
f_legge 8:0e46cf19fc45 112
f_legge 8:0e46cf19fc45 113
f_legge 8:0e46cf19fc45 114
f_legge 8:0e46cf19fc45 115
f_legge 8:0e46cf19fc45 116
f_legge 4:70553c83c65a 117
f_legge 4:70553c83c65a 118
f_legge 4:70553c83c65a 119
f_legge 4:70553c83c65a 120