卒 業 研 究 報 告
題 目
PICを用いたシンセサイザーの設計と製作
指 導 教 員 綿森道夫 准教授
報 告 者 学籍番号: 1090210
氏名:伊井 祐輔
平成 21 年 2 月 19 日
高知工科大学 電子・光システム工学科
目 次
第一章 序論・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 3 1-1 はじめに・・・・・・・・・・・・・・・・・・・・・・・・・・・ 3 1-2 研究目的・・・・・・・・・・・・・・・・・・・・・・・・・・・ 3 1-3 研究の新規性・・・・・・・・・・・・・・・・・・・・・・・・・ 3
第二章 PICについて・・・・・・・・・・・・・・・・・・・・・・・・・ 4 2-1 PICとは・・・・・・・・・・・・・・・・・・・・・・・・・・ 4 2-2 PICの特徴・・・・・・・・・・・・・・・・・・・・・・・・・ 5 2-3 PICの種類・・・・・・・・・・・・・・・・・・・・・・・・・ 5 2-4 使用したPICについて・・・・・・・・・・・・・・・・・・・・ 5 2-5 プログラミング言語等・・・・・・・・・・・・・・・・・・・・・ 5
第三章 PICを用いた電子工作・・・・・・・・・・・・・・・・・・・・・ 6 3-1 電子ルーレット・・・・・・・・・・・・・・・・・・・・・・・・ 6 3-2 カウントダウンタイマー・・・・・・・・・・・・・・・・・・・・ 9
第四章 D・Aコンバータ回路の試作・・・・・・・・・・・・・・・・・・・12 4-1 MCP4922の仕様について・・・・・・・・・・・・・・・・・12 4-2 SPI通信について・・・・・・・・・・・・・・・・・・・・・・13 4-3 ブレッドボードへの試作・・・・・・・・・・・・・・・・・・・・17 4-4 ユニバーサル基板を用いたプロトタイプの製作・・・・・・・・・・19 4-5 アクティブフィルター・・・・・・・・・・・・・・・・・・・・・24
第五章 PICを用いたシンセサイザーの設計と製作・・・・・・・・・・・・29
5-1 意義と特徴・・・・・・・・・・・・・・・・・・・・・・・・・・29
5-2 外観と仕様・・・・・・・・・・・・・・・・・・・・・・・・・・29
5-3 回路について・・・・・・・・・・・・・・・・・・・・・・・・・30
5-4 波形発生装置のプログラムについて・・・・・・・・・・・・・・・31
5-5 コントローラー側のプログラムについて・・・・・・・・・・・・・35
5-6 スピーカーの周辺について・・・・・・・・・・・・・・・・・・・40
5-7 音律等の決定について・・・・・・・・・・・・・・・・・・・・・40
5-8 実際の使用例について・・・・・・・・・・・・・・・・・・・・・42
5-9 苦労した点・・・・・・・・・・・・・・・・・・・・・・・・・・45
目 次
第六章 今後の課題・・・・・・・・・・・・・・・・・・・・・・・・・・・46
第七章 まとめ 感想・・・・・・・・・・・・・・・・・・・・・・・・・・47
第八章 謝辞・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・48
第九章 参考文献・・・・・・・・・・・・・・・・・・・・・・・・・・・・49
付録 プログラムリスト・・・・・・・・・・・・・・・・・・・・・・・・・50
第 一 章 序 論
1 . 1 は じ め に
PIC プ ロ セ ッ サ を 用 い て ド レ ミ フ ァ ソ ラ シ ド が 鳴 ら し て み た い と 思 っ た こ と が こ の 研 究 を は じ め る 動 機 で あ る。 そ の た め に は、 PIC 1 6 F 8 8 な ど が 内 臓 し て い る 電 圧 リ フ ァ レ ン ス モ ジ ュ ー ル を 利 用 し て 波 形 を 得 る、 PWM の 幅 を 変 え る こ と に よ っ て 矩 形 波 の 周 波 数 を 変 え る 等 が 考 え ら れ る が、 本 研 究 で は マ イ ク ロ チ ッ プ 社 の 製 造 し て い る
D ・ A コ ン バ ー タ 「 MCP 4 9 2 2」 を 使 用 し て デ ジ タ ル デ ー タ を ア ナ ロ グ 変 換 す る こ と で 波 形 を 発 生 さ せ る 方 式 の シ ン セ サ イ ザ ー を 設 計 製 作 し ま し た。
1 . 2 研 究 目 的
本 研 究 で 用 い て い る PIC プ ロ セ ッ サ は、 現 在 多 岐 に 及 ぶ 製 品 に 使 用 さ れ て い ま す。 こ の 汎 用 性 の あ る IC を 実 際 に 目 標 を も っ て 形 に す る と い う 研 究 を す る こ と で、 様 々 な 電 化 製 品 の 構 造 の 理 解 を 深 め る と 共 に、 PIC プ ロ セ ッ サ を 用 い た 電 子 回 路 の 可 能 性 を 考 え る こ と が で き ま す。 さ ら に PIC プ ロ セ ッ サ を 制 御 す る た め の プ ロ グ ラ ミ ン グ 能 力 や 回 路 設 計 す る 上 で の ア ナ ロ グ ・ デ ジ タ ル 回 路 の 理 解、 実 際 の 基 板 を 使 っ て 製 作 す る こ と に よ る 半 田 付 け や 加 工 の 上 達 を 目 的 と し て い ま す。
1 . 3 研 究 の 新 規 性
本 研 究 で の 新 規 性 は、 シ ン セ サ イ ザ ー を 実 現 す る に あ た り、 2 個 の プ ロ セ ッ サ を 使 用 し そ れ ぞ れ 別 々 の 役 割 を 果 た す 構 成 に し た こ と に あ り ま す。 具 体 的 に は、 2 個 の P I C プ ロ セ ッ サ と 2 個 の D ・ A コ ン バ ー タ を 用 い て お り、 1 個 目 は ク ロ ッ ク に 同 期 し て D ・ A コ ン バ ー タ に デ ジ タ ル 値 を 順 に ア ナ ロ グ 値 に 変 換 し て 音 の 波 形 と し て 出 力 さ せ て い る。 そ の 際 2 個 目 の プ ロ セ ッ サ を 用 い て 1 個 目 の プ ロ セ ッ サ に 繋 が っ て い る D
・ A コ ン バ ー タ の リ フ ァ レ ン ス 電 圧 に か け る 電 圧 を 時 間 的 に 変 化 さ せ る こ と に よ っ て
、 ア ナ ロ グ シ ン セ サ イ ザ ー に お け る エ ン ベ ロ ー プ ジ ェ ネ レ ー タ ー を 模 し た も の に し て い る。 こ の 2 個 目 の プ ロ セ ッ サ で 制 御 さ れ た D ・ A コ ン バ ー タ か ら の 出 力 電 圧 が 1 個 目 の D ・ A コ ン バ ー タ の リ フ ァ レ ン ス 電 圧 に 加 え ら れ る こ と で 単 純 な 波 形 に 変 調 を か け る こ と が、 本 研 究 の 最 大 の 新 規 性 で あ り ま す。
第 二 章 PIC に つ い て
2 - 1 PIC と は
PIC ( Peripheral Interface Controtter ) と は、 コ ン ピ ュ ー タ の 周 辺 機 器 を 制 御 す る 為 の IC で、 自 動 車 や 民 生 機 器 な ど あ り と あ ら ゆ る 分 野 で 使 用 さ れ て い ま す。 そ の 歴 史 は、
1 9 8 0 年 に ア メ リ カ の ゼ ネ ラ ル ・ イ ン ス ツ ル メ ン ト (General Instruments
Corporation) 社 が 開 発 し た こ と か ら 始 ま り、 そ の 後 同 社 の PIC 分 野 が 独 立 し て 出 来 た の が、 マ イ ク ロ チ ッ プ テ ク ノ ロ ジ 社 で す。 現 在 で は、 使 い や す く、 安 価 で あ り 無 料 の プ ロ グ ラ ム 開 発 ツ ー ル が 用 意 さ て て い る と い う点か ら、趣 味で 電 子 工 作 を す る人の 間 で も 多 く 利 用 さ れ て い ま す。
2 - 2 特 徴
PIC の特 徴は、一 般の マ イ ク ロ コ ン ピ ュ ー タ と違いハー バ ー ド ア ーキテ ク チャと呼 ば れ る 内部構 造 を し て お り、 デ ー タ メ モ リ と演 算 処理部、 プ ロ グ ラ ム メ モ リ と演 算 処理 部と の 間 が そ れ ぞ れ 別 々 の デ ー タ バ ス で接 続さ れ て い て、 さ ら に 周 辺 回 路、 デ ー タ メ モ リ、 プ ロ グ ラ ム メ モ リ、命 令実行 部、演 算 処理部がワン チ ッ プ に集 約れ て い ま す。
以 下、主な特 徴を 後閑 哲 也さんのホー ムペー ジ か ら の引用 し ま す と
・小 型 ・ ・ ・ ・ 1 8 ピ ン D I P、 2 8 ピ ン D I P、 4 0 ピ ン D I P
・高 速 ・ ・ ・ ・ 最 大 1命 令2 0 0n s、RISC ア ーキテ ク チャ
・広 範 囲な 動 作 電 圧 ・ ・ ・ ・ 最小2Vか ら 6Vで 動 作 消 費電 力 最小 30μA
・ メ モ リ ・ ・ ・ ・ 51 2~4K Bの フ ラ ッ シ ュ メ モ リ
・入出 力 ピ ン ・ ・ ・ L ED直 接 駆動 可 能 な容 量、入力/出 力 プ ロ グ ラ マブル
・ 開 発環 境 ・ ・ ・ ・ ア セ ンブラ、 シ ミ ュ レ ー タ がB B Sで提 供さ れ て い る
・R O Mラ イ タ ・ ・ ・ PICSTRAT と し て販 売さ れ て い る。簡単 な 自 作 も 可 能
・低価格 ・ ・ ・ ・ 秋 葉 原で 1 個50 0円 ~で入 手可 能
・ そ の他 ・ ・ ・ ・ パ ワーオン リ セ ッ ト、ウ ォッ チ ド ッ グ タ イ マ 内蔵
A/D コ ン バ ー タ、 シ リ ア ルポー ト、 PW M出 力 付 き あ り な ど で す。
2 - 3 PIC の 種 類
PIC に は、 大 き く 分 け て三 つの種 類に 分 か れ て い て、 そ れ ぞ れ ベ ー ス ラ イ ン シ リ ーズ
、 ミ ッ ド レ ン ジ シ リ ーズ、ハイ エ ン ド シ リ ーズと な っ て い ま す。 PIC が ど の シ リ ーズ に な っ て い る の か は型 番に よ っ て すぐにわか る よ う に な っ て お り、 1 0系、 1 2系は ベ ー ス ラ イ ン シ リ ーズ、 1 6系は ミ ッ ド レ ン ジ シ リ ーズ、 1 8系はハイ エ ン ド シ リ ー ズに属し て い ま す。表 記す る と き は、 1 6系を例に取っ て み る と 1 6 F○○A 、 1 6
F○○ の よ う に表 記さ れ て い ま す。 シ リ ーズ間 で の主な違い は、命 令の長さ や、 機 能 の豊 富さ に あ り ま す。
2 - 4 使 用 し た PIC に つ い て
本 研 究 で は、 ミ ッ ド レ ン ジ シ リ ーズの 1 6 F 6 4 8 A 、 1 6 F 8 8、 1 6 F 87 7、
1 6 F 876 を 使 用 し ま し た。 1 6 F 6 4 8 A は カウン トダ ウン タ イ マ ー、 LED を 用 い た 電 子 ル ー レ ッ ト に、 1 6 F 8 8 は プ ロ ト タ イ プ の 波 形 発 生装 置に、 1 6 F 87 7 をキーボー ド入力部と エ ン ベ ロ ー プ 波 形 発 生 に、 1 6 F 876 を メ イ ン の 波 形 発 生 に 使 用 し ま し た。
・ 1 6 F 8 7 7
1 6 F 87 7は、 4 0 ピ ン の チ ッ プ で 大 き い の で す が足の 多 さ か らキーボー ド入力 用 に は こ の チ ッ プ以 外は 無 理だと判 断し た の で 使 用 し ま し た。
・ 1 6 F 8 7 6
1 6 F 876 は、 2 8 ピ ン の チ ッ プ で 2 0 MH zの ク ロ ッ ク を 用 い る こ と で 1命 令2 0 0n sec で 動 作 さ せ る こ と が 出 来 る よ う に な り、 よ り 分 解 能 の あ る 波 形 を 発 生 で き る と い う点と、BC D ス イ ッ チ を 多 数 付 け た い と い う こ と で 使 用 し ま し た。
・ 1 6 F 8 8
1 6 F 8 8 は、 1 8 ピ ン の チ ッ プ で 1 6 F 876 と 同 様 に 2 0 MHz の ク ロ ッ ク を 用 い る こ と で 1命 令2 0 0n sec で 動 作 す る、 電 圧 リ フ ァ レ ン ス が 内 臓 さ れ て い る と い う 点で、 プ ロ ト タ イ プ の 波 形 発 生装 置に 使 用 し ま し た。
・ 1 6 F 6 4 8 A
1 6 F 6 4 8 A は、 1 8 ピ ン の チ ッ プ で 後述す る PIC を 用 い た 電 子 工 作 に 用 い た も の で す。
2 - 5 プ ロ グ ラ ミ ン グ 言 語 等
プ ロ グ ラ ミ ン グ言 語は、 電 子 ル ー レ ッ ト は ア セ ンブラ で そ の他の プ ロ グ ラ ム は C 言 語 で記 述し コ ンパイ ラ は WIZ - C と い う ソ フ ト を 利 用 し ま し た。
第 三 章 PIC を 用 い た 電 子 工 作
3 - 1 電 子 ル ー レ ッ ト
電 子 ル ー レ ッ ト と は、 PIC に 発光 ダイオー ド と ス イ ッ チ を取り 付 け た簡単 な 回 路 構 成 で で き て お り、 動 作 と し て は ル ー レ ッ ト が ス タ ー ト し て い な い と き に緩や か に 発光 ダ イオー ド を右回転に 順 に点 灯さ せ、ボタ ン が押さ れ る と 発光 ダイオー ド を高 速に点 灯 さ せ る と 同 時 に 音 を 鳴 ら せ て次 第に 発光 ダイオー ド の点 灯 速 度と 音 の 間隔が緩や か に な り止ま る と い う も の で、文 字ど う り ル ー レ ッ ト に な っ て い ま す。 (第 一作 目 の 作 品 と し て三年 生 の 後 期 に 作 り、 内部の プ ロ グ ラ ム を 4 年 の 8月 頃か ら改 良し ま し た。 )
写 真1 電 子 ル ー レ ッ ト
図1 電 子 ル ー レ ッ ト の 回 路図
GND VDD PGD
PGC MCLR
+ Vcc 3V S1
J1
+ -
BZ1
START STOP
D12 LED1
D11 LED1 D10 LED1 D9 LED1 D8 LED1 D7 LED1 D6
LED1 D5 LED1 D4 LED1
D3 LED1
D2 LED1
D1 LED1
16F628 RA2 RA3RA4 RA5Vss RB0RB1 RB2RB3 RB4RB5RB6RB7VddRA6RA7RA0RA1
U1
R168 10kR3
10kR2
回 路図は、図1 の よ う な 構 成 に な っ て い ま す。次に ル ー チ ン につい て で す が、 順 に説 明す る と
① 初期 化
② 右のボタ ン が押さ れ て い る か チ ェ ッ ク 押さ れ て い れば ⑥ へ
③ 左のボタ ン が押さ れ て い る か チ ェ ッ ク 押さ れ て い れば ⑩ へ
④発光 ダイオー ド を反時 計 回 り に低 速 点 灯
⑤ ② へ 戻る
⑥ 左、右のボタ ン が押さ れ て い る か チ ェ ッ ク 左が押さ れ て い れば ⑦ へ、右が押さ れ て い れば ⑧ へ、何も押さ れ て い な い と き⑥を繰り返す
⑦時 計 回 り の ル ー レ ッ ト を行っ た 後、⑨ へ
⑧ 反時 計 回 り の ル ー レ ッ ト を行っ た 後、⑨ へ
⑨ 右のボタ ン が押さ れ て い れば ② へ
⑩発光 ダイオー ド を 時 計 回 り に点 灯
⑪ 右のボタ ン が押さ れ て い る か チ ェ ッ ク 押さ れ て い れば ⑥ へ
⑫ 左のボタ ン が押さ れ て い る か チ ェ ッ ク 押さ れ て い れば ② へ
⑬ ⑩ へ 戻る。
と い う流れ で す。
フ ロ ー チャー ト を次のペー ジ に記し ま す。
図2 電 子 ル ー レ ッ ト の フ ロ ー チャー ト
初期化
ボタンから離れたか
一定時間待つ LEDを点灯ルーチンを
呼ぶ poartaの値を
右シフト
左のボタンが 押されたか
右のボタンが 押されたか
左のボタンが 押されたか
一定時間待つ LEDを点灯するルーチン
を呼ぶ porataの値を
左シフト
左のボタンが 離れたか
時計周りのルーレット 反時計回りのルーレット スタートが
押されたか
スタートが 押されたか
左のボタン が押されたか 左のボタンが
離れているか
yes
yes
yes
yes yes
yes no
yes no
no
yes yes
no
no yes
no no
no
3 - 2 カ ウ ン ト ダ ウ ン タ イ マ ー
カウン トダ ウン タ イ マ ー と は、 PIC と セ グ メ ン トダイオー ド を 用 い て 構 成 さ れ た 回 路 で、 セ グ メ ン トダイオー ド が一 秒 ごと に カウン トダ ウン す る よ う に セ グ メ ン トダイオ ー ド の表 示を 変 え る と い う も の で す。 さ ら に追加 機 能 と し て、 1 6進、 1 0進の カウ ン ト ア ッ プ ・ダ ウン や ス ロ ッ ト モ ー ド をボタ ン を押す こ と で切り替え ら れ る よ う に し て い ま す。 (第2 作 目 の 作 品 と し て 4 年 の 9月 頃に 作 り は じ め ま し た。一作 目 の 電 子 ル ー レ ッ ト の経 験を踏ま え て よ り き れ い に な配 線を 目指し ま し た。 )
写 真2 カウン トダ ウン タ イ マ ー 図 3 回 路図
Ii Yusuke Count Down Timer J1
+ -
BZ1
S3 sw main
S2 stop startS1
+ PNP 3V
2SA1015 PNP
2SA1015
PNP 2SA1015
PNP 2SA1015
D
D D D
D
D D D
2SC1815NPN 2SC1815NPN
A-552SR E1 D1 C1 H1 E2D2 G2 C2 H2B2A2F2V-2V-1B1A1G1F1
U1
A-552SR E1 D1 C1 H1 E2 D2 G2 C2 H2B2A2F2V-2V-1B1A1G1F1 U2
16F628 1RA22RA3 3RA44RA5 5Vss6RB0 7RB18RB2 9RB3 RB410
RB511 RB612 RB713 Vdd14 RA615 RA716 RA017 RA118 U3
BCD-SW
CQ 84
21
BCD-SW
CQ 84
21
RD 130 130RG
130RB 130RA
240k RE 130
130RC 10k 10k
130RH
4.3k 4.3k
4.3k 4.3k
240k RF 130
次に、 カウン トダ ウン タ イ マ ー の ル ー チ ン の説 明を し ま す。
① BC D ス イ ッ チ を読 む
② BC D で読 ん だ値 に応じ て セ グ メ ン トダイオー ド を点 灯(BC D は二 つあ り一 つは 1 0 分 の桁、 も う一 つは 1 分 の桁に対 応し て い ま す。 1 0秒、 1秒の桁は ゼ ロ の ま ま で す。 )
③ 左の ス イ ッ チ が押さ れ て い る か を チ ェ ッ ク 押さ れ て い る と モ ー ド が 2 に かわる ボタ ン を押し て い く モ ー ド3、 4、5と切り替 わっ て い く。5の と き に押す と 1 に戻 る仕 組み に な っ て い ま す。 (初期 モ ー ド は 1 で す。 )
モ ー ド は 1:1 0進カウン トダ ウン 2:1 6進カウン トダ ウン 3 :1 0進カウン ト ア ッ プ 4:1 6進カウン ト ア ッ プ 5 :ス ロ ッ ト
④ 右の ス イ ッ チ が押さ れ て い る か チ ェ ッ ク 押さ れ て い る場 合モ ー ド に応じ た 割 り込 み処理 を す る た め の フ ラ グ を 立 て、 同 時 に①、②、③の処理 に進 入で き な い よ う に ス タ ー ト し た と き の フ ラ グ を 立 て る。⑥ へ
⑤ 押さ れ て い な い と き ① へ
⑥ 処理 フ ラ グ が 0 の場 合 モ ー ド に応じ た処理 を す る。
⑦ 再ス タ ー ト フ ラ グ が 0 の場 合 右の ス イ ッ チ が押さ れ て い な い か を チ ェ ッ ク 押さ れ て い る場 合 ⑨ へ 押さ れ て い な い場 合ス ト ッ プ フ ラ グ を 1 に す る。
⑦ス ト ッ プ フ ラ グ が 1 の場 合 右の ス イ ッ チ が押さ れ て い る か を チ ェ ッ ク 押さ れ て い る場 合 処理 フ ラ グ を 1 に し、再ス タ ー ト フ ラ グ を 1、 ス ト ッ プ フ ラ グ を 0 に す る
⑧ 再ス タ ー ト フ ラ グ が 1 の場 合 右の ス イ ッ チ が押さ れ て い な い か を チ ェ ッ ク 押さ れ て い る場 合 ⑥ へ 押さ れ て い な い と き 再ス タ ー ト 2 フ ラ グ を 1 に す る。
⑨ 再ス タ ー ト フ ラ グ 2 が 1 に場 合 右の ス イ ッ チ が押さ れ て い な い か を チ ェ ッ ク 押さ れ て い る場 合 再ス タ ー ト 2 フ ラ グ を 0、処理 フ ラ グ を 0、再ス タ ー ト フ ラ グ を 0 に す る。
⑨ 左の ス イ ッ チ が押さ れ て い る か チ ェ ッ ク 押さ れ て い る場 合すべて の フ ラ グ を初期 値 に戻し① へ 押さ れ て い な い場 合 ⑥ へ
と い う流れ で す。
な お こ の カウン トダ ウン タ イ マ ー は メ イ ン ル ー プ が一周 す るごと に PO R TA の 値 を 変 え る こ と で セ グ メ ン トダイオー ド を 順番に一 桁 ず つ 点 灯さ せ て い ま す。 なぜか と い う と こ う す る こ と で消 費電 力 を抑え ら れ る と い う点と、人間 の 目 に は早すぎて 同 時 に 点 灯し て い る よ う に見え る か ら で す。
次のペー ジ に処理 の一 例と し て 1 0進カウン ト ア ッ プ の フ ロ ー チャー ト を示し ま す。
(詳し い処理 につい て は、 プ ロ グ ラ ム リ ス ト に譲る こ と に し ま す。 )
図4 1 0進カウン ト ア ッ プ の フ ロ ー チャー ト
割り込み開始
bCCP1IF && kirikae==2
sec1==10
min1==10 count==5
bCCP1IF=0;
count++;
sec10++;
sec1=0;
buzzerflag=50;
count=0;
sec1++;
min1++;
sec10=0;
sec10==6
min10++;
min1=0;
min1=0;
sec1=0;
sec10=0;
min10=0;
min10==10
メインループへ
yes
no
no
yes
no
yes
no
yes
no
yes
no yes
10進カウントアップ
第 四 章 D ・ A コ ン バ ー タ 回 路 の 試 作
4 - 1 MCP4922 の 仕 様
MC P 4 9 2 2 は、 マ イ ク ロ チ ッ プ テ ク ノ ロ ジ ー 社 の D ・ A コ ン バ ー タ で、 1 4 ピ ン の チ ッ プ で す。 そ の 構 成 は、 2つのVREF とVOUTを搭 載し て お り、送 信 側か ら送る命 令 を 変 え る こ と で VOUTA と VOUTB の 出 力 を選 択す る こ と が で き ま す。通 信方 式 はSP I 通 信で、 最 大 1 2ビッ ト の デ ー タ を ア ナ ロ グ 変 換 で き ま す。 そ の 際 の 出 力 電 圧 は、
VREF の 電 圧× 受 信デ ー タ÷1 2ビッ ト ( 4 0 9 6 ) と い う こ と に な り ま す。つま り 最 大 4 0 9 6 の 分 解 能 を 実 現 で き る と い う こ と で す。 さ ら に 後述す るSP I通 信で は、
一回 の送 信で、 1 2ビッ ト の デ ー タ を送 信で き な い の で、 8ビッ トず つにわけ て 2 回 送 信し て い ま す。 そ の 際 に余っ て い る 4ビッ ト 分 の デ ー タ で 出 力 を A か B を切り替え た りVREF を 2×VREF×D÷4 0 9 6 かVREF×D÷4 0 9 6 を選 択で き る よ う に な っ て い ま す。 ( こ こ でゲイ ン 調整し て い ま す )
そ の 際 の仕様 が以 下の通り す。
Bit 15 1= Bチャン ネ ル に か く 0=A チャン ネ ル に か く Bit 1 4 1=バ ッ フ ァ ー あ り 0=バ ッ フ ァ ー な し Bit 13 1= ゲイ ン 1倍 0= ゲイ ン 2倍
Bit 1 2 1=出 力有 効 0=出 力 無効、ハイ イ ン ピ ーダン ス Bit 1 1 か ら Bit 0=デ ー タ
デ ー タ を送 信す る手順 は、 最初の 制 御 用 4ビッ ト に続け てビッ ト 1 1 か らビッ ト 8 ま で の デ ー タ を送 信し、 そ の 後ビッ ト7か らビッ ト 0 の デ ー タ を送 信す る よ う に な っ て い ま す。図 5が MCP 4 9 2 2 の ピ ン配 置で す。
図 5 ピ ン配 置
ピ ン 1: VD D 2~6Vを 加 え る こ と で 動 作 し ま す。
ピ ン 2: NC ノ ー コ ネ ク ション (何も 繋 が っ て い な い ) 6、7も 同 様
ピ ン3 :CS チ ッ プ セ レ ク ト こ こ をHIG Hか らL O Wに す る と デ ー タ を受け取 り ま す。
ピ ン 4: SCK シ リ ア ル ク ロ ッ ク イ ン プ ッ ト マ ス タ ー側か ら の ク ロ ッ ク が入り ま す。
ピ ン5 : SD I シ リ ア ル デ ー タ イ ン プ ッ ト マ ス タ ー側か ら の デ ー タ が を受け取り ま す。
ピ ン 8: LD A C ラ ッ チ D A C イ ン プ ッ ト デ ー タ を受け取っ た 後HIG Hか らL O Wに す る とV O U TA又はV O U T Bか ら そ れ に応じ た 電 圧 が 出 力 さ れ ま す。
ピ ン 9: S HDN シャッ トダ ウン ピ ン 1 0: V O U T B B出 力
ピ ン 1 1: V R E F B Bの リ フ ァ レ ン ス 電 圧 ピ ン 1 2: V S S
ピ ン 13 : V R E FA A の リ フ ァ レ ン ス 電 圧 ピ ン 1 4: V O U TA A 出 力
4 - 2 S P I 通 信 に つ い て
SPI (Serial Peripheral Interface )通 信と は P C 同士や P I C と他の 周 辺 I C 等 と シ リ ア ル通 信を行う た め の も の で、一方 を マ ス タ ー モ ー ド も う一方 を ス レ ーブモ ー ド と し て通 信を行い ま す。 本 研 究 で は、 P I C ( マ ス タ ー ) とMC P 4 9 2 2 ( ス レ ーブ
) と の 間 の通 信を す る の に 利 用 し て い ま す。
4 - 2 - 1 PIC の 設 定
P I C でSP I通 信を行う た め に、S SP CO Nレ ジ ス タ とS SPS TATレ ジ ス タ に 値 を 設定を し ま す。 本 研 究 で は、 1 6進数 でS SP CO Nに 2 0 ( 0 0 1 0 0 0 0 0 )、S SPS TATに 4 0 ( 0 1 0 0 0 0 0 0 ) と い う 値 を セ ッ ト し ま し た。次に S SP CO Nレ ジ ス タ とS SPS TATレ ジ ス タ の 構 成 を示し ま す。
S SP CO Nレ ジ ス タ
WCOL : Write の衝 突 検出 1: SSPBUF に前の デ ー タ あ り 0 : 正 常
SSPPOV : 受 信 オー バ ー フ ロ ー検出 ( ス レ ーブ) 1: オー バ ー フ ロ ー 発 生 0 : 正 常 SSPEN : SSP の 使 用指 定
1: SCK 、 SDO 、 SDI 、SSピ ン と し て 使 用 す る 0 : 汎 用 I/O ポー ト と し て 使 用 CKP : SCK ク ロ ッ ク極性切り替え
1: HIGHで IDEL 0 : LOW で IDEL SSPM0 か らSSPM3の 設定
0000 = SPImaster mode Clock = Fosc/04
0001 = SPImaster mode Clock = Fosc/16 0010 = SPImaster mode Clock = Fosc/64
0011 = SPImaster mode Clock = TMR2 Out/2
0100 = SPImaster mode Clock = SCK pin/SS pin enable 0101 = SPImaster mode Clock = SCK pin/SS pin disable S SPS TATレ ジ ス タ
SMP: 受 信サ ン プ リ ン グ の タ イ ミ ン グ指 定
マ ス タ ー モ ー ド の と き 1:出 力 デ ー タ の 後縁 0:出 力 デ ー タ の中 央 ス レ ーブの 時 は 0 に す る
CKE: SPI ク ロ ッ ク の エ ッ ジ指 定
CKP=0 の と き 1:立ち上 が り エ ッ ジ 0 :立下り エ ッ ジ CKP=1 の と き 1:立下り エ ッ ジ 0 : 立ち上 が り エ ッ ジ BF: バ ッ フ ァ ス テ イ タ ス 1: 受 信完 了 0: 受 信中
こ こ でS SP CO Nレ ジ ス タ を 2 0 ( 0 0 1 0 0 0 0 0 ) と決定し た の は、S SPE NでS SP を 使 用 す る に し て、 CKP を ロ ー ア イ ド ル に す る こ と で、SCKピ ン は ク ロ ッ ク 出 力 の 際 にHIG Hに な る 方法を採用 し た か ら で す。 こ れ はMC P 4 9 2 2 の デ ー タ シ ー ト の通 信タ イ ム チャー ト に そ の よ う に書か れ て い た の で そ れ に合 わせ ま し た。又、下位4ビッ ト を 0 0 0 0 に す る こ と で通 信 速 度と し て 最高の5 M H zを選 択 し ま し た。MC P 4 9 2 2 の デ ー タ シ ー ト に よ る と 最高ク ロ ッ ク速 度が 2 0M H zと な っ て い る の で、 こ の速 度の通 信は十分 で あ る と判 断ま し た。又 S SP CO Nレ ジ ス タ を 4 0 ( 0 1 0 0 0 0 0 0 ) と決定し た の は、受 信時 の デ ー タ サ ン プ リ ン グ を ク ロ ッ ク の中 心に し、送 信時 にSDOか ら デ ー タ を送 信後 ク ロ ッ ク がH GIHに な り、 ク ロ ッ ク がL O Wに な る と 同 時 に次の デ ー タ を送る タ イ ミ ン グ が、MC P 4 9 2 2 の通 信 特性 に一 番適合し て い る と 考 え た か ら で す。
4-2-2 PIC と MCP4922 の 接 続
MC P 4 9 2 2 と P I C を接 続し てSP I通 信を す る た め に、 まずP I C側のSD I とSCLをMC P 4 9 2 2 のSDOとSCKに 繋げま す。次にMC P 4 9 2 2 の CS ピ ン とLD A C ピ ン を P I C側の任意 の ピ ン に 繋ぎま す。図6 が 本 研 究 で 繋 いだ 一 例 で す。 な お P I C側は デ ー タ を受け取る必 要が な い の で P I C のSD I ピ ン は グ ラ ン ド に落と し、MC P 4 9 2 2 は 動 作 を禁止す る必 要な い の で、S HDNピ ン をVD D に 繋 い で お き ま す。
図6 PIC と MCP4922 の接 続
4-2-3 MCP4922 の イ ン プ ッ ト タ イ ミ ン グ
次に、MC P 4 9 2 2 の イ ン プ ッ ト タ イ ミ ン グ につい て で す が、以 下の よ う な図がM C P 4 9 2 2 の デ ー タ シ ー ト デ ー タ シ ー ト に載っ て い ま す。
図 7イ ン プ ッ ト タ イ ミ ン グ こ の図の流れ を簡単 に説 明す る と、 まずデ ー タ を送る前に CSをL O Wに し てMC P 4 9 2 2 が デ ー タ を受け取れ る状 態に し ま す。次に デ ー タ を送 信し、MC P 4 9 2 2 が マ ス タ ー側が指 定し た 方法に従っ て デ ー タ を受け取り ま す。 そ し て CSをHIG H に戻し デ ー タ を受け取ら な い よ う に し、 そ の 後LD A C をL O Wに し て デ ー タ を更新 し、 デ ー タ に沿っ た 電 圧 を 出 力 さ せ、LD A C をHIG Hに戻す と い う も の で す。 プ ロ グ ラ ム コ ー ド は次の よ う に な り ま す。
bRC2 = 0; // CS を LOW に す る
SSPBUF= data6 | 0x70; //SSPBUF に 上位の デ ー タ を送 信 while (bBF==0); // 送 信が終わる ま で待つ
SSPBUF=data5; // 下位ビッ ト の デ ー タ を送 信 while (bBF==0); // 送 信が終わる ま で待つ bRC2=1; // CS をHIGHに戻す
bRC6=0; //LDAC を LOW に す る bRC6=1; //LDACをHIGHに す る
本 研 究 に お い て、 タ イ ム チャー ト のLD A C の 意味がわか らず、 デ ー タ シ ー ト が英語 だっ た こ と も あ り、LD A C をL O Wに し てHIG Hに す る の は 単 に 出 力 時 も タ イ ミ ン グ を そろえ る 意味し か な い と誤解 し て い ま し た。 最初、 い く ら デ ー タ を送っ て も ア ナ ロ グ 値 が 出 力 さ れず、通 信タ イ ミ ン グ を 変 え て も や は り駄目 で し た。LD A C をL O Wに し な け れば 取り込 ん だデ ー タ を 出 力 し な い こ と に気 づく の に 多 く の 時 間 を要し ま し た。
4 - 3 ブ レ ッ ト ボ ー ド へ の 試 作
SP I が 上手く い っ て い る の か ど う か を確か め る た め に まず、ブレ ッ トボー ド に P I C 1 6 F 8 8 とMC P 4 9 2 2 を 使 っ た 回 路 を組 んで み ま し た。以 下が そ のブレ ッ ト ボー ド の写 真で す。
写 真 3 ブレ ッ ドボー ドへの試作
こ の と き の 回 路図を図8 に示し ま す。
図8 ブレ ッ ドボー ド 回 路図
次にオシ ロ ス コ ー プ で、 デ ー タ が送ら れ て い る か を確か め ま す そ の 様 子 が の写 真4 で
す。 写 真4
mclr vdd gnd pgd pgc
C20.033uF
J1 47uFC1
S1 L1 220uH
+ V12.4V
RA2RA3 RA4RA5 VssRB0 RB1RB2 RB3 RB4RB5RB6RB7VddRA6RA7RA0RA1
P16F88
MCP4921 VDDNC CSSCK SDINC NC VoutBVrefBVrefAVoutALDACSHDNAVss TL496C
FB2C 1CT GNDGNDOUTSW
CRYSTAL 20Mhz
IN OUT
GND xc6202
10k 10k
こ れ は 1 6F8 8 の プ ロ グ ラ ム に お い て定期 的 に ノ コギリ 波 の デ ー タ を送っ た 時 の デ ー タ の 波 形 を示し て い ま す。 上 の 波 形 が デ ー タ、下の 波 形 が シ リ ア ル ク ロ ッ ク で す。
( 後 にオシ ロ ス コ ー プ で シ リ ア ル ク ロ ッ ク が丁度 5 M H zで あ る こ と も確 認し ま し た。 ) こ の写 真は、 上位8ビッ ト 分 の デ ー タ を送る 際 の 様 子 で す。 シ リ ア ル ク ロ ッ ク がHIG Hの と き に送っ て お り、送っ て い る デ ー タ は ( 0 1 1 1 0 0 0 1 ) で す。 そ の 波 形 の写 真、 プ ロ グ ラ ム 等 は、次の プ ロ ト タ イ プ の項で説 明し ま す。
4 - 4 ユ ニ バ ー サ ル 基 板 を 用 い た プ ロ ト タ イ プ の 製 作
ブレ ッ トボー ド で SPI 通 信が 上手く い っ て い る の を確 認し た の で、ユ ニバ ー サ ル 基 板 上 に プ ロ ト タ イ プ の 波 形 発 生装 置を 製 作 す る こ と に し ま し た。ブレ ッ トボー ド で組 ん だも の と の 変更点は BCD ス イ ッ チ を取り 付 け 波 形 を 変 え ら れ る よ う に し た こ と で す。
写 真 5が そ の外観で す。
出 力 波 形 は、 サ イ ン 波、 ノ コギリ 波、三角波、 矩 形 波 か ら選 べま す。
写 真 5 波 形 発 生 回 路
こ の プ ロ ト タ イ プ に よ っ て いろいろな 発振波 形 を 作 る こ と の み な らず、 プ ロ グ ラ ム で 周 波 数 を 変 え た と き の 実 際 の 様 子 な ど いろいろな こ と 調べる こ と が 出 来 ま し た。 サ イ ン 波、 矩 形 波、 ノ コギリ 波 の 出 力 波 形 の写 真を以 下に示し ま す。
写 真6 サ イ ン 波
写 真 7 矩 形 波 写 真8 ノ コギリ 波
4 - 4 - 1 回 路 図
次に 回 路 構 成 で す が、 電源に 単3の エ ネ ル ー プ を 2 個 使 い、VD D に はT L4 9 6 で 昇圧 し 電 圧 を3端子 レギュ レ ー タ で降圧 し た5 V電 圧 を か け て い ま す。MC P 4 9 2 2 のV R E Fに はVd dの5 VをT L431 A CZと い う シャン ト レギュ レ ー タ を 使 う こ と に よ り約2.5 Vの 安定し た 電 圧 が か か る よ う に し て い ま す。
図9 回 路図
4 - 4 - 2 波 形 の プ ロ グ ラ ム に つ い て
サ イ ン 波:サ イ ン の 値 を プ ロ グ ラ ミ ン グ す る の は難し く、尚 且つ 速 度的 に も 無 理 が あ る と判 断し た た め star suite (ワー ド、 エ ク セ ル の よ う な ソ フ ト ) の表計算を 使 っ て ど のぐら い の 値 に な る の か を算出 し、算出 し た 値 を プ ロ グ ラ ム 上 の配列に デ ー タ を格 納し て 順番に取り 出 す と い う 方法を と り ま し た。
mclr vdd gnd pgd pgc
C20.033uF
J1 47uFC1
S1 L1 220uH
+ V12.4V
tl431acz A
R C
tl431acz A
R C
RA2RA3 RA4RA5 VssRB0 RB1RB2 RB3 RB4RB5RB6RB7VddRA6RA7RA0RA1
P16F88
MCP4921
VDDNC CSSCK SDINC NC VoutBVrefBVrefAVoutALDACSHDNAVss BCD-SW
CQ 8421
U5 TL496C
FB2C 1CT GNDGNDOUTSW
CRYSTAL 20Mhz IN OUT
GND xc6202
10k 10k 5.1kR6
5.1kR5
10kR4 10kR3 10kR2
10kR1
ノ コギリ 波 等:サ イ ン 波 と 同 じ 方法と取り ま し た。 矩 形 波 に関し て は デ ー タ が 2 値 し か な い の で メ モ リ の 無駄 遣い な の で す が他の 波 形 と 同 じ こ と を す れば周 波 数 が 大 体 同 じ に な る の で 同 様 に し ま し た。以 下が プ ロ グ ラ ム の一 例で す。
dataz=v1[z];
data6=dataz & 0x0f;
data5=dataz & 0xf0;
z++;if(z==100)z=0;
説 明を 加 え る と、 dataz はBYTE 型の 変 数 で dataz にzに応じ たV1 の配列の 値 を入れ て い ま す。 dataz の 値 をBYTE 型の data6 に dataz と0x0f をビッ ト ア ン ド し た 値、BYTE 型 の data5 に dataz と0xf0をビッ ト ア ン ド し た 値 を入れ て い ま す。即 ち dataz の 上位4 ビッ ト を data5 に、下位4ビッ ト を data6 に 使 っ て い る の で す。 こ の プ ロ グ ラ ム で は 1 0 0 個 の 値 を い れ て い ま す。 なぜこんな面 倒な こ と を し て い る の か と い う こ と を 順 を追っ て説 明し ま す。
最初は、以 下の よ う に送り た い の で 値 の配列を 上位と下位にわけ て デ ー タ を送っ て い ま し た。 (ブレ ッ ドボー ド で は こ の 方法を と っ て い た。 )
data3=sinv1[y];
data4=sinv2[y];
こ の 方法で デ ー タ を送っ た 波 形 をオシ ロ ス コ ー プ で 計 る と、30 0H z ぐら い の 周 波 数 ま で し か 出 せ な い こ と がわか り ま し た。 こ れ は配列を プ ロ グ ラ ム メ モ リ ー に搭 載す る と、 マ シ ン語に コ ンパイ ル し た 際 に呼び出 し に 時 間 が か か る 為だと推定し ま し た。
30 0H z ぐら い の 周 波 数 で は 出 力 し た い 周 波 数 に届か な い の で、次に配列を プ ロ グ ラ ム メ モ リ に格納す る の で は な くRAMメ モ リ ー に格納し、RAMメ モ リ ー容 量の 制 限に よ り、50 回 の繰り返し で表さ れ る の 分 解 能 に し ま し た。 そ れ で も 思 っ た よ り 周 波 数 は 上 が らず、一回 で デ ー タ を送る度に呼び出 す配列を一 つに し た 方 が早く な る の で は な い か と 考 え、 WORD型の配列を 上位8ビッ ト を 0x0f0 0 とビッ ト ア ン ド し て 上位に送る デ ー タ 変 数 に格納、下位8ビッ ト を 0x0 0f fとビッ ト ア ン ド し て下位 に送る デ ー タ 変 数 に格納す る手法を と り ま し た。結果 は か え っ て遅く な っ て し ま い ま し た。 そ こ で WORD型で は な く、BYTE 型の配列を 用 い て 出 来 な い か と 考 え、 上位4ビッ ト を下位の デ ー タ、下位4ビッ ト を 上位の デ ー タ に な る よ う な配列に し て送る よ う に し ま し た。 し か し デ ー タ 自 体 は下位デ ー タ の 4ビッ ト 分 を捨て る こ と に な る の で 25 6段 階の 値 の 電 圧 し か取れ な く な り ま し た が 目 的 の 周 波 数 を 出 す こ と に 成功し、 8 8 0H z ぐら い ま で 出 せ る よ う に な り ま し た。 最初の コ ー ド で dataz と 0x0f、 0x f0 と のビッ ト ア ン ド を と っ て い る の は そ の た め で す。 こ れ を端的 に表す と配列に入 っ て い る 値 は図1 0 の よ う に な り ま す。
図1 0 配列に入っ て い る デ ー タ
そ れ で は、 サ イ ン 波 の根 拠と な る 計算 表の結果 につい て説 明し ま す。
表1 計算 表
表1 は、 サ イ ン 波 の 計算に 用 い た表で す。左か ら 順 に、
① :2π÷分 解 能 の 値 を足し て い っ た 値 ( D列)
② : ①をSIN(x) の関数 に代入し た 値 (E列)
③ : ②×2.5し た 値 (F列)
④ : ③+2.5し た 値 (G列)
⑤ :(④÷5)×4 0 95し た 値 (H列) と な っ て い ま す。
①、②で サ イ ン の一周 期 が 2πだか ら そ れ を 分 解 能 で 割 り、 そ の 値 を ス タ ー ス イ ー ト のSIN(x)関数 に入れ る こ と で±1 の 値 に直し て い ま す。③、④は そ の 値 を 2. 5 倍し、 2.5 足す こ と で 0~ 5の 値 に し て い ま す。 ( D ・ A コ ン バ ー タ の 出 力 は 0 Vか ら5 V だか ら )⑤は そ れ を5で 割 り 4 0 95掛け る こ と で 4 0 95の 値 で ど れ を 入れ るべき か を算出 し て い ま す。 最 後 に⑤の 値 を四 捨 五入し 1 6進数 に直し て プ ロ グ ラ ム の配列に入れ る 値 を決定す る と い う流れ で す。
4 - 5 ア ク テ ィ ブ フ ィ ル タ ー
シ ン セ サ イ ザ ー に は 電 圧 に よ っ て カ ッ トオフ 周 波 数 を 時 間 的 に 変 化 で き る よ う な VCF と い う 回 路 が備わっ て い ま す。 VCF につい て書か れ て い る書 籍を捜し て い る と、 ト ラ ン ジ ス タ技 術の 2 0 0 0 年 4月号にダイオー ド ラダー型 VCF 、 そ の他イ ン タ ー ネ ッ ト で ム ー グ シ ン セ サ イ ザ ー に搭 載さ れ て い る ト ラ ン ジ ス タ ラダー 回 路 な ど が載っ て い る サ イ ト が見 つか り ま し た が、 現 時点で の知 識で は と て も 設 計 製 作 す る の は 無 理だと判 断し、 そ の代わり に 2次の ア ク ティブ・ ロ ーパス フィル タ ー を 回 路 を搭 載す る こ と に し ま し た。写 真9、図1 1 が そ の外観と 回 路図で す。
写 真9 フィル タ ー 回 路
図1 1 フィル タ ー の 回 路図
4 - 5 - 1 回 路 の 説 明
D ・ A コ ン バ ー タ か ら 出 力 さ れ る 電 圧 は 0 か ら5 Vに な る の で、 こ の フィル タ ー で は 2 .5 Vを中 心と し た信号が入っ て き て も潰れ な い よ う にオ ペア ン プ の+ 端子 と ー 端子 が 2.5 Vを中 心に 変 化 す る よ う に す る た め、5 Vを抵 抗分 割 し て 2.5 Vを 作 っ て+ 端子 に 繋 い で い ま す。オ ペア ン プ は レ ー ル ・ ツ ー ・ レ ー ル特性 の LMC 6 6 2 CM を 使 っ て5 V付近ま で 波 形 が潰れ な い よ う に し て い ま す。R7をボリ ュ ー ム抵 抗に し て い る の は カ ッ トオフ 周 波 数 を 変 え た か っ た か ら で す。 カ ッ トオフ 周 波 数 を
Cirtuit Maker で シ ミ ュ レ ー ション し た結果 は 4 0 0H z ~1.5kH z ぐら い の カ ッ トオフ 周 波 数 に な り ま し た。 設 計法は表2、表 3に従い ま し た。 そ の 際 のQ 値 は 0. 707、 利 得 を 1 と し ま し た。又、今回採用 し た の は 2次の ア ク ティブ多重 帰 還型ロ ーパス フィル タ ー で す。 最初は正帰 還型ロ ーパス フィル タ ー で 回 路 を組 んで み た の で す が、 単 電源化 す る た め に- 入力端子 を 2.5 Vに浮か せ て も、 0~ 5 Vの入力信 号に対 応す る こ と が で き ま せんで し た。 いろいろ 試行錯 誤し た結果、 こ の 多重 帰 還型 フィル タ ー で 上手く 動 作 さ せ る こ と が で き ま し た。
10k 1%R7 10uFC4
+V 5VV3
+
U1 LMC660B/NS
10uFC1 22nF
88nF 220 Hz
0/5VV1
1megR2 10kR6
10kR5
5.1kR1
5.1k
表2
表 3
部品選 定は こ の 設 計法で、 大 体 の 値 を決め 実 際 に あ る部品 と照ら し合 わせ て 製 作 し ま し た。
次に 実 際 に シ ミ ュ レ ー ション し た 波 形 を と カ ッ トオフ 周 波 数 を示し ま す。 カ ッ トオフ よ り低い 周 波 数 で十分 0~ 5 Vの信号が潰れずに 出 力 さ れ て い る こ と がわか り ま す。
図1 2 カ ッ トオフ 周 波 数 (約670H z)
図13 出 力 波 形 ( 周 波 数 は 2 2 0H z)
4 - 5 - 2 波 形 の 変 化
プ ロ ト タ イ プ の 波 形 発 生装 置か ら フィル タ ー を通し た 後 の 波 形 ( カ ッ トオフ は 可 変抵 抗で適 当に 制 御 す る た め不明) を示し ま す。 出 力 す る サ イ ン 波 形 は D ・ A コ ン バ ー タ の 性質か ら階 段的 に 変 化 す る の で す が、 フィル タ ー を通す こ と で滑ら か に な っ て い る の がわか り ま す。
写 真1 0 矩 形 波 フィル タ ー 後
写 真1 1 サ イ ン 波 フィル タ ー 後 写 真1 2 ノ コギリ 波 フィル タ ー 後
第 五 章 PIC を 用 い た シ ン セ サ イ ザ ー の 設 計 と 製 作
5 - 1 意 義 と 特 徴
P I C を 用 い て 個人的 な 思 い を 形 に す る こ と に よ り、他に P I C で な に が で き そ う な の か ど う す ればよ り 思 い通り に P I C を 動 か せ る の か を検証で き る と い う点と、誰か が似た よ う な こ と を し よ う と し た と き に参考 に な る か も し れ な い と い う こ と に 本 研 究 の 意義が あ り ま す。特 徴と し て は、 2つの プ ロ セ ッ サ と D ・ A コ ン バ ー タ を 使 い、 プ ロ セ ッ サ 同士を接 続し て片方 を信号発 生 用 に、 も う片方 を コ ン ト ロ ー ラ と エ ン ベ ロ ー プ 波 形 を 出 す よ う に 役 割 を 分担さ せ た こ と で す。
5 - 2 外 観 と 仕 様
仕様 は こ れ ま で説 明し て き た ア ク ティブフィル タ ー を 用 い、 波 形 発 生装 置の P I C を 1 6 F 876 に 変 え、 コ ン ト ロ ー ラ ー 用 に P I C 1 6 F 87 7、 音 を ス ピ ー カ ー か ら 出 す た め に38 6 ア ン プキッ ト、 最 後 に 8Ωの ス ピ ー カ ー を 加 え た も の に な っ て い ま す。
写 真13 外観( 上 か ら )
写 真1 4 外観(裏 面)
5 - 3 回 路 に つ い て
図1 4 が 本 体 の 回 路図で す。 基 本 的 に は、 こ の 回 路 の 後 に フィル タ ー 回 路、 ア ン プ、
ス ピ ー カ ーへと 繋 が っ て い き ま す が、 波 形 発 生 回 路 か ら直 接ス ピ ー カ ーへも 繋げる よ う に切り替え ス イ ッ チ をつけ て あ り ま す。 さ ら に 波 形 発 生 用 の D ・ A コ ン バ ー タ のV R E FA に 加 え る 電 圧 を 2.5 Vか エ ン ベ ロ ー プ 波 形 に切り替え る ス イ ッ チ も 動 作 チ ェ ッ ク の し や す さ も兼 ねて 付 け て い ま す。写 真13上部にBC D ス イ ッ チ が 6 個 と小 さ い ス イ ッ チ が 2 個 あ り ま す が、左のBC D ス イ ッ チ3個 と小さ いボタ ン は コ ン ト ロ ー ラ ー側の P I C 1 6 F 87 7に 繋 が っ て い て エ ン ベ ロ ー プ 波 形 を 変 え る た め の も の で 、右のBC D ス イ ッ チ3個 は 波 形 発 生 用 の P I C 1 6 F 876 に 繋 が っ て い て、
オク タ ーブ 切り替え、ビ ブラ ー ト の 周 期切り替え、 出 力 波 形切り替え の た め につい て い ま す。 ま た両P I C と も 大量の ス イ ッ チ が 付 い て い る た め、 PO R T Bを すべて 内 部プ ル ア ッ プ し て い ま す。 P I C ど う し で は P I C 1 6 F 87 7のRD 0 か らRD3 と P I C 1 6 F 876 のRA 0 か らRA3を 繋 い で、押さ れ た ス イ ッ チ に応じ て信号 の や り取り を す る よ う に し て い ま す。
図1 4 本 体 回 路図
5 - 4 波 形 発 生 装 置 の プ ロ グ ラ ム に つ い て
波 形 発 生側の プ ロ グ ラ ム は、 プ ロ ト タ イ プ で 作 っ た プ ロ グ ラ ム を元に し て そ れ に 付 け 加 え る 形 で書い て い き ま し た。 大 き な違い はBC D ス イ ッ チ に よ っ て 周 波 数 とビ ブラ ー ト を 加 え る か 加 え な い か を 変 え ら れ る こ と と、 コ ン ト ロ ー ラ ー側の信号が こ な け れ ば 信号を 出 さ な い こ と で す。次に ど の よ う に そ れ ら を 変 え て い っ た の か を 周 波 数、ビ ブラ ー ト、 コ ン ト ロ ー ラ ー側の信号に対す る処理 の 順 で説 明し ま す。
out mclr vdd gnd pgd pgc
2009/1/22 synthsizer Ii yusuke out amp
mclr vdd gnd pgd pgc
10uF
5.1k 10k 10k
10k 10k
10k10k 10k10k
10k10k 10k 10k 10k
47uF 220uH
V1 2.4V+
MCP4921 VDDNC CSSCK SDINC NC VoutBVrefBVrefAVoutALDACSHDNAVss TL496C
FB2C 1CT GNDGNDOUTSW
IN OUT GND xc6202
pic16f873a mclrRA0 RA1RA2 RA3RA4 RA5Vss OSC1OSC2 RC0RC1 RC2RC3 RC4RC5RC6RC7VssVddRB0RB1RB2RB3RB4RB5RB6RB7 pic16f877
mclrRA0 RA1RA2 RA3RA4 RA5RE0 RE1RE2 VDDVSS OSC1OSC2 RC0RC1 RC2RC3 RD0RD1 RD2RD3RC4RC5RC6RC7RD4RD5RD6RD7VSSVDDRB0RB1RB2RB3RB4RB5RB6RB7
bcdsw
CQ
8421
U2
bcdsw
CQ
8 4 2 1
MCP4921 VDDNC CSSCK SDINC NC VoutBVrefBVrefAVoutALDACSHDNAVss bcdsw
CQ
8 4 2 1
CRYSTAL
CRYSTAL 10k
5.1k 10k 10k 10k 10k
bcdsw
CQ
8421bcdsw
CQ
8421
bcdsw
CQ
8 4 2 1
tl431acz
R C
A
tl431acz
R C
A
5 - 4 - 1 周 波 数 を 変 え る
周 波 数 を か え る 為 に 本 研 究 で は、 デ ー タ を送っ た 後 の待 ち時 間 を 変 え る こ と で 目 的 の 周 波 数 を 得 る こ と に し ま し た。 P I C に は、 タ イ マ ー が 内 臓 さ れ て い ま す。 タ イ マ ー に は三 種 類の タ イ マ ー が あ り、 まず 初め にT M R2 を 使 っ て み る こ と に し ま し た。T M R2 は 8ビッ ト の カウン タ で 基 本 的 に 256 ま で カウン ト す る とオー バ ー フ ロ ー し
、 カウン ト が ゼ ロ に戻る と い う 動 作 を し ま す が、ポス ト スケー ラ ー が 4ビッ ト あ る の で 最 大 1 6ビッ ト ま で カウン ト で き ま す。 さ ら に 8ビッ ト の コ ンパレ ー タ で、 PR2 レ ジ ス タ に セ ッ ト し た 値 に応じ てT M R2 IFを 1 に す る よ う に で き る の で、 こ の P R2 レ ジ ス タ に入れ る 値 を 変 え る こ と で 周 波 数 を 変 え る よ う に し ま し た。 と ころが、
こ の PR2 レ ジ ス タ に セ ッ ト で き る 値 は 0 か ら 25 5で、 こ の 値 で細か く 周 波 数 を 変 え る の は か な り シビア で な か な か 思 う よ う に は 調節で き ま せんで し た。T M R2 で は 調節が困 難と 分 か っ た の で、次にT M R1 を 使 う こ と に し ま し た。T M R1 は 1 6ビ ッ ト カウン タ ー で、 C C P モ ジ ュ ー ル の コ ンペア ー モ ー ド ・ スペシャル イ ベ ン ト ト リ ガー を 用 い る こ と で、T M R2 と 同 じ よ う な こ と が で き ま す。 C C PR1Hレ ジ ス タ と C C PR1Lレ ジ ス タ の 値 とT M R1 が 同 じ に な る と C C P 1 IFが 1 に な る の で そ れ を 利 用 し ま す。下 記が そ の流れ で す。
CCPR1H=set2; CCPR1L=set;// 時 間 を セ ッ ト す る bCCP1IF=0; //BCCP1IFを ゼ ロ に す る
TMR1H=0; TMR1L=0; タ イ マ ー 1 の カウン ト を ゼ ロ に す る デ ー タ送 信 処理;
while(bCCP1IF==0);//セ ッ ト し た 値 に応じ た 時 間 に な りBCC1IFが 1 に な る ま で な に も し な い。
こ う す る こ と で、正確に 時 間 を 変 え る こ と が で き ま す。
今回 は、 こ のT M R1 の スペシャル イ ベ ン ト ト リガー を 用 い て 音 の 周 波 数 を 変 え ま し た。
5 - 4 - 2 ビ ブ ラ ー ト
ビ ブラ ー ト は、 周 波 数 を 周 期 的 に 変 化 さ せ る こ と で す。ビ ブラ ー ト を 実 現 す る た め に 本 研 究 で は、CCPR1Lの 値 を タ イ マ ー 0 の 割 り込み処理 で 変更す る事に し ま し た。
図15 ビ ブラ ー ト
そ の手順 で す が、 コ ン ト ロ ー ラ ー側か ら く る信号に応じ てCCPR1LとCCPR1Hに 値 を セ ッ ト し ま す。以 下が そ の コ ー ド で す。
BYTE hz[16]={95,80,250,220,200,150,125,100,22,5,242,221,196,100,100,100};
//CCPR1L に入れ る 値 BYTE hz2[16]={2,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0};//CCPR1H に入れ る 値 temp2=PORTA;// ポー ト A の信号を temp2 に入れ る
temp2 &= 0x0f;// 信号は下位4ビッ ト な の で 上位4ビッ ト を マ ス ク す る。
s=temp2; //temp2 の 値 をsに入れ る
if((setflag==0)&&(temp4==0)){set=hz[s];set2=hz2[s];}
// CCPR1HとCCPR1Lに 値 を セ ッ ト
こ こ で setflag を い う の は、ビ ブラ ー ト し な い と き は 0、 す る と き は 1 に セ ッ ト し て ビ ブラ ー ト さ せ る と き に ま た セ ッ ト さ れ る の を防ぐも の で す。 setflag と関 係な く 値 を セ ッ ト す る よ う に す る と 周 波 数 の セ ッ ト さ れ る 値 が バ ラ バ ラ に な り結構面 白い 音 に な り ま す。 Temp4 に 音階の 値 が入っ て い る の で そ れ に応じ た配列を入れ る よ う に す る た め の も の で す。
次にビ ブラ ー ト 用 の 割 り込み処理 につい て で す が、 まず ビ ブラ ー ト さ せ る た め に前 述 の setflag を 1 に し ま す。 さ ら にBC D ス イ ッ チ の 値 を読 んでオプ ション レ ジ ス タ の プ リ スケー ラ ー を そ れ に応じ た 値 に セ ッ ト し ま す。 そ の 後 C C PR1Lに入れ る 値 を イ ン ク リ メ ン ト と デ ク リ メ ン ト を す る操作 を繰り替え し ま す。図に表す と以 下の よ う に な り ま す。
図1 6 ビ ブラ ー ト の処理
set++;とset--;を繰り返すだけ な の で図1 6 の よ う に 周 波 数 が 変 化 し ま す。
5 - 4 - 3 コ ン ト ロ ー ラ ー 側 か ら の 信 号 に 対 す る 処 理
コ ン ト ロ ー ラ ー側と は、 PO R TA の 0 か ら3 ビッ ト が 繋 が っ て い ま す。信号は ド、
レ、 ミ、 フ ァ、 ソ、 ラ、 シ、 ド の ど れ か と何も 出 さ な い コ ー ド の 1 4通り で す。表に す る と以 下の よ う に な り ま す ( 半 音 の信号は省い て い ま す )。
図17 コ ー ド表
動 作 を説 明す る と、 コ ン ト ロ ー ラ ー側か ら何もボタ ン を押し て い な い 時 に は 1 1 1 1 の コ ー ド が タ イ マ ー 0 の 割 り込み 間隔(52.4m sec ) に あわせ て絶えず 送ら れ て い ま す。 で す の で こちら側の P I C は、 電源が入る と メ イ ン ル ー プ に入る前に エ ラ ー コ ー ド の 1 1 1 1 が PO R TA の下位4ビッ ト に く る ま で待 ちま す。 そ し て メ イ ン ル ー プ に入り信号に応じ た 音 を 出 す よ う に し て い ま す。 メ イ ン ル ー プ に入る前に待つ理 由は、 か っ て に暴 走し て 音 を 出 し続け た り す る こ と が あ る か ら で す。
5 - 5 コ ン ト ロ ー ラ ー 側 の プ ロ グ ラ ム に つ い て
コ ン ト ロ ー ラ ー側の プ ロ グ ラ ム は、 エ ン ベ ロ ー プ の 値 を D ・ A コ ン バ ー タ ー に渡す処 理 とボタ ン の押さ れ た信号に応じ て 波 形 発 生側の P I C に信号を送 信す る処理 の 2つ に 分 け ら れ ま す。
5 - 5 - 1 信 号 送 信 に つ い て
信号を送 信す る に は、ボタ ン の組み合 わせ で送る信号を決定し な け ればな り ま せん。
波 形 を 発 生 す る P I C は 1つし か な い の で和音 は 出 せ ま せん。 で す か らボタ ン が複数 押さ れ た と き ど う す る の か を 考 え ま す。 本 研 究 で は、ボタ ン と 繋 が っ て い る PO R T に優 先順位をつけ て い く こ と に し ま し た。ボタ ン と 繋 が っ て い る PO R Tは PO R T B全部と PO R TD のビッ ト 4 か らビッ ト7、 PO R TC のビッ ト7で す の で、優 先 順位を PO R T B>PO R TD>PO R TC と し ま し た。優 先順位が決ま っ た の で次 に プ ロ グ ラ ム を ど う す る の か で す が、 タ イ マ ー 0 割 り込み を 使 っ て 割 り込み処理 の中 で、① ボタ ン が 繋 が っ て い る PO R Tを読 む。②PO R T Bのボタ ン が押さ え れ て い る場 合は PO R T B用 の処理へ 行く③PO R T Bのボタ ン が押さ れ て い な い で且つP O R TD のボタ ン が が押さ れ て い る場 合は PO R TD 用 の処理へ 行く④PO R TC の ビッ ト7の み が押さ れ て い る場 合そ れ に応じ た信号に切り替え メ イ ン ル ー プへ 戻る。
⑤ 何も押さ れ て い な い と き は、 1 1 1 1 を送 信す る。 と い う ル ー チ ン に し ま し た。
こ こ で②と③の処理 を詳し く説 明す る と、 PO R T Bか PO R TD のボタ ン が 1つ だ け押さ れ て い る場 合は そ れ に応じ た信号に切り替え メ イ ン ル ー プへ 行き、複数押さ れ て い る場 合は 1 1 1 1 を送 信し メ イ ン ル ー プへ 戻る と い う流れ に な っ て い ま す。 プ ロ グ ラ ム コ ー ド は次の よ う に な っ て い ま す。