Luke Cartwright / Mbed 2 deprecated ELEC2645_Project_el18loc_nearlythere

Dependencies:   mbed

Committer:
lukeocarwright
Date:
Wed May 06 19:51:22 2020 +0000
Revision:
10:258a1eca02cc
Parent:
9:f6ba53e355a0
Child:
11:6ae098535da9
Added Triangle/saw LUT with debug test

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 10:258a1eca02cc 12
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 10:258a1eca02cc 18 }
lukeocarwright 7:33cb5f2db1ee 19
lukeocarwright 7:33cb5f2db1ee 20 void LUTs::sin_wavetable()
lukeocarwright 7:33cb5f2db1ee 21 {
lukeocarwright 10:258a1eca02cc 22 printf("Generating sin Wavetable \n");
lukeocarwright 9:f6ba53e355a0 23 for (int i=0; i<1024; i++) {
lukeocarwright 9:f6ba53e355a0 24 sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5);
lukeocarwright 9:f6ba53e355a0 25 //calculates remainder for rounding
lukeocarwright 9:f6ba53e355a0 26 rem= fmod(sin_d,1);
lukeocarwright 9:f6ba53e355a0 27 //printf("preround= %g -", sin_d); //DEBUG
lukeocarwright 9:f6ba53e355a0 28 if (rem>=0.5) {
lukeocarwright 9:f6ba53e355a0 29 sin_d=ceil(sin_d); //round UP
lukeocarwright 9:f6ba53e355a0 30 } else {
lukeocarwright 9:f6ba53e355a0 31 sin_d= floor(sin_d-rem); //round DOWN
lukeocarwright 9:f6ba53e355a0 32 }
lukeocarwright 10:258a1eca02cc 33 // printf("Postround= %g -",sin_d); //DEBUG
lukeocarwright 9:f6ba53e355a0 34 sin_u=((uint16_t)sin_d);
lukeocarwright 9:f6ba53e355a0 35 //printf("sin_u= %u \n", sin_u);
lukeocarwright 9:f6ba53e355a0 36 sin_wavtable[i]=sin_u;
lukeocarwright 9:f6ba53e355a0 37 //sin_wavtable[i]=get_sin(i);
lukeocarwright 9:f6ba53e355a0 38 }
lukeocarwright 10:258a1eca02cc 39 /*//DEBUG
lukeocarwright 9:f6ba53e355a0 40 for (int i=0; i<1024; i=i+128) {
lukeocarwright 9:f6ba53e355a0 41 printf("sin_wav[%d]= %u \n", i, sin_wavtable);
lukeocarwright 7:33cb5f2db1ee 42 }
lukeocarwright 9:f6ba53e355a0 43 */
lukeocarwright 9:f6ba53e355a0 44 }
lukeocarwright 9:f6ba53e355a0 45
lukeocarwright 10:258a1eca02cc 46 void LUTs::tri_wavetable(int pulsewidth)
lukeocarwright 10:258a1eca02cc 47 {
lukeocarwright 10:258a1eca02cc 48 printf("Generating Tri-wavetable\n");
lukeocarwright 10:258a1eca02cc 49 tri_wavtable[0]=0;
lukeocarwright 10:258a1eca02cc 50 rise_t=(pulsewidth*1024/100);
lukeocarwright 10:258a1eca02cc 51 fall_t=1-rise_t;
lukeocarwright 10:258a1eca02cc 52 dif=65536/rise_t;
lukeocarwright 10:258a1eca02cc 53 dif_u=(uint16_t)dif;
lukeocarwright 10:258a1eca02cc 54 for (int i=1; i<rise_t; i++) {
lukeocarwright 10:258a1eca02cc 55 tri_wavtable[i]=tri_wavtable[i-1]+dif_u;
lukeocarwright 10:258a1eca02cc 56 }
lukeocarwright 10:258a1eca02cc 57 dif=65536/fall_t;
lukeocarwright 10:258a1eca02cc 58 dif_u=(uint16_t)dif;
lukeocarwright 10:258a1eca02cc 59 for (int i=rise_t; i<1024; i++) {
lukeocarwright 10:258a1eca02cc 60 tri_wavtable[i]=tri_wavtable[i-1]-dif_u;
lukeocarwright 10:258a1eca02cc 61 }
lukeocarwright 10:258a1eca02cc 62 }
lukeocarwright 9:f6ba53e355a0 63
lukeocarwright 9:f6ba53e355a0 64
lukeocarwright 9:f6ba53e355a0 65 /*
lukeocarwright 9:f6ba53e355a0 66 uint16_t get_sin(int i)
lukeocarwright 9:f6ba53e355a0 67 {
lukeocarwright 9:f6ba53e355a0 68 //calculates sin val as double (0->65535)
lukeocarwright 9:f6ba53e355a0 69
lukeocarwright 9:f6ba53e355a0 70 sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5);
lukeocarwright 9:f6ba53e355a0 71 //calculates remainder for rounding
lukeocarwright 9:f6ba53e355a0 72 rem= fmod(sin_d,1);
lukeocarwright 9:f6ba53e355a0 73 //printf("preround= %g -", sin_d[i]); //DEBUG
lukeocarwright 9:f6ba53e355a0 74 if (rem>=0.5) {
lukeocarwright 9:f6ba53e355a0 75 sin_d=ceil(sin_d); //round UP
lukeocarwright 9:f6ba53e355a0 76 } else {
lukeocarwright 9:f6ba53e355a0 77 sin_d= floor(sin_d-rem); //round DOWN
lukeocarwright 9:f6ba53e355a0 78 }
lukeocarwright 9:f6ba53e355a0 79 //printf("Postround= %g -",sin_d[i]); //DEBUG
lukeocarwright 9:f6ba53e355a0 80 return((uint16_t)sin_d);
lukeocarwright 9:f6ba53e355a0 81
lukeocarwright 9:f6ba53e355a0 82 //summed into one function
lukeocarwright 9:f6ba53e355a0 83 return((uint16_t)floor(65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5)));
lukeocarwright 9:f6ba53e355a0 84 }
lukeocarwright 9:f6ba53e355a0 85 */