Luke Cartwright / Mbed 2 deprecated ELEC2645_Project_el18loc_nearlythere

Dependencies:   mbed

Committer:
lukeocarwright
Date:
Sun May 24 15:20:31 2020 +0000
Revision:
24:c3bb1b0b2207
Parent:
21:60f01b17b0a6
Child:
27:da783f414f67
Basic Filtering Implemented & sample rate dropped to account for additional CPU usage

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 21:60f01b17b0a6 11 Last Edited: 23/05/2020
eencae 0:b7f1f47bb26a 12 */
eencae 0:b7f1f47bb26a 13
lukeocarwright 5:e785b9cd58c9 14 /* TO DO:
lukeocarwright 24:c3bb1b0b2207 15 Add F POT
lukeocarwright 21:60f01b17b0a6 16 Sort Squarewave+tri Sound
lukeocarwright 17:358987e9f30e 17 Add Menu from front.cpp
lukeocarwright 20:fe235c124c67 18 Master Volume
lukeocarwright 24:c3bb1b0b2207 19 Filter
lukeocarwright 24:c3bb1b0b2207 20 Add Note Select
lukeocarwright 24:c3bb1b0b2207 21 Add Pitchbend w.NS^
lukeocarwright 8:f305ea78b2b1 22 MIDI
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 14:9cfe0041cc4e 41 Ticker tick;
lukeocarwright 4:9b7ea5528a5c 42
lukeocarwright 14:9cfe0041cc4e 43 //DigitalOut rca(PTC4);
lukeocarwright 14:9cfe0041cc4e 44 //Serial pc(USBTX, USBRX);
lukeocarwright 2:07cef563acdf 45
lukeocarwright 2:07cef563acdf 46 //Functions
lukeocarwright 5:e785b9cd58c9 47 //void squareWave();
lukeocarwright 4:9b7ea5528a5c 48 //void sinspeak();
lukeocarwright 14:9cfe0041cc4e 49 void noise_isr();
lukeocarwright 2:07cef563acdf 50
lukeocarwright 2:07cef563acdf 51
lukeocarwright 2:07cef563acdf 52 //Global Variables
lukeocarwright 14:9cfe0041cc4e 53 volatile extern int g_isr_flag; //may need extern
lukeocarwright 10:258a1eca02cc 54
lukeocarwright 15:1c67f064278e 55
eencae 0:b7f1f47bb26a 56 int main()
eencae 0:b7f1f47bb26a 57 {
lukeocarwright 2:07cef563acdf 58 printf("RUNNING CODE \n");
lukeocarwright 7:33cb5f2db1ee 59 start.initialise(lcd,pad); //initialises board and displays start screen
lukeocarwright 14:9cfe0041cc4e 60
lukeocarwright 14:9cfe0041cc4e 61 #ifdef DEBUG
lukeocarwright 14:9cfe0041cc4e 62 printf("DEBUG COMPILE RUNNING\n");
lukeocarwright 14:9cfe0041cc4e 63 run_LUTs_debug();
lukeocarwright 14:9cfe0041cc4e 64 #endif
lukeocarwright 14:9cfe0041cc4e 65
lukeocarwright 14:9cfe0041cc4e 66 #ifdef SLOW_TIME //ATTACH TICKERS FOR SOUND
lukeocarwright 15:1c67f064278e 67 printf("Running in SLOW_TIME\n");
lukeocarwright 15:1c67f064278e 68 tick.attach(&noise_isr, 1); //extended for debug (1Hz)
lukeocarwright 15:1c67f064278e 69 #endif
lukeocarwright 18:204cd747b54a 70 #ifdef CSV
lukeocarwright 18:204cd747b54a 71 printf("Running in SLOW_TIME\n");
lukeocarwright 18:204cd747b54a 72 tick.attach_us(&noise_isr, 5000); //extended for debug (1Hz)
lukeocarwright 18:204cd747b54a 73 #endif
lukeocarwright 15:1c67f064278e 74 #ifndef SLOW_TIME
lukeocarwright 18:204cd747b54a 75 #ifndef CSV
lukeocarwright 24:c3bb1b0b2207 76 tick.attach_us(&noise_isr, 100); //normal mode SR=10kHz
lukeocarwright 18:204cd747b54a 77 #endif
lukeocarwright 14:9cfe0041cc4e 78 #endif
lukeocarwright 14:9cfe0041cc4e 79
lukeocarwright 14:9cfe0041cc4e 80 menu.mainmenu(lcd,pad);
lukeocarwright 9:f6ba53e355a0 81
lukeocarwright 14:9cfe0041cc4e 82 //UNUSED FUNCTIONS:-------------------------------------------------------------
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 14:9cfe0041cc4e 87 void noise_isr() {
lukeocarwright 14:9cfe0041cc4e 88 #ifdef SLOW_TIME
lukeocarwright 14:9cfe0041cc4e 89 if (g_isr_flag==0) {
lukeocarwright 18:204cd747b54a 90 //printf("ISR INTTERUPT = 1\n");
lukeocarwright 14:9cfe0041cc4e 91 }
lukeocarwright 14:9cfe0041cc4e 92 #endif
lukeocarwright 14:9cfe0041cc4e 93 g_isr_flag=1;
lukeocarwright 14:9cfe0041cc4e 94 }
lukeocarwright 14:9cfe0041cc4e 95
lukeocarwright 5:e785b9cd58c9 96 /*
lukeocarwright 4:9b7ea5528a5c 97 void squareWave()
lukeocarwright 4:9b7ea5528a5c 98 {
lukeocarwright 4:9b7ea5528a5c 99 printf("Generating SIN PWM \n");
lukeocarwright 4:9b7ea5528a5c 100
lukeocarwright 4:9b7ea5528a5c 101 int i=0; //int based iterator
lukeocarwright 4:9b7ea5528a5c 102 float ifl=0; //float based itterator
lukeocarwright 4:9b7ea5528a5c 103 float f=50; //frequency of sin wave produced
lukeocarwright 4:9b7ea5528a5c 104 period.attach_us(&up_isr,g_period_us); //ticker to write 1 to rca
lukeocarwright 4:9b7ea5528a5c 105 down.attach_us(&down_isr,g_uptime_us); //ticker to write 0 to rca
lukeocarwright 5:e785b9cd58c9 106
lukeocarwright 5:e785b9cd58c9 107
lukeocarwright 4:9b7ea5528a5c 108 printf("g_period_us: %d \n", g_period_us);
lukeocarwright 4:9b7ea5528a5c 109 printf("sin Frequency: %f \n", f);
lukeocarwright 4:9b7ea5528a5c 110
lukeocarwright 4:9b7ea5528a5c 111 while (1) { //continual loop for pulse production
lukeocarwright 4:9b7ea5528a5c 112 float dutyratio = wavtable[i]; //calcualtes duty ratio of pulse
lukeocarwright 5:e785b9cd58c9 113
lukeocarwright 4:9b7ea5528a5c 114 g_uptime_us= dutyratio*g_period_us; //calculates duty ratio in usecs
lukeocarwright 4:9b7ea5528a5c 115 if (g_uptime_us<1) {
lukeocarwright 4:9b7ea5528a5c 116 g_uptime_us=g_period_us/100;
lukeocarwright 4:9b7ea5528a5c 117 } //sets to be value for timebeing to eliminate 0 error
lukeocarwright 4:9b7ea5528a5c 118 //float f=440*(pad.read_pot1()+1); //removed for simplification
lukeocarwright 5:e785b9cd58c9 119
lukeocarwright 4:9b7ea5528a5c 120 if (g_upflag==0) {
lukeocarwright 5:e785b9cd58c9 121
lukeocarwright 4:9b7ea5528a5c 122 ifl = ifl + (4096*f*g_period); //once rca=1 itterate sin function
lukeocarwright 4:9b7ea5528a5c 123 if (ifl>4096) {
lukeocarwright 4:9b7ea5528a5c 124 ifl= ifl-4096;
lukeocarwright 4:9b7ea5528a5c 125 }
lukeocarwright 4:9b7ea5528a5c 126 i=ifl;
lukeocarwright 5:e785b9cd58c9 127
lukeocarwright 4:9b7ea5528a5c 128 g_upflag=1; //reset flag
lukeocarwright 4:9b7ea5528a5c 129 //printf("iterate i: i= %d, ifl= %f \n", i, ifl);
lukeocarwright 4:9b7ea5528a5c 130 }
lukeocarwright 5:e785b9cd58c9 131
lukeocarwright 4:9b7ea5528a5c 132 //printf("DR: %f \n",dutyratio);
lukeocarwright 4:9b7ea5528a5c 133 //printf("sleep \n");
lukeocarwright 4:9b7ea5528a5c 134 sleep(); //sleeps till next isr
lukeocarwright 4:9b7ea5528a5c 135 }
lukeocarwright 4:9b7ea5528a5c 136 }
lukeocarwright 4:9b7ea5528a5c 137
lukeocarwright 2:07cef563acdf 138 void sinspeak ()
lukeocarwright 2:07cef563acdf 139 {
lukeocarwright 2:07cef563acdf 140 float f1=440.0;
lukeocarwright 2:07cef563acdf 141 float i=0;
lukeocarwright 3:b7df72682b81 142 unsigned short v=0;
lukeocarwright 2:07cef563acdf 143 int inc=0;
lukeocarwright 2:07cef563acdf 144 pad.reset_buttons();
lukeocarwright 2:07cef563acdf 145 f1 = pad.read_pot1();
lukeocarwright 3:b7df72682b81 146 f1 = 440.0f+440.0f*f1;
lukeocarwright 3:b7df72682b81 147 //printf("f1= %f \n",f1); // Used for Debug
lukeocarwright 2:07cef563acdf 148
lukeocarwright 2:07cef563acdf 149 while (inc<3000) {
lukeocarwright 2:07cef563acdf 150 int inti = i;
lukeocarwright 2:07cef563acdf 151 v = o[inti];
lukeocarwright 4:9b7ea5528a5c 152 printf("OUTPUT: %u \n", v);
lukeocarwright 4:9b7ea5528a5c 153 //pad.write_u16(v);
lukeocarwright 3:b7df72682b81 154 wait_us(230); //fs= 4k Ts=250us
lukeocarwright 3:b7df72682b81 155
lukeocarwright 3:b7df72682b81 156 i = i + ((4096.0f*f1)/4000.0f); //i+((samples*f)*Ts)
lukeocarwright 2:07cef563acdf 157 if (i>=4096.0f) {
lukeocarwright 2:07cef563acdf 158 i=i-4096.0f;
lukeocarwright 3:b7df72682b81 159 }
lukeocarwright 3:b7df72682b81 160 else {
lukeocarwright 4:9b7ea5528a5c 161 wait_us(3); // used to attempt note stabilisation to match other loop
lukeocarwright 2:07cef563acdf 162 }
lukeocarwright 2:07cef563acdf 163 inc++;
lukeocarwright 2:07cef563acdf 164 }
lukeocarwright 2:07cef563acdf 165 }
lukeocarwright 4:9b7ea5528a5c 166 */