演習 7-1 (個人PC): I2C 通信で音声合成 LSI (ATP3011F1-PU)に文字列を送信し、任意の音声を出力をしてみましょう。プログラムの仕様は以下の通りです。
仕様 :
ATP3011 のピン配置 :
| ピン | 名称 | 説明 |
|---|---|---|
| 1 | RESET | 未接続 |
| 2 | Rx | UART 接続用ピン |
| 3 | Tx | |
| 4 | SMOD0 | 通信モードの設定 SMOD0=0、SMOD1=0 → SPI(MODE0) SMOD0=0、SMOD1=1 → I2C SMOD0=1、SMOD1=1 → UART |
| 5 | SMOD1 | |
| 6 | SLEEP | 未接続 |
| 7 | VCC | 3.3V に接続 |
| 8 | GND | GND に接続 |
| 9 | I.C | 未接続 |
| 10 | I.C | 未接続 |
| 11 | TEST | 未接続 |
| 12 | AOUT | アンプの Audio In に接続 |
| 13 | PLAY | アンプの CE に接続 |
| 14 | PMOD0 | 動作モードの設定 PMOD0=0、PMOD1=1 → セーフモード |
| ピン | 名称 | 説明 |
|---|---|---|
| 15 | PMOD1 | 動作モードの設定 PMOD0=0、PMOD1=1 → セーフモード |
| 16 | CS | SPI 接続用ピン |
| 17 | SDI | |
| 18 | SDO | |
| 19 | SCK | |
| 20 | VCC | 3.3V に接続 |
| 21 | I.C | 未接続 |
| 22 | GND | GNDに接続 |
| 23 | PC0 | 未接続 |
| 24 | PC1 | 未接続 |
| 25 | PC2 | 未接続 |
| 26 | PC3 | 未接続 |
| 27 | SDA | I2C 接続用ピン 要プルアップ抵抗(5KΩ程度) |
| 28 | SCL |
プロジェクト「IO_6_1」を「IO_7_1」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_6_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開いて例9を有効にします。
仕様に従って main.c の内容を書き換えます。run関数の内容は以下の内容としてください。
void run(void)
{
int lng = 0;
char data[64];
__delay_ms(100); // 子機の初期化待ち(時間は適当)
while(1){
int c = getch();
if( c != EOF && c != '\n'){
printf("%c",c);
data[lng++] = (char)c;
if( c == '\r' ){
data[lng]='\0';
printf( "\r\nsend: %s\r\n", data );
// 送信
i2c_start();
i2c_putch( ( 0x2E << 1) + 0 ); // ATP3011のI2Cアドレス(0x2E, 7bit) + write指示(0)
for(int i=0; i < lng; ++i ) i2c_putch(data[i]);
i2c_stop();
__delay_ms(50);
lng = 5; // 5文字受信
// 受信
i2c_start();
i2c_putch( ( 0x2E << 1) + 1 ); // ATP3011のI2Cアドレス(0x2E, 7bit) + read指示(1)
for(int i=0; i < lng-1; ++i ) data[i] = i2c_getch(0); // ACK を送信して受信続行
data[lng-1] = i2c_getch(1); // 最後にNACK を送信して受信終了
i2c_stop();
data[lng]='\0';
printf( "recv: %s\r\n", data );
lng = 0;
}
}
}
}
以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。
ピン配置設定・回路接続方法: 01: VDD(3.3V) 02: RA5 03: (*)RA4/PWM2 -- 圧電スピーカ ※ 配線済 04: MCLR/VPP -- PICKit の 1: NMCLR ※ プルアップ抵抗不要 05: RC5 (*)06: RC4/SCL -- ATP3011 の 28 : SCL ※要プルアップ抵抗 (*)07: RC3/SDA -- ATP3011 の 27 : SDA ※要プルアップ抵抗 (*)08: RC6 ※ ジャンパケーブルを外す (*)09: RC7 ※ ジャンパケーブルを外す 10: RB7/PWM1 -- オシロスコープ 11: RB6 12: RB5/Tx -- RN-42 の J2-7 : Rx 13: RB4/Rx -- RN-42 の J2-6 : Tx 14: RC2 15: RC1/ANC1 -- 可変抵抗の中央ピン 16: RC0 (GPIO出力) -- LED 17: RA2/INT -- タクトスイッチ 18: ICSPCLK(PGC) -- PICKit の 5: PGC 19: ICSPDAT(PGD -- PICKit の 4: PGD 20: VSS(GND)
書き込みボタンを押し、以下の手順で正常に動作する事を確認して下さい。
(1) PIC が起動したら「# → V → エンター」の順に入力し、バージョンが表示されるのを確認する
(表示例)
#V
send: #V
recv: VF1a>
(2) 「# → J(大文字) → エンター」の順に入力するとチャイムが鳴るのを確認する
(表示例)
#J
send: #J
recv: *****
(3) 「h → o → g → e → .(ドット) → エンター」の順に入力すると「ほげ」と発声するのを確認する
(表示例)
hoge.
send: hoge.
recv: *****
(4) 好きな音声を発生させる
※ 最後に '.'(ドット) エンター('\r')を送らないと発声しないので注意
指定場所に「main.c」を記入してください。