The experiment using this program is introduced on "Interface" No.12, CQ publishing Co.,Ltd, 2014. 本プログラムを使った実験は,CQ出版社のインターフェース 2014年12月号で紹介しています.

Dependencies:   DSProcessingIO mbed

Committer:
CQpub0Mikami
Date:
Tue Jul 29 06:53:35 2014 +0000
Revision:
1:b0a0a1ab01be
Parent:
0:b811ec8a7e8a
ver.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CQpub0Mikami 0:b811ec8a7e8a 1 //--------------------------------------------------------------
CQpub0Mikami 0:b811ec8a7e8a 2 // FIR filter: Even order, Direct form
CQpub0Mikami 0:b811ec8a7e8a 3 //
CQpub0Mikami 0:b811ec8a7e8a 4 // Copyright (c) 2014 MIKAMI, Naoki, 2014/07/15
CQpub0Mikami 0:b811ec8a7e8a 5 //--------------------------------------------------------------
CQpub0Mikami 0:b811ec8a7e8a 6
CQpub0Mikami 0:b811ec8a7e8a 7 #include "mbed.h"
CQpub0Mikami 0:b811ec8a7e8a 8 #include "AdcInternal.hpp"
CQpub0Mikami 0:b811ec8a7e8a 9 #include "MCP4922Single.hpp"
CQpub0Mikami 0:b811ec8a7e8a 10 #include "coefficients_200.hpp"
CQpub0Mikami 0:b811ec8a7e8a 11 #include "FIR_Direct.hpp"
CQpub0Mikami 0:b811ec8a7e8a 12
CQpub0Mikami 0:b811ec8a7e8a 13 using namespace Mikami;
CQpub0Mikami 0:b811ec8a7e8a 14
CQpub0Mikami 0:b811ec8a7e8a 15 // sampling frequency
CQpub0Mikami 0:b811ec8a7e8a 16 const float FS_ = 10.0e3f;
CQpub0Mikami 0:b811ec8a7e8a 17
CQpub0Mikami 0:b811ec8a7e8a 18 // for AD converter
CQpub0Mikami 0:b811ec8a7e8a 19 Adc adc_(A0);
CQpub0Mikami 0:b811ec8a7e8a 20 // for DA converter
CQpub0Mikami 0:b811ec8a7e8a 21 Dac dacA_(Dac::DAC_A);
CQpub0Mikami 0:b811ec8a7e8a 22
CQpub0Mikami 0:b811ec8a7e8a 23 Ticker timer_; // for timer interrupt
CQpub0Mikami 0:b811ec8a7e8a 24 DigitalOut pinD8_(D8); // for measurement of execution time
CQpub0Mikami 0:b811ec8a7e8a 25
CQpub0Mikami 0:b811ec8a7e8a 26 FirDirect<ORDER_> lpf(hm_);
CQpub0Mikami 0:b811ec8a7e8a 27
CQpub0Mikami 0:b811ec8a7e8a 28 // Called every 0.1 ms
CQpub0Mikami 0:b811ec8a7e8a 29 void TimerIsr()
CQpub0Mikami 0:b811ec8a7e8a 30 {
CQpub0Mikami 0:b811ec8a7e8a 31 float xn = adc_.Read(); // input
CQpub0Mikami 0:b811ec8a7e8a 32
CQpub0Mikami 0:b811ec8a7e8a 33 // Execute FIR filter
CQpub0Mikami 0:b811ec8a7e8a 34 float yn = lpf.Execute(xn);
CQpub0Mikami 0:b811ec8a7e8a 35
CQpub0Mikami 0:b811ec8a7e8a 36 dacA_.Write(yn); // output
CQpub0Mikami 0:b811ec8a7e8a 37 }
CQpub0Mikami 0:b811ec8a7e8a 38
CQpub0Mikami 0:b811ec8a7e8a 39 int main()
CQpub0Mikami 0:b811ec8a7e8a 40 {
CQpub0Mikami 0:b811ec8a7e8a 41 timer_.attach_us(&TimerIsr, 1.0e6f/FS_);
CQpub0Mikami 0:b811ec8a7e8a 42
CQpub0Mikami 0:b811ec8a7e8a 43 while (true) {} // infinite loop
CQpub0Mikami 0:b811ec8a7e8a 44 }