TriangularWave

Dependencies:   mbed

main.cpp

Committer:
VigneshRSR
Date:
2015-08-17
Revision:
0:0487fe0e0dd5

File content as of revision 0:0487fe0e0dd5:

#include "mbed.h"
 
//Number of dutycycle steps for output wave
#define TRI_STEPS          33

//Frequency of output sine in Hz
#define TRI_OUT_FREQ       1
               
//Frequency of Pulse Width Modulated signal in Hz
#define PWM_FREQ           6600

float tri_duty[TRI_STEPS];
 
//PWM pin
PwmOut mypwm(D10);
 
//Heartbeat LED
DigitalOut myled(LED1);
 
//Ticker to update the PWM dutycycle
Ticker pwm_ticker;
 
//Ticker calls this fucntion to update the PWM dutycycle
void pwm_duty_updater() {
  static int idx = 0;
  mypwm.write(tri_duty[idx]);   // Set the dutycycle % to next value in array
  idx++;                         // Increment the idx
  if (idx == TRI_STEPS) idx=0;  // Reset the idx when the end has been reached  
}
  
int main() {
    float tri[] =    {0,
                      0.0625,
                      0.125,
                      0.1875,
                      0.25,
                      0.3125,
                      0.375,
                      0.4375,
                      0.5,
                      0.5625,
                      0.625,
                      0.6875,
                      0.75,
                      0.8125,
                      0.875,
                      0.9375,
                      1,
                      0.9375,
                      0.875,
                      0.8125,
                      0.75,
                      0.6875,
                      0.625,
                      0.5625,
                      0.5,
                      0.4375,
                      0.375,
                      0.3125,
                      0.25,
                      0.1875,
                      0.125,
                      0.0625,
                      0};
                      
    for (int i = 0; i < TRI_STEPS; i++)    {
        tri_duty[i] = tri[i];
    }
                      
    // Set PWM frequency
    mypwm.period( 1.0f / (float) PWM_FREQ);
 
    // Init the Ticker to call the dutycyle updater at the required interval
    // The update should be at (SINE_STEPS * SINE_OUT_FREQ) 
    pwm_ticker.attach(&pwm_duty_updater, 1.0f / (float)(TRI_STEPS * TRI_OUT_FREQ));
 
    while(1){ //infinite loop
    myled = !myled; 
    wait(0.5);  
  }
}