Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: YKNCT_I2C.cpp
- Revision:
- 2:f5faf991cd86
- Parent:
- 1:67d5ea2ff6c1
- Child:
- 3:397a179b4d9e
--- a/YKNCT_I2C.cpp Tue Apr 02 09:50:29 2019 +0000 +++ b/YKNCT_I2C.cpp Tue Apr 02 10:33:33 2019 +0000 @@ -29,12 +29,68 @@ for(int i=0; i<4; i++) ad_data[i]=(int16_t)data[i*2+1]<<8|data[i*2]; + wait_us(1000); return ad_data[num]; } +void Y_I2C::MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t number) +{ + /* 送信データ + [0] [ MD出力更新 | 0 | 0 | 0 | 0 | ブレーキ | 回転方向 | MD指定 ] + [1] PWM値(7bit) + */ - + /* 送信データをMD更新フラグを立てて初期化 */ + (MD_I2C_Data + number)->pData[0] = 0x80; + /* モーターの駆動状態によってデータセット */ + switch (MD_GET_DRIVE(MD_I2C_Data, number)) { + /* ブレーキ,ブレーキビット 1,回転方向ビット 0 */ + /* 0b00000100 */ + case MD_BRAKE: + (MD_I2C_Data + number)->pData[0] |= 0x02 << 1; + break; + /* 正転,ブレーキビット 0,回転方向ビット 1 */ + /* 0b00000001 */ + case MD_FORWARD: + (MD_I2C_Data + number)->pData[0] |= 0x01 << 1; + break; + /* 逆転,ブレーキビット 0,回転方向ビット 0 */ + /* 0b00000000 */ + case MD_REVERSE: + (MD_I2C_Data + number)->pData[0] |= 0x00 << 1; + break; + } + /* PIC上の出力番号を指定 */ + /* 0b00000000 or 0b00000001 */ + (MD_I2C_Data + number)->pData[0] |= (MD_I2C_Data + number)->Number; + /* PWM値が100より大きかったら範囲内に補正 */ + if (MD_GET_PWM(MD_I2C_Data, number) > 99) + MD_SET_PWM(MD_I2C_Data, number, 99); + /* PWM(0~100)を0~127に変換して代入(オーバーフロー防止で16bitに一時変換) */ + (MD_I2C_Data + number)->pData[1] = (uint8_t)((uint16_t)MD_GET_PWM(MD_I2C_Data, number) * 127 / 100); + + /*8bitから7bitに変換*/ + i2c.write((MD_I2C_Data + number)->DevAddress << 1,(MD_I2C_Data + number)->pData,2); +} +/** + * @brief MDに通信確認用送信 + * @param MD_I2C_Data: I2C式MDデータ構造 + * @param number: 使用MD番号 + * @retval なし + * @detail I2C式MD側が通信が切れていないことを確認するために空データを送信する + */ +void Y_I2C::MD_I2C_Empty(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t number) +{ + /* 送信データをMD更新フラグを立てず初期化 */ + (MD_I2C_Data+number)->pData[0] = 0; + /* PIC上の出力番号を指定 */ + /* 0b00000000 or 0b00000001 */ + (MD_I2C_Data+number)->pData[0] |= (MD_I2C_Data+number)->Number; + + /*8bitから7bitに変換*/ + i2c.write((MD_I2C_Data + number)->DevAddress << 1,(MD_I2C_Data + number)->pData,2); +} \ No newline at end of file