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本。下図の赤線で囲った部分になります。 P0_0を使ってLチカしたときの様子がこちら
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について記載してみます。
また、この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.