不韋 呂
/
UIT2_SinGenerator_SinFunction
Sin generator using sinf() function for ST Nucleo F401RE.
main.cpp@0:28696920540e, 2014-10-21 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Tue Oct 21 10:00:13 2014 +0000
- Revision:
- 0:28696920540e
- Child:
- 1:920c46269ce8
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:28696920540e | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 2 | // Sin generator using sinf() function |
MikamiUitOpen | 0:28696920540e | 3 | // Analog Output: MCP4922 using SPI |
MikamiUitOpen | 0:28696920540e | 4 | // 2014/10/20, Copyright (c) 2014 MIKAMI, Naoki |
MikamiUitOpen | 0:28696920540e | 5 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 6 | |
MikamiUitOpen | 0:28696920540e | 7 | #include "mbed.h" |
MikamiUitOpen | 0:28696920540e | 8 | |
MikamiUitOpen | 0:28696920540e | 9 | #include "ADC_Base.hpp" // for ADC not using interrupt |
MikamiUitOpen | 0:28696920540e | 10 | #include "DAC_MCP4922.hpp" // for DAC MCP4922 |
MikamiUitOpen | 0:28696920540e | 11 | #include "ScfClockTim3.hpp" // for clock supplied to SCF |
MikamiUitOpen | 0:28696920540e | 12 | |
MikamiUitOpen | 0:28696920540e | 13 | using namespace Mikami; |
MikamiUitOpen | 0:28696920540e | 14 | |
MikamiUitOpen | 0:28696920540e | 15 | const int FS_ = 12000; // Sampling frequency: 12 kHz |
MikamiUitOpen | 0:28696920540e | 16 | ADC_Base adc_(A0, FS_); // for AD |
MikamiUitOpen | 0:28696920540e | 17 | DAC_MCP4922 myDac_(DAC_MCP4922::DAC_A); // for DA |
MikamiUitOpen | 0:28696920540e | 18 | |
MikamiUitOpen | 0:28696920540e | 19 | int main() |
MikamiUitOpen | 0:28696920540e | 20 | { |
MikamiUitOpen | 0:28696920540e | 21 | const float PI = 3.1415926536; |
MikamiUitOpen | 0:28696920540e | 22 | const float PI2 = PI*2; |
MikamiUitOpen | 0:28696920540e | 23 | ScfClockTim3(500000); // cutoff frequency: 5 kHz |
MikamiUitOpen | 0:28696920540e | 24 | |
MikamiUitOpen | 0:28696920540e | 25 | float phi = 0; |
MikamiUitOpen | 0:28696920540e | 26 | float dPhi = PI2*440.0f/(float)FS_; |
MikamiUitOpen | 0:28696920540e | 27 | |
MikamiUitOpen | 0:28696920540e | 28 | while (true) |
MikamiUitOpen | 0:28696920540e | 29 | { |
MikamiUitOpen | 0:28696920540e | 30 | float xn = adc_.Read(); // Dummy read for synchronization to Fs |
MikamiUitOpen | 0:28696920540e | 31 | //----------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 32 | |
MikamiUitOpen | 0:28696920540e | 33 | float yn = (float)(0.8f*sinf(phi)); |
MikamiUitOpen | 0:28696920540e | 34 | phi = phi + dPhi; |
MikamiUitOpen | 0:28696920540e | 35 | if (phi > PI) phi = phi -PI2; |
MikamiUitOpen | 0:28696920540e | 36 | |
MikamiUitOpen | 0:28696920540e | 37 | //----------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 38 | myDac_.Write(yn); // Write to DAC |
MikamiUitOpen | 0:28696920540e | 39 | } |
MikamiUitOpen | 0:28696920540e | 40 | } |
MikamiUitOpen | 0:28696920540e | 41 | /* |
MikamiUitOpen | 0:28696920540e | 42 | // Following version uses double type variable |
MikamiUitOpen | 0:28696920540e | 43 | int main() |
MikamiUitOpen | 0:28696920540e | 44 | { |
MikamiUitOpen | 0:28696920540e | 45 | const double PI = 3.1415926536; |
MikamiUitOpen | 0:28696920540e | 46 | const double PI2 = PI*2; |
MikamiUitOpen | 0:28696920540e | 47 | ScfClockTim3(500000); // cutoff frequency: 5 kHz |
MikamiUitOpen | 0:28696920540e | 48 | |
MikamiUitOpen | 0:28696920540e | 49 | double phi = 0; |
MikamiUitOpen | 0:28696920540e | 50 | double dPhi = PI2*440.0/(double)FS_; |
MikamiUitOpen | 0:28696920540e | 51 | |
MikamiUitOpen | 0:28696920540e | 52 | while (true) |
MikamiUitOpen | 0:28696920540e | 53 | { |
MikamiUitOpen | 0:28696920540e | 54 | float xn = adc_.Read(); // Dummy read to synchronize Fs |
MikamiUitOpen | 0:28696920540e | 55 | //----------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 56 | dOut_.write(1); |
MikamiUitOpen | 0:28696920540e | 57 | |
MikamiUitOpen | 0:28696920540e | 58 | float yn = (float)(0.8*sin(phi)); |
MikamiUitOpen | 0:28696920540e | 59 | phi = phi + dPhi; |
MikamiUitOpen | 0:28696920540e | 60 | if (phi > PI) phi = phi -PI2; |
MikamiUitOpen | 0:28696920540e | 61 | |
MikamiUitOpen | 0:28696920540e | 62 | dOut_.write(0); |
MikamiUitOpen | 0:28696920540e | 63 | //----------------------------------------------- |
MikamiUitOpen | 0:28696920540e | 64 | myDac_.Write(yn); // Write to DAC |
MikamiUitOpen | 0:28696920540e | 65 | } |
MikamiUitOpen | 0:28696920540e | 66 | } |
MikamiUitOpen | 0:28696920540e | 67 | */ |