LPC812-MAXを使ってみた(3rd : Digital I/O)

今回はLPC812-MAXのDigital I/Oについてです。

https://mbed.org/handbook/mbed-NXP-LPC800-MAX

をみると、Digital I/Oに2種類あるのがわかります。 ピン番号が、P0_XXのものと、XP_Xのものです。 P0_XXのほうは、単純にピン定義することで、High/Low制御できます。

P0_XXの部分は16本。下図の赤線で囲った部分になります。 /media/uploads/y_notsu/lpc800_digitalout.jpg P0_0を使ってLチカしたときの様子がこちら /media/uploads/y_notsu/p1000830_mini.jpg

codeは、下のようになります。

digital_out_test

#include "mbed.h"

DigitalOut p1(P0_0);

int main() {
    while(1) {
        p1 = 1;
        wait(0.2);
        p1 = 0;
        wait(0.2);
    }
}

動作確認ピン: P0_0, P0_4, P0_6, P0_7(3色LEDでは赤も点滅します), P0_8, P0_9, P0_17(3色LEDも緑で点滅します) P0_16(3色LEDは青で点滅します), P0_13, P0_14, P0_15, P0_12, P0_10, P0_11 このうち、P0_10とP0_11はシリアル通信のSDA, SCLも兼ねている ためか、ほかのピンに比べて若干電流が小さいようです。 (Data Sheetみたら、IOHとか載ってねぇー。というかほかの端子もすべて<tbd>になっててわかんねぇーw)

LPC812は、GPIO端子が18本あって、そのうち16本が使えるので結構使えますね。

次にXP_XX端子を用いたDigital I/Oについて記載してみます。 /media/uploads/y_notsu/lpc800_xpout.jpg

また、このBoardにはI2C I/O Expander(PCA9672PW)が載っていて、 I/O Expanderの出力は8本あるのですが、 XP_0, XP_1, XP_2, XP_3はAnalog Inと共用で、Defaultで出力端子がAnalog Inに つながっているので、Digital I/Oとして使うためにはジャンパの抵抗を付け替える 必要があります。 XP_4, XP_5はArduino Receptaclesに直接つながっているように見えます。 XP_6は、Arduino Receptaclesでは使えず、mbed/LPC Xpresso端子を使うときに 使えそうです。 XP_7はUser_Buttonにつながっており、User入力に使えるということでしょうか?

ひとまずここでは、XP_4を使ったサンプルプログラムを書いてみます。 PCA9672のDataSheetは http://www.nxp.com/documents/data_sheet/PCA9672.pdf でご覧ください。I2Cアドレスが0x23のときのWriteコマンドが46hということで 以下のようなCodeを書いてみました。なお、SchematicのほうのJ2の並び順が正しいようで、 Pinout figureは間違っているようです(XP_4とXP_5が逆)

I/O Expander test of LPC812-MAX

#include "mbed.h"

I2C i2c(P0_10, P0_11);
const int addr = 0x46; //write command

int main() {
    char cmd[1];
    while(1) {
        cmd[0]=0x10;
        i2c.write(addr, cmd, 1); //Digital Out High
        wait(0.2);
        cmd[0]=0x00;
        i2c.write(addr, cmd, 1); //Digital Out Low
        wait(0.2);
    }
}

なお、こちらの出力電流が120uAと小さいため、高輝度LEDつけてたら ほんのりとだけ点滅しました(;・∀・) 電流は流せませんが、そこらへんはトランジスタやFETで電流を流せるように 工夫したらよいでしょう。


Please log in to post comments.