Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UIT2_MovingAverage UIT2_AllpassReverb UIT2_CombReverb UIT2_FIR_LPF_Symmetry ... more
ADC_Base.hpp@0:6e0ed5adfe47, 2014-10-20 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Oct 20 03:01:11 2014 +0000
- Revision:
- 0:6e0ed5adfe47
- Child:
- 5:651809e96a2d
1
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MikamiUitOpen | 0:6e0ed5adfe47 | 1 | //------------------------------------------------------ |
| MikamiUitOpen | 0:6e0ed5adfe47 | 2 | // Class for ADC using TIM2 trigger -- Header |
| MikamiUitOpen | 0:6e0ed5adfe47 | 3 | // |
| MikamiUitOpen | 0:6e0ed5adfe47 | 4 | // 2014/10/04, Copyright (c) 2014 MIKAMI, Naoki |
| MikamiUitOpen | 0:6e0ed5adfe47 | 5 | //------------------------------------------------------ |
| MikamiUitOpen | 0:6e0ed5adfe47 | 6 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 7 | #ifndef ADC_BASE_HPP |
| MikamiUitOpen | 0:6e0ed5adfe47 | 8 | #define ADC_BASE_HPP |
| MikamiUitOpen | 0:6e0ed5adfe47 | 9 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 10 | #include "mbed.h" |
| MikamiUitOpen | 0:6e0ed5adfe47 | 11 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 12 | namespace Mikami |
| MikamiUitOpen | 0:6e0ed5adfe47 | 13 | { |
| MikamiUitOpen | 0:6e0ed5adfe47 | 14 | class ADC_Base |
| MikamiUitOpen | 0:6e0ed5adfe47 | 15 | { |
| MikamiUitOpen | 0:6e0ed5adfe47 | 16 | private: |
| MikamiUitOpen | 0:6e0ed5adfe47 | 17 | // Using mbed library for ADC |
| MikamiUitOpen | 0:6e0ed5adfe47 | 18 | AnalogIn adc_; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 19 | // Default constructor is not defined in AnalogIn class |
| MikamiUitOpen | 0:6e0ed5adfe47 | 20 | AnalogIn* adc2_; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 21 | AnalogIn* adc3_; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 22 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 23 | // Pins for Analog input |
| MikamiUitOpen | 0:6e0ed5adfe47 | 24 | const PinName PIN1_, PIN2_, PIN3_; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 25 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 26 | // Set timer to generate sampling pulse for ADC |
| MikamiUitOpen | 0:6e0ed5adfe47 | 27 | void SetTim2(int frequency); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 28 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 29 | // for inhibition of copy constructor |
| MikamiUitOpen | 0:6e0ed5adfe47 | 30 | ADC_Base(const ADC_Base&); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 31 | // for inhibition of substitute operator |
| MikamiUitOpen | 0:6e0ed5adfe47 | 32 | ADC_Base& operator=(const ADC_Base&); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 33 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 34 | protected: |
| MikamiUitOpen | 0:6e0ed5adfe47 | 35 | // for normalize |
| MikamiUitOpen | 0:6e0ed5adfe47 | 36 | static const float AMP_ = 1.0f/2048.0f; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 37 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 38 | ADC_TypeDef* const myAdc_; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 39 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 40 | // Wait until completion of AD conversion |
| MikamiUitOpen | 0:6e0ed5adfe47 | 41 | void WaitDone() |
| MikamiUitOpen | 0:6e0ed5adfe47 | 42 | { while((myAdc_->SR & ADC_SR_EOC) == RESET); } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 43 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 44 | public: |
| MikamiUitOpen | 0:6e0ed5adfe47 | 45 | // Constructor |
| MikamiUitOpen | 0:6e0ed5adfe47 | 46 | // pin1: Pin Name for input as A0, A1, etc. |
| MikamiUitOpen | 0:6e0ed5adfe47 | 47 | // frequency: Sampling frequency |
| MikamiUitOpen | 0:6e0ed5adfe47 | 48 | // pin2: If use 2nd channel set this parameter |
| MikamiUitOpen | 0:6e0ed5adfe47 | 49 | // pin3: If use 3rd channel set this parameter |
| MikamiUitOpen | 0:6e0ed5adfe47 | 50 | ADC_Base(PinName pin1, int frequency, |
| MikamiUitOpen | 0:6e0ed5adfe47 | 51 | PinName pin2 = NC, PinName pin3 = NC); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 52 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 53 | // Read ADC with waiting, range: [0, 0x0FFF] |
| MikamiUitOpen | 0:6e0ed5adfe47 | 54 | virtual uint16_t Read_u16() |
| MikamiUitOpen | 0:6e0ed5adfe47 | 55 | { |
| MikamiUitOpen | 0:6e0ed5adfe47 | 56 | WaitDone(); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 57 | return myAdc_->DR; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 58 | } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 59 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 60 | // Read ADC with waiting, range: [-1.0f, 1.0f] |
| MikamiUitOpen | 0:6e0ed5adfe47 | 61 | virtual float Read() |
| MikamiUitOpen | 0:6e0ed5adfe47 | 62 | { |
| MikamiUitOpen | 0:6e0ed5adfe47 | 63 | WaitDone(); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 64 | return AMP_*((int16_t)myAdc_->DR - 2048); |
| MikamiUitOpen | 0:6e0ed5adfe47 | 65 | } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 66 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 67 | // Select channel |
| MikamiUitOpen | 0:6e0ed5adfe47 | 68 | void Select1stChannel() { myAdc_->SQR3 = PIN1_; } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 69 | void Select2ndChannel() { myAdc_->SQR3 = PIN2_; } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 70 | void Select3rdChannel() { myAdc_->SQR3 = PIN3_; } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 71 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 72 | // Software start |
| MikamiUitOpen | 0:6e0ed5adfe47 | 73 | virtual void SoftStart() |
| MikamiUitOpen | 0:6e0ed5adfe47 | 74 | { myAdc_->CR2 |= ADC_CR2_SWSTART; } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 75 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 76 | uint32_t ReadSQR3() { return myAdc_->SQR3; } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 77 | }; |
| MikamiUitOpen | 0:6e0ed5adfe47 | 78 | } |
| MikamiUitOpen | 0:6e0ed5adfe47 | 79 | #endif // ADC_BASE_HPP |
| MikamiUitOpen | 0:6e0ed5adfe47 | 80 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 81 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 82 | |
| MikamiUitOpen | 0:6e0ed5adfe47 | 83 |