Moving average for ST Nucleo F401RE. The number of average is controled by sw.

Dependencies:   UIT_ADDA mbed

Committer:
MikamiUitOpen
Date:
Fri Nov 14 07:00:00 2014 +0000
Revision:
4:5a068d9ef168
Parent:
2:bf617231c9bd
5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:2e17a28353a0 1 //--------------------------------------------------------------
MikamiUitOpen 0:2e17a28353a0 2 // 移動平均, 平均数:1, 2, 4, 8, 16, 32, 64:スイッチで選択
MikamiUitOpen 0:2e17a28353a0 3 // Analog Input : A0
MikamiUitOpen 0:2e17a28353a0 4 // Analog Output: MCP4922 using SPI
MikamiUitOpen 4:5a068d9ef168 5 // 2014/11/12, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:2e17a28353a0 6 //--------------------------------------------------------------
MikamiUitOpen 0:2e17a28353a0 7
MikamiUitOpen 0:2e17a28353a0 8 #include "mbed.h"
MikamiUitOpen 0:2e17a28353a0 9
MikamiUitOpen 0:2e17a28353a0 10 #include "ADC_Base.hpp" // for ADC not using interrupt
MikamiUitOpen 0:2e17a28353a0 11 #include "DAC_MCP4922.hpp" // for DAC MCP4922
MikamiUitOpen 0:2e17a28353a0 12
MikamiUitOpen 0:2e17a28353a0 13 using namespace Mikami;
MikamiUitOpen 0:2e17a28353a0 14
MikamiUitOpen 0:2e17a28353a0 15 const int FS_ = 12000; // Sampling frequency: 12 kHz
MikamiUitOpen 0:2e17a28353a0 16 ADC_Base adc_(A0, FS_); // for AD
MikamiUitOpen 0:2e17a28353a0 17 DAC_MCP4922 myDac_; // for DA
MikamiUitOpen 0:2e17a28353a0 18
MikamiUitOpen 0:2e17a28353a0 19 DigitalIn sw1_(D2, PullDown);
MikamiUitOpen 0:2e17a28353a0 20 DigitalIn sw2_(D3, PullDown);
MikamiUitOpen 0:2e17a28353a0 21 DigitalIn sw4_(D4, PullDown);
MikamiUitOpen 0:2e17a28353a0 22 DigitalIn sw8_(D5, PullDown);
MikamiUitOpen 0:2e17a28353a0 23
MikamiUitOpen 0:2e17a28353a0 24 int main()
MikamiUitOpen 0:2e17a28353a0 25 {
MikamiUitOpen 4:5a068d9ef168 26 myDac_.ScfClockTim3(500000); // cutoff frequency: 5 kHz
MikamiUitOpen 0:2e17a28353a0 27
MikamiUitOpen 0:2e17a28353a0 28 const int M = 64;
MikamiUitOpen 0:2e17a28353a0 29
MikamiUitOpen 0:2e17a28353a0 30 float xn[M];
MikamiUitOpen 0:2e17a28353a0 31 for (int n=0; n<M; n++) xn[n] = 0;
MikamiUitOpen 0:2e17a28353a0 32
MikamiUitOpen 0:2e17a28353a0 33 while (true)
MikamiUitOpen 0:2e17a28353a0 34 {
MikamiUitOpen 1:2b1ce47a1fd7 35 int sw = (sw8_ << 3) | (sw4_ << 2) | (sw2_ << 1) | sw1_;
MikamiUitOpen 0:2e17a28353a0 36 int nAv = 1 << sw;
MikamiUitOpen 0:2e17a28353a0 37 if (nAv > 64) nAv = 64;
MikamiUitOpen 0:2e17a28353a0 38
MikamiUitOpen 0:2e17a28353a0 39 xn[0] = adc_.Read(); // Read from A0
MikamiUitOpen 0:2e17a28353a0 40 //-----------------------------------------------
MikamiUitOpen 0:2e17a28353a0 41
MikamiUitOpen 0:2e17a28353a0 42 float yn = 0;
MikamiUitOpen 0:2e17a28353a0 43 for (int k=0; k<nAv; k++) yn = yn + xn[k];
MikamiUitOpen 0:2e17a28353a0 44 yn = yn/(float)nAv; // yn: average
MikamiUitOpen 0:2e17a28353a0 45
MikamiUitOpen 0:2e17a28353a0 46 // Update input buffer
MikamiUitOpen 0:2e17a28353a0 47 for (int k = nAv-1; k>0; k--)
MikamiUitOpen 0:2e17a28353a0 48 xn[k] = xn[k-1];
MikamiUitOpen 0:2e17a28353a0 49
MikamiUitOpen 0:2e17a28353a0 50 //-----------------------------------------------
MikamiUitOpen 2:bf617231c9bd 51 myDac_.Write(yn); // Write to DAC
MikamiUitOpen 0:2e17a28353a0 52 }
MikamiUitOpen 0:2e17a28353a0 53 }