LPC8xx Internal Analog Comparator library

Dependents:   ACMP_sample

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

Committer:
okini3939
Date:
Mon Nov 16 03:45:24 2015 +0000
Revision:
0:6ad2528ba3cc
1st build

Who changed what in which revision?

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