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: UITDSP_ADDA_Example2
Diff: ADC_BuiltIn.hpp
- Revision:
- 0:46d099dfd9d6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ADC_BuiltIn.hpp Sat Mar 14 06:49:49 2015 +0000
@@ -0,0 +1,86 @@
+//------------------------------------------------------
+// Class for ADC using TIM2 trigger -- Header
+//
+// 2015/03/14, Copyright (c) 2015 MIKAMI, Naoki
+//------------------------------------------------------
+
+#ifndef ADC_BUILTIN_HPP
+#define ADC_BUILTIN_HPP
+
+#include "mbed.h"
+
+namespace Mikami
+{
+ class ADC_BuiltIn
+ {
+ private:
+ // Following object of AnalogIn class will be
+ // initialized by menber initializer
+ AnalogIn adc_;
+ // Following two objects of AnalogIn class will be
+ // initailized by regular executable statements
+ AnalogIn* adc2_;
+ AnalogIn* adc3_;
+
+ // Channel of ADC1
+ uint8_t ch1_, ch2_, ch3_;
+
+ // Set timer to generate sampling pulse for ADC
+ void SetTim2(int frequency);
+
+ // Exctract channel number
+ uint8_t GetChannelNumber(PinName);
+
+ // for inhibition of copy constructor
+ ADC_BuiltIn(const ADC_BuiltIn&);
+ // for inhibition of substitute operator
+ ADC_BuiltIn& operator=(const ADC_BuiltIn&);
+
+ protected:
+ // for normalize
+ static const float AMP_ = 1.0f/2048.0f;
+
+ ADC_TypeDef* const myAdc_;
+
+ // Wait until completion of AD conversion
+ void WaitDone()
+ { while((myAdc_->SR & ADC_SR_EOC) == RESET); }
+
+ public:
+
+ // Constructor
+ // pin1: Pin Name for input as A0, A1, etc.
+ // frequency: Sampling frequency
+ // pin2: If use 2nd channel set this parameter
+ // pin3: If use 3rd channel set this parameter
+ ADC_BuiltIn(PinName pin1, int frequency,
+ PinName pin2 = NC, PinName pin3 = NC);
+
+ // Read ADC with waiting, range: [0, 0x0FFF]
+ virtual uint16_t Read_u16()
+ {
+ WaitDone();
+ return myAdc_->DR;
+ }
+
+ // Read ADC with waiting, range: [-1.0f, 1.0f]
+ virtual float Read()
+ {
+ WaitDone();
+ return AMP_*((int16_t)myAdc_->DR - 2048);
+ }
+
+ // Select channel
+ void Select1stChannel() { myAdc_->SQR3 = ch1_; }
+ void Select2ndChannel() { myAdc_->SQR3 = ch2_; }
+ void Select3rdChannel() { myAdc_->SQR3 = ch3_; }
+
+ // Software start
+ virtual void SoftStart()
+ { myAdc_->CR2 |= ADC_CR2_SWSTART; }
+
+ uint32_t ReadSQR3() { return myAdc_->SQR3; }
+ };
+}
+#endif // ADC_BUILTIN_HPP
+