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
ACMP.h@0:6ad2528ba3cc, 2015-11-16 (annotated)
- Committer:
- okini3939
- Date:
- Mon Nov 16 03:45:24 2015 +0000
- Revision:
- 0:6ad2528ba3cc
1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:6ad2528ba3cc | 1 | /** |
okini3939 | 0:6ad2528ba3cc | 2 | * LPC8xx Internal Analog Comparator library for mbed |
okini3939 | 0:6ad2528ba3cc | 3 | * Copyright (c) 2015 Suga |
okini3939 | 0:6ad2528ba3cc | 4 | * Released under the MIT License: http://mbed.org/license/mit |
okini3939 | 0:6ad2528ba3cc | 5 | */ |
okini3939 | 0:6ad2528ba3cc | 6 | /** @file |
okini3939 | 0:6ad2528ba3cc | 7 | * @brief LPC8xx Internal Analog Comparator library for mbed |
okini3939 | 0:6ad2528ba3cc | 8 | */ |
okini3939 | 0:6ad2528ba3cc | 9 | |
okini3939 | 0:6ad2528ba3cc | 10 | #ifndef _ACMP_H_ |
okini3939 | 0:6ad2528ba3cc | 11 | #define _ACMP_H_ |
okini3939 | 0:6ad2528ba3cc | 12 | |
okini3939 | 0:6ad2528ba3cc | 13 | #include "mbed.h" |
okini3939 | 0:6ad2528ba3cc | 14 | |
okini3939 | 0:6ad2528ba3cc | 15 | #if !defined(TARGET_LPC81X) && !defined(TARGET_LPC82X) |
okini3939 | 0:6ad2528ba3cc | 16 | #error "supported for LPC8xx" |
okini3939 | 0:6ad2528ba3cc | 17 | #endif |
okini3939 | 0:6ad2528ba3cc | 18 | |
okini3939 | 0:6ad2528ba3cc | 19 | /** ACMP class |
okini3939 | 0:6ad2528ba3cc | 20 | */ |
okini3939 | 0:6ad2528ba3cc | 21 | class ACMP { |
okini3939 | 0:6ad2528ba3cc | 22 | public: |
okini3939 | 0:6ad2528ba3cc | 23 | enum VSEL { |
okini3939 | 0:6ad2528ba3cc | 24 | LADDER = 0, // voltage ladder |
okini3939 | 0:6ad2528ba3cc | 25 | ACMP_I1 = 1, // P0.0 |
okini3939 | 0:6ad2528ba3cc | 26 | ACMP_I2 = 2, // P0.1 |
okini3939 | 0:6ad2528ba3cc | 27 | #if defined(TARGET_LPC81X) |
okini3939 | 0:6ad2528ba3cc | 28 | BANDGAP = 6, |
okini3939 | 0:6ad2528ba3cc | 29 | #elif defined(TARGET_LPC82X) |
okini3939 | 0:6ad2528ba3cc | 30 | ACMP_I3 = 3, // P0.14 |
okini3939 | 0:6ad2528ba3cc | 31 | ACMP_I4 = 4, // P0.23 |
okini3939 | 0:6ad2528ba3cc | 32 | BANDGAP = 5, |
okini3939 | 0:6ad2528ba3cc | 33 | ADC_0 = 6, |
okini3939 | 0:6ad2528ba3cc | 34 | #endif |
okini3939 | 0:6ad2528ba3cc | 35 | }; |
okini3939 | 0:6ad2528ba3cc | 36 | enum HYS { |
okini3939 | 0:6ad2528ba3cc | 37 | NONE = 0, |
okini3939 | 0:6ad2528ba3cc | 38 | HYS5mV = 1, |
okini3939 | 0:6ad2528ba3cc | 39 | HYS10mV = 2, |
okini3939 | 0:6ad2528ba3cc | 40 | HYS20mV = 3, |
okini3939 | 0:6ad2528ba3cc | 41 | }; |
okini3939 | 0:6ad2528ba3cc | 42 | |
okini3939 | 0:6ad2528ba3cc | 43 | static ACMP *_acmp; |
okini3939 | 0:6ad2528ba3cc | 44 | |
okini3939 | 0:6ad2528ba3cc | 45 | /** |
okini3939 | 0:6ad2528ba3cc | 46 | * @param ain1 Selects positive voltage input |
okini3939 | 0:6ad2528ba3cc | 47 | * @param ain2 Selects negative voltage input |
okini3939 | 0:6ad2528ba3cc | 48 | * @param hys Selects hysteresis of the comparator |
okini3939 | 0:6ad2528ba3cc | 49 | * @param lad Selects voltage ladder (0-31) |
okini3939 | 0:6ad2528ba3cc | 50 | */ |
okini3939 | 0:6ad2528ba3cc | 51 | ACMP (VSEL ain1, VSEL ain2, HYS hys = NONE, int lad = -1); |
okini3939 | 0:6ad2528ba3cc | 52 | |
okini3939 | 0:6ad2528ba3cc | 53 | void isrAcmp (); |
okini3939 | 0:6ad2528ba3cc | 54 | |
okini3939 | 0:6ad2528ba3cc | 55 | int read (); |
okini3939 | 0:6ad2528ba3cc | 56 | |
okini3939 | 0:6ad2528ba3cc | 57 | void rise (void(*fptr)() = NULL) { |
okini3939 | 0:6ad2528ba3cc | 58 | _rise.attach(fptr); |
okini3939 | 0:6ad2528ba3cc | 59 | } |
okini3939 | 0:6ad2528ba3cc | 60 | template<typename T> |
okini3939 | 0:6ad2528ba3cc | 61 | void rise (T* tptr, void (T::*mptr)()) { |
okini3939 | 0:6ad2528ba3cc | 62 | if ((mptr != NULL) && (tptr != NULL)) { |
okini3939 | 0:6ad2528ba3cc | 63 | _rise.attach(tptr, mptr); |
okini3939 | 0:6ad2528ba3cc | 64 | } |
okini3939 | 0:6ad2528ba3cc | 65 | } |
okini3939 | 0:6ad2528ba3cc | 66 | |
okini3939 | 0:6ad2528ba3cc | 67 | void fall (void(*fptr)() = NULL) { |
okini3939 | 0:6ad2528ba3cc | 68 | _fall.attach(fptr); |
okini3939 | 0:6ad2528ba3cc | 69 | } |
okini3939 | 0:6ad2528ba3cc | 70 | template<typename T> |
okini3939 | 0:6ad2528ba3cc | 71 | void fall (T* tptr, void (T::*mptr)()) { |
okini3939 | 0:6ad2528ba3cc | 72 | if ((mptr != NULL) && (tptr != NULL)) { |
okini3939 | 0:6ad2528ba3cc | 73 | _fall.attach(tptr, mptr); |
okini3939 | 0:6ad2528ba3cc | 74 | } |
okini3939 | 0:6ad2528ba3cc | 75 | } |
okini3939 | 0:6ad2528ba3cc | 76 | |
okini3939 | 0:6ad2528ba3cc | 77 | protected: |
okini3939 | 0:6ad2528ba3cc | 78 | FunctionPointer _rise, _fall; |
okini3939 | 0:6ad2528ba3cc | 79 | |
okini3939 | 0:6ad2528ba3cc | 80 | }; |
okini3939 | 0:6ad2528ba3cc | 81 | |
okini3939 | 0:6ad2528ba3cc | 82 | #endif |