Signal Generator

Dependencies:   IniManager RA8875 Watchdog mbed-rtos mbed

Fork of speaker_demo_Analog by jim hamblen

Revision:
2:8f71b71fce1b
Child:
4:10281ddb673d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SignalGenDAC.h	Sun Jan 15 03:11:22 2017 +0000
@@ -0,0 +1,68 @@
+
+//
+// Derived from AN10917: Memory to DAC data transfers using the LPC1700's DMA
+//
+#ifndef SIGNALGENDAC_H
+#define SIGNALGENDAC_H
+
+#include "mbed.h"
+
+#include "SignalGenDefs.h"       // access the waveform mode data type
+
+
+#define SIGNAL_MEM_ENTRIES 2048     // size of the DAC buffer
+
+class SignalGenDAC {
+
+public:
+
+    /// Constructor, which is used to define the hardware
+    ///
+    /// @param[in] aout is the analog output pin
+    /// @param[in] minV is based on the A/D low reference voltage (default 0.0)
+    /// @param[in] maxV is based on the A/D high reference voltage (default 3.0)
+    ///
+    SignalGenDAC(PinName aout, float minV = 0.0, float maxV = 3.0);
+
+    /// Destructor
+    ///
+    ~SignalGenDAC();
+
+    /// Create the waveform in the private memory buffer that is used to DMA to the DAC
+    ///
+    /// @param[in] mode defines the waveform: Sine, Square, Triangle, Sawtooth, User
+    /// @param[in] frequency defines the desired frequency
+    /// @param[in] dutycycle defined the duty cycle of the waveform to be created. The value
+    ///             is range limited to 5 to 95 (representing 5 to 95 %).
+    /// @param[in] voltage is the peak-to-peak voltage, and it range limited to 0 to 3.0.
+    /// @param[in] offset is the offset voltage, and is range limited to 0 to 3.0.
+    ///
+    void PrepareWaveform(SG_Mode mode, float frequency, float dutycycle, float voltage, float offset);
+
+    /// Start the signal, in either a oneshot, or continuous mode.
+    ///
+    /// @param[in] oneShot defaults false, which causes continuous mode. 
+    ///             When set true, one cycle is produced.
+    ///
+    void Start(bool oneShot = false);
+
+    /// Stop the signal, if it is running.
+    ///
+    void Stop(void);
+
+    /// Determine if the signal is running.
+    ///
+    /// @returns true if the signal is running.
+    ///
+    bool isRunning(void) { return isOn; }
+
+private:
+    bool isOn;              // tracks whether the signal is on or off
+    AnalogOut * aout;
+    float minV;             // Based on the A/D hardware
+    float maxV;             // Based on the A/D hardware
+    /// range limit a value.
+    float rangelimit(float value, float min, float max);
+};
+
+#endif // SIGNALGENDAC_H
\ No newline at end of file