1. I2C とは


演習 7-1 (個人PC): I2C 通信で音声合成 LSI (ATP3011F1-PU)に文字列を送信し、任意の音声を出力をしてみましょう。プログラムの仕様は以下の通りです。

仕様 :

  1. 「音声合成LSI ATP3011 (ATP3011F1-PU)」を I2C 経由で使用する
  2. ATP3011 のピン配置はこちらを参照
  3. PIC 側をマスターとする
  4. I2Cのクロックは「100 KHz」とする
  5. ATP3011 のI2Cアドレスは「0x2E」とする

プロジェクト「IO_6_1」を「IO_7_1」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_6_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(IDEのバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
setting.h を開き、一旦全ての機能をオフにします。
シリアル通信(USE_UART)、I2C(USE_MSSP1_I2C) のコメントアウトを解除します。
Modlules/mssp_i2c.c を開き、内容を確認します。
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
3: CCP4 (PWM) -- 圧電スピーカ
4: MCLR/VPP -- PICkit の 1: NMCLR
5: VSS -- GND
6: RB0/INT (GPIO入力/INT割り込み) -- タクトスイッチ
(*)7: SDA1 (I2C) -- ATP3011 の 27 : SDA  ※要プルアップ抵抗
8: Rx (UART) -- RN-42 の J2-6 : TX (UART)
9: CCP1 (PWM) -- オシロスコープ

(*)10: SCL1 (I2C) -- ATP3011 の 28 : SCL ※要プルアップ抵抗
11: Tx (UART) -- RN-42 の J2-7 : RX (UART)
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
(*)15: RA6 ※ SPIで使っていたジャンパケーブルを外す
(*)16: RA7 ※ SPIで使っていたジャンパケーブルを外す
17: RA0 (GPIO出力) -- LED
18: AN1 (ADC) -- 可変抵抗の中央ピン

書き込みボタンを押し、以下の手順で正常に動作する事を確認して下さい。

(1) PIC が起動したら「# → V → エンター」の順に入力し、バージョンが表示されるのを確認する

(表示例)
#
V

send: #V
V
F
1
a
>


(2) 「# → J(大文字) → エンター」の順に入力するとチャイムが鳴るのを確認する

(表示例)
#
J

send: #J
*
*
*
*
*


(3) 「h → o → g → e → .(ドット) → エンター」の順に入力すると「ほげ」と発声するのを確認する

(表示例)
h
o
g
e
.

send: hoge.
*
*
*
*
*


(4) 好きな音声を発生させる

※ 最後に '.'(ドット) エンター('\r')を送らないと発声しないので注意

指定場所に「main.c」を記入してください。


(追加課題) 演習 7-2 (個人PC): I2C 通信で加速度センサ(ADXL345)から加速度データを受け取り、音声合成 LSI (ATP3011F1-PU)と連携をしましょう。プログラムの仕様は以下の通りです。

仕様 :

  1. 「3軸加速度センサモジュール ADXL345」を I2C 経由で使用する
  2. ADXL345 のピン配置は以下を参照
  3. PIC 側をマスターとする
  4. I2Cのクロックは「100 KHz」とする
  5. ADXL345 のI2Cアドレスは「0x53」とする ( SDO ピンを接地)
  6. サンプリングモードは「+-2G を 10bit(+512 〜 -512) で検出」とする(DATA_FORMAT レジスタに 0x00 をセット)
  7. 結果の加速度は int 型の数値とし、「x方向の加速度, y方向の加速度, z方向の加速度」の順に画面出力する
  8. X 軸の加速度が -200 以下になったら「ほげ」と発声する

ADXL345 のピン配置 :

ピン名称説明
1 VDD 3.3V に接続
2 GND GND に接続
3 VS 未接続 (電源電圧)
4 CS CS を LOW にすると SPI、HIGHにするとI2Cモードになる
5 INT1 未接続 (INT割り込み出力1)
6 INT2 未接続 (INT割り込み出力2)
7 SDO/ALT ADRESS HIGHにすると0x1D、LOWにすると0x53がI2Cアドレスになる
8 SDA I2C 接続用ピン
9 SCL I2C 接続用ピン

ADXL345 のレジスタ :

レジスタ名アドレスサイズ説明
POWER_CTL 0x2D 8 bit 動作モード切替、Measure ビットに 0b1 をセットすると測定開始 (詳しくはデータシート 27p)
DATA_FORMAT 0x31 8 bit データ形式の設定、 Range ビットに 0b00 をセットすると+-2G 10 bit 形式 (詳しくはデータシート 28p)
DATAX0 0x32 8 bit X 軸の出力データの最下位バイト
DATAX1 0x33 8 bit X 軸の出力データの最上位バイト
DATAY0 0x34 8 bit Y 軸の出力データの最下位バイト
DATAY1 0x35 8 bit Y 軸の出力データの最上位バイト
DATAZ0 0x36 8 bit Z 軸の出力データの最下位バイト
DATAZ1 0x37 8 bit Z 軸の出力データの最上位バイト

プロジェクト「IO_7_1」を「IO_7_2」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_7_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(IDEのバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

※ PIC - 音声合成 LSI ATP3011 間の接続は変更ありません
※ ADXL345の基盤上に SDA とか SCL みたいな名称が書いてあります

ATP3011 の 27 : SDA  -- ADXL345 の 8: SDA
ATP3011 の 28 : SCL  -- ADXL345 の 9: SCL
ATP3011 の 3.3V -- ADXL345 の  1: VDD(3.3V)
ATP3011 の GND --  ADXL345 の  2: GND

書き込みボタンを押して正常に動作する事を確認して下さい。 加速度の検出方向はデータシートの 37p に書いてあります。
指定場所に「main.c」を記入してください。