Creates square-wave frequency output on pin p22. Custom frequency between 1Hz and 48 MHz. (LPC 1768)

Dependencies:   FastPWM

Creates square-wave frequency output on pin22 with custom frequency.

Tested for frequencies from 1Hz to 48MHz. The accuracy depends heavily on the frequency - at 12, 24, 48 MHz the frequency deviation is less than 1%, but at 20 MHz it is about 20%.

Uses Library FastPWM ( http://mbed.org/users/Sissors/code/FastPWM/ ). For LPC 1768.

How to use this Library:

#include "mbed.h"
#include "PwmOscillator.h"

PwmOscillator oscillator;
DigitalOut led1(LED1);

int main() 
{
    oscillator.initWithFrequency(8000000);     // initialize oscillator instance (pin p22) with custom frequency, here: 8MHz
    led1=1;                                    // optional: indicator LED shows that oscillator is running
    oscillator.start();                        // start oscillator
    wait(5);                                   // optional: oscillator is running 5 seconds
    oscillator.stop();                         // stop oscillator
    led1=0;
}

Files at this revision

API Documentation at this revision

Comitter:
geotec
Date:
Fri Dec 14 14:34:22 2012 +0000
Child:
1:4bbb380a1089
Commit message:
Initial commit

Changed in this revision

FastPWM.lib Show annotated file Show diff for this revision Revisions of this file
PwmOscillator.cpp Show annotated file Show diff for this revision Revisions of this file
PwmOscillator.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FastPWM.lib	Fri Dec 14 14:34:22 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/FastPWM/#3094d3806cfc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PwmOscillator.cpp	Fri Dec 14 14:34:22 2012 +0000
@@ -0,0 +1,26 @@
+#include "mbed.h"
+#include "PwmOscillator.h"
+#include "FastPWM.h"
+
+FastPWM pinOut(p22);
+
+double _period_us = 0;
+double _pulsewidth_us = 0;
+
+
+void PwmOscillator::initWithFrequency(int frequencyHz)
+{
+    _period_us = (1.0 / (double)frequencyHz)*1000000;
+    _pulsewidth_us = _period_us / 2.0;
+    pinOut.period_us(_period_us);  
+}
+
+void PwmOscillator::start()
+{    
+    pinOut.pulsewidth_us(_pulsewidth_us);
+}
+
+void PwmOscillator::stop()
+{
+    pinOut = 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PwmOscillator.h	Fri Dec 14 14:34:22 2012 +0000
@@ -0,0 +1,22 @@
+#include "mbed.h"
+
+/** Creates square-wave frequency output on pin22 with custom frequency. Tested for frequency range from 1Hz to 48MHz.
+ *  The accuracy is depends on the frequency - at 12, 24, 48 MHz the frequency deviation is less than 1% but at 20 MHz it is about 20%.
+ *  Uses Library FastPWM ( http://mbed.org/users/Sissors/code/FastPWM/ ).       */
+class PwmOscillator
+{
+
+public:
+    
+    /** Initialize PwmOscillator instance with frequency [Hz]. 
+     * @param frequencyHz  = frequency in Hz (1 ... 48000000)     */
+    void initWithFrequency(int frequencyHz);
+
+    /** Start oscillator
+     */
+    void start();
+    
+    /** Stop oscillator 
+     */
+    void stop();
+};