CQエレクトロニクス・セミナで使用するファンクション・ジェネレータの プログラム
Dependencies: Array_Matrix mbed SerialTxRxIntr MyTicker7
F446_DAC.hpp@0:8c8bc21159d9, 2022-02-25 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Feb 25 02:36:55 2022 +0000
- Revision:
- 0:8c8bc21159d9
1
Who changed what in which revision?
User | Revision | Line number | New 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 |