Comments
Description
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