...

公開 - 高知工科大学

by user

on
Category: Documents
19

views

Report

Comments

Transcript

公開 - 高知工科大学
卒業研究報告
題 目
PIC を用いたアナログアンプ制御回路の設計と製作
指 導 教 員
綿森道夫 准教授
報 告 者
学籍番号:1090277
氏名: 廣瀬 信哉
平成 21 年 2 月 20 日
高知工科大学 電子・光システム工学科
目 次
- 第 1 章 - 序 論 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・1
1-1. は じ め に ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・1
1-2. 研 究 目 的 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・1
1-3. 研 究 の 新 規 性 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 1
- 第 2 章 - PIC プ ロ セ ッ サ に つ い て ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・3
2-1. PIC と は ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・3
2-2. PIC の 種 類 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・3
2-3. PIC16F873A に つ い て ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 4
- 第 3 章 - 今 ま で に 行 っ た 電 子 工 作 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・6
3-1. 電 子 ル ー レ ッ ト ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・6
3-2. カ ウ ン ト ダ ウ ン タ イ マ ー ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・8
3-3. GLCD 表 示 機 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・12
- 第 4 章 - D 級 ア ン プ の 原 理 と PIC を 用 い た 設 計 指 針 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・20
4-1. D 級 ア ン プ の 原 理 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・20
4-2. PIC を 用 い た D 級 ア ン プ を 構 成 す る 際 に 利 用 す る 内 臓 モ ジ ュ ー ル
に つ い て ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・20
- 第 5 章 - ブ レ ッ ド ボ ー ド 型 プ ロ ト タ イ プ の 製 作 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・24
5-1. 反 転 増 幅 部 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・24
5-2. PIC16F88 を 用 い た A/D 変 換 ,PWM モ ー ド の 実 験 ・ ・ ・ ・ ・ ・ ・ ・27
5-3. ア ク テ ィ ブ フ ィ ル タ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・29
5-4. ス ピ ー カ を 鳴 ら す た め の ア ン プ の 選 定 と 概 要 ・ ・ ・ ・ ・ ・ ・ ・ ・31
5-5. 最 終 プ ロ ト タ イ プ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・33
- 第 6 章 - PIC16F873A を 用 い た ア ナ ロ グ ア ン プ 制 御 機 の 製 作 ・ ・ ・ ・ ・ ・ ・35
6-1. 概 要 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・35
6-2. 回 路 に つ い て ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・37
6-3. プ ロ グ ラ ム の 流 れ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・38
6-4. 実 際 の 使 用 に つ い て ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・41
- 第 7 章 - 今 後 の 展 開 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・44
Ⅰ
- 第 8 章 - ま と め ・ 感 想 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・45
参 考 文 献 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・46
謝 辞 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・47
付 録 - プ ロ グ ラ ム リ ス ト - ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・48
Ⅱ
第1章
1-1.
序 論
は じ め に
現 在、 様 々 な 局 面 で 使 用 さ れ、 重 宝 さ れ て い る PIC マ イ コ ン。 私 は こ の PIC マ
イ コ ン を 用 い た 何 か の 電 子 工 作 を し た い と 考 え て い た。 そ し て、 私 は ア ナ ロ グ 信
号 を PIC で 制 御 す る こ と に 注 目 し、 PIC を 用 い た ア ナ ロ グ ア ン プ 制 御 回 路 の 製 作
・ 設 計 に 乗 り 出 し た。 PIC プ ロ セ ッ サ は 基 本 的 に ロ ジ ッ ク デ バ イ ス で あ り、 こ れ
を 用 い て ア ナ ロ グ ア ン プ を い か に 制 御 で き る の か、 と て も 楽 し み に し て い る。
1-2.
研 究 目 的
こ の 様 な 電 子 工 作 を す る こ と に よ っ て、 回 路 や プ ロ セ ッ サ の 理 解 を 深 め る と 共
に、 プ ロ グ ラ ミ ン グ 力 を 高 め、 製 作 技 術 を 向 上 さ せ る こ と を 目 的 と す る。 1 つ の
作品をゼロから組みあげていく時には予想もしない困難にぶちあたると思ってい
る。 設 計 の 時 点 で 間 違 っ て い る の で は な い か、 本 当 に こ の 回 路 は 動 作 す る の だ ろ
うか?製作技術が未熟でうまく動かないのではないか?アナログ回路特有の注意
点 が あ り、 そ れ を 無 視 し て い る の で は な い か ? プ ロ グ ラ ム が 悪 い 可 能 性 も 捨 て 切
れ な い、 な ど 実 に 色 々 な 点 を 1 つ 1 つ ク リ ア し て は じ め て 1 つ の 作 品 に な る。 目
標 を 決 め て 本 当 に 動 作 す る 1 つ の 作 品 を 作 る と い う 事 を 研 究 の 目 的 す れ ば、 そ れ
は 単 純 で あ り な が ら、 色 々 な 事 を 含 ん で い る。 そ し て 何 よ り も 自 分 自 身 が 成 長 で
き る と 思 っ て い る。
1-3.
研 究 の 新 規 性
PIC の A/D 変 換 機 能 を 利 用 し て、 音 の 大 き さ を デ ジ タ ル 値 に 変 換 す る。 こ れ を
PIC の PWM 発 生 器 に 通 し て D 級 ア ン プ を 構 成 す る と こ ろ に 最 大 の 新 規 性 が あ る。
ア ナ ロ グ 値 を デ ジ タ ル 値 に 変 換 す る こ と に よ っ て、 音 の 加 工 が 行 え る 可 能 性 が あ
る。 D 級 ア ン プ は、 音 の 振 幅 を パ ル ス の 幅 に 変 形 す る ア ン プ の こ と で、 デ ジ タ ル
ア ン プ と 呼 ば れ て い る。 今 ま で 登 場 し た デ ジ タ ル ア ン プ は ハ ー ド 的 に 音 と 三 角 波
を 比 較 す る こ と で パ ル ス 幅 変 調 を 行 っ て き た。 確 か に 高 速 で 変 動 す る 音 の 振 幅 を
パ ル ス 幅 に 抜 け が 無 い 様 に 変 換 す る た め に は、 ハ ー ド 的 な 処 理 が 正 統 的 で あ る。
し か し な が ら 単 に 音 の 振 幅 を パ ル ス 幅 に 変 換 す る だ け で あ る の で あ れ ば、 振 幅 を
A/D 変 換 機 能 に よ っ て デ ジ タ ル に 変 換 し、 そ の 変 換 し た 結 果 を 用 い て パ ル ス 幅 を
合 成 す れ ば、 PIC で も 構 成 で き る の で は な い だ ろ う か ? PIC に は A/D 変 換 機 能
も PWM 出 力 も 搭 載 し て い る。 し か し な が ら PIC の A/D 変 換 は あ ま り 高 速 と い え ず
1
しかも刻々と変化する音の信号に対して正しく変換してくれるのであろうか?又
PWM も パ ル ス の 変 化 数 を 多 く す る と メ イ ン 周 期 が 低 下 し て し ま う。 色 々 な 制 約 が
あ り な が ら も と に か く 挑 戦 し て み る と い う 方 針 が 本 研 究 で あ る。 そ し て そ の こ と
の 中 に こ そ 新 規 性 が あ る と 呼 べ る と 考 え て い る。
2
第 2章
PIC プ ロ セ ッ サ に つ い て
2-1. PIC と は
Peripheral Interface Controller が 正 式 名 称 で あ る。 こ の 名 の 通 り、 コ ン
ピ ュ ー タ と 周 辺 機 器 と の 接 続 部 分 を 制 御 す る た め に 開 発 さ れ た 「マ イ ク ロ コ ン ト
ロ ー ラ」 の 領 域 の IC で あ る。 使 用 目 的 が 限 ら れ て お り、 高 い 機 能 ・ 高 速 性 は も
っ て い な い が、 周 辺 機 器 の 制 御 に 便 利 な 機 能 は 内 蔵 し て い る。 そ し て 最 新 の マ イ
ク ロ コ ン ピ ュ ー タ に 比 べ て 命 令 数 は 少 な く わ ず か に 35 個 だ け と い う 簡 素 な 構 造
を し て い る。 こ れ が PIC を 「使 い や す く、 安 価 で あ る」 と 特 徴 づ け て い る。
2-2. pic の 種 類
PIC は 米 マ イ ク ロ チ ッ プ テ ク ノ ロ ジ ー 社 が 開 発 し た も の で あ る。 PIC に は 目 的
に 合 わ せ て 数 多 く の 種 類 が あ り、 8 ピ ン の 小 型 の も の か ら 80 ピ ン も あ る 大 型 の
も の ま で あ る。 こ れ ら の ア ー キ テ ク チ ャ は 共 通 と な っ て い る た め、 大 型 の PIC は
小 型 の PIC の 上 位 互 換 と な っ て お り、 ほ ぼ 同 じ プ ロ グ ラ ム で 動 か す こ と が 可 能 で
あ る。 PIC に は 以 下 に 示 す よ う に 大 き く 分 け て 3 つ の シ リ ー ズ が あ る。
1:ベースラインシリーズ
命 令 が 12 ビ ッ ト 幅 の 最 初 に 開 発 さ れ た シ リ ー ズ。 入 出 力 ピ ン と タ イ マ
機 能 だ け を 持 っ た 単 機 能 の シ リ ー ズ。 PIC の 世 代 と し て は 古 く な っ て し ま
っ た。
2 :ミッドレンジシリーズ
命 令 が 14 ビ ッ ト 幅 の シ リ ー ズ。 最 も よ く 使 わ れ て お り、 A/D 変
換機能やシリアルポートなど多くの機能を内蔵するものもあり種類
も 豊 富 で あ る。
3 :ハイエンドリシーズ
命 令 が 16 ビ ッ ト 幅 の シ リ ー ズ。 高 機 能 な シ リ ー ズ で、 開 発 に 力 が 注 が
れ て お り、 従 来 の ミ ッ ド レ ン ジ シ リ ー ズ の 範 囲 を カ バ ー す る 計 画 で あ る。
3
2-3. PIC16F873A に つ い て
今 回 用 い た PIC は PIC16F873A と 呼 ば れ る ミ ッ ド レ ン ジ シ リ ー ズ の 28 ピ
ン の も の で あ る。 主 要 機 能 を 表 :2-3-1 に、 ピ ン 配 置 図 を 図 :2-3-1 に 示 す。
表 :2-3-1.PIC16F873A の 主 要 機 能
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/Vref-
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
PIC16F873A
RA3/AN3/Vref+
RA4/T0CKI
RA5/AN4/SS
Vss
OSC1/CLKIN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
RB7/PGD
RB6/PGC
RB5
RB4
RB3/PGM
RB2
RB1
RB0/INT
Vdd
Vss
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
図 :2-3-1.PIC16F873A の ピ ン 配 置 図
4
こ の PIC16F873A に は RA0~RA5 の RA ポ ー ト、 RB0~RB7 の RB ポ ー ト、
RC0~RC7 の RC ポ ー ト の 計 22 ピ ン の デ ィ ジ タ ル 入 出 力 ピ ン が あ る。 今 回 は
RA0,RA1,RA3, を AN0,AN1,AN3 と し て、 ア ナ ロ グ モ ー ド と し て 扱 っ た。 設 定 方
法 は 第 4 章 で 記 載 す る。 OSC1 と OSC2 に は 20MHz の 水 晶 振 動 子 を 接 続 し て
20MHz の ク ロ ッ ク を 使 用 す る。 音 を A/D 変 換、 PWM 加 工 す る た め に は 出 来 る だ け
高 速 で な け れ ば な ら な い。
以 下 の 写 真 :2-3-1 に PIC16F873A の 概 観 を 示 す。
写 真 :2-3-1.PIC16F873A の 概 観
5
第3章 今 ま で に 行 っ た 電 子 工 作
3-1.
電 子 ル ー レ ッ ト
電 子 工 作 の 第 一 作 目 と し て 電 子 ル ー レ ッ ト の 製 作 を 行 っ た。 こ れ は 12 個 の
LED を 回 転 点 灯 さ せ、 ス タ ー ト ボ タ ン が 押 さ れ る と 高 速 回 転 を 始 め、 ス ト ッ プ ボ
タ ン が 押 さ れ る と 停 止 を 始 め る。 完 全 に 停 止 す る ま で の 点 灯 回 数 は ボ タ ン が 押 さ
れ た 時 の 状 態 に 起 因 す る よ う に な っ て い る。 回 路 図 を 図 :3-1-1 に 示 す。
図 :3-1-1. 電 子 ル ー レ ッ ト の 回 路 図
6
電 子 ル ー レ ッ ト の 概 観 で あ る 写 真 :3-1-1 を 以 下 に 示 す。
写 真 :3-1-1. 電 子 ル ー レ ッ ト の 概 観
左 の ボ タ ン が ス ト ッ プ ボ タ ン で、 右 の ボ タ ン が ス タ ー ト ボ タ ン に な っ て い る。
PIC 左 側 の メ イ ン ス イ ッ チ が 入 る と ダ イ オ ー ド が 順 番 に 点 灯 し 始 め る。 こ の と き
ス ト ッ プ ボ タ ン を 押 す と 点 灯 方 向 が 逆 に な り 逆 回 転 を 始 め る。 ま た ス ト ッ プ ボ タ
ン を 押 す と さ ら に 逆、 つ ま り 最 初 の 回 転 に 戻 る。 ど ち ら の 場 合 で も ス タ ー ト ボ タ
ン を 押 す と 高 速 回 転 を 始 め、 ス ト ッ プ ボ タ ン を 押 す と 停 止 を 始 め る と い う 仕 組 み
に な っ て い る。
ま た、 LED が 点 灯 す る と ブ ザ ー が 鳴 り、 回 転 速 度 に 合 わ せ て ブ ザ ー の 鳴 る 間 隔
も 変 わ る よ う に な っ て い る。
7
3-2. カ ウ ン ト ダ ウ ン タ イ マ ー
電 子 工 作 の 第 二 作 目 と し て カ ウ ン ト ダ ウ ン タ イ マ ー の 製 作 を 行 っ た。 こ れ は 7
セ グ メ ン ト LED を 用 い て 表 示 さ せ た 数 字 を カ ウ ン ト ダ ウ ン と 共 に 減 少 さ せ、 最 終
的 に は 0 を 表 示 さ せ る も の で あ る。 回 路 図 を 図 :3-2-1 示 す。
図 :3-2-1. カ ウ ン ト ダ ウ ン タ イ マ ー の 回 路 図
8
カ ウ ン ト タ ウ ン タ イ マ ー の 概 観 で あ る 写 真 :3-2-1 を 以 下 に 示 す。
写 真 :3-2-1. カ ウ ン ト ダ ウ ン タ イ マ ー の 概 観
メ イ ン の ス イ ッ チ を 入 れ る と 7 セ グ メ ン ト LED に 光 が 灯 る。 こ の と き、 BCDス イ ッ チ の 値 を 読 ん で そ れ に 応 じ た 数 字 を 表 示 さ せ る。 写 真 :3-2-1 の 場 合 で は
左 と 右 の BCD が 共 に 9 を 示 し て い る の で、 「 99.00 」 が 表 示 さ れ る。 そ の 様 子 を
以 下 の 写 真 :3-2-2 に 示 す。 小 数 点 を 境 に し て 左 の 二 桁 は 分 を 表 し て お り、 右 の
二 桁 は 秒 を 表 し て い る。 つ ま り、 最 大 99 分 の 計 測 が 可 能 と な っ て い る。 左 の ボ
タ ン が ス タ ー ト ボ タ ン で、 右 の ボ タ ン が ス ト ッ プ ボ タ ン に な っ て い る。 カ ウ ン ト
ダ ウ ン の 様 子 を 以 下 の 写 真 :3-2-3 に 示 す。
ま た、 カ ウ ン ト ダ ウ ン が 始 ま る 前 に、 ス ト ッ プ ボ タ ン を 押 す と 少 数 点 を 境 に
し て 値 が 入 れ 替 わ る。 つ ま り、 「 99.00 」 が 「 00.99 」 と な る。 こ の 様 子 を 以 下
の 写 真 :3-2-4 に 示 す。 入 れ 替 わ り は ス ト ッ プ ボ タ ン を 押 す た び に 行 わ れ る。 こ
の 入 れ 替 わ り 機 能 に よ り 一 分 未 満 の 計 測 も 可 能 で あ る。 さ ら に、 カ ウ ン ト が 減 る
た び に ブ ザ ー が 鳴 り、 ボ タ ン を 押 し た と き と カ ウ ン ト ダ ウ ン が 終 わ っ た と き に 長
め に ブ ザ ー が 鳴 る よ う に な っ て い る。 こ の 入 れ 替 わ り 機 能 の プ ロ グ ラ ム は 筆 者 の
オ リ ジ ナ ル で あ る ( メ イ ン の プ ロ グ ラ ム は 先 輩 の 作 品 で あ る。 ハ ー ド ウ ェ ア は も
ち ろ ん 筆 者 が 製 作 し た ) 。
9
写 真 :3-2-2.99 分 00 秒 表 示 の 様 子
写 真 :3-2-3. カ ウ ン ト ダ ウ ン の 様 子
10
写 真 :3-2-4. 入 れ 替 わ り の 様 子
こ の 7 セ グ メ ン ト LED の 数 字 を 構 成 す る 7 ヶ 所 の セ グ メ ン ト 部 分 の 光 ら せ た い
場 所 に 対 応 し た 信 号 を、 ポ ー ト B か ら 送 り 数 字 を 再 現 し て い る。 一 つ の 桁 を 光 ら
せ る と 他 の 桁 は 本 来 は 点 灯 し て い な が、 高 速 で 桁 を 変 え て、 点 灯 さ せ て い く こ と
に よ っ て 人 間 の 目 に は 全 て の 桁 が 同 時 に 点 灯 し て い る よ う に 見 え る。 こ れ を ダ イ
ナ ミ ッ ク 点 灯 制 御 と い う。
11
3-3. GLCD 表 示 機
電 子 工 作 の 第 三 作 目 と し て GLCD, つ ま り グ ラ フ ィ ッ ク 液 晶 の 表 示 機 の 製 作 を 行
っ た。 回 路 図 を 図 :3-3-1 に、 概 観 の 写 真 :3-3-1 を 下 に 示 す。
図 :3-3-1.GLCD 表 示 機 の 回 路 図
写 真 :3-3-1.GLCD 表 示 機 の 概 観
12
こ の グ ラ フ ィ ッ ク 液 晶 は お よ そ 2KHz の ク ロ ッ ク で 駆 動 す る よ う に な っ て い る。
こ の 2KHz は 74HC04 に 内 臓 さ れ て い る CMOS イ ン バ ー タ で 作 り 出 し て い る。 以
下 に 2KHz を 発 生 さ せ る 回 路、 図 :3-3-2 を 示 す。
図 :3-3-2.CMOS イ ン バ ー タ 3 段 の 発 振 回 路
R1 の 値 は 10k で 固 定 で あ り C1 と R2 は 以 下 の 式 に 当 て は め る こ と で 求 め る
こ と が で き た。
Vdd は 2.4V 電 源 を TL496C で 昇 圧 し て 8V に ま で 引 き 上 げ、 3 端 子 レ ギ ュ レ
ー タ S81350 で 5V に ま で 引 き 下 げ た も の を 使 用 し て い る。 Vth を 2.5V と し て
T を 求 め る と お よ そ 0.48msec に な り こ れ よ り 周 波 数 は お よ そ 2.1kHz と 求 め る
こ と が で き る。 こ の 発 振 回 路 の み を ブ レ ッ ド ボ ー ド 上 で 作 成 し オ シ ロ ス コ ー プ で
周 期 を 観 測 し た 結 果 を 以 下 の 写 真 :3-3-2 に 示 す。
写 真 :3-3-2. 実 際 の 周 波 数
13
写 真 :3-3-2 の 通 り 実 際 の 周 波 数 は お よ そ 1.88kHz と な っ て お り 計 算 通 り と ま
で は い か な い が、 2kHz に 十 分 近 い 値 を 得 る こ と が で き た。
次 に、 こ の グ ラ フ ィ ッ ク 液 晶 の 表 示 方 法 は 以 下 の 図 :3-3-3 よ り ペ ー ジ 毎 に
D0~D7 が 61 ラ イ ン あ り、 ポ ー ト B か ら D0~D7 の デ ー タ 信 号 を 順 番 に 送 り 出 す こ
と に よ っ て 表 示 パ タ ー ン を 作 っ て い る。 62~122 の デ ー タ は CS( チ ッ プ セ レ ク
ト ) を 1 か ら 2 に 変 え る こ と に よ っ て 表 示 で き る。 CS1 と CS2 は ア ク テ ィ ブ
LOW な の で 0 に す る と 選 択 さ れ る。 ま た ポ ー ト B の 信 号 を 表 示 デ ー タ と し て 読 み
込 ま せ る た め に は、 A0 を 1 に し て 表 示 デ ー タ で あ る こ と を 知 ら せ な い と い け な
い。 そ し て E を H→L に す る こ と に よ っ て 実 際 に 表 示 が 行 わ れ る。
図 :3-3-3.GLCD 概 略 図
14
以 下 に 実 際 に GLCD を 表 示 さ せ た 写 真 :3-3-3 を 示 す。
写 真 :3-3-3. 実 際 の 表 示 の 様 子
こ の 写 真 :3-3-3 の 例 で は CS1 側 の ペ ー ジ 0 に は 0xA5 を 61 回 連 続 で 書 き、
ペ ー ジ 1 に は 0 を 61 回 連 続 で 書 い た。 以 下 同 様 に ペ ー ジ 2 に は ま た 0xA5 を
61 回 連 続 で、 ペ ー ジ 3 に は ま た 0 を 61 回 連 続 で 送 っ て い る。 一 方、 CS2 側 の
ペ ー ジ 0 に は 0xF0 を 61 回 連 続 で、 ペ ー ジ 1 に は 0x0F を 61 回 連 続 で , ペ ー
ジ 2 に は ま た 0x0F を 61 回 連 続 で、 ペ ー ジ 3 に は ま た 0xF0 を 61 回 連 続 で 送 っ
て い る。
左 の ボ タ ン が ス タ ー ト ボ タ ン、 真 ん 中 の ボ タ ン が ス ト ッ プ ボ タ ン、 右 の ボ タ ン
が リ セ ッ ト ボ タ ン に な っ て お り、 ス タ ー ト ボ タ ン が 押 さ れ る と、 表 示 さ れ て い る
パ タ ー ン が 上 方 向 に ス ラ イ ド し て い き、 ス ラ イ ド さ れ た デ ー タ は 下 か ら 表 示 さ れ
る。 ス ト ッ プ ボ タ ン が 押 さ れ る と ス ラ イ ド が 止 ま り、 リ セ ッ ト ボ タ ン が 押 さ れ る
と 最 初 の 状 態 に 戻 る。 BCD- ス イ ッ チ の 値 が 0,4,8,C の と き は 別 の パ タ ー ン に 切
り 替 わ る よ う に な っ て お り、 そ の パ タ ー ン の 数 字 +3 ま で は ス ラ イ ド の 速 度 が 速
く な る よ う に な っ て い る。
15
GLCD 表 示 機 で は も う ひ と つ の プ ロ グ ラ ム が 存 在 し て お り、 ま ず 3 ペ ー ジ の
D7 ラ イ ン の 一 番 左 か ら 1 つ の 点 が 右 上 が り に 増 え て い き、 0 ペ ー ジ の D0 ラ イ
ン に 到 達 す る と 今 度 は 右 下 が り に 増 え て い き、 ま た 3 ペ ー ジ の D7 ラ イ ン に 到 達
す る と 右 上 が り に 増 え て い く と い う も の で あ る。 点 が 最 右 に 到 達 す る と 左 か ら そ
の 状 態 で ま た 増 え て い く。 こ の と き 縦 の ラ イ ン の 他 の 点 は 消 え る よ う に な っ て い
る。 実 際 の 表 示 の 様 子 を 以 下 の 写 真 :3-3-4 に 示 す。
写 真 :3-3-4. 実 際 の 表 示 の 様 子
写 真 :3-3-4 の と お り 三 角 波 形 の よ う な 表 示 が 行 わ れ、 読 み 込 む デ ー タ を 与 え
て や れ ば 動 く 波 形 を 表 示 さ せ る こ と も 可 能 で あ る。
最 終 作 品 で は こ の GLCD 表 示 機 の プ ロ グ ラ ム の 関 数 を 使 用 す る た め こ こ で 今 回
搭 載 し た プ ロ グ ラ ム の 一 部 を 解 説 す る。
ま ず、 write1byte と い う 関 数 が あ る。 こ れ は 核 と な る 関 数 で あ り、 デ ー タ を
送 り 出 す た め の 関 数 で あ る。 以 下 に そ の プ ロ グ ラ ム を 示 す。
16
1
void write1byte(BYTE data,BYTE operation,BYTE channel)
2
{
3
if(channel > 2){
4
PORTA = 0x0C; //channel が 2 よ り 大 き い の で CS1,CS2 共
// に 1
5
return;
6
}
7
if(channel == 1)PORTA = 0x08; //CS1 を 選 択
8
else if(channel == 2)PORTA = 0x04; //CS2 を 選 択
9
else PORTA = 0;
10
if(operation == COMMAND)bRA4 = 0; // デ ー タ が 制 御 コ マ ン ド
// で あ る た め A0 を 0 に す る。 COMMAND は 0 で 定 義 さ れ て い る。
11
else if(operation == DATA)bRA4 = 1; // デ ー タ が 表 示 デ ー タ
// で あ る た め A0 を 1 に す る。 DATA は 1 で 定 義 さ れ て い る。
12
else return;
13
bRA0 = 1; //E を High に す る
14
PORTB = data; //E を H→L に す る こ と に よ っ て 読 み 込 ま れ る
15
16
bRA0 = 0; //E を Low に す る
}
次 に、 writeLCD と い う 関 数 を 解 説 す る。 こ れ は ペ ー ジ 毎 に 決 め ら れ た
パ タ ー ン を 表 示 す る た め の 関 数 で あ る。 以 下 に そ の プ ロ グ ラ ム を 示 す。
1
void writeLCD(BYTE pat[],BYTE channel)
2
{
3
BYTE i,j;
4
if(channel > 2)return;
5
write1byte(0xC0,COMMAND,channel); //1 行 目 か ら 表 示 開 始、
//0xC0~0xDF ま で 設 定 可 能
6
for(i = 0;i < 4;i++){
7
write1byte(0,COMMAND,channel);//1 列 目 か ら 表 示 開 始、
//0x00~0x4F ま で 設 定 可 能
8
write1byte(0xB8 + i,COMMAND,channel); //iペ ー ジ 選 択
9
for(j = 0;j < 61;j++)
10
write1byte(*(pat + (WORD)i * 61 + j,DATA,channel);
11
12
}
}
17
次 に、 write1data と い う 関 数 を 解 説 す る。 こ れ は 2 つ め の プ ロ グ ラ ム を 組 む
際 に 使 用 し た も の で あ り、 指 定 し た ペ ー ジ に デ ー タ を 送 る 関 数 で あ る。 以 下 に そ
の プ ロ グ ラ ム を 示 す。
1
void write1data(BYTE data,BYTE row,BYTE channel)
2
{
3
write1byte(0xB8 + row,COMMAND,channel); // ペ ー ジ 選 択
4
5
write1byte(data,DATA,channel);
}
最 後 に、 write1line と い う 関 数 を 解 説 す る。 こ れ は write1data を 使 用 し て
1 列 ご と に デ ー タ を 送 っ て い く 関 数 で あ る。 以 下 に そ の プ ロ グ ラ ム を 示 す。
1
void write1line(BYTE address,BYTE retu,BYTE pat)
2
{
3
BYTE panel,ichi;
4
if(address > 60){
5
ichi = address – 61;
6
panel = 2;
7
}else{
8
ichi = address;
9
panel = 1;
10
}
11
write1byte(ichi,COMMAND,panel); //ichi 列 目 か ら 表 示 開 始
12
if(retu == 0) write1data(pat,0,panel);
13
else write1data(0,0,panel);
14
write1byte(ichi,COMMAND,panel);
15
if(retu == 1) write1data(pat,1,panel);
16
else write1data(0,1,panel);
17
write1byte(ichi,COMMAND,panel);
18
if(retu == 2) write1data(pat,2,panel);
19
else write1data(0,2,panel);
20
write1byte(ichi,COMMAND,panel);
21
if(retu == 3) writ1data(pat,3,panel);
22
else write1data(0,3,panel);
23
}
18
こ の 関 数 の retu と pat は 複 雑 に 求 め て い る た め 以 下 に 詳 細 を 示 す。
1
temp = (atai-1)/8; //atai は 1~32 の 範 囲 で 変 化 す る
2
retu = 3-temp; //atai が 1~8 の と き retu は 0,9~16 の と き 1
//17~24 の と き 2,25~32 の と き 3 と な る
3
4
temp = 7-((atai-1)&7); //&7 で 下 位 3 ビ ッ ト を と る
pat = 1 << temp;
atai が 1,2~7,8 と 増 え て い く と pat は 128,64~2,1 と 減 っ て い く。
19~16,17~24,25~32 の 時 も pat は 同 様 の 変 化 を す る。 こ れ ら の 1 ビ ッ ト だ け
1 の 数 字 を 使 っ て 点 が 右 上 が り に 増 え て い く、 も し く は 右 下 が り に 減 っ て い く 様
を 表 現 し て い る。
19
第 4 章 D 級 ア ン プ の 原 理 と PIC を 用
い た 設 計 指 針
4-1. D 級 ア ン プ の 原 理
音 声 な ど の 信 号 は、 電 圧 が 時 間 と と も に 連 続 的 に 変 化 す る の で ア ナ ロ グ 信 号 と
呼 ば れ る。 例 と し て、 音 楽 CD を CD プ レ イ ヤ ー で 再 生 す る と、 交 流 ア ナ ロ グ 信
号 が 出 る。 こ の 信 号 を ス ピ ー カ で 聞 く た め に は、 パ ワ ー ・ ア ン プ で 増 幅 す る 必 要
が あ る。 入 力 ア ナ ロ グ 信 号 を ア ナ ロ グ 信 号 の ま ま の 形 で 増 幅 す る パ ワ ー ・ ア ン プ
を リ ニ ア ・ ア ン プ と い う。 リ ニ ア ・ ア ン プ の 場 合 ト ラ ン ジ ス タ の 増 幅 方 式 が
AB 級、 も し く は A 級 で あ る た め 発 熱 や 効 率 の 面 で 問 題 が あ る。
一 方、 ア ナ ロ グ 信 号 を デ ィ ジ タ ル 信 号 に 変 換 し て デ ィ ジ タ ル 的 な 動 作 を 行 う パ
ワ ー ・ ア ン プ を D 級 ア ン プ と い う。 こ ち ら は、 効 率 も 良 く、 発 熱 も 小 さ い が、 音
質 が 良 く な い と い う 課 題 が あ る。 し か し、 中 に は 音 質 の 問 題 を 改 善 し た D 級 ア ン
プ も 存 在 す る。 こ の ア ン プ の 高 効 率 の 要 因 は ア ン プ 全 体 が 消 費 す る 電 力 を ほ と ん
ど 消 費 で き る 電 力 ス イ ッ チ 回 路 の 動 作 の さ せ か た に あ る。 こ の 電 力 ス イ ッ チ 回 路
部 を 構 成 す る MOSFET は、 ON か OFF の 2 つ の 状 態 し か と ら な い。 ON の と き は
ド レ イ ン 電 流 が 流 れ る が ド レ イ ン - ソ ー ス 間 の 電 圧 が 0V な の で こ の 二 つ を 掛 け
て も 損 失 は ゼ ロ、 OFF の と き は ド レ イ ン - ソ ー ス 間 に 電 圧 が 加 わ る が、 ド レ イ ン
電 流 が 0A な の で こ ち ら も 損 失 は ゼ ロ で あ る。 こ の よ う に 原 理 的 に は 電 力 ス イ ッ
チ 回 路 の 損 失 は 0W な の で あ る。 こ の 電 力 ス イ ッ チ 回 路 が 必 要 と す る 2 値 の 駆 動
信 号 を 生 成 す る に は、 振 幅 が 連 続 し て い る 入 力 信 号 を H と L に 変 換 す る PWM 回 路
が 必 要 に な り、 欠 か せ な い の で あ る。
4-2. PIC を 用 い た D 級 ア ン プ を 構 成 す
る 際 に 利 用 す る 内 臓 モ ジ ュ ー ル に つ い
て
D 級 ア ン プ を 構 成 す る に は ま ず ア ナ ロ グ を デ ジ タ ル に 変 換 す る A/D 変 換 機 能 を
利 用 す る 必 要 が あ る。 PIC16F873A で A/D 変 換 を 実 現 す る に は ADCON0 レ ジ ス タ
と ADCON1 レ ジ ス タ を 用 い る 必 要 が あ る。 以 下 の 図 :4-2-1 に ADCON0 レ ジ ス タ、
図 :4-2-2 に ADCON1 レ ジ ス タ の 構 成 を 示 す。
20
図 :4-2-1.ADCON0 レ ジ ス タ の 構 成
図 :4-2-2.ADCON1 レ ジ ス タ の 構 成
ADCS1 と ADCS0 は A/D 変 換 ク ロ ッ ク の 設 定 を 行 う。
ADCS2 = 0 の と き ADCS1 と ADCS0 の 値 が
00 = Fosc/2
01 = Fosc/8
10 = Fosc/32
11 = Frc( 内 部 RC 発 振 )
ADCS2 = 1 の と き ADCS1 と ADCS0 の 値 が
00 = Fosc/4
01 = Fosc/16
10 = Fosc/64
11 = Frc( 内 部 RC 発 振 )
CHS2,CHS1,CHS0 は チ ャ ン ネ ル 指 定 を 行 う。 PIC で ア ナ ロ グ を デ ィ ジ タ ル 変 換
す る と き は、 A/D 変 換 回 路 が 1 組 し か な い の で 一 度 に 1 チ ャ ン ネ ル 分 し か 変 換 す
る こ と が で き な い。 し た が っ て、 変 換 を す る 都 度、 ど の チ ャ ン ネ ル に 対 し て 実 行
す る か を 指 定 す る 必 要 が あ る。
000 = CH0(RA0)
001 = CH1(RA1)
010 = CH2(RA2)
011 = CH3(RA3)
100 = CH4(RA5)
101 = CH5(RE0)
110 = CH6(RE1)
111 = CH7(RE2)
21
ADON を 「 1 」 に す る と A/D 変 換 使 用 開 始 に な り GO/DONE を 「 1 」 に す る と
A/D 変 換 を 開 始 す る。 変 換 が 完 了 す る と 自 動 的 に 「 0 」 に リ セ ッ ト さ れ る。
PIC16F873A の A/D 変 換 機 は 10 ビ ッ ト の 分 解 能 を も っ て お り、 こ の 変 換 結 果
の 格 納 に は ADRESH と ADRESL と い う ふ た つ の レ ジ ス タ を 用 い る。 ADFM を
「 1 」 に す る と 右 詰 め で 格 納 が 行 わ れ る。 ADFM を 「 0 」 に す る と 左 詰 め で 格 納
が 行 わ れ る。 こ の 様 子 を 以 下 の 図 :4-2-3 に 示 す。
図 :4-2-3.A/D 変 換 結 果 格 納 方 法
通 常 で は 右 詰 め で 格 納 す る が、 上 位 8 ビ ッ ト だ け で 十 分 な 場 合 は 左 詰 め で 格 納
し、 ADRESH の 値 だ け を 使 用 す る こ と も あ る。
PCFG3~0 は ア ナ ロ グ 入 力 ポ ー ト の 使 い 方 を 指 定 す る も の で AN0,AN1,AN3 を ア ナ
ロ グ 入 力 に す る た め に は 「 0100 」 に す る 必 要 が あ る。
次 に、 PWM モ ー ド に つ い て 記 載 す る。
PWM と は Pulese Width Modulation の こ と で パ ル ス 幅 変 調 の 意 味 を 持 つ。 基
本 的 な 原 理 は、 周 期 を 一 定 に し て、 パ ル ス の 「 1 」 と 「 0 」 の 割 合 を 可 変 し て、
通 電 す る 時 間 の 平 均 エ ネ ル ギ ー を 可 変 制 御 し よ う と す る も の で あ る。 こ の 「 1 」
の 区 間 の 割 合 を 「デ ュ ー テ ィ」 と 呼 ぶ。
22
PWM の 出 力 パ ル ス は PR2 レ ジ ス タ に 一 定 の 値 を 設 定 す る こ と で メ イ ン の 周 期 を
決 定 す る。 こ の PR2 と TMR2 の 上 位 8 ビ ッ ト は 常 に コ ン パ レ ー タ で 比 較 さ れ て い
る。 両 者 の 値 が 一 致 す る と コ ン パ レ ー タ か ら の 出 力 で TMR2 は 0 ク リ ア さ れ、 同
時 に CCPx ピ ン の 出 力 は 「 High 」 に セ ッ ト さ れ る。 TMR2 は 再 度 0 か ら カ ウ ン
ト し 直 し、 ま た PR2 と 同 じ 値 に な る と 0 ク リ ア さ れ る。 こ う し て、 一 定 周 期 ご と
に CCPx ピ ン 出 力 が High に セ ッ ト さ れ る こ と に な る。 さ ら に こ の 一 致 信 号 で、
デ ュ ー テ ィ を 設 定 す る DCx レ ジ ス タ の 内 容 が、 デ ュ ー テ ィ レ ジ ス タ CCPRxH に コ
ピ ー さ れ、 デ ュ ー テ ィ が 初 期 化 さ れ る。 こ こ で 転 送 さ れ る DCx レ ジ ス タ の 中 身 は、
CCPRxL レ ジ ス タ に CCPxCON で 設 定 で き る 2 ビ ッ ト が 付 加 さ れ た 10 ビ ッ ト 長 の
も の で あ る。 CCPRxH と TMR2(10 ビ ッ ト ) も 常 時 比 較 さ れ て お り、 一 致 す る と 比
較 器 の 出 力 で CCPx ピ ン の 出 力 が 「 Low 」 に リ セ ッ ト さ れ る。 従 っ て、 PR2 よ
り CCPRxH の 値 が 小 さ け れ ば、 周 期 の 途 中 で CCPx の 出 力 が High か ら Low に 変
化 す る こ と に な る。 そ し て 周 期 の 最 初 で ま た High に 戻 る の で、 CCPx 出 力 は
High と Low を 一 定 周 期 で 繰 り 返 す こ と に な る。 PR2 を 一 定 の 値 に し て お い て、
Dcx レ ジ ス タ の 値 を 可 変 に す れ ば、 デ ュ ー テ ィ が 自 由 に 設 定 で き、 こ れ で PWM が
実 現 で き る。 こ の PWM モ ー ド を 使 用 す る た め に は CCPxCON レ ジ ス タ の CCPxM3,
CCPxM2 を 「 11 」 に す れ ば よ い。 CCPxX,CCPxY で は CCPRxL レ ジ ス タ に 付 加 で
き る 2 ビ ッ ト の 設 定 が で き る よ う に な っ て い る。 以 下 の 図 :4-2-4 に CCPxCON レ
ジ ス タ の 構 成 を 示 す。
図 :4-2-4.CCPxCON レ ジ ス タ の 構 成
23
第5章 ブ レ ッ ド ボ ー ド 型 プ ロ ト タ
イ プ の 製 作
5-1. 反 転 増 幅 部
実 際 の 回 路 の 試 作 型 と し て ブ レ ッ ド ボ ー ド 上 で 動 作 の 確 認 を 行 っ た。 ま ず、 パ
ソ コ ン か ら 出 力 さ れ て い る 0V を 中 心 と し た 正 弦 波 を 2.5V を 中 心 と し た 正 弦 波
に 変 形 す る た め に 以 下 の 回 路、 図 :5-1-1 を 製 作 し た。
図 :5-1-1. 反 転 増 幅 回 路
オ ペ ア ン プ 部 に は LMC662 を 用 い た。 信 号 の 発 生 に は テ ス ト 信 号 発 生 ソ フ ト
「 Wave gene 」 を 使 用 し た。 こ の 図 で は 増 幅 倍 率 は R5/R1 = 1 よ り 1 倍 の 増 幅 率
と な っ て い る。 ま た +Input に は 5V を 10k と 10k で 抵 抗 分 割 し た 2.5V が 入 っ
て い る。 こ こ で 2.5V を 基 準 と し た 理 由 は PIC に は 5V~0V の 電 圧 し か か け る こ と
が で き な い た め で あ る。 信 号 発 生 の 様 子 を 以 下 の 図 :5-1-2 に、 Vin と Vout を
オ シ ロ ス コ ー プ で 測 定 し た も の を 以 下 の 写 真 :5-1-1 に 示 す。
24
図 :5-1-2.Wavegene で の 信 号 発 生 の 様 子
写 真 :5-1-1.1 倍 の 反 転 増 幅 の 様 子
25
写 真 :5-1-1 は 1V/div で 測 定 し た も の で あ る。 黒 の ラ イ ン は 0V ラ イ ン で 赤
の ラ イ ン は 2.5V ラ イ ン で あ る。 こ の 写 真 を 見 て 分 か る と お り 1 倍 の 反 転 が 起 こ っ
て お り、 2.5V を 中 心 と し た 信 号 波 形 に な っ て い る。
次 に、 1 倍 の 増 幅 で は 5V~0V を フ ル に 使 え て い な い の で R5 を 18kΩ に 変 え て
倍 率 を 1.8 倍 に し た。 こ の 波 形 を オ シ ロ ス コ ー プ で 表 示 し た も の を 以 下 の 写 真 :
5-1-2 に 示 す。
写 真 :5-1-2.1.8 倍 の 反 転 増 幅 の 様 子
写 真 :5-1-2 も 1V/div で 測 定 し た も の で、 白 の ラ イ ン は 5V ラ イ ン で あ る。
こ の 写 真 を 見 て 分 か る と お り Vout は 2.5V を 中 心 と し た ま ま、 波 形 の 振 幅 が 増
幅 し て お り、 5V~0V を ほ ぼ フ ル に 使 え て い る。
26
5-2. PIC16F88 を 用 い た A/D 変 換 ,PWM モ ー
ド の 実 験
次 に、 Pic16F88 を 用 い て A/D 変 換 と PWM モ ー ド の 実 験 を 行 っ た。 Pic16F88
は Pic16F873A と 同 じ く A/D 変 換 機 能 と、 PWM モ ー ド を 内 臓 し て い る。
1.8 倍 に 増 幅 さ れ た 信 号 は Pic16F88 の RA0 ピ ン に 入 力 し て、 出 力 は PWM で さ
れ る 必 要 が あ る の で CCP1 で あ る RB3 ピ ン か ら と っ た。 主 要 な プ ロ グ ラ ム は 以 下
の と お り で あ る。
1
ANSEL = 0; //AN0 の み ア ナ ロ グ と す る
2
ADCON1 = 0; // 左 詰 め ,ADCS2 = 0
3
ADCON0 = 0x81; //Fosc/32,CH0(RA0)
4
CCP1CON = 0x0C; //PWM モ ー ド
5
T2CON = 0x04; // タ イ マ ー 2 オ ン , ポ ス ト ス ケ ー ラ 1:1
6
PR2 = 255;
7
bTMR2IF = 0; // 割 り 込 み フ ラ グ OFF
8
bTMR2IE = 1;
// 割 り 込 み 許 可
9
INTCON = 0x0C; //GIE = 1,PEIE = 1
// こ こ ま で メ イ ン
10
void interrupt()
11
{
12
if(bTMR2IF){ // 割 り 込 み フ ラ グ ON
13
CCPR1L = ADRESH;
14
bGO = 1;//GO/DONE ビ ッ ト 1,A/D 変 換 開 始
15
bTMR2IF = 0;
16
17
}
}
GIE を 1 に す る と 全 割 り 込 み が 許 可 さ れ、 PEIE を 1 に す る と 周 辺 割 り 込 み が
許 可 さ れ る。 Interrupt で タ イ マ ー 2 割 り 込 み を 行 い そ の 間 に A/D 変 換 を 行 っ て
い る。 こ の プ ロ グ ラ ム に よ り 生 じ た PWM 波 形 を 以 下 の 写 真 :5-2-1 に 示 す。
27
写 真 :5-2-1.PWM 波 形
CCPR1L に ADRESH を そ の ま ま 代 入 す る と ほ ぼ デ ュ ー テ ィ 50% の 波 形 が 得 ら れ
た。 こ の と き RB3 を ス ピ ー カ に つ な い で み た と こ ろ、 音 を 聞 く こ と が で き た。 こ
れ に よ り A/D 変 換 結 果 を PWM で 出 力 で き る こ と の 確 認 が で き た。
次 に、 ADRESH を 可 変 す る こ と に よ り デ ュ ー テ ィ に 変 化 が 起 こ る の か ど う か を
実 験 す る た め に CCPR1L に ADRESH を 代 入 す る 際、 ADRESH を 1/2 す る プ ロ グ ラ
ム を 組 ん だ。 以 下 が 変 更 箇 所 で あ る。
13
CCPR1L = ADRESH/2;
こ れ に よ り デ ュ ー テ ィ が ど う 変 化 し た か を 以 下 の 写 真 :5-2-2 に 示 す。
28
写 真 :5-2-2. デ ュ ー テ ィ 変 化 の 様 子
写 真 :5-2-1 と 写 真 :5-2-2 を 比 べ て 分 か る よ う に ADRESH を 1/2 に す れ ば
「 High 」 の 区 間 も 1/2 に る。 つ ま り、 ADRESH を 1/2 に す る と デ ュ ー テ ィ も
1/2 に な る こ と が 分 か る。 こ の と き、 RB3 に つ な い だ ス ピ ー カ か ら の 音 は 1/2 す
る 前 に 比 べ て 小 さ く な っ た。 こ の と こ か ら ADRESH を 調 整 す る こ と で 音 量 調 節 が
可 能 で あ る こ と が 分 か っ た。
5-3. ア ク テ ィ ブ フ ィ ル タ
次 に、 PWM 波 形 か ら ア ナ ロ グ 信 号 を 復 調 す る た め に ロ ー パ ス フ ィ ル タ の 実 験 を
行 っ た。 当 初 は コ イ ル L と コ ン デ ン サ C に よ る LC フ ィ ル タ で 実 験 を 進 め て い た
が、 コ イ ル を ど ん な 値 に 変 え て も う ま く い か な か っ た の で、 抵 抗 R と コ ン デ ン
サ C に よ る CR ア ク テ ィ ブ フ ィ ル タ を 使 用 す る こ と に し た。 こ の フ ィ ル タ の 回 路
図 を 以 下 の 図 :5-3-1 に 示 す。
29
図 :5-3-1.CR ア ク テ ィ ブ フ ィ ル タ
Vin に PWM 波 形 を 入 力 す る と Vout か ら は 復 調 さ れ た ア ナ ロ グ 信 号 が 出 力 さ れ
て 正 弦 波 が 表 示 さ れ る。 PWM 波 形 に 変 換 さ れ る 前 の ア ナ ロ グ 信 号 を Vo と し て 復
調 の 様 子 を 以 下 の 写 真 :5-3-1 に 示 す。
写 真 :5-3-1.PWM か ら の 復 調 の 様 子
30
こ の 波 形 は 1V/div で 測 定 し た も の で 黒 の ラ イ ン は 0V ラ イ ン で、 白 の ラ イ ン
は 5V ラ イ ン で 赤 の ラ イ ン は 2.5V ラ イ ン で あ る。 ノ イ ズ は あ る も の の、 Vout
は 復 調 元 で あ る 写 真 :5-1-2 の Vout( こ の 写 真 で は Vo と 表 記 ) と ほ ぼ 同 じ 波 形
が 得 ら れ て い る こ と が 分 か る。 こ の 波 形 は デ ュ ー テ ィ が 50% の と き の も の で、
デ ュ ー テ ィ を 25% に し た と き の 波 形 を 以 下 の 写 真 :5-3-2 に 示 す。
写 真 :5-3-2. デ ュ ー テ ィ 25% で の 復 調 信 号
上 の 写 真 よ り デ ュ ー テ ィ を 半 分 に す る と 復 調 さ れ る 波 形 は ピ ー ク が 5V の ま
ま 振 幅 が 半 分 に な る こ と が 分 か っ た。
5-4. ス ピ ー カ を 鳴 ら す た め の ア ン プ
の 選 定 と 概 要
復 調 さ れ た ア ナ ロ グ 信 号 は ア ン プ キ ッ ト を 通 し て ス ピ ー カ を 鳴 ら す よ う に し た。
ア ン プ キ ッ ト は 2 種 類 あ り、 LM380 を 用 い た 380 ア ン プ と、 LM386 を 用 い た
386 ア ン プ で あ る。 380 ア ン プ は 8V~22V 駆 動 で あ り、 最 初 は こ ち ら の ア ン プ を
昇 圧 し た 8V を 用 い て 駆 動 さ せ て い た。 し か し、 実 際 の 音 を 聞 く 際 に、 一 定 間 隔
の ノ イ ズ を 拾 う の で、 こ ち ら の 使 用 は 断 念 し た。
31
一 方 の、 386 ア ン プ は 4V~12V 駆 動 で あ り、 8V で は な く 5V で 駆 動 で き る。
実 際 の 音 を 聞 く と、 380 ア ン プ で 起 こ っ た ノ イ ズ は 起 き な か っ た。 よ っ て、
386 ア ン プ を 採 用 す る こ と に し た。 386 ア ン プ の 回 路 図 を 以 下 の 図 :5-4-1 に 示
し、 概 観 を 以 下 の 写 真 :5-4-1 に 示 す。
図 :5-4-1.LM386 ア ン プ 回 路
写 真 :5-4-1.LM386 ア ン プ の 概 観
32
こ の ア ン プ は 7 番 ピ ン と GND の 間 に 10μF の コ ン デ ン サ を 通 し て、 1 番 ピ ン と
8 番 ピ ン の 間 に も 10μF の コ ン デ ン サ を 通 す と、 ゲ イ ン ( 利 得 率 ) が 200 倍 に な
る。 こ れ ら の コ ン デ ン サ を 通 さ な い と き は ゲ イ ン は 20 倍 で あ り、 今 回 は 20 倍
の ゲ イ ン で 行 っ た。
5-5. 最 終 プ ロ ト タ イ プ
こ れ ま で は、 「 Wave gene 」 に よ る 単 調 な 音 で 実 験 を 行 っ て い た が、 実 際 に 流
す の は 音 楽 で あ る こ と を 想 定 し て CD プ レ イ ヤ ー に よ る 音 楽 を 入 力 信 号 と し て 実
験 を 行 っ た。 CD プ レ イ ヤ ー 等 か ら 出 る 信 号 の 電 圧 は 今 ま で 実 験 し て い る 1.5V
の 1/10 に も 満 た な い。 そ の た め、 反 転 増 幅 部 の 倍 率 を 20k/2k の 10 倍 に し
た。 ま た、 CD プ レ イ ヤ ー か ら の 音 楽 を ア ン プ を 通 し て 聞 い て み る と か な り の ノ
イ ズ を 拾 っ た。 そ こ で、 8V 昇 圧 部 と 5V 降 圧 部 に コ ン デ ン サ を 加 え、 実 際 の 耳
で 聞 き な が ら コ ン デ ン サ の 値 を 変 え て い っ た と こ ろ、 8V 昇 圧 部 に は 47μF 、
5V 降 圧 部 に は 470μF を 加 え る と 一 番 ノ イ ズ が と れ る と い う 結 果 に な っ た。 以 下
の 図 :5-5-1 に 回 路 図 を、 写 真 :5-5-1 に 全 体 の 概 観 を 示 す。
写 真 :5-5-1. 最 終 プ ロ ト タ イ プ の 概 観
33
図 :5-5-1. 最 終 プ ロ ト タ イ プ の 回 路 図
34
第 6 章 PIC16F873A を 用 い た ア ナ ロ グ
ア ン プ 制 御 機 の 製 作
6-1. 概 要
PIC16F873A を 用 い た ア ナ ロ グ ア ン プ 制 御 機 を 最 終 作 品 と し た。 大 ま か な 仕 様
は 入 力 さ れ た 音 声 信 号 を 増 幅 し て PIC に 入 力 し て、 そ の デ ー タ を A/D 変 換 す る。
そ の デ ジ タ ル 値 を PWM モ ー ド で 出 力 さ せ ア ク テ ィ ブ フ ィ ル タ に 通 し、 ア ナ ロ グ 信
号 を 復 調 さ せ る。 復 調 し た ア ナ ロ グ 信 号 を ア ナ ロ グ ア ン プ に 通 し ス ピ ー カ を 鳴 ら
す も の で あ る。 ま た、 PIC に 入 力 さ れ た デ ー タ を 加 工 し て 音 量 調 整 や グ ラ フ ィ ク
液 晶 の 表 示 も 行 う。 以 下 の 写 真 :6-1-1,2,3 に 概 観 を 示 す。
写 真 :6-1-1. ア ナ ロ グ ア ン プ 制 御 機 の 概 観 ( 正 面 )
35
写 真 :6-1-2. ア ナ ロ グ ア ン プ 制 御 機 の 概 観 ( 右 側 面 )
写 真 :6-6-3. ア ナ ロ グ ア ン プ 制 御 機 の 概 観 ( 左 側 面 )
36
写 真 :6-1-1 の ト グ ル ス イ ッ チ が メ イ ン の ス イ ッ チ で、 青 い 3 個 の ボ タ ン は 左
か ら プ ロ グ ラ ム に よ る 音 量 ア ッ プ、 音 量 ダ ウ ン、 音 の 擬 似 反 転 と な っ て い る。 そ
の 上 の 2 個 の 可 変 抵 抗 は、 左 が 音 量 調 整、 右 が フ ィ ル タ の 調 整 で あ る。 グ ラ フ ィ
ッ ク 液 晶 の 左 の 2 個 の 可 変 抵 抗 は、 左 が 液 晶 の バ ッ ク ラ イ ト 調 整、 右 が コ ン ト ラ
ス ト 調 整 と な っ て い る。 写 真 :6-1-2 の つ ま み の 部 分 が ア ン プ の 音 量 調 整、 ジ ャ
ッ ク を 指 す 部 分 は 充 電 用 で あ る。 写 真 :6-1-1 の 入 力 用 コ ー ド 部 分 を CD プ レ イ
ヤ ー に 挿 し た 様 子 が 写 真 :6-1-3 で あ る。
6-2. 回 路 に つ い て
こ の 作 品 の 回 路 図 を 以 下 の 図 :6-2-1 に 示 す。
図 :6-2-1. ア ナ ロ グ ア ン プ 制 御 機 の 回 路 図
基 本 は 図 :5-5-1 と 同 じ で、 変 更 点 は オ ペ ア ン プ が 2 回 路 入 り の LMC662 か ら
4 回 路 入 り の LMC660 を 使 用 し た こ と に あ る。 R チ ャ ン ネ ル イ ン プ ッ ト と L チ
ャ ン ネ ル イ ン プ ッ ト を 別 々 に 読 み 込 ま せ る 方 式 に し た た め で あ る。 た だ し 実 際 は
モ ノ ラ ル 出 力 し か し て い な い。 PIC は P16F88 か ら P16F873A に 変 更 し て グ ラ
フ ィ ッ ク 液 晶 を 繋 い だ。 グ ラ フ ィ ッ ク 液 晶 を
駆 動 さ せ る ク ロ ッ ク は 74HC04 か
ら 発 生 さ せ る。 さ ら に プ ロ グ ラ ム 確 認 用 の ダ イ オ ー ド、 音 量 調 整 用 の 可 変 抵 抗、
37
3 個 の ボ タ ン を 繋 い だ。 書 き 込 み 用 に MCLR と 電 圧 の 間 に 10kΩ の 抵 抗 を は さ
み 電 圧 が 掛 か り 過 ぎ な い よ う に し た。 386 ア ン プ は ゲ イ ン 200 倍 と し た。 電 源 部
分 に は 充 電 可 能 な 電 池 1.2V を 2 本 使 用 し 2.4V と し、 充 電 用 の ジ ャ ッ ク を 指 す
部 分 を 配 置 し た。
6-3. プ ロ グ ラ ム の 流 れ
ま ず、 メ イ ン 関 数 で は タ イ マ 2 の 設 定 と A/D 変 換 用 レ ジ ス タ ,PWM モ ー ド の 設
定 を 行 う。 基 本 的 な 設 定 は 5-2 の も の と 同 じ だ が、 AN0,AN1,AN3 を ア ナ ロ グ 入 力
と し て 扱 う た め、
1
ADCON1 = 0x04;
と し た。 グ ラ フ ィ ッ ク 液 晶 に 常 に 表 示 さ せ る パ タ ー ン は こ の メ イ ン 関 数 で 設 定 す
る。 具 体 的 に は CS1 の 0 ペ ー ジ 部 分 を 完 全 に こ こ で 固 定 し、 CS2 の 0 ペ ー ジ 部 分
も こ こ で 固 定 す る が、 変 数 に よ っ て 変 化 す る よ う に な っ て い る。 While ル ー プ で
は 割 り 込 み か ら の 合 図 を も ら う と CS2 の 0 ペ ー ジ 部 分 を 変 化 さ せ る よ う に し た。
割 り 込 み 処 理 で は ボ タ ン が 押 さ れ て い る か ど う か の 確 認 を 行 い、 そ れ に 応 じ た
処 理 を さ せ る。 具 体 的 に は 音 量 ア ッ プ ボ タ ン が 押 さ れ て い れ ば 変 数 bairitu を プ
ラ ス し while ル ー プ に 合 図 を 送 る。 音 量 ダ ウ ン ボ タ ン が 押 さ れ て い れ ば 変 数
bairitu を マ イ ナ ス し while ル ー プ に 合 図 を 送 る。 こ の bairitu は 5~0 ま で 変 動
し、 こ の 値 に よ っ て 音 量、 表 示 パ タ ー ン を 決 定 す る。 擬 似 反 転 ボ タ ン が 押 さ れ て
い れ ば 変 数 hanten を 変 化 さ せ、 押 す た び に 1 と 0 を 行 き 来 す る。 こ bairitu
と hanten の 組 み 合 わ せ に よ り、 CCPR1L に ADRESH を ど の よ う に 代 入 す る か 決
定 す る。 そ し て、 こ れ ら の 処 理 が 完 了 す れ ば GO/DONE ビ ッ ト を 1 に し て A/D 変 換
を 開 始 す る。 そ の 後、 CCPR1L の 値 を bairitu の 値 に よ っ て 加 工 し た も の を 写
真 :3-3-4 の プ ロ グ ラ ム で 使 用 し た write1line 関 数 に 与 え て や る と 音 の 強 弱 に
応 じ た 波 形 が グ ラ フ ィ ッ ク 液 晶 に 表 示 さ れ る。
苦 労 し た 点 と し て、 当 初 は 固 定 パ タ ー ン の 表 示 も write1line で 行 っ て い た の
だ が 表 示 は う ま く い く が、 音 質 が 悪 く な る と い う 事 態 に お ち い っ て し ま っ た。 考
えられる原因としてパターンの表示を逐一行うことで割り込み処理の中で長い時
間 を 消 費 し て し ま い、 A/D 変 換 に 影 響 を 与 え て い る こ と が 挙 げ ら れ た。 そ こ で、
メ イ ン の 中 で パ タ ー ン の 表 示 を 行 う し か な く、 while に 合 図 を 送 る こ と に し た が、
ボ タ ン を 押 し て も 合 図 を う ま く 送 る こ と が で き ず パ タ ー ン の 変 化 が で き な か っ た。
そ こ で、 ボ タ ン を 押 す と 割 り 込 み を 中 止 さ せ る こ と に よ り、 よ う や く 音 質 と 表 示
の 両 立 が で き た。 ま た、 音 の 反 転 を 行 う た め に ビ ッ ト 反 転 し た ADRESH を
CCPR1L に 代 入 し て み た が 音 は 変 わ ら な か っ た。 そ こ で、 CCPR1L に 反 転 し た
ADRESH と そ の ま ま の ADRESH を 交 互 に 代 入 し て み た と こ ろ 音 に 変 化 が み ら れ た。
以 下 に 実 際 の プ ロ グ ラ ム を 記 載 し て 解 説 し て い く。
38
1
writeLCD(&pattern1L[0][0],1); //CS1 0 ペ ー ジ
2 onryou:if(otoflag == 1 && hanten == 0){ //while ル ー プ か ら 飛 ぶ
3
if(bairitu == 5)writeLCD(&pattern1R5[0][0],2);
//bairitu 4~1 省 略
4
if(bairitu == 0)writeLCD(&pattern1R0[0][0],2);
5
otoflag = 0;
6
}
7
if(otoflag == 1 && hanten == 1){ // 擬 似 反 転 用 表 示
8
if(bairitu == 5)writeLCD(&pattern2R5[0][0],2);
//bairitu 4~1 省 略
9
if(bairitu == 0)writeLCD(&pattern2R0[0][0],2);
10
otoflag = 0;
11
}
// 初 期 設 定 省 略
12
while(1){
13
if(timeflag == 1){ // 割 り 込 み か ら の 合 図 が 1
14
timeflag = 0;
15
otoflag = 1;
16
goto onryou; //2 行 目 に 飛 ぶ
17
18
}
}
// こ こ ま で メ イ ン
// こ こ か ら 割 り 込 み
19
20
if(bTMR2IF){
if(!bRA2){ // 音 量 ア ッ プ ボ タ ン が 押 さ れ て い る
21
Wait(10); // チ ャ タ リ ン グ 防 止 の た め 10msec 待 つ
22
if(!bRA2 && (bairitu <= 4)){ //bairitu は 5 ま で
23
Wait(500);
24
if(bRA2) bairitu++;// 押 し て 離 し た こ と を 認 識 す
// る ま で bairitu は 増 や さ な い、 こ う し な い と 一 気 に 増 え る
25
timeflag = 1; //while へ の 合 図
26
INTCON = 0; // 割 り 込 み 中 止
27
bTMR2IF = 0; // 割 り 込 み 中 止
28
29
}
}
// 音 量 ダ ウ ン ボ タ ン 省 略
39
30
if(!bRA5){// 擬 似 反 転 ボ タ ン が 押 さ れ て い る
31
Wait(10);
32
if(!bRA5 && (hanten == 0)){
33
Wait(500);
34
if(bRA5)hanten = 1; //hanten 0→1
35
timeflag = 1;
36
INTCON = 0;
37
bTMR2IF = 0
38
}
39
if(!bRA5 && (hanten == 1)){
//hanten = 0 に す る 以 外 同 じ な の で 省 略
40
if(hanten == 0){ 擬 似 反 転 OFF
41
if(bairitu == 5)CCPR1L = ADRESH+ ADRESH/2+ ADRESH/4;
//1.75 倍 の 音 量
42
if(bairitu == 4)CCPR1L = ADRESH + ADRESH/2;
//1.5 倍 の 音 量
43
if(bairitu == 3)CCPR1L = ADRESH;
//1 倍 の 音 量
44
if(bairitu == 2)CCPR1L = ADRESH/2;
//0.5 倍 の 音 量
45
if(bairitu == 1)CCPR1L = ADRESH/4;
//0.25 倍 の 音 量
46
if(bairitu == 0)CCPR1L = 0;
// 音 量 0
47
}
48
if(hanten == 1){ 擬 似 反 転 ON
49
if(bairitu == 5){
50
if(k < 1){
51
CCPR1L = ADRESH + ADRESH/2 + ADRESH/4;
52
k++;
53
}else{
54
CCPR1L = ~(ADRESH + ADRESH/2 + ADRESH/4);
55
// 反 転 代 入 と そ の ま ま 代 入 を 交 互 に 行 う
56
57
58
k = 0;
}
}// 以 降 の bairitu 省 略
40
59
bGO = 1; //A/D 変 換 開 始
60
temp = (atai-1)/8;
61
retu = 3-temp;
62
temp = 7-((atai-1)&7);
63
pat = 1 << temp;
64
write1line(address,retu,pat);
65
if(bairitu == 5)atai = CCPR1L/4-40;
66
//3-3 参 照
//atai は 1~32 ま で し か と れ な い の で 調 整 す る
// 以 下 bairitu 4~1 省 略
67
if(bairitu == 0)atai = 1;
// 一 番 下 に 1 本 線 だ け 表 示
68
address++;
69
if(address == 122)address = 0;
70
bTMR2IF = 0;
71
}
6-4. 実 際 の 使 用 に つ い て
最 後 に、 実 際 の 使 用 例 を 記 載 し て い く。 ま ず、 メ イ ン ス イ ッ チ を 入 れ る と 以 下
の 写 真 :6-4-1 の よ う な 画 面 が 表 示 さ れ る。
写 真 :6-4-1. ス イ ッ チ 投 入 後 の 様 子
41
こ の 写 真 の 表 示 は bairitu が 1 の 時 の 表 示 で あ り、 bairitu の 初 期 値 は 1 と し
て い る た め で あ る。 つ ま り、 ス イ ッ チ を 入 れ て す ぐ の 音 量 は ADRESH を 1/4 し た
音 量 で あ る。 真 ん 中 の 線 は 音 の 変 化 に 応 じ て 刻 々 と 変 わ っ て い く。 そ の 様 子 は 後
に 示 す。
次 に、 写 真 :6-4-1 の 状 態 か ら 音 量 ダ ウ ン ボ タ ン を 押 し た 様 子 を 以 下 の 写 真 :
6-4-2 に 示 す。
写 真 :6-4-2. 音 量 0 の 様 子
こ の 写 真 の よ う に 音 量 は 0 と な り、 bairitu が 0 に な る。 ADRESH の 値 を 読 み
込 ま な い た め、 音 は 一 切 聞 こ え な く な る。
こ れ ら の 2 枚 の 写 真 か ら 分 か る よ う に、 「オ ン リ ョ ウ」 と 表 示 さ れ て い る 部 分
は 変 化 し な い。 こ れ が 常 に 表 示 さ せ て い る パ タ ー ン で あ る。 そ の 右 の 数 字 の 部 分
は 変 数 に よ っ て 変 化 す る パ タ ー ン で あ る。
次 に、 実 際 に 音 楽 を 流 し て 波 形 が 変 化 し て い る 様 子 を 以 下 の 写 真 :6-4-3 に 示
す。
42
写 真 :6-4-3. 波 形 変 化 の 様 子
波 形 変 化 の 大 き さ は 音 量 を 上 げ る ほ ど 大 き く な る。
最 後 に、 擬 似 反 転 ボ タ ン が 押 さ れ た 様 子 を 以 下 の 写 真 :6-4-4 に 示 す。
写 真 :6-4-4. 擬 似 反 転 ボ タ ン が 押 さ れ た 様 子
こ の よ う に 数 字 の 隣 に 黒 丸 が 付 く よ う に な っ て お り、 こ の 状 態 で 擬 似 反 転 ボ タ
ン を 押 す と 黒 丸 が 消 え る よ う に な っ て い る。
43
第7章 今 後 の 展 開
と り あ え ず は 終 わ り を 告 げ た 今 回 の 最 終 作 品 だ が、 ま だ ま だ 改 良 の 余 地 は あ る
と 思 わ れ る。 2 つ の チ ャ ン ネ ル 入 力 を 得 な が ら、 1 つ し か 使 用 し て い な こ と は 回
路 を フ ル に 活 用 で き て い な い こ と に な る。 2 つ の チ ャ ン ネ ル を 同 時 に 出 力 し た ら
ど う な る か な ど は 気 に な る と こ ろ で あ る。 ま た、 プ ロ グ ラ ム 確 認 用 の ダ イ オ ー ド
は 確 認 用 で 終 わ ら せ る だ け で な く、 音 に 反 応 し て 光 ら せ る な ど で き た か も し れ な
い。 さ ら に、 RC1 に は 何 も 接 続 さ れ て い な い の で こ こ に 何 か 接 続 す る こ と も で き
る は ず で あ る。 プ ロ グ ラ ム で は 表 示 に 関 し て は、 モ ー ド 切 替 な ど を 用 意 し 表 示 を
分 か り や す く ユ ニ ー ク に で き た か も し れ な い。 音 に 関 し て は プ ロ グ ラ ム 的 に も 回
路 的 に も 値 を 変 え る こ と に よ っ て 色 ん な パ タ ー ン を 試 す こ と が で き、 最 良 音 を 考
え る こ と が で き る だ ろ う。 そ し て、 ア ン プ と し て の 特 性 評 価 が 時 間 の 関 係 上 で き
な か っ た 点 も 悔 や ま れ る。
44
第8章 ま と め ・ 感 想
今回設計・製作したアナログアンプ制御回路は入力された音楽をあまり違和感
な く 出 力 さ せ る こ と は で き て い る と 思 わ れ る。 こ こ ま で 辿 り 着 く ま で 色 々 な 試 行
錯 誤 を 行 っ て き た。 自 分 で 理 論 は あ っ て い る と 思 っ て い て も 実 際 の 結 果 は 意 図 し
な い こ と に な る こ と が よ く あ っ た が、 そ の 都 度 解 決 し て い く こ と に 喜 び を 感 じ て
い っ た。 特 に、 き れ い な 音 を 出 し 表 示 も 自 分 の 意 図 し た よ う に 表 示 さ れ る プ ロ グ
ラ ム を 発 見 で き た と き は か な り の 達 成 感 を 感 じ る こ と が 出 来 た。 ま た、 電 子 工 作
第一作目として製作した電子ルーレットのころから比べると製作技術と設計技術
も 随 分 上 達 し た も の だ と 感 じ て い る。 今 回 の 最 終 作 品 で は 製 作 面 に 関 し て は 大 き
な ミ ス な ど な く こ の 調 子 で 腕 を 磨 い て い き た い と 思 う。 こ れ ら 全 て の こ と が 自 分
の 身 に な っ た か と 思 う と 大 変 意 義 の あ る 研 究 生 活 で あ っ た。
45
参 考 文 献
[1] 『改 訂 版 電 子 工 作 の た め の PIC16F 活 用 ガ イ ド ブ ッ ク』
後 閑 哲 也 著 ( 技 術 評 論 社)
[2] 『改 訂 新 版 デ ィ ジ タ ル 回 路 の 設 計 入 門』
湯 山 俊 夫 著 (CQ 出 版 社)
[3] 『ト ラ ン ジ ス タ 技 術
2008 年 3 月 号 特 集 高 効 率 パ ワ ー ・ ア ン プ の 作 り 方
』
渡 辺 明 禎 著 (CQ 出 版 社)
46
謝 辞
本 研 究 な ら び に 卒 業 論 文 の 作 成 に あ た り、 終 始 熱 心 な 御 教 授 を 賜 り ま し た 高 知
工科大学工学部電子・光システム工学科 綿森 道夫准教授には心から深く御礼
申 し 上 げ ま す。 本 研 究 は 綿 森 道 夫 准 教 授 の お 力 が あ っ た か ら こ そ 成 し 得 る こ
と が 出 来 た と 言 っ て も 全 く 過 言 で は あ り ま せ ん。
ま た、 高 知 工 科 大 学 工 学 部 電 子 ・ 光 シ ス テ ム 工 学 科 在 学 中 に 御 指 導 賜 り ま し た
成 沢 忠 学 科 長 に は 心 か ら 感 謝 の 意 を 申 し 上 げ ま す。
そ し て、 高 知 工 科 大 学 工 学 部 電 子 ・ 光 シ ス テ ム 工 学 科 在 学 中 に 本 研 究 の 実 験 遂
行 や 学 生 生 活 面、 そ の 他 各 過 程 で 終 始 御 厚 意 と 御 協 力 を 頂 い た、 矢 野
・木村
正廣教授・神戸
政顕教授
宏教授・河東田 隆教授・真田 克教授・岩下 克教
授・橘 昌良教授・八田 章光教授・野中 弘二教授・星野 孝総准教授・山本
真行准教授・植田 和憲講師・杉田 彰久教育講師・高崎 敬雄教育講師・伊藤
基巳紀助手・安岡 文子秘書・中山 愛秘書の皆様には重ねて感謝の意を述べさ
せ て 頂 ま す。
最 後 に な り ま し た が 本 研 究 を 遂 行 す る に あ た り、 細 部 に ま で わ た り 御 助 言、 御
協 力 頂 き ま し た 電 子 ・ 光 シ ス テ ム 工 学 科 綿 森 研 究 室 の 前 田 進 氏、 伊 井 祐 輔 氏、
井 上 慎 也 氏、 上 田 哲 也 氏、 竹 村 幸 多 氏、 山 本 翔 一 氏 に も 心 か ら 御 礼 申 し
上 げ ま す。
47
付 録
-プ ロ グ ラ ム リ ス ト-
// ア ナ ロ グ を デ ジ タ ル に 変 換 し て PWM で 出 力
// 作 者 廣 瀬 信 哉
#include <ctype.h>
#include <P16F873a.h>
#include <PortBits.h>
#include <P16F873a_bits.h>
#include <Delays.h>
#include <datalib.h>
#define DATA 1
#define COMMAND 0
void writeLCD(BYTE pat[], BYTE channel);
void LCDclear(BYTE channel);
void write1byte(BYTE data, BYTE operation, BYTE channel);
void Interrupt();
void write1data(BYTE data, BYTE row, BYTE channel);
void write1line(BYTE address, BYTE retu, BYTE pat);
BYTE atai = 1, address = 0, retu, pat, temp, timeflag = 0, bairitu = 1;
BYTE hanten = 0, otoflag = 1, k = 0;
const BYTE pattern1L[][61] = {{0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x22,0x12,0x0A,
0x86,0xFF,0x02,0x00,0x00,0x00,0x00,0x82,0x82,0x84,
0x80,0x40,0x20,0x1C,0x00,0x00,0x00,0x00,0x0 F,0x00,
0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,
0xA8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x02,
0x82,0x83,0x82,0x42,0x3E,0x00,0x00,0x00,0x00,0x00,0x00}};
const BYTE pattern1R5[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x4F,0x89,0x89,0x89,0x89,0x71,0x00,
48
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
const BYTE pattern1R4[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x28,0x24,0x22,0xFF,0x20,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
const BYTE pattern1R3[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x42,0x81,0x89,0x89,0x89,0x76,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
const BYTE pattern1R2[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0xC2,0xA1,0x91,0x91,0x89,0x86,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
const BYTE pattern1R1[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x84,0x82,0xFF,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
const BYTE pattern1R0[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0x80,
0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x85,0x89,0x91,0xA1,0x7E,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} ;
49
const BYTE pattern2R5[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x4F,0x89,0x89,0x89,0x89,0x71,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00}};
const BYTE pattern2R4[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x28,0x24,0x22,0xFF,0x20,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00}};
const BYTE pattern2R3[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x42,0x81,0x89,0x89,0x89,0x76,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00}};
const BYTE pattern2R2[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0xC2,0xA1,0x91,0x91,0x89,0x86,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00}};
const BYTE pattern2R1[][61] = {{0x00,0x00,0x3C,0x00,0x3C,0x42,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,
0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x84,0x82,0xFF,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0x7E,0x7E,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00}};
void main(void)
{
50
ADCON1 = 0x04;
// 左 詰 め、 ADCS2 = 0
ADCON0 = 0x81;
// Fosc/32, CH0(RA0)
TRISB = 0x00; // ポ ー ト B 全 出 力
TRISA = 0xFF; // ポ ー ト A 全 入 力
TRISC = 0x00; // ポ ー ト C 全 出 力
bRC6 = 0;
bRC7 = 0;
write1byte(0xAF, COMMAND, 0); // 左 右 の LCD 表 示ON
LCDclear(0);
// LCD clear
writeLCD(&pattern1L[0][0],1);
onryou: if(otoflag == 1 && hanten == 0){
if(bairitu == 5) writeLCD(&pattern1R5[0][0],2);
if(bairitu == 4) writeLCD(&pattern1R4[0][0],2);
if(bairitu == 3) writeLCD(&pattern1R3[0][0],2);
if(bairitu == 2) writeLCD(&pattern1R2[0][0],2);
if(bairitu == 1) writeLCD(&pattern1R1[0][0],2);
if(bairitu == 0) writeLCD(&pattern1R0[0][0],2);
otoflag = 0;
}
if(otoflag == 1 && hanten == 1){
if(bairitu == 5) writeLCD(&pattern2R5[0][0],2);
if(bairitu == 4) writeLCD(&pattern2R4[0][0],2);
if(bairitu == 3) writeLCD(&pattern2R3[0][0],2);
if(bairitu == 2) writeLCD(&pattern2R2[0][0],2);
if(bairitu == 1) writeLCD(&pattern2R1[0][0],2);
if(bairitu == 0) writeLCD(&pattern1R0[0][0],2);
otoflag = 0;
}
CCP1CON = 0x0C;
// PWM モ ー ド
CCPR1L = 0;
T2CON = 0x04;
// タ イ マ ー 2 オ ン
PR2 = 255;
bTMR2IF = 0;
51
ポストスケーラ
1:1
bTMR2IE = 1;
INTCON = 0xC0;
// GIE = 1, PEIE = 1
while(1){
if(timeflag == 1){
timeflag = 0;
otoflag = 1;
goto onryou;
}
}
}
void writeLCD(BYTE pat[], BYTE channel)
{
BYTE i,j;
if(channel > 2)return;
write1byte(0xC0,COMMAND,channel); // 表 示 開 始 ア ド レ ス は0
for(i = 0; i < 1; i++){
write1byte(0,COMMAND,channel);
//0 カ ラ ム セ ッ ト
write1byte(0xB8 + i, COMMAND, channel);
// iペ ー ジ 選 択
for(j = 0; j < 61; j++)
write1byte(*(pat + (WORD)i * 61 + j),DATA,channel);
}
}
void write1byte(BYTE data, BYTE operation, BYTE channel)
{
if(channel > 2){
PORTC = 0xC1;
return;
}
if(channel == 1)PORTC = 0x81;
else if(channel == 2)PORTC = 0x41;
else PORTC = 0x01;
52
if(operation == COMMAND)bRC5 = 0;
else if(operation == DATA)bRC5 = 1;
else return;
bRC3 = 1;
//enable を ハ イ に す る
PORTB = data;
bRC3 = 0;
//enable を ロ ー に す る
}
void LCDclear(BYTE channel)
{
BYTE i,j;
if(channel > 2)return;
write1byte(0xC0,COMMAND,channel); // 表 示 開 始 ア ド レ ス は0
for(i = 0; i < 1; i++){
write1byte(0,COMMAND,channel);
//0 カ ラ ム セ ッ ト
write1byte(0xB8 + i, COMMAND, channel);
// iペ ー ジ 選 択
for(j = 0; j < 61; j++)write1byte(0, DATA, channel);
}
}
void write1data(BYTE data, BYTE row, BYTE channel)
{
write1byte(0xB8 + row, COMMAND, channel); //page select
write1byte(data, DATA, channel);
}
void write1line(BYTE address, BYTE retu, BYTE pat)
{
BYTE panel, ichi;
if(address > 60){
ichi = address – 61;
panel = 2;
}else{
53
ichi = address;
panel = 1;
}
write1byte(ichi, COMMAND, panel);
if(retu == 1) write1data(pat, 1, panel); else write1data(0, 1, panel);
write1byte(ichi, COMMAND, panel);
if(retu == 2) write1data(pat, 2, panel); else write1data(0, 2, panel);
write1byte(ichi, COMMAND, panel);
if(retu == 3) write1data(pat, 3, panel); else write1data(0, 3, panel);
}
void Interrupt()
{
if (bTMR2IF){
if(!bRA2){
Wait(10);
if(!bRA2 && (bairitu <= 4)){
Wait(500);
if(bRA2) bairitu++;
timeflag = 1;
INTCON = 0;
bTMR2IF = 0;
}
}
if(!bRA4){
Wait(10);
if(!bRA4 && (bairitu >= 1)){
Wait(500);
if(bRA4) bairitu--;
timeflag = 1;
INTCON = 0;
bTMR2IF = 0;
}
}
if(!bRA5){
Wait(10);
if(!bRA5 && (hanten == 0)){
54
Wait(500);
if(bRA5) hanten = 1;
timeflag = 1;
INTCON = 0;
bTMR2IF = 0;
}
if(!bRA5 && (hanten == 1)){
Wait(500);
if(bRA5) hanten = 0;
timeflag = 1;
INTCON = 0;
bTMR2IF = 0;
}
}
if(hanten == 0){
if(bairitu == 5) CCPR1L = ADRESH + ADRESH / 2 + ADRESH / 4;
if(bairitu == 4) CCPR1L = ADRESH + ADRESH / 2;
if(bairitu == 3) CCPR1L = ADRESH;
if(bairitu == 2) CCPR1L = ADRESH / 2;
if(bairitu == 1) CCPR1L = ADRESH / 4;
if(bairitu == 0) CCPR1L = 0;
}
if(hanten == 1){
if(bairitu == 5){
if(k < 1){
CCPR1L = ADRESH + ADRESH / 2 + ADRESH / 4;
k++;
}else{
CCPR1L = ~(ADRESH + ADRESH / 2 + ADRESH / 4);
k = 0;
}
}
if(bairitu == 4){
if(k < 1){
CCPR1L = ADRESH + ADRESH / 2;
k++;
}else{
55
CCPR1L = ~(ADRESH + ADRESH / 2);
k = 0;
}
}
if(bairitu == 3){
if(k < 1){
CCPR1L = ADRESH;
k++;
}else{
CCPR1L = ~ADRESH;
k = 0;
}
}
if(bairitu == 2){
if(k < 1){
CCPR1L = ADRESH / 2;
k++;
}else{
CCPR1L = ~ADRESH / 2;
k = 0;
}
}
if(bairitu == 1){
if(k < 1){
CCPR1L = ADRESH / 4;
k++;
}else{
CCPR1L = ~ADRESH / 4;
k = 0;
}
}
if(bairitu == 0) CCPR1L = 0;
}
bGO = 1;
temp = (atai - 1) / 8;
retu = 3 – temp;
temp = 7 - ((atai - 1) & 7);
56
// 下 位 3 ビ ッ ト
pat = 1 << temp;
write1line(address, retu, pat);
if(bairitu == 5) atai = CCPR1L / 4 – 40;
if(bairitu == 4) atai = CCPR1L / 4 – 32;
if(bairitu == 3) atai = CCPR1L / 4 – 16;
if(bairitu == 2) atai = CCPR1L / 4;
if(bairitu == 1) atai = CCPR1L / 4 + 8;
if(bairitu == 0) atai = 1;
address++;
if(address == 122) address = 0;
bTMR2IF = 0;
}
}
57
Fly UP