Added one channel mode

Dependents:   CW_Decoder_using_FFT_on_F446

Fork of F446_AD_DA by 不韋 呂

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?

UserRevisionLine numberNew 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