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.
Dependencies: mbed
LUTs/LUTS.cpp
- Committer:
- lukeocarwright
- Date:
- 2020-05-19
- Revision:
- 14:9cfe0041cc4e
- Parent:
- 11:6ae098535da9
- Child:
- 15:1c67f064278e
File content as of revision 14:9cfe0041cc4e:
#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=1-rise_tu;
dif=65536/rise_t;
dif_u=(uint16_t)dif;
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;
for (int i=rise_t+1; i<1024; i++) {
tri_wavtable[i]=tri_wavtable[i-1]-dif_u;
}
}
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);
}
}
/*
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)));
}
*/