CQエレクトロニクス・セミナで使用するファンクション・ジェネレータの プログラム

Dependencies:   Array_Matrix mbed SerialTxRxIntr MyTicker7

Committer:
MikamiUitOpen
Date:
Fri Feb 25 02:36:55 2022 +0000
Revision:
0:8c8bc21159d9
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:8c8bc21159d9 1 //-------------------------------------------------------------
MikamiUitOpen 0:8c8bc21159d9 2 // STM32F446 内蔵の DAC 用のクラス(ヘッダ)
MikamiUitOpen 0:8c8bc21159d9 3 // 選択可能な入力端子:
MikamiUitOpen 0:8c8bc21159d9 4 // A2 (PA_4): ---- デフォルト
MikamiUitOpen 0:8c8bc21159d9 5 // D13 (PA_5): このポートはマイコンボードの LED も
MikamiUitOpen 0:8c8bc21159d9 6 // ドライブするので使わない方がよい
MikamiUitOpen 0:8c8bc21159d9 7 //
MikamiUitOpen 0:8c8bc21159d9 8 // 2020/10/17, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:8c8bc21159d9 9 //-------------------------------------------------------------
MikamiUitOpen 0:8c8bc21159d9 10
MikamiUitOpen 0:8c8bc21159d9 11 #include "mbed.h"
MikamiUitOpen 0:8c8bc21159d9 12
MikamiUitOpen 0:8c8bc21159d9 13 #ifndef STM32F446xx
MikamiUitOpen 0:8c8bc21159d9 14 #error Not NUCLEO-F446RE.
MikamiUitOpen 0:8c8bc21159d9 15 #endif
MikamiUitOpen 0:8c8bc21159d9 16
MikamiUitOpen 0:8c8bc21159d9 17 #ifndef F446_DAC_SINGLE_HPP
MikamiUitOpen 0:8c8bc21159d9 18 #define F446_DAC_SINGLE_HPP
MikamiUitOpen 0:8c8bc21159d9 19
MikamiUitOpen 0:8c8bc21159d9 20 namespace Mikami
MikamiUitOpen 0:8c8bc21159d9 21 {
MikamiUitOpen 0:8c8bc21159d9 22 class DacF446
MikamiUitOpen 0:8c8bc21159d9 23 {
MikamiUitOpen 0:8c8bc21159d9 24 public:
MikamiUitOpen 0:8c8bc21159d9 25 // コンストラクタ
MikamiUitOpen 0:8c8bc21159d9 26 explicit DacF446(PinName pin = A2);
MikamiUitOpen 0:8c8bc21159d9 27
MikamiUitOpen 0:8c8bc21159d9 28 virtual ~DacF446() {}
MikamiUitOpen 0:8c8bc21159d9 29
MikamiUitOpen 0:8c8bc21159d9 30 // -1.0f <= data <= 1.0f
MikamiUitOpen 0:8c8bc21159d9 31 void Write(float data) { WriteDac(ToUint16(data)); }
MikamiUitOpen 0:8c8bc21159d9 32
MikamiUitOpen 0:8c8bc21159d9 33 // 0 <= data <= 4095
MikamiUitOpen 0:8c8bc21159d9 34 void Write(uint16_t data) { WriteDac(__USAT(data, BIT_WIDTH_)); }
MikamiUitOpen 0:8c8bc21159d9 35
MikamiUitOpen 0:8c8bc21159d9 36 private:
MikamiUitOpen 0:8c8bc21159d9 37 void (DacF446::*fpWriteDac)(uint16_t);
MikamiUitOpen 0:8c8bc21159d9 38
MikamiUitOpen 0:8c8bc21159d9 39 static const int BIT_WIDTH_ = 12;
MikamiUitOpen 0:8c8bc21159d9 40 AnalogOut da_;
MikamiUitOpen 0:8c8bc21159d9 41
MikamiUitOpen 0:8c8bc21159d9 42 // DAC の片方のチェンネルへ出力する
MikamiUitOpen 0:8c8bc21159d9 43 void WriteDac1(uint16_t val) { DAC->DHR12R1 = val; } // CH1 へ
MikamiUitOpen 0:8c8bc21159d9 44 void WriteDac2(uint16_t val) { DAC->DHR12R2 = val; } // CH2 へ
MikamiUitOpen 0:8c8bc21159d9 45
MikamiUitOpen 0:8c8bc21159d9 46 void WriteDac(uint16_t val) { (this->*fpWriteDac)(val); }
MikamiUitOpen 0:8c8bc21159d9 47
MikamiUitOpen 0:8c8bc21159d9 48 // 飽和処理を行い uint16_t 型のデータを戻り値とする
MikamiUitOpen 0:8c8bc21159d9 49 uint16_t ToUint16(float val)
MikamiUitOpen 0:8c8bc21159d9 50 { return __USAT((val + 1.0f)*2048.0f, BIT_WIDTH_); }
MikamiUitOpen 0:8c8bc21159d9 51
MikamiUitOpen 0:8c8bc21159d9 52 // コピー・コンストラクタ,代入演算子の禁止のため
MikamiUitOpen 0:8c8bc21159d9 53 DacF446(const DacF446&);
MikamiUitOpen 0:8c8bc21159d9 54 DacF446& operator=(const DacF446&);
MikamiUitOpen 0:8c8bc21159d9 55 };
MikamiUitOpen 0:8c8bc21159d9 56 }
MikamiUitOpen 0:8c8bc21159d9 57 #endif // F446_DAC_SINGLE_HPP