LPC810メモ:アナログコンパレータ(比較結果をそのまま出力)

単純にアナログコンパレータを試してみた例。

前提とする環境はこちら→LPC810メモ 共通の準備

  • 8番と5番の電圧を比較して、8番の方が高ければ4番がHIGHになる(4番につないだLEDが光る)

サンプルコード

#include "LPC8xx.h"

int main( void )
{
    //  SWMのclockを有効化
    // UM10601 4.6.13 System clock control register
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 7);

    // UM10601 9.5.10 Pin enable register 0
    // ACMP_I1_EN,ACMP_I2_ENを立てて、
    // Analog comparatorを有効化。
    // pinは8番と5番に固定されている。
    LPC_SWM->PINENABLE0 = 0xffffffbcUL;

    // ACMP_O_O を4番pinに設定
    // UM10601 9.5.9 Pin assign register 8
    LPC_SWM->PINASSIGN8 = 0xffff02ffUL;

    // UM10601 18.3 Basic configuration の手順に従った設定
    // Analog comparatorのclockを有効化
    // UM10601 4.6.13 System clock control register
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 19);

    // Analog comparatorのPower downを無効化
    // UM10601 4.6.32 Power configuration register
    LPC_SYSCON->PDRUNCFG &= ~(1 << 15);

    // Clear the analog comparator peripheral reset using the PRESETCTRL register
    // UM10601 4.6.2 Peripheral reset control register
    LPC_SYSCON->PRESETCTRL &= ~(1<<12);
    LPC_SYSCON->PRESETCTRL |= (1<<12);

    // The analog comparator interrupt is connected to interrupt #11 in the NVIC.
    // 本例は割り込みは使わない

    //  UM10601 18.3 Basic configuration の手順に従った設定ここまで

    // UM19691 8.6.1 Comparator control register
    LPC_CMP->CTRL =
          (1 << 8)        // +inputはACMP_I1(8番pin)
        |  (2 << 11)       // -inputはACMP_I2(5番pin)
        |  (1 << 25)      // hysteresis = 5 mV
        ;

    // PIO0_0(8番)とPIO0_1(5番)は、デフォルトでpull upされているらしい。
    // I/O configurationのclockを有効化
    // UM10601 4.6.13 System clock control register
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 18);

    // pull-up/pull-downともに無効化
    // UM10601 6.5.17 PIO0_0 register
    // UM10601  6.5.12 PIO0_1 register
    LPC_IOCON->PIO0_0 &= ~(0x3 <<  3);
    LPC_IOCON->PIO0_1 &= ~(0x3 <<  3);
}

接続

  • 2つある半固定抵抗を適当にいじると、8番5番の電圧が変わり、8番が高ければLEDが光る仕組み。

補足/雑感

  • 入力は、ACMP_I1が8番、ACMP_I2が5番に固定されている。ACMP_I2が5番だと、開始時点でLOWだとISPモードになっちゃわない?
  • 最後のpull-upの無効化。そもそもdefaultだとpull-upされているというのも知らなかったけど、本当に無効化必要なのかよくわかってない。この例だと、あってもなくても見た目に挙動変わらなかった。本当にこれで無効化できてるかもわからない。

みっかぼの無料Androidアプリはこちら。