Added one channel mode
Dependents: CW_Decoder_using_FFT_on_F446
Fork of F446_AD_DA by
F446_ADC.hpp@4:03e91e464ce5, 2017-02-05 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Feb 05 07:59:14 2017 +0000
- Revision:
- 4:03e91e464ce5
- Parent:
- 3:d1da91aec62f
added one channel mode (only A0/PA_0 input)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:c945b4fe9a48 | 1 | //---------------------------------------------------------- |
MikamiUitOpen | 0:c945b4fe9a48 | 2 | // Simultanuous AD Conversion by polling using |
MikamiUitOpen | 0:c945b4fe9a48 | 3 | // ADC2 and ADC3 on STM32F446 ---- Header |
MikamiUitOpen | 0:c945b4fe9a48 | 4 | // |
MikamiUitOpen | 0:c945b4fe9a48 | 5 | // STM32F446 の ADC2, ADC3 を使って同時に AD 変換を開始し, |
MikamiUitOpen | 0:c945b4fe9a48 | 6 | // ポーリングによりアナログ信号を入力するクラス(ヘッダ) |
MikamiUitOpen | 1:6b9f2af6613d | 7 | // A0 (PA_0) : ADC2 CH0, 左 |
MikamiUitOpen | 1:6b9f2af6613d | 8 | // A1 (PA_1) : ADC3 CH1, 右 |
MikamiUitOpen | 1:6b9f2af6613d | 9 | // Read(), Write() の引数: |
MikamiUitOpen | 1:6b9f2af6613d | 10 | // 第一引数:A0 (左),第二引数:A1 (右) |
MikamiUitOpen | 0:c945b4fe9a48 | 11 | // |
MikamiUitOpen | 2:29f9831ce719 | 12 | // 2017/01/30, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:c945b4fe9a48 | 13 | //---------------------------------------------------------- |
kenjiArai | 4:03e91e464ce5 | 14 | /* |
kenjiArai | 4:03e91e464ce5 | 15 | * Modified by Kenji Arai |
kenjiArai | 4:03e91e464ce5 | 16 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 4:03e91e464ce5 | 17 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 4:03e91e464ce5 | 18 | * |
kenjiArai | 4:03e91e464ce5 | 19 | * Started: Feburary 1st, 2017 |
kenjiArai | 4:03e91e464ce5 | 20 | * Revised: Feburary 1st, 2017 |
kenjiArai | 4:03e91e464ce5 | 21 | */ |
MikamiUitOpen | 0:c945b4fe9a48 | 22 | |
MikamiUitOpen | 0:c945b4fe9a48 | 23 | #include "mbed.h" |
MikamiUitOpen | 0:c945b4fe9a48 | 24 | |
MikamiUitOpen | 0:c945b4fe9a48 | 25 | #ifndef STM32F446xx |
MikamiUitOpen | 3:d1da91aec62f | 26 | #error Select NUCLEO-F446RE. |
MikamiUitOpen | 0:c945b4fe9a48 | 27 | #endif |
MikamiUitOpen | 0:c945b4fe9a48 | 28 | |
MikamiUitOpen | 3:d1da91aec62f | 29 | #include "F446_DAC.hpp" |
MikamiUitOpen | 3:d1da91aec62f | 30 | |
kenjiArai | 4:03e91e464ce5 | 31 | namespace Mikami |
kenjiArai | 4:03e91e464ce5 | 32 | { |
MikamiUitOpen | 0:c945b4fe9a48 | 33 | #ifndef F446_ADC_DUAL_HPP |
MikamiUitOpen | 0:c945b4fe9a48 | 34 | #define F446_ADC_DUAL_HPP |
MikamiUitOpen | 0:c945b4fe9a48 | 35 | |
MikamiUitOpen | 0:c945b4fe9a48 | 36 | class AdcDual |
MikamiUitOpen | 0:c945b4fe9a48 | 37 | { |
MikamiUitOpen | 0:c945b4fe9a48 | 38 | public: |
MikamiUitOpen | 0:c945b4fe9a48 | 39 | // Constructor |
MikamiUitOpen | 0:c945b4fe9a48 | 40 | // frequency: 標本化周波数 |
MikamiUitOpen | 0:c945b4fe9a48 | 41 | explicit AdcDual(int frequency); |
MikamiUitOpen | 0:c945b4fe9a48 | 42 | |
MikamiUitOpen | 1:6b9f2af6613d | 43 | // -1.0f <= ad1, ad2 <= 1.0f |
MikamiUitOpen | 1:6b9f2af6613d | 44 | // ad1: left, ad2: right |
MikamiUitOpen | 0:c945b4fe9a48 | 45 | virtual void Read(float &ad1, float &ad2); |
MikamiUitOpen | 0:c945b4fe9a48 | 46 | |
MikamiUitOpen | 1:6b9f2af6613d | 47 | // 0 <= ad1, ad2 <= 4095 |
MikamiUitOpen | 1:6b9f2af6613d | 48 | // ad1: left, ad2: right |
MikamiUitOpen | 0:c945b4fe9a48 | 49 | virtual void Read(uint16_t &ad1, uint16_t &ad2); |
MikamiUitOpen | 0:c945b4fe9a48 | 50 | |
MikamiUitOpen | 0:c945b4fe9a48 | 51 | protected: |
MikamiUitOpen | 0:c945b4fe9a48 | 52 | float ToFloat(uint16_t x) |
MikamiUitOpen | 0:c945b4fe9a48 | 53 | { return AMP_*(x - 2048); } |
MikamiUitOpen | 0:c945b4fe9a48 | 54 | |
MikamiUitOpen | 0:c945b4fe9a48 | 55 | private: |
MikamiUitOpen | 0:c945b4fe9a48 | 56 | static const float AMP_ = 1.0f/2048.0f; |
MikamiUitOpen | 0:c945b4fe9a48 | 57 | static const uint32_t EOC23_ = ADC_CSR_EOC2 | ADC_CSR_EOC3; |
MikamiUitOpen | 0:c945b4fe9a48 | 58 | |
MikamiUitOpen | 0:c945b4fe9a48 | 59 | // AD 変換が完了するまで待つ |
MikamiUitOpen | 0:c945b4fe9a48 | 60 | void WaitDone() |
MikamiUitOpen | 0:c945b4fe9a48 | 61 | { while((ADC->CSR & EOC23_) != EOC23_); } |
MikamiUitOpen | 0:c945b4fe9a48 | 62 | |
MikamiUitOpen | 0:c945b4fe9a48 | 63 | // AD 変換器の外部トリガに使うタイマ (TIM8) の設定 |
MikamiUitOpen | 0:c945b4fe9a48 | 64 | void SetTim8(int frequency); |
MikamiUitOpen | 0:c945b4fe9a48 | 65 | |
MikamiUitOpen | 0:c945b4fe9a48 | 66 | // for inhibition of copy constructor |
MikamiUitOpen | 0:c945b4fe9a48 | 67 | AdcDual(const AdcDual&); |
MikamiUitOpen | 0:c945b4fe9a48 | 68 | // for inhibition of substitute operator |
MikamiUitOpen | 0:c945b4fe9a48 | 69 | AdcDual& operator=(const AdcDual&); |
MikamiUitOpen | 0:c945b4fe9a48 | 70 | }; |
kenjiArai | 4:03e91e464ce5 | 71 | |
kenjiArai | 4:03e91e464ce5 | 72 | #endif // F446_ADC_DUAL_HPP |
kenjiArai | 4:03e91e464ce5 | 73 | |
kenjiArai | 4:03e91e464ce5 | 74 | #ifndef F446_ADC_SINGLE_HPP |
kenjiArai | 4:03e91e464ce5 | 75 | #define F446_ADC_SINGLE_HPP |
kenjiArai | 4:03e91e464ce5 | 76 | |
kenjiArai | 4:03e91e464ce5 | 77 | class AdcSingle |
kenjiArai | 4:03e91e464ce5 | 78 | { |
kenjiArai | 4:03e91e464ce5 | 79 | public: |
kenjiArai | 4:03e91e464ce5 | 80 | // Constructor |
kenjiArai | 4:03e91e464ce5 | 81 | // frequency: sampling frequency |
kenjiArai | 4:03e91e464ce5 | 82 | explicit AdcSingle(int frequency); |
kenjiArai | 4:03e91e464ce5 | 83 | |
kenjiArai | 4:03e91e464ce5 | 84 | virtual void Read(float &ad); |
kenjiArai | 4:03e91e464ce5 | 85 | |
kenjiArai | 4:03e91e464ce5 | 86 | virtual void Read(uint16_t &ad); |
kenjiArai | 4:03e91e464ce5 | 87 | |
kenjiArai | 4:03e91e464ce5 | 88 | protected: |
kenjiArai | 4:03e91e464ce5 | 89 | float ToFloat(uint16_t x) |
kenjiArai | 4:03e91e464ce5 | 90 | { return AMP_*(x - 2048); } |
kenjiArai | 4:03e91e464ce5 | 91 | |
kenjiArai | 4:03e91e464ce5 | 92 | private: |
kenjiArai | 4:03e91e464ce5 | 93 | static const float AMP_ = 1.0f/2048.0f; |
kenjiArai | 4:03e91e464ce5 | 94 | static const uint32_t EOC2_ = ADC_CSR_EOC2; |
kenjiArai | 4:03e91e464ce5 | 95 | |
kenjiArai | 4:03e91e464ce5 | 96 | // waiting ADC conversion |
kenjiArai | 4:03e91e464ce5 | 97 | void WaitDone() |
kenjiArai | 4:03e91e464ce5 | 98 | { while((ADC->CSR & EOC2_) != EOC2_); } |
kenjiArai | 4:03e91e464ce5 | 99 | |
kenjiArai | 4:03e91e464ce5 | 100 | // Set timer(TIM() for trigger for ADC |
kenjiArai | 4:03e91e464ce5 | 101 | void SetTim8(int frequency); |
kenjiArai | 4:03e91e464ce5 | 102 | |
kenjiArai | 4:03e91e464ce5 | 103 | // for inhibition of copy constructor |
kenjiArai | 4:03e91e464ce5 | 104 | AdcSingle(const AdcSingle&); |
kenjiArai | 4:03e91e464ce5 | 105 | // for inhibition of substitute operator |
kenjiArai | 4:03e91e464ce5 | 106 | AdcSingle& operator=(const AdcSingle&); |
kenjiArai | 4:03e91e464ce5 | 107 | }; |
kenjiArai | 4:03e91e464ce5 | 108 | |
kenjiArai | 4:03e91e464ce5 | 109 | #endif // F446_ADC_SINGLE_HPP |
MikamiUitOpen | 0:c945b4fe9a48 | 110 | } |
kenjiArai | 4:03e91e464ce5 | 111 |