I2Cが開通した
前回まででMbed --> Macが開通したので、次の課題はI2C --> Mbedを開通させることです。
===
ゴール:I2CデバイスをアクセスしてMacに表示させる
機材:リアルタイムクロック(RTC)
ツール:前回と同じ(Mbed Compiler、CoolTermMac)
ソースは以下
===
#include "mbed.h"
#include "USBSerial.h"
USBSerial usb(0x1f00, 0x2012, 0x0001, false);
I2C i2c(p26, p25); // sda, scl
const int addr8bit = 0x51 << 1; // 8bit I2C address
int main(void) {
char regaddr[1];
char readdata[11]; // room for length and 7 databytes
while(1) {
regaddr[0] = 0x00;
i2c.write(addr8bit, regaddr, 1, true); // select the register, no I2C Stop
i2c.read(addr8bit, readdata, 11); // read 11 bytes
// print the data to the screen
usb.printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\r\n",
regaddr[0] , readdata[1], readdata[2], readdata[3],
readdata[4], readdata[5], readdata[6], readdata[7],
readdata[8], readdata[9], readdata[10] );
wait(1);
}
}
===
ゴール:I2CデバイスをアクセスしてMacに表示させる
機材:リアルタイムクロック(RTC)
ツール:前回と同じ(Mbed Compiler、CoolTermMac)
ソースは以下
===
#include "mbed.h"
#include "USBSerial.h"
USBSerial usb(0x1f00, 0x2012, 0x0001, false);
I2C i2c(p26, p25); // sda, scl
const int addr8bit = 0x51 << 1; // 8bit I2C address
int main(void) {
char regaddr[1];
char readdata[11]; // room for length and 7 databytes
while(1) {
regaddr[0] = 0x00;
i2c.write(addr8bit, regaddr, 1, true); // select the register, no I2C Stop
i2c.read(addr8bit, readdata, 11); // read 11 bytes
// print the data to the screen
usb.printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\r\n",
regaddr[0] , readdata[1], readdata[2], readdata[3],
readdata[4], readdata[5], readdata[6], readdata[7],
readdata[8], readdata[9], readdata[10] );
wait(1);
}
}
===
コンパイル結果をダウンロード、書き込んで実行させると次のようになりました。
左から5つ目のhexaが秒ですが、1秒ごとに変化しているのがわかります。
ここまで
コメント
コメントを投稿