Frequency shifter for DISCO-F746. Input: MEMS mic, Output: CN10 OUT. DISCO-F746 による周波数シフタ.入力:MEMS マイク,出力:CN10 OUT

Dependencies:   F746_GUI F746_SAI_IO mbed

Committer:
MikamiUitOpen
Date:
Mon Mar 19 08:00:04 2018 +0000
Revision:
1:af3546588b73
Parent:
0:67554e1407a7
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:67554e1407a7 1 //-----------------------------------------------------------
MikamiUitOpen 0:67554e1407a7 2 // Class for waveform display
MikamiUitOpen 0:67554e1407a7 3 //
MikamiUitOpen 0:67554e1407a7 4 // 2017/04/06, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:67554e1407a7 5 //-----------------------------------------------------------
MikamiUitOpen 0:67554e1407a7 6
MikamiUitOpen 0:67554e1407a7 7 #ifndef F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 0:67554e1407a7 8 #define F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 0:67554e1407a7 9
MikamiUitOpen 0:67554e1407a7 10 #include "Array.hpp"
MikamiUitOpen 0:67554e1407a7 11
MikamiUitOpen 0:67554e1407a7 12 namespace Mikami
MikamiUitOpen 0:67554e1407a7 13 {
MikamiUitOpen 0:67554e1407a7 14 class WaveformDisplay
MikamiUitOpen 0:67554e1407a7 15 {
MikamiUitOpen 0:67554e1407a7 16 public:
MikamiUitOpen 0:67554e1407a7 17 WaveformDisplay(LCD_DISCO_F746NG &lcd,
MikamiUitOpen 0:67554e1407a7 18 uint16_t x0, uint16_t y0, int nData,
MikamiUitOpen 0:67554e1407a7 19 uint16_t rShift)
MikamiUitOpen 0:67554e1407a7 20 : X0_(x0), Y0_(y0), R_SHIFT_(rShift),
MikamiUitOpen 0:67554e1407a7 21 H1_(Y0_+LIMIT_+1), H2_(Y0_-LIMIT_-1),
MikamiUitOpen 0:67554e1407a7 22 lcd_(lcd) { Axis(nData); }
MikamiUitOpen 0:67554e1407a7 23
MikamiUitOpen 0:67554e1407a7 24 void Execute(const Array<int16_t> &xn)
MikamiUitOpen 0:67554e1407a7 25 {
MikamiUitOpen 0:67554e1407a7 26 lcd_.SetTextColor(GuiBase::ENUM_BACK);
MikamiUitOpen 0:67554e1407a7 27 lcd_.FillRect(X0_, Y0_-LIMIT_-1,
MikamiUitOpen 0:67554e1407a7 28 xn.Length(), (LIMIT_+1)*2+1);
MikamiUitOpen 0:67554e1407a7 29 Axis(xn.Length());
MikamiUitOpen 0:67554e1407a7 30 lcd_.SetTextColor(LINE_COLOR_);
MikamiUitOpen 0:67554e1407a7 31 uint16_t x1 = X0_;
MikamiUitOpen 0:67554e1407a7 32 uint16_t y1 = Clip(xn[0]);
MikamiUitOpen 0:67554e1407a7 33 for (int n=1; n<xn.Length(); n++)
MikamiUitOpen 0:67554e1407a7 34 {
MikamiUitOpen 0:67554e1407a7 35 uint16_t x2 = X0_ + n;
MikamiUitOpen 0:67554e1407a7 36 uint16_t y2 = Clip(xn[n]);
MikamiUitOpen 0:67554e1407a7 37 lcd_.DrawLine(x1, y1, x2, y2);
MikamiUitOpen 0:67554e1407a7 38 if ((y1 == H1_) || (y1 == H2_))
MikamiUitOpen 0:67554e1407a7 39 lcd_.DrawPixel(x1, y1, LCD_COLOR_RED);
MikamiUitOpen 0:67554e1407a7 40 x1 = x2;
MikamiUitOpen 0:67554e1407a7 41 y1 = y2;
MikamiUitOpen 0:67554e1407a7 42 }
MikamiUitOpen 0:67554e1407a7 43 }
MikamiUitOpen 0:67554e1407a7 44
MikamiUitOpen 0:67554e1407a7 45 private:
MikamiUitOpen 0:67554e1407a7 46 static const uint16_t LIMIT_ = 32;
MikamiUitOpen 0:67554e1407a7 47 static const uint32_t LINE_COLOR_ = LCD_COLOR_CYAN;
MikamiUitOpen 0:67554e1407a7 48 const uint16_t X0_, Y0_;
MikamiUitOpen 0:67554e1407a7 49 const uint16_t R_SHIFT_;
MikamiUitOpen 0:67554e1407a7 50 const uint16_t H1_, H2_;
MikamiUitOpen 0:67554e1407a7 51
MikamiUitOpen 0:67554e1407a7 52 LCD_DISCO_F746NG& lcd_;
MikamiUitOpen 0:67554e1407a7 53
MikamiUitOpen 0:67554e1407a7 54 // Clipping
MikamiUitOpen 0:67554e1407a7 55 uint16_t Clip(int16_t xn)
MikamiUitOpen 0:67554e1407a7 56 {
MikamiUitOpen 0:67554e1407a7 57 int16_t x = xn >> R_SHIFT_;
MikamiUitOpen 0:67554e1407a7 58 if (x > LIMIT_ ) x = LIMIT_ + 1;
MikamiUitOpen 0:67554e1407a7 59 if (x < -LIMIT_ ) x = -(LIMIT_ + 1) ;
MikamiUitOpen 0:67554e1407a7 60 return Y0_ - x;
MikamiUitOpen 0:67554e1407a7 61 }
MikamiUitOpen 0:67554e1407a7 62
MikamiUitOpen 0:67554e1407a7 63 void Axis(int nData)
MikamiUitOpen 0:67554e1407a7 64 {
MikamiUitOpen 0:67554e1407a7 65 lcd_.SetTextColor(LCD_COLOR_WHITE);
MikamiUitOpen 0:67554e1407a7 66 lcd_.DrawLine(X0_-5, Y0_, X0_+nData+5, Y0_);
MikamiUitOpen 0:67554e1407a7 67 }
MikamiUitOpen 0:67554e1407a7 68
MikamiUitOpen 0:67554e1407a7 69 // disallow copy constructor and assignment operator
MikamiUitOpen 0:67554e1407a7 70 WaveformDisplay(const WaveformDisplay& );
MikamiUitOpen 0:67554e1407a7 71 WaveformDisplay& operator=(const WaveformDisplay& );
MikamiUitOpen 0:67554e1407a7 72 };
MikamiUitOpen 0:67554e1407a7 73 }
MikamiUitOpen 0:67554e1407a7 74 #endif // F746_WAVEFORM_DISPLAY_HPP