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.
LUTs/LUTS.cpp
- Committer:
- lukeocarwright
- Date:
- 2020-05-22
- Revision:
- 19:08862f49cd9e
- Parent:
- 15:1c67f064278e
- Child:
- 29:207111ffd6e6
File content as of revision 19:08862f49cd9e:
#include "mbed.h" #include "LUTs.h" LUTs::LUTs() { } LUTs::~LUTs() { } volatile uint16_t sin_wavtable[1024]; volatile uint16_t tri_wavtable[1024]; volatile uint16_t pulse_wavtable[1024]; void LUTs::initial_wavetables() { sin_wavetable(); tri_wavetable(50); pulse_wavetable(50); } void LUTs::sin_wavetable() { printf("Generating sin Wavetable \n"); for (int i=0; i<1024; i++) { sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5); //calculates remainder for rounding rem= fmod(sin_d,1); //printf("preround= %g -", sin_d); //DEBUG if (rem>=0.5) { sin_d=ceil(sin_d); //round UP } else { sin_d= floor(sin_d-rem); //round DOWN } // printf("Postround= %g -",sin_d); //DEBUG sin_u=((uint16_t)sin_d); //printf("sin_u= %u \n", sin_u); sin_wavtable[i]=sin_u; //sin_wavtable[i]=get_sin(i); } /*//DEBUG for (int i=0; i<1024; i=i+128) { printf("sin_wav[%d]= %u \n", i, sin_wavtable); } */ } void LUTs::tri_wavetable(int pulsewidth) { printf("Generating Tri-wavetable\n"); tri_wavtable[0]=0; rise_t=(pulsewidth*1024/100); rise_tu=(uint16_t)rise_t; fall_tu=1024-rise_tu; dif=65536/rise_t; dif_u=(uint16_t)dif; /*#ifdef SLOW_TIME printf("PRINTING TRI WAVETABLE Values\n"); printf("PW= %d \n",pulsewidth); printf("Rise Samples= %u\n", rise_tu); printf("Fall Samples= %u\n", fall_tu); printf("UP sample dif= %u\n", dif_u); #endif */ for (int i=1; i<=rise_tu; i++) { tri_wavtable[i]=tri_wavtable[i-1]+dif_u; } dif=65536/fall_tu; dif_u=(uint16_t)dif; #ifdef SLOW_TIME //printf("down sample dif= %u\n", dif_u); #endif for (int i=rise_tu; i<1024; i++) { tri_wavtable[i]=65535-((i-rise_tu)*dif_u); } #ifdef SLOW_TIME //tri_wav_results(); #endif } void LUTs::pulse_wavetable(int pulsewidth) { printf("Generating Pulse-wavetable\n"); up_t=(pulsewidth*1024/100); up_tu=(uint16_t)up_t; for (int i=0; i<=up_tu; i++) { pulse_wavtable[i]=65535; //printf("up itt = %d\n",i); } for (int i=up_tu+1; i<1024; i++) { pulse_wavtable[i]=0; //printf("down itt = %d\n",i); } } void LUTs::tri_wav_results() { printf("TRI_WAV_RESULTS:\n"); printf("i,out\n"); for (i=0; i<=1024; i=i+64) { printf("%d, %u\n",i,tri_wavtable[i]); } } /* uint16_t get_sin(int i) { //calculates sin val as double (0->65535) sin_d= 65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5); //calculates remainder for rounding rem= fmod(sin_d,1); //printf("preround= %g -", sin_d[i]); //DEBUG if (rem>=0.5) { sin_d=ceil(sin_d); //round UP } else { sin_d= floor(sin_d-rem); //round DOWN } //printf("Postround= %g -",sin_d[i]); //DEBUG return((uint16_t)sin_d); //summed into one function return((uint16_t)floor(65535*(0.5*sin(2.0*PI*(i/1024.0))+0.5))); } */