コウスケ スズキ
/
20224222
i2c 2
main.cpp@0:bf86efb237ca, 2022-04-22 (annotated)
- Committer:
- kosukesuzuki
- Date:
- Fri Apr 22 17:24:36 2022 +0000
- Revision:
- 0:bf86efb237ca
- Child:
- 1:b38a436a0059
lpc1768 c++ MPU9250 i2c
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kosukesuzuki | 0:bf86efb237ca | 1 | /* |
kosukesuzuki | 0:bf86efb237ca | 2 | MPU9250をi2c通信してみた。 |
kosukesuzuki | 0:bf86efb237ca | 3 | |
kosukesuzuki | 0:bf86efb237ca | 4 | 1バイトずつ送受信する場合は、スタートコンディション・ストップコンディションなどのアドレス送信などの制御が必要です。 |
kosukesuzuki | 0:bf86efb237ca | 5 | 連続だったら、いいらしい。(参照 https://os.mbed.com/users/okini3939/notebook/I2C_jp/ ) |
kosukesuzuki | 0:bf86efb237ca | 6 | |
kosukesuzuki | 0:bf86efb237ca | 7 | 「マスターが受信する」によって、取得するため |
kosukesuzuki | 0:bf86efb237ca | 8 | |
kosukesuzuki | 0:bf86efb237ca | 9 | 1.slave address(スレーブアドレス→内部レジスタ) |
kosukesuzuki | 0:bf86efb237ca | 10 | |
kosukesuzuki | 0:bf86efb237ca | 11 | 2.ack(受信) |
kosukesuzuki | 0:bf86efb237ca | 12 | 3.data1(8bits) |
kosukesuzuki | 0:bf86efb237ca | 13 | 4.ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 14 | 5.data2(8bits) |
kosukesuzuki | 0:bf86efb237ca | 15 | 6.ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 16 | |
kosukesuzuki | 0:bf86efb237ca | 17 | (参照 http://www.picfun.com/c15.html ) |
kosukesuzuki | 0:bf86efb237ca | 18 | */ |
kosukesuzuki | 0:bf86efb237ca | 19 | |
kosukesuzuki | 0:bf86efb237ca | 20 | #include "mbed.h" |
kosukesuzuki | 0:bf86efb237ca | 21 | |
kosukesuzuki | 0:bf86efb237ca | 22 | Serial pc(USBTX,USBRX); |
kosukesuzuki | 0:bf86efb237ca | 23 | I2C i2c(p9, p10); |
kosukesuzuki | 0:bf86efb237ca | 24 | |
kosukesuzuki | 0:bf86efb237ca | 25 | const int addr = 0xD0; //加速度とジャイロのスレーブアドレス |
kosukesuzuki | 0:bf86efb237ca | 26 | |
kosukesuzuki | 0:bf86efb237ca | 27 | short int xl,xh; //x軸の加速度 |
kosukesuzuki | 0:bf86efb237ca | 28 | short int yl,yh; //y軸の加速度 |
kosukesuzuki | 0:bf86efb237ca | 29 | short int zl,zh; |
kosukesuzuki | 0:bf86efb237ca | 30 | |
kosukesuzuki | 0:bf86efb237ca | 31 | int main() |
kosukesuzuki | 0:bf86efb237ca | 32 | { |
kosukesuzuki | 0:bf86efb237ca | 33 | i2c.frequency(100000); |
kosukesuzuki | 0:bf86efb237ca | 34 | pc.printf("Start!!\r\n"); |
kosukesuzuki | 0:bf86efb237ca | 35 | |
kosukesuzuki | 0:bf86efb237ca | 36 | while(1) { |
kosukesuzuki | 0:bf86efb237ca | 37 | //x軸加速度取得 |
kosukesuzuki | 0:bf86efb237ca | 38 | |
kosukesuzuki | 0:bf86efb237ca | 39 | //1.slave address(スレーブアドレス→内部レジスタ) |
kosukesuzuki | 0:bf86efb237ca | 40 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 41 | i2c.write(addr);// slaveアドレス |
kosukesuzuki | 0:bf86efb237ca | 42 | i2c.write(0x3b);// 内部レジスタ(59) |
kosukesuzuki | 0:bf86efb237ca | 43 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 44 | |
kosukesuzuki | 0:bf86efb237ca | 45 | //2.ack=0(受信) |
kosukesuzuki | 0:bf86efb237ca | 46 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 47 | i2c.read(false); //ack(受信) |
kosukesuzuki | 0:bf86efb237ca | 48 | //3.data1(8bits) |
kosukesuzuki | 0:bf86efb237ca | 49 | i2c.write(0x3c);//data1(60)1 |
kosukesuzuki | 0:bf86efb237ca | 50 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 51 | |
kosukesuzuki | 0:bf86efb237ca | 52 | //4.ack=0(送信) |
kosukesuzuki | 0:bf86efb237ca | 53 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 54 | i2c.write(addr|0x01); //ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 55 | xh = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 56 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 57 | |
kosukesuzuki | 0:bf86efb237ca | 58 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 59 | //5.data2(8bits) |
kosukesuzuki | 0:bf86efb237ca | 60 | i2c.write(0x3d);//data2(61)2 |
kosukesuzuki | 0:bf86efb237ca | 61 | //6.ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 62 | i2c.write(addr|0x01); //ack=1(受信) |
kosukesuzuki | 0:bf86efb237ca | 63 | xl = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 64 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 65 | |
kosukesuzuki | 0:bf86efb237ca | 66 | //以下2~6を繰り返す。 |
kosukesuzuki | 0:bf86efb237ca | 67 | |
kosukesuzuki | 0:bf86efb237ca | 68 | |
kosukesuzuki | 0:bf86efb237ca | 69 | //y軸加速度取得 |
kosukesuzuki | 0:bf86efb237ca | 70 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 71 | i2c.read(false); //ack(受信) |
kosukesuzuki | 0:bf86efb237ca | 72 | i2c.write(0x3e); //data(62)3 |
kosukesuzuki | 0:bf86efb237ca | 73 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 74 | |
kosukesuzuki | 0:bf86efb237ca | 75 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 76 | i2c.write(addr|0x01); //ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 77 | yh = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 78 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 79 | |
kosukesuzuki | 0:bf86efb237ca | 80 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 81 | i2c.write(0x3f); //data(63)4 |
kosukesuzuki | 0:bf86efb237ca | 82 | i2c.write(addr|0x01); //ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 83 | yl = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 84 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 85 | |
kosukesuzuki | 0:bf86efb237ca | 86 | //z軸加速度取得 |
kosukesuzuki | 0:bf86efb237ca | 87 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 88 | i2c.read(false); //ack(受信) |
kosukesuzuki | 0:bf86efb237ca | 89 | i2c.write(0x40); //data(64)5 |
kosukesuzuki | 0:bf86efb237ca | 90 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 91 | |
kosukesuzuki | 0:bf86efb237ca | 92 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 93 | i2c.write(addr|0x01); //ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 94 | zh = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 95 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 96 | |
kosukesuzuki | 0:bf86efb237ca | 97 | i2c.start(); |
kosukesuzuki | 0:bf86efb237ca | 98 | i2c.write(0x41); //data(65)6 |
kosukesuzuki | 0:bf86efb237ca | 99 | i2c.write(addr|0x01); //ack=1(送信) |
kosukesuzuki | 0:bf86efb237ca | 100 | zl = i2c.read(0);//data取り出す |
kosukesuzuki | 0:bf86efb237ca | 101 | i2c.stop(); |
kosukesuzuki | 0:bf86efb237ca | 102 | |
kosukesuzuki | 0:bf86efb237ca | 103 | |
kosukesuzuki | 0:bf86efb237ca | 104 | |
kosukesuzuki | 0:bf86efb237ca | 105 | |
kosukesuzuki | 0:bf86efb237ca | 106 | double acc_ax = short((xh<<8) | (xl)); |
kosukesuzuki | 0:bf86efb237ca | 107 | double acc_ay = short((yh<<8) | (yl)); |
kosukesuzuki | 0:bf86efb237ca | 108 | double acc_az = short((zh<<8) | (zl)); |
kosukesuzuki | 0:bf86efb237ca | 109 | |
kosukesuzuki | 0:bf86efb237ca | 110 | double AX = (acc_ax)*2/32768*9.81; |
kosukesuzuki | 0:bf86efb237ca | 111 | double AY = (acc_ay)*2/32768*9.81; |
kosukesuzuki | 0:bf86efb237ca | 112 | double AZ = (acc_az)*2/32768*9.81; |
kosukesuzuki | 0:bf86efb237ca | 113 | |
kosukesuzuki | 0:bf86efb237ca | 114 | pc.printf("%f %f %f\r\n",AX,AY,AZ); |
kosukesuzuki | 0:bf86efb237ca | 115 | wait(0.01); |
kosukesuzuki | 0:bf86efb237ca | 116 | } |
kosukesuzuki | 0:bf86efb237ca | 117 | } |