
TriangularWave
Dependencies: mbed
main.cpp@0:0487fe0e0dd5, 2015-08-17 (annotated)
- Committer:
- VigneshRSR
- Date:
- Mon Aug 17 00:08:46 2015 +0000
- Revision:
- 0:0487fe0e0dd5
TriangularWave
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
VigneshRSR | 0:0487fe0e0dd5 | 1 | #include "mbed.h" |
VigneshRSR | 0:0487fe0e0dd5 | 2 | |
VigneshRSR | 0:0487fe0e0dd5 | 3 | //Number of dutycycle steps for output wave |
VigneshRSR | 0:0487fe0e0dd5 | 4 | #define TRI_STEPS 33 |
VigneshRSR | 0:0487fe0e0dd5 | 5 | |
VigneshRSR | 0:0487fe0e0dd5 | 6 | //Frequency of output sine in Hz |
VigneshRSR | 0:0487fe0e0dd5 | 7 | #define TRI_OUT_FREQ 1 |
VigneshRSR | 0:0487fe0e0dd5 | 8 | |
VigneshRSR | 0:0487fe0e0dd5 | 9 | //Frequency of Pulse Width Modulated signal in Hz |
VigneshRSR | 0:0487fe0e0dd5 | 10 | #define PWM_FREQ 6600 |
VigneshRSR | 0:0487fe0e0dd5 | 11 | |
VigneshRSR | 0:0487fe0e0dd5 | 12 | float tri_duty[TRI_STEPS]; |
VigneshRSR | 0:0487fe0e0dd5 | 13 | |
VigneshRSR | 0:0487fe0e0dd5 | 14 | //PWM pin |
VigneshRSR | 0:0487fe0e0dd5 | 15 | PwmOut mypwm(D10); |
VigneshRSR | 0:0487fe0e0dd5 | 16 | |
VigneshRSR | 0:0487fe0e0dd5 | 17 | //Heartbeat LED |
VigneshRSR | 0:0487fe0e0dd5 | 18 | DigitalOut myled(LED1); |
VigneshRSR | 0:0487fe0e0dd5 | 19 | |
VigneshRSR | 0:0487fe0e0dd5 | 20 | //Ticker to update the PWM dutycycle |
VigneshRSR | 0:0487fe0e0dd5 | 21 | Ticker pwm_ticker; |
VigneshRSR | 0:0487fe0e0dd5 | 22 | |
VigneshRSR | 0:0487fe0e0dd5 | 23 | //Ticker calls this fucntion to update the PWM dutycycle |
VigneshRSR | 0:0487fe0e0dd5 | 24 | void pwm_duty_updater() { |
VigneshRSR | 0:0487fe0e0dd5 | 25 | static int idx = 0; |
VigneshRSR | 0:0487fe0e0dd5 | 26 | mypwm.write(tri_duty[idx]); // Set the dutycycle % to next value in array |
VigneshRSR | 0:0487fe0e0dd5 | 27 | idx++; // Increment the idx |
VigneshRSR | 0:0487fe0e0dd5 | 28 | if (idx == TRI_STEPS) idx=0; // Reset the idx when the end has been reached |
VigneshRSR | 0:0487fe0e0dd5 | 29 | } |
VigneshRSR | 0:0487fe0e0dd5 | 30 | |
VigneshRSR | 0:0487fe0e0dd5 | 31 | int main() { |
VigneshRSR | 0:0487fe0e0dd5 | 32 | float tri[] = {0, |
VigneshRSR | 0:0487fe0e0dd5 | 33 | 0.0625, |
VigneshRSR | 0:0487fe0e0dd5 | 34 | 0.125, |
VigneshRSR | 0:0487fe0e0dd5 | 35 | 0.1875, |
VigneshRSR | 0:0487fe0e0dd5 | 36 | 0.25, |
VigneshRSR | 0:0487fe0e0dd5 | 37 | 0.3125, |
VigneshRSR | 0:0487fe0e0dd5 | 38 | 0.375, |
VigneshRSR | 0:0487fe0e0dd5 | 39 | 0.4375, |
VigneshRSR | 0:0487fe0e0dd5 | 40 | 0.5, |
VigneshRSR | 0:0487fe0e0dd5 | 41 | 0.5625, |
VigneshRSR | 0:0487fe0e0dd5 | 42 | 0.625, |
VigneshRSR | 0:0487fe0e0dd5 | 43 | 0.6875, |
VigneshRSR | 0:0487fe0e0dd5 | 44 | 0.75, |
VigneshRSR | 0:0487fe0e0dd5 | 45 | 0.8125, |
VigneshRSR | 0:0487fe0e0dd5 | 46 | 0.875, |
VigneshRSR | 0:0487fe0e0dd5 | 47 | 0.9375, |
VigneshRSR | 0:0487fe0e0dd5 | 48 | 1, |
VigneshRSR | 0:0487fe0e0dd5 | 49 | 0.9375, |
VigneshRSR | 0:0487fe0e0dd5 | 50 | 0.875, |
VigneshRSR | 0:0487fe0e0dd5 | 51 | 0.8125, |
VigneshRSR | 0:0487fe0e0dd5 | 52 | 0.75, |
VigneshRSR | 0:0487fe0e0dd5 | 53 | 0.6875, |
VigneshRSR | 0:0487fe0e0dd5 | 54 | 0.625, |
VigneshRSR | 0:0487fe0e0dd5 | 55 | 0.5625, |
VigneshRSR | 0:0487fe0e0dd5 | 56 | 0.5, |
VigneshRSR | 0:0487fe0e0dd5 | 57 | 0.4375, |
VigneshRSR | 0:0487fe0e0dd5 | 58 | 0.375, |
VigneshRSR | 0:0487fe0e0dd5 | 59 | 0.3125, |
VigneshRSR | 0:0487fe0e0dd5 | 60 | 0.25, |
VigneshRSR | 0:0487fe0e0dd5 | 61 | 0.1875, |
VigneshRSR | 0:0487fe0e0dd5 | 62 | 0.125, |
VigneshRSR | 0:0487fe0e0dd5 | 63 | 0.0625, |
VigneshRSR | 0:0487fe0e0dd5 | 64 | 0}; |
VigneshRSR | 0:0487fe0e0dd5 | 65 | |
VigneshRSR | 0:0487fe0e0dd5 | 66 | for (int i = 0; i < TRI_STEPS; i++) { |
VigneshRSR | 0:0487fe0e0dd5 | 67 | tri_duty[i] = tri[i]; |
VigneshRSR | 0:0487fe0e0dd5 | 68 | } |
VigneshRSR | 0:0487fe0e0dd5 | 69 | |
VigneshRSR | 0:0487fe0e0dd5 | 70 | // Set PWM frequency |
VigneshRSR | 0:0487fe0e0dd5 | 71 | mypwm.period( 1.0f / (float) PWM_FREQ); |
VigneshRSR | 0:0487fe0e0dd5 | 72 | |
VigneshRSR | 0:0487fe0e0dd5 | 73 | // Init the Ticker to call the dutycyle updater at the required interval |
VigneshRSR | 0:0487fe0e0dd5 | 74 | // The update should be at (SINE_STEPS * SINE_OUT_FREQ) |
VigneshRSR | 0:0487fe0e0dd5 | 75 | pwm_ticker.attach(&pwm_duty_updater, 1.0f / (float)(TRI_STEPS * TRI_OUT_FREQ)); |
VigneshRSR | 0:0487fe0e0dd5 | 76 | |
VigneshRSR | 0:0487fe0e0dd5 | 77 | while(1){ //infinite loop |
VigneshRSR | 0:0487fe0e0dd5 | 78 | myled = !myled; |
VigneshRSR | 0:0487fe0e0dd5 | 79 | wait(0.5); |
VigneshRSR | 0:0487fe0e0dd5 | 80 | } |
VigneshRSR | 0:0487fe0e0dd5 | 81 | } |