Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@24:c3bb1b0b2207, 2020-05-24 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |