Luke Cartwright / Mbed 2 deprecated ELEC2645_Project_el18loc_nearlythere

Dependencies:   mbed

LUTs/LUTS.cpp

Committer:
lukeocarwright
Date:
2020-05-06
Revision:
10:258a1eca02cc
Parent:
9:f6ba53e355a0
Child:
11:6ae098535da9

File content as of revision 10:258a1eca02cc:

#include "mbed.h"
#include "LUTs.h"

LUTs::LUTs()
{
}
LUTs::~LUTs()
{
}
volatile uint16_t sin_wavtable[1024];
volatile uint16_t tri_wavtable[1024];


void LUTs::initial_wavetables()
{
    sin_wavetable();
    tri_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);
    fall_t=1-rise_t;
    dif=65536/rise_t;
    dif_u=(uint16_t)dif;
    for (int i=1; i<rise_t; i++) {
        tri_wavtable[i]=tri_wavtable[i-1]+dif_u;
    }
    dif=65536/fall_t;
    dif_u=(uint16_t)dif;
    for (int i=rise_t; i<1024; i++) {
        tri_wavtable[i]=tri_wavtable[i-1]-dif_u;
    }
}


/*
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)));
}
*/