1. SPI とは


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

仕様 :

  1. 「音声合成LSI ATP3011 (ATP3011F1-PU)」を SPI 経由で使用する
  2. PIC 側をマスターとする
  3. SPI のモードは「MODE0」、ビットオーダーは「MSBFIRST」、クロックは「1 MHz」とする

ATP3011 のピン配置 :

ピン名称説明
1 RESET 未接続
2 Rx 未接続
3 Tx 未接続
4 SMOD0 通信モードの設定
SMOD0=0、SMOD1=0 → SPI(MODE0)
SMOD0=0、SMOD1=1 → I2C
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_5_2」または「IO_5_3」を「IO_6_1」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_5_2 または IO_5_3 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(IDEのバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
setting.h を開き、一旦全ての機能をオフにします。
シリアル通信(USE_UART)、SPI(USE_MSSP1_SPI) のコメントアウトを解除します。
Modlules/mssp_spi.c を開き、内容を確認します。
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
isr.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい ※ isr 関数の中身を空にしています
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

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

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

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

(*)10: SCK1 (SPI) -- ATP3011 の 19 : SCK
11: Tx (UART) -- RN-42 の J2-7 : RX (UART)
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
(*)15: SDO1 (SPI) -- ATP3011 の 17 : SDI
(*)16: RA7/CS (SPI) -- ATP3011 の 16 : CS
17: RA0 (GPIO出力) -- LED
18: AN1 (ADC) -- 可変抵抗の中央ピン

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

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

(表示例)
dummy(ff) : >
dummy(ff) : >
#(23) : >
V(56) : >
enter(d) : >
dummy(ff) : *
dummy(ff) : V
dummy(ff) : F
dummy(ff) : 1
dummy(ff) : a
dummy(ff) : >
dummy(ff) : >


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

(表示例)
dummy(ff) : >
dummy(ff) : >
#(23) : >
J(4a) : >
enter(d) : >
dummy(ff) : *
dummy(ff) : >
dummy(ff) : >


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

(表示例)
dummy(ff) : >
dummy(ff) : >
h(68) : >
o(6f) : >
g(67) : >
e(65) : >
.(2e) : >
enter(d) : >
dummy(ff) : *
dummy(ff) : >
dummy(ff) : >


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

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

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