Luke Cartwright / Mbed 2 deprecated ELEC2645_Project_el18loc_nearlythere

Dependencies:   mbed

Committer:
lukeocarwright
Date:
Fri May 08 20:08:36 2020 +0000
Revision:
12:7a399a476cfd
Parent:
11:6ae098535da9
Child:
13:27300c533dd1
Added suitable title screen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lukeocarwright 2:07cef563acdf 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
lukeocarwright 1:766a293c9b07 7 Name: Luke Cartwright
lukeocarwright 1:766a293c9b07 8 Username: el18loc
lukeocarwright 1:766a293c9b07 9 Student ID Number: 201225242
lukeocarwright 2:07cef563acdf 10 Start Date: 06/02/2020
lukeocarwright 7:33cb5f2db1ee 11 Last Edited: 04/05/2020
eencae 0:b7f1f47bb26a 12 */
eencae 0:b7f1f47bb26a 13
lukeocarwright 5:e785b9cd58c9 14 /* TO DO:
lukeocarwright 8:f305ea78b2b1 15 add Menu functionality from front.cpp
lukeocarwright 8:f305ea78b2b1 16 front.h warning sort
lukeocarwright 7:33cb5f2db1ee 17 Settings tab
lukeocarwright 12:7a399a476cfd 18 sort printing waveform submenu passing
lukeocarwright 7:33cb5f2db1ee 19 Generate sound
lukeocarwright 7:33cb5f2db1ee 20 ADSR
lukeocarwright 8:f305ea78b2b1 21 MIDI
lukeocarwright 8:f305ea78b2b1 22 LEDS INSTALL
lukeocarwright 5:e785b9cd58c9 23 */
lukeocarwright 2:07cef563acdf 24 // Includes
eencae 0:b7f1f47bb26a 25 #include "mbed.h"
eencae 0:b7f1f47bb26a 26 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 27 #include "N5110.h"
lukeocarwright 8:f305ea78b2b1 28 #include "Menu.h"
lukeocarwright 7:33cb5f2db1ee 29 #include "startup.h"
lukeocarwright 7:33cb5f2db1ee 30 #include "Front.h"
eencae 0:b7f1f47bb26a 31
lukeocarwright 9:f6ba53e355a0 32 #ifdef DEBUG
lukeocarwright 9:f6ba53e355a0 33 # include "Debug.h"
lukeocarwright 9:f6ba53e355a0 34 #endif
lukeocarwright 9:f6ba53e355a0 35
lukeocarwright 2:07cef563acdf 36 // Objects
eencae 0:b7f1f47bb26a 37 Gamepad pad;
eencae 0:b7f1f47bb26a 38 N5110 lcd;
lukeocarwright 8:f305ea78b2b1 39 Menu menu;
lukeocarwright 7:33cb5f2db1ee 40 startup start;
lukeocarwright 4:9b7ea5528a5c 41 Ticker down;
lukeocarwright 4:9b7ea5528a5c 42 Ticker period;
lukeocarwright 4:9b7ea5528a5c 43
lukeocarwright 4:9b7ea5528a5c 44 DigitalOut rca(PTC4);
lukeocarwright 2:07cef563acdf 45 Serial pc(USBTX, USBRX);
lukeocarwright 2:07cef563acdf 46
lukeocarwright 2:07cef563acdf 47 //Functions
lukeocarwright 5:e785b9cd58c9 48 //void squareWave();
lukeocarwright 4:9b7ea5528a5c 49 //void sinspeak();
lukeocarwright 5:e785b9cd58c9 50 //void down_isr();
lukeocarwright 5:e785b9cd58c9 51 //void up_isr();
lukeocarwright 2:07cef563acdf 52
lukeocarwright 2:07cef563acdf 53
lukeocarwright 2:07cef563acdf 54 //Global Variables
lukeocarwright 4:9b7ea5528a5c 55 // all times drastically slowed to attempt debugging in teraterm
lukeocarwright 7:33cb5f2db1ee 56 //float g_period = 0.002;
lukeocarwright 7:33cb5f2db1ee 57 //float g_unused= g_period*1000000.0f;
lukeocarwright 7:33cb5f2db1ee 58 //int g_period_us=g_unused;
lukeocarwright 7:33cb5f2db1ee 59 //volatile uint64_t g_uptime_us = g_period_us/2; // placeholder value
lukeocarwright 4:9b7ea5528a5c 60 //isr interrupt flags
lukeocarwright 7:33cb5f2db1ee 61 //volatile int g_upflag=1;
lukeocarwright 7:33cb5f2db1ee 62 //volatile int g_downflag=1;
eencae 0:b7f1f47bb26a 63
lukeocarwright 9:f6ba53e355a0 64 //volatile extern uint16_t sin_wavtable[1024];
lukeocarwright 9:f6ba53e355a0 65 //volatile extern double sin_d[1024];
lukeocarwright 9:f6ba53e355a0 66
lukeocarwright 9:f6ba53e355a0 67
lukeocarwright 10:258a1eca02cc 68 volatile extern uint16_t sin_wavtable[1024];
lukeocarwright 10:258a1eca02cc 69 volatile extern uint16_t tri_wavtable[1024];
lukeocarwright 11:6ae098535da9 70 volatile extern uint16_t pulse_wavtable[1024];
lukeocarwright 10:258a1eca02cc 71
eencae 0:b7f1f47bb26a 72 int main()
eencae 0:b7f1f47bb26a 73 {
lukeocarwright 2:07cef563acdf 74 printf("RUNNING CODE \n");
lukeocarwright 7:33cb5f2db1ee 75 start.initialise(lcd,pad); //initialises board and displays start screen
lukeocarwright 9:f6ba53e355a0 76
lukeocarwright 9:f6ba53e355a0 77 #ifdef DEBUG
lukeocarwright 9:f6ba53e355a0 78 printf("DEBUG COMPILE RUNNING\n");
lukeocarwright 9:f6ba53e355a0 79 run_LUTs_debug();
lukeocarwright 9:f6ba53e355a0 80 #endif
lukeocarwright 10:258a1eca02cc 81
lukeocarwright 7:33cb5f2db1ee 82 menu.mainmenu(lcd,pad);
lukeocarwright 5:e785b9cd58c9 83 //squareWave(); //generates pulse wave modulated by sin wave
lukeocarwright 4:9b7ea5528a5c 84 //sinspeak();
lukeocarwright 2:07cef563acdf 85 }
lukeocarwright 2:07cef563acdf 86
lukeocarwright 5:e785b9cd58c9 87 /*
lukeocarwright 4:9b7ea5528a5c 88 void squareWave()
lukeocarwright 4:9b7ea5528a5c 89 {
lukeocarwright 4:9b7ea5528a5c 90 printf("Generating SIN PWM \n");
lukeocarwright 4:9b7ea5528a5c 91
lukeocarwright 4:9b7ea5528a5c 92 int i=0; //int based iterator
lukeocarwright 4:9b7ea5528a5c 93 float ifl=0; //float based itterator
lukeocarwright 4:9b7ea5528a5c 94 float f=50; //frequency of sin wave produced
lukeocarwright 4:9b7ea5528a5c 95 period.attach_us(&up_isr,g_period_us); //ticker to write 1 to rca
lukeocarwright 4:9b7ea5528a5c 96 down.attach_us(&down_isr,g_uptime_us); //ticker to write 0 to rca
lukeocarwright 5:e785b9cd58c9 97
lukeocarwright 5:e785b9cd58c9 98
lukeocarwright 4:9b7ea5528a5c 99 printf("g_period_us: %d \n", g_period_us);
lukeocarwright 4:9b7ea5528a5c 100 printf("sin Frequency: %f \n", f);
lukeocarwright 4:9b7ea5528a5c 101
lukeocarwright 4:9b7ea5528a5c 102 while (1) { //continual loop for pulse production
lukeocarwright 4:9b7ea5528a5c 103 float dutyratio = wavtable[i]; //calcualtes duty ratio of pulse
lukeocarwright 5:e785b9cd58c9 104
lukeocarwright 4:9b7ea5528a5c 105 g_uptime_us= dutyratio*g_period_us; //calculates duty ratio in usecs
lukeocarwright 4:9b7ea5528a5c 106 if (g_uptime_us<1) {
lukeocarwright 4:9b7ea5528a5c 107 g_uptime_us=g_period_us/100;
lukeocarwright 4:9b7ea5528a5c 108 } //sets to be value for timebeing to eliminate 0 error
lukeocarwright 4:9b7ea5528a5c 109 //float f=440*(pad.read_pot1()+1); //removed for simplification
lukeocarwright 5:e785b9cd58c9 110
lukeocarwright 4:9b7ea5528a5c 111 if (g_upflag==0) {
lukeocarwright 5:e785b9cd58c9 112
lukeocarwright 4:9b7ea5528a5c 113 ifl = ifl + (4096*f*g_period); //once rca=1 itterate sin function
lukeocarwright 4:9b7ea5528a5c 114 if (ifl>4096) {
lukeocarwright 4:9b7ea5528a5c 115 ifl= ifl-4096;
lukeocarwright 4:9b7ea5528a5c 116 }
lukeocarwright 4:9b7ea5528a5c 117 i=ifl;
lukeocarwright 5:e785b9cd58c9 118
lukeocarwright 4:9b7ea5528a5c 119 g_upflag=1; //reset flag
lukeocarwright 4:9b7ea5528a5c 120 //printf("iterate i: i= %d, ifl= %f \n", i, ifl);
lukeocarwright 4:9b7ea5528a5c 121 }
lukeocarwright 5:e785b9cd58c9 122
lukeocarwright 4:9b7ea5528a5c 123 //printf("DR: %f \n",dutyratio);
lukeocarwright 4:9b7ea5528a5c 124 //printf("sleep \n");
lukeocarwright 4:9b7ea5528a5c 125 sleep(); //sleeps till next isr
lukeocarwright 4:9b7ea5528a5c 126 }
lukeocarwright 4:9b7ea5528a5c 127 }
lukeocarwright 4:9b7ea5528a5c 128
lukeocarwright 4:9b7ea5528a5c 129 void down_isr() //sets rca to 0
lukeocarwright 4:9b7ea5528a5c 130 {
lukeocarwright 4:9b7ea5528a5c 131 //printf("downISR \n");
lukeocarwright 4:9b7ea5528a5c 132 if (g_downflag==0) {//stops error trigger
lukeocarwright 4:9b7ea5528a5c 133 rca.write(0);
lukeocarwright 4:9b7ea5528a5c 134 g_downflag=1;
lukeocarwright 4:9b7ea5528a5c 135 g_uptime_us= g_uptime_us+g_period_us; // eliminates it calling if =0
lukeocarwright 4:9b7ea5528a5c 136 //printf("0 \n");//print only in while v. slow freguency
lukeocarwright 4:9b7ea5528a5c 137 }
lukeocarwright 4:9b7ea5528a5c 138 }
lukeocarwright 4:9b7ea5528a5c 139
lukeocarwright 4:9b7ea5528a5c 140 void up_isr() //sets rca=1
lukeocarwright 4:9b7ea5528a5c 141 {
lukeocarwright 4:9b7ea5528a5c 142 //printf("upISR \n");
lukeocarwright 4:9b7ea5528a5c 143 rca.write(1);
lukeocarwright 4:9b7ea5528a5c 144 down.attach_us(&down_isr,g_uptime_us); //timer to set rca=0 after elapsed
lukeocarwright 4:9b7ea5528a5c 145 g_upflag=0; //sets flag to iterate
lukeocarwright 4:9b7ea5528a5c 146 g_downflag=0; //sets flag to allow set to 0
lukeocarwright 4:9b7ea5528a5c 147 //printf("1 \n"); //only in while at v low frequency
lukeocarwright 4:9b7ea5528a5c 148 }
lukeocarwright 4:9b7ea5528a5c 149
lukeocarwright 5:e785b9cd58c9 150 */
lukeocarwright 4:9b7ea5528a5c 151 /*
lukeocarwright 2:07cef563acdf 152 void sinspeak ()
lukeocarwright 2:07cef563acdf 153 {
lukeocarwright 2:07cef563acdf 154 float f1=440.0;
lukeocarwright 2:07cef563acdf 155 float i=0;
lukeocarwright 3:b7df72682b81 156 unsigned short v=0;
lukeocarwright 2:07cef563acdf 157 int inc=0;
lukeocarwright 2:07cef563acdf 158 pad.reset_buttons();
lukeocarwright 2:07cef563acdf 159 f1 = pad.read_pot1();
lukeocarwright 3:b7df72682b81 160 f1 = 440.0f+440.0f*f1;
lukeocarwright 3:b7df72682b81 161 //printf("f1= %f \n",f1); // Used for Debug
lukeocarwright 2:07cef563acdf 162
lukeocarwright 2:07cef563acdf 163 while (inc<3000) {
lukeocarwright 2:07cef563acdf 164 int inti = i;
lukeocarwright 2:07cef563acdf 165 v = o[inti];
lukeocarwright 4:9b7ea5528a5c 166 printf("OUTPUT: %u \n", v);
lukeocarwright 4:9b7ea5528a5c 167 //pad.write_u16(v);
lukeocarwright 3:b7df72682b81 168 wait_us(230); //fs= 4k Ts=250us
lukeocarwright 3:b7df72682b81 169
lukeocarwright 3:b7df72682b81 170 i = i + ((4096.0f*f1)/4000.0f); //i+((samples*f)*Ts)
lukeocarwright 2:07cef563acdf 171 if (i>=4096.0f) {
lukeocarwright 2:07cef563acdf 172 i=i-4096.0f;
lukeocarwright 3:b7df72682b81 173 }
lukeocarwright 3:b7df72682b81 174 else {
lukeocarwright 4:9b7ea5528a5c 175 wait_us(3); // used to attempt note stabilisation to match other loop
lukeocarwright 2:07cef563acdf 176 }
lukeocarwright 2:07cef563acdf 177 inc++;
lukeocarwright 2:07cef563acdf 178 }
lukeocarwright 2:07cef563acdf 179 }
lukeocarwright 4:9b7ea5528a5c 180 */