LPC8xx Internal Analog Comparator library
LPC8xx Internal Analog Comparator library
LPC800シリーズ(LPC812, LPC824等)に内蔵されているコンパレーター(比較器)を使うライブラリです。
使い方
初期化
ACMP acmp(vp, vn, hys, lad);
- vp = コンパレーター正入力(ACMP::LADDER / ACMP_I1~3 / BANDGAP)
- vn = コンパレーター負入力(ACMP::LADDER / ACMP_I1~3 / BANDGAP)
- hys = ヒステリシス選択(ACMP::NONE / HYS5mV / HYS10mV / HYS20mV)
- lad = 電圧ラダー選択(0~31)
コンパレーター入力に使えるピンは決まっています。(スイッチマトリクスで変更できません)
(LPC81x/82x) ACMP_I1=P0.0 / ACMP_I2=P0.1 / (LPC82x) ACMP_I3=P0.14 / ACMP_I4=P0.23
読み取り
acmp.read();
- 返り値
- 1: vp > vn
- 0: vp < vn
割込み
acmp.rise(*func);
- vp > vn を検出した時 func を呼び出す
acmp.fall(*func);
- vp < vn を検出した時 func を呼び出す
Sample
Import programACMP_sample
LPC8xx Internal Analog Comparator
Diff: ACMP.h
- Revision:
- 0:6ad2528ba3cc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ACMP.h Mon Nov 16 03:45:24 2015 +0000 @@ -0,0 +1,82 @@ +/** + * LPC8xx Internal Analog Comparator library for mbed + * Copyright (c) 2015 Suga + * Released under the MIT License: http://mbed.org/license/mit + */ +/** @file + * @brief LPC8xx Internal Analog Comparator library for mbed + */ + +#ifndef _ACMP_H_ +#define _ACMP_H_ + +#include "mbed.h" + +#if !defined(TARGET_LPC81X) && !defined(TARGET_LPC82X) +#error "supported for LPC8xx" +#endif + +/** ACMP class + */ +class ACMP { +public: + enum VSEL { + LADDER = 0, // voltage ladder + ACMP_I1 = 1, // P0.0 + ACMP_I2 = 2, // P0.1 +#if defined(TARGET_LPC81X) + BANDGAP = 6, +#elif defined(TARGET_LPC82X) + ACMP_I3 = 3, // P0.14 + ACMP_I4 = 4, // P0.23 + BANDGAP = 5, + ADC_0 = 6, +#endif + }; + enum HYS { + NONE = 0, + HYS5mV = 1, + HYS10mV = 2, + HYS20mV = 3, + }; + + static ACMP *_acmp; + + /** + * @param ain1 Selects positive voltage input + * @param ain2 Selects negative voltage input + * @param hys Selects hysteresis of the comparator + * @param lad Selects voltage ladder (0-31) + */ + ACMP (VSEL ain1, VSEL ain2, HYS hys = NONE, int lad = -1); + + void isrAcmp (); + + int read (); + + void rise (void(*fptr)() = NULL) { + _rise.attach(fptr); + } + template<typename T> + void rise (T* tptr, void (T::*mptr)()) { + if ((mptr != NULL) && (tptr != NULL)) { + _rise.attach(tptr, mptr); + } + } + + void fall (void(*fptr)() = NULL) { + _fall.attach(fptr); + } + template<typename T> + void fall (T* tptr, void (T::*mptr)()) { + if ((mptr != NULL) && (tptr != NULL)) { + _fall.attach(tptr, mptr); + } + } + +protected: + FunctionPointer _rise, _fall; + +}; + +#endif