Luke Cartwright / Mbed 2 deprecated ELEC2645_Project_el18loc_nearlythere

Dependencies:   mbed

Committer:
lukeocarwright
Date:
Fri May 22 20:10:00 2020 +0000
Revision:
19:08862f49cd9e
Parent:
15:1c67f064278e
Child:
29:207111ffd6e6
ADSR fully working and interfaceable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lukeocarwright 7:33cb5f2db1ee 1 #include "mbed.h"
lukeocarwright 7:33cb5f2db1ee 2 #include "LUTs.h"
lukeocarwright 7:33cb5f2db1ee 3
lukeocarwright 7:33cb5f2db1ee 4 LUTs::LUTs()
lukeocarwright 7:33cb5f2db1ee 5 {
lukeocarwright 7:33cb5f2db1ee 6 }
lukeocarwright 7:33cb5f2db1ee 7 LUTs::~LUTs()
lukeocarwright 7:33cb5f2db1ee 8 {
lukeocarwright 7:33cb5f2db1ee 9 }
lukeocarwright 10:258a1eca02cc 10 volatile uint16_t sin_wavtable[1024];
lukeocarwright 10:258a1eca02cc 11 volatile uint16_t tri_wavtable[1024];
lukeocarwright 11:6ae098535da9 12 volatile uint16_t pulse_wavtable[1024];
lukeocarwright 10:258a1eca02cc 13
lukeocarwright 10:258a1eca02cc 14 void LUTs::initial_wavetables()
lukeocarwright 10:258a1eca02cc 15 {
lukeocarwright 10:258a1eca02cc 16 sin_wavetable();
lukeocarwright 10:258a1eca02cc 17 tri_wavetable(50);
lukeocarwright 11:6ae098535da9 18 pulse_wavetable(50);
lukeocarwright 10:258a1eca02cc 19 }
lukeocarwright 7:33cb5f2db1ee 20
lukeocarwright 7:33cb5f2db1ee 21 void LUTs::sin_wavetable()
lukeocarwright 7:33cb5f2db1ee 22 {
lukeocarwright 10:258a1eca02cc 23 printf("Generating sin Wavetable \n");
lukeocarwright 9:f6ba53e355a0 24 for (int i=0; i<1024; i++) {
lukeocarwright 9:f6ba53e355a0 25 sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5);
lukeocarwright 9:f6ba53e355a0 26 //calculates remainder for rounding
lukeocarwright 9:f6ba53e355a0 27 rem= fmod(sin_d,1);
lukeocarwright 9:f6ba53e355a0 28 //printf("preround= %g -", sin_d); //DEBUG
lukeocarwright 9:f6ba53e355a0 29 if (rem>=0.5) {
lukeocarwright 9:f6ba53e355a0 30 sin_d=ceil(sin_d); //round UP
lukeocarwright 9:f6ba53e355a0 31 } else {
lukeocarwright 9:f6ba53e355a0 32 sin_d= floor(sin_d-rem); //round DOWN
lukeocarwright 9:f6ba53e355a0 33 }
lukeocarwright 10:258a1eca02cc 34 // printf("Postround= %g -",sin_d); //DEBUG
lukeocarwright 9:f6ba53e355a0 35 sin_u=((uint16_t)sin_d);
lukeocarwright 9:f6ba53e355a0 36 //printf("sin_u= %u \n", sin_u);
lukeocarwright 9:f6ba53e355a0 37 sin_wavtable[i]=sin_u;
lukeocarwright 9:f6ba53e355a0 38 //sin_wavtable[i]=get_sin(i);
lukeocarwright 9:f6ba53e355a0 39 }
lukeocarwright 10:258a1eca02cc 40 /*//DEBUG
lukeocarwright 9:f6ba53e355a0 41 for (int i=0; i<1024; i=i+128) {
lukeocarwright 9:f6ba53e355a0 42 printf("sin_wav[%d]= %u \n", i, sin_wavtable);
lukeocarwright 7:33cb5f2db1ee 43 }
lukeocarwright 9:f6ba53e355a0 44 */
lukeocarwright 9:f6ba53e355a0 45 }
lukeocarwright 9:f6ba53e355a0 46
lukeocarwright 10:258a1eca02cc 47 void LUTs::tri_wavetable(int pulsewidth)
lukeocarwright 10:258a1eca02cc 48 {
lukeocarwright 10:258a1eca02cc 49 printf("Generating Tri-wavetable\n");
lukeocarwright 10:258a1eca02cc 50 tri_wavtable[0]=0;
lukeocarwright 10:258a1eca02cc 51 rise_t=(pulsewidth*1024/100);
lukeocarwright 11:6ae098535da9 52 rise_tu=(uint16_t)rise_t;
lukeocarwright 15:1c67f064278e 53 fall_tu=1024-rise_tu;
lukeocarwright 10:258a1eca02cc 54 dif=65536/rise_t;
lukeocarwright 10:258a1eca02cc 55 dif_u=(uint16_t)dif;
lukeocarwright 15:1c67f064278e 56
lukeocarwright 19:08862f49cd9e 57 /*#ifdef SLOW_TIME
lukeocarwright 15:1c67f064278e 58 printf("PRINTING TRI WAVETABLE Values\n");
lukeocarwright 15:1c67f064278e 59 printf("PW= %d \n",pulsewidth);
lukeocarwright 15:1c67f064278e 60 printf("Rise Samples= %u\n", rise_tu);
lukeocarwright 15:1c67f064278e 61 printf("Fall Samples= %u\n", fall_tu);
lukeocarwright 15:1c67f064278e 62 printf("UP sample dif= %u\n", dif_u);
lukeocarwright 15:1c67f064278e 63 #endif
lukeocarwright 19:08862f49cd9e 64 */
lukeocarwright 11:6ae098535da9 65 for (int i=1; i<=rise_tu; i++) {
lukeocarwright 10:258a1eca02cc 66 tri_wavtable[i]=tri_wavtable[i-1]+dif_u;
lukeocarwright 10:258a1eca02cc 67 }
lukeocarwright 11:6ae098535da9 68 dif=65536/fall_tu;
lukeocarwright 10:258a1eca02cc 69 dif_u=(uint16_t)dif;
lukeocarwright 15:1c67f064278e 70
lukeocarwright 15:1c67f064278e 71 #ifdef SLOW_TIME
lukeocarwright 19:08862f49cd9e 72 //printf("down sample dif= %u\n", dif_u);
lukeocarwright 15:1c67f064278e 73 #endif
lukeocarwright 15:1c67f064278e 74
lukeocarwright 15:1c67f064278e 75 for (int i=rise_tu; i<1024; i++) {
lukeocarwright 15:1c67f064278e 76 tri_wavtable[i]=65535-((i-rise_tu)*dif_u);
lukeocarwright 10:258a1eca02cc 77 }
lukeocarwright 15:1c67f064278e 78
lukeocarwright 15:1c67f064278e 79 #ifdef SLOW_TIME
lukeocarwright 19:08862f49cd9e 80 //tri_wav_results();
lukeocarwright 15:1c67f064278e 81 #endif
lukeocarwright 10:258a1eca02cc 82 }
lukeocarwright 9:f6ba53e355a0 83
lukeocarwright 9:f6ba53e355a0 84
lukeocarwright 11:6ae098535da9 85 void LUTs::pulse_wavetable(int pulsewidth)
lukeocarwright 11:6ae098535da9 86 {
lukeocarwright 11:6ae098535da9 87 printf("Generating Pulse-wavetable\n");
lukeocarwright 11:6ae098535da9 88 up_t=(pulsewidth*1024/100);
lukeocarwright 11:6ae098535da9 89 up_tu=(uint16_t)up_t;
lukeocarwright 11:6ae098535da9 90 for (int i=0; i<=up_tu; i++) {
lukeocarwright 11:6ae098535da9 91 pulse_wavtable[i]=65535;
lukeocarwright 11:6ae098535da9 92 //printf("up itt = %d\n",i);
lukeocarwright 11:6ae098535da9 93 }
lukeocarwright 14:9cfe0041cc4e 94
lukeocarwright 11:6ae098535da9 95 for (int i=up_tu+1; i<1024; i++) {
lukeocarwright 11:6ae098535da9 96 pulse_wavtable[i]=0;
lukeocarwright 11:6ae098535da9 97 //printf("down itt = %d\n",i);
lukeocarwright 11:6ae098535da9 98 }
lukeocarwright 11:6ae098535da9 99 }
lukeocarwright 11:6ae098535da9 100
lukeocarwright 15:1c67f064278e 101 void LUTs::tri_wav_results() {
lukeocarwright 15:1c67f064278e 102 printf("TRI_WAV_RESULTS:\n");
lukeocarwright 15:1c67f064278e 103 printf("i,out\n");
lukeocarwright 15:1c67f064278e 104 for (i=0; i<=1024; i=i+64) {
lukeocarwright 15:1c67f064278e 105 printf("%d, %u\n",i,tri_wavtable[i]);
lukeocarwright 15:1c67f064278e 106 }
lukeocarwright 15:1c67f064278e 107 }
lukeocarwright 11:6ae098535da9 108
lukeocarwright 9:f6ba53e355a0 109 /*
lukeocarwright 9:f6ba53e355a0 110 uint16_t get_sin(int i)
lukeocarwright 9:f6ba53e355a0 111 {
lukeocarwright 9:f6ba53e355a0 112 //calculates sin val as double (0->65535)
lukeocarwright 9:f6ba53e355a0 113
lukeocarwright 9:f6ba53e355a0 114 sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5);
lukeocarwright 9:f6ba53e355a0 115 //calculates remainder for rounding
lukeocarwright 9:f6ba53e355a0 116 rem= fmod(sin_d,1);
lukeocarwright 9:f6ba53e355a0 117 //printf("preround= %g -", sin_d[i]); //DEBUG
lukeocarwright 9:f6ba53e355a0 118 if (rem>=0.5) {
lukeocarwright 9:f6ba53e355a0 119 sin_d=ceil(sin_d); //round UP
lukeocarwright 9:f6ba53e355a0 120 } else {
lukeocarwright 9:f6ba53e355a0 121 sin_d= floor(sin_d-rem); //round DOWN
lukeocarwright 9:f6ba53e355a0 122 }
lukeocarwright 9:f6ba53e355a0 123 //printf("Postround= %g -",sin_d[i]); //DEBUG
lukeocarwright 9:f6ba53e355a0 124 return((uint16_t)sin_d);
lukeocarwright 9:f6ba53e355a0 125
lukeocarwright 9:f6ba53e355a0 126 //summed into one function
lukeocarwright 9:f6ba53e355a0 127 return((uint16_t)floor(65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5)));
lukeocarwright 9:f6ba53e355a0 128 }
lukeocarwright 9:f6ba53e355a0 129 */