gerador senoidal com look-up table 8 bit

Dependencies:   mbed SeeedShieldBot BluetoothSerial

main.cpp

Committer:
afm76
Date:
2021-06-07
Revision:
0:66bb2be784c0

File content as of revision 0:66bb2be784c0:

//--------------------------------------------------------------------------
// 2021-06
// Esse programa gera uma senoide com um conversor R2R e uma tabela de senos
// a tabela foi construida no Excel para 90 passos de 1 grau, assim o valor 
// dos senos de 0 a 90 graus sera rebatido para 90 a 180, bem como 180 a 270
// e 270 a 360 graus
// -------------------------------------------------------------------------

#include "mbed.h"

float sinus[]{
0,
0.017452406,
0.034899497,
0.052335956,
0.069756474,
0.087155743,
0.104528463,
0.121869343,
0.139173101,
0.156434465,
0.173648178,
0.190808995,
0.207911691,
0.224951054,
0.241921896,
0.258819045,
0.275637356,
0.292371705,
0.309016994,
0.325568154,
0.342020143,
0.35836795,
0.374606593,
0.390731128,
0.406736643,
0.422618262,
0.438371147,
0.4539905,
0.469471563,
0.48480962,
0.5,
0.515038075,
0.529919264,
0.544639035,
0.559192903,
0.573576436,
0.587785252,
0.601815023,
0.615661475,
0.629320391,
0.64278761,
0.656059029,
0.669130606,
0.68199836,
0.69465837,
0.707106781,
0.7193398,
0.731353702,
0.743144825,
0.75470958,
0.766044443,
0.777145961,
0.788010754,
0.79863551,
0.809016994,
0.819152044,
0.829037573,
0.838670568,
0.848048096,
0.857167301,
0.866025404,
0.874619707,
0.882947593,
0.891006524,
0.898794046,
0.906307787,
0.913545458,
0.920504853,
0.927183855,
0.933580426,
0.939692621,
0.945518576,
0.951056516,
0.956304756,
0.961261696,
0.965925826,
0.970295726,
0.974370065,
0.978147601,
0.981627183,
0.984807753,
0.987688341,
0.990268069,
0.992546152,
0.994521895,
0.996194698,
0.99756405,
0.998629535,
0.999390827,
0.999847695,
1,
};

float VCC,t,T,tos;
int f,freq; //, T;
BusOut saida(D4, D5, D6, D7, D8, D9, D10, D11);

int main()
{
    VCC = 3.3;                                        //used for determing offset voltage
    freq = 60;                                        //freq. in Hz
    tos = 15.5;                                        //time off-set in us (5.6ms / 350 = 15.5us)
    t = 30;
    T = t - tos; //T = 30; //(1/freq)/360;                                  //time slice in seconds for the sinusoid routine

    while (true)
    {
        for (int i=0; i < 90; i++)                     //0 to 90 degree
        {
            f=74*((sinus[i]*VCC/2)+VCC/2)+10;          //59 and 60 are adj for 1/4 of the FFh range(8bit) according to Vref
            saida = f;
//            printf("%1.3f", j);
            wait_us(T);//wait(T);
        }
        
        for (int i=90; i > 0; i--)                     //90 to 180 degree
        {
            f=74*((sinus[i]*VCC/2)+VCC/2)+10;
            saida = f;
//            printf("%1.3f", j);
            wait_us(T);//wait(T);
        }
            
        for (int i=0; i < 90; i++)  //180 to 270 degree
        {
            f=74*((-sinus[i]*VCC/2)+VCC/2)+10;
            saida = f;
//            printf("%1.3f", j);
            wait_us(T);//wait(T);
        }
            
        for (int i=90; i > 0; i--)  //270 to 360 degree
        {
            f=74*((-sinus[i]*VCC/2)+VCC/2)+10;
            saida = f;
//            printf("%1.3f", j);
            wait_us(T);//wait(T);
        }
        
    }
}