• 検索結果がありません。

,, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC (

N/A
N/A
Protected

Academic year: 2021

シェア ",, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC ("

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

[2012.04.02] 2 PIC 8 . • • • • . 1. . 1 (4/16, 6/ 4) • LED • 1 ( 4/17, 6/ 5) 2 (4/23, 6/11) • PIC LED • PIC 2 ( 4/24, 6/12) 3 (5/7, 6/18) • PIC • V1 3 ( 5/8, 6/19) 4 (5/14, 6/25) • V1 • V2 V1 V2 4 ( 5/15, 6/26) 5 (5/21, 7/ 2) • V2 V2 V2 ( 5/28, 7/ 9) 2. . • 40% 60% . • .

1

, LED,

LED 7 , LED . , . 1 LED , LED . • .

(2)

• ダイオードのピンは, 長い方が+側になるように接続する. • 抵抗を色々変えて, 電流を測定せよ (テスタを用いよ). ダイオードを発光させるには 5 ∼ 10 mA 程度が適当. • ブレッドボード上での部品の接続については下図を参考にせよ. F G H I J A B C D E 1 2 3 4 5 6 1 2 3 4 5 6 7 7 赤側に5Vを接続 青側に0Vを接続 同じ行の5ピンが同電位 同じ行(列)のピンが全て同電位 【課題 2】【課題 1】 の回路にスイッチを追加し, スイッチを押すと LED が点灯するようにせよ. • スイッチのピン配置は下図の通り. 【課題 3】セグメント表示 LED を配線し, 色々な数字を点灯させてみよ. • セグメント表示 LED には, 7 つの LED が収容されており, その組合せで数字等を表示できる. ピン配置は下 図の通り. • 基本的に, 7 つの LED が入っているだけ. (抵抗を通じて) 0V 接続されたピンに対応するセグメントの LED が点灯する. VCC には 5V を接続する. • 抵抗は 7 つの LED それぞれに対して必要になる. a g d f b e c dp VCC f g e d a b c dp VCC 【課題 4】セグメントデコーダ (7447) とスイッチ 4 個を用いて, 4 ビットの 2 進数の入力に対する数が, セグメント 表示 LED に表示されるようにせよ. • セグメントデコーダは, 4 ビットの 2 進数を入力して, セグメント表示 LED の各セグメントの点灯信号を生 成する組合せ回路.

(3)

• ピン配置と真理値表は下の通り. (D, C, B, A) が 4 ビットの入力で, D が最上位ビット. 出力は負論理 (点灯 させたいセグメントに対する出力が 0 になる) となっている. 14 13 12 11 10 8 GND f 9 1 2 3 4 5 6 7 16 15 g a b c d e Vcc A D RBI RBO LT C B

7447

D C B Aa b c d e f g 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1 0 2 0 0 1 0 0 1 0 0 0 1 1 3 0 0 0 0 1 1 0 0 1 0 0 4 1 0 0 1 1 0 0 0 1 0 1 5 0 1 0 0 1 0 0 0 1 1 0 6 1 1 0 0 0 0 0 0 1 1 1 7 0 0 0 1 1 1 1 1 0 0 0 8 0 0 0 0 0 0 0 1 0 0 1 9 0 0 0 1 1 0 0 • LT, RBI, RBO は使用しない. 何も接続しないか, 5V に接続する. • スイッチは, 離した状態で 0 で, 押すと 1 になるようにせよ. 回路図は, 例えば次の左の様にすればよい (これ を A∼D の各入力につける). また、離した状態で 1 で, 押すと 0 になるようにするには,回路図は右の様に すればよい Vcc A GND Vcc GND A 【課題 5】【課題 4】 で作成した回路に, 入力されている 2 進数が素数かどうかを判定する組合せ回路を設計して 付加し, 素数のときに LED が 1 個点灯するようにせよ. 設計には 2 入力 NAND のみを用いよ. • 74LS00 (2 入力 NAND ゲートが 4 個収容されている IC) を用いよ. ピン配置は下図の通り. • まず, 真理値表を作成し, カルノー図で簡単化せよ. • 出力は負論理 (すなわち, 出力 0 で LED を点灯) となるようにせよ. – 使用する 74LS00 の出力側の電流容量は, 出力が 0 の場合には 8 mA あるが, 出力が 1 の場合には 0.4 mAしかなく, 正論理では LED を点灯させるに十分な電流を供給できないためである. – 入力が素数の時に 0 となる論理回路を設計してもよいし, 入力が素数の時に 1 となる論理回路の出力を NOTで反転させても良い. 回路が小さくなる方を選べばよい. • 入力は 10 進数で 0 から 9 までしか入力されないと想定する. 10 進数で 10 以上の入力は don’t care とするこ とにより, 回路を極力簡単にせよ.

(4)

14 13 12 11 10 8 GND Vcc 9 1 2 3 4 5 6 7

74LS00

レポート 1 【課題 1】∼【課題 5】の実験結果とそれに対するコメント, 感想を簡単にまとめよ.

【第 2 週】 PIC によるスイッチと LED の制御

8ビットマイコン PIC により, LED の点灯制御やスイッチの読み取りを行う方法を知る. 次に, セグメ ント表示器を用いて 2 桁のセグメント表示器に PIC の計算結果を表示させる.

PICとは “Peripheal Interface Controller” の略で, 周辺に接続される機器を制御するために開発された「マイクロ コントローラ」である. 機能や性能は高くないが, 周辺機器の制御に便利な機能を内蔵している. 構造が簡単で, 命令 数はわずか 35 である. プログラムメモリーとして EEPROM 内蔵のため, 書き込み後すぐ動作させることができる. 【課題 6】PIC により LED の点滅を行う. 1. PIC (PIC16F84)を動かすための配線を行う. • ピン配置と動作に必要な配線は下図の通り. – GNDは 0V に, Vcc は 5V に接続する. – MCLRは通常は 5V に接続する. 0V にすると PIC がリセットされる.

– セラロック発振子は 3 ピンのうち中央のピンを 0V に接続し, 外側の 2 ピンを PIC の OSC1 と OSC2 に接続する (この 2 ピンは対称なので, どちらをどちらに接続してもよい).

2. LEDを RB1 に接続する.

(5)

• RB1 の出力が 0V になると点灯するように配線せよ. 3. パソコンの準備をする. • PIC ライタをパソコンに接続し, パソコンを起動 (再起動) する. 4. 付録 1 の LED 点灯プログラム timer.asm をアセンブルする. • プログラムは C:Y=picY=timer.asm にある. 下記のフローチャートの様な簡単なもの. • アセンブルはソフト MPLAB IDE により行う. – MPLAB IDEを起動する (デスクトップのアイコンをダブルクリック). – [Project]→ [Project Wizard] を選択し,[次へ] を押す.

– Step One:では,Device: に PIC16F84 を選択して,[次へ] を押す.

– Step Two:では,Active Toolsuite: に Microchip MPASM Toolsuite を選択し,[次へ] を押す. – Step Three:では,Project Name: に適当な名前 (kadai6 等) を,Project Directory: に C:Y=pic,を入

力し [次へ] を押す.

(注意) Project Name に漢字 (全角文字) や極端に長い (50 文字以上) 名前を指定すると,アセンブル できない.

– Step Four:では,ウィンドウ左のファイルリストから,C:Y=picY=timer.asmを選択し,[Add >>] を押す.ウィンドウ右に選択したファイル (timer.asm) が表示されていることを確認し,[次へ] を押す.

– [完了] を押す.

– [Project]→ [Make] を選択し (あるいは、F10 を押し),アセンブルする.

– Outputウィンドウに,”BUILD SUCCEEDED” と表示されていることを確認する. • アセンブルの結果 timer.hex ができる.

• 課題 6 では必要ないが,以降の課題では,以下の操作も必要となる.

– 一旦プロジェクト (kadai6) を閉じた後,再度このプロジェクトを開くには,[Project] → [open] を選 択し,プロジェクトファイル (c:Y=picY=kadai6.mcp)を選択して,[開く] を押す.

– ソースファイル timer.asm を編集するには,プロジェクトウィンドウ (kadai6.mcw) の kadai6.mcp → Source Files → timer.asm をダブルクリックする.

– ソースファイルに誤りがあると,アセンブル時に,Output ウィンドウに ”BUILD FAILED” と表示 される.この時、Output ウィンドウの”ERROR” 行をダブルクリックすると,ソースファイルが表 示され,カーソルがエラーの行に移動する.エラーメッセージを良く読み,エラー原因を考えて, ソースファイルを修正し,再度アセンブルする.

5. timer.hexを PIC ライターで PIC に書き込む. • 書き込みは PICpro により行う.

– PICproを起動する.

(6)

– Windowの表示に従い PIC ライターに PIC を乗せ, レバーを降ろして固定する.

– [Load]をクリックし,c:Y=picY=timer.hexを開く.timer.hex の内容が表示される. – [Program]をクリックすると,現在セットしている PIC の内容を書き換えていいかどうかの確認ダ イアログが表示される.[yes] をクリックすると,書き込みが行われる. (注意) このときオシレータの種類や,ウオッチドックタイマー (WDT) の on/off を入力するウィンド ウが立ち上がる場合は, · オシレータ:HS · ウオッチドックタイマー:off に設定する. 6. PICを基板にさしこみ, 電源を入れて動作を確認せよ. 7. 動作が確認できたら, プログラムを書き換え, 点滅の間隔を変えてみよ. 【課題 7】スイッチを押すと LED が点灯するようにせよ. • 付録 2 のプログラム PAtoPB.asm をテキストエディタで入力し, アセンブル, 書き込みを行って, 動作を確 認せよ. – RAポートで読み取った値をそのまま RB ポートにコピーする, という動作を無限ループで繰り返すだ けの簡単なものである. – PICのプログラムは, 例えば, TIM10 MOVLW 0F9H のように, ラベル [TAB] 命令 [空白] 式 という形式をとる. ラベルの次には必ず [TAB] を入力すること. この [TAB] はラベルが無い場合でも必 要なので, 注意すること.

• スイッチは,PIC の入力値(RA ポートの値)を制御するように配置する.スイッチで電源を ON/OFF する 回路にしないこと. 【課題 8】PIC の RA0∼3 にスイッチ 4 個(各ポートに一つ)を,RB0∼3 にセグメントデコーダとセグメント表示 LEDを各一つ接続して,スイッチにより入力した 2 進数に対応する数(一桁)がセグメント表示 LED に表示され るようにせよ.PIC のプログラムには,PAtoPB.asm を用いよ. 【課題 9】PIC により二桁の数をスイッチで点灯できるようにせよ. 1. RB4∼7 にセグメントデコーダとセグメント表示 LED を接続せよ(先に接続した LED と合わせて二桁に する).

2. 付録 3 の dispnum.asm を PIC に書き込み,スイッチを押していない時は”01”が,RA0 のスイッチを押すと”23” が表示されることを確認せよ.

3. プログラムを書き換え,RA1, RA2, RA3 のスイッチを押すと,それぞれ”45”, ”67”, ”89”が表示されるように せよ.

(注) スイッチの処理に注意が必要.

• スイッチを押すと, チャタリング (下図参照) が発生する. 単純なスイッチの読み取りでは, 複数回スイッ チが押されたと解釈してしまう.

(7)

• これを防ぐために, 例えば, ボタンが押されてから t 秒待って再確認してからボタンが押されたと判断す る等の工夫が必要. レポート 2 【課題 6】∼【課題 9】の実験結果とそれに対するコメント, 感想を簡単にまとめよ.

【第 3 週】 電卓 V1 の設計・実装

電卓のバージョン 1 を設計し, 実装する. 【課題 10】スイッチを押すと 2 桁の 10 進数のカウントアップを行い, 離すとリセットするようにせよ. 1. 付録 4 のプログラム (countup.asm) を必要に応じて書き換え,アセンブル,書き込みを行って,動作を確 認せよ. 2. どのようにしてカウントアップ等を行っているか, プログラムを良く理解せよ. • 数のカウントアップは INCF 命令などで容易に行えるが, そのままでは, 16 進数としてのカウントアッ プになってしまう. これを 10 進数のカウントアップとするところに若干の工夫が必要になる. 【課題 11】次の仕様の電卓を設計し, 実装せよ. • 表示は 2 桁の 10 進数. 【課題 9】で作成したものをそのまま用いる. • 入力には, 6 個のスイッチを用いる. □ クリア (MCLR に接続) … 電卓の初期化を行い, 表示を零にする. □ 1 の位入力 (RA0 に接続) … 1 の位の数の入力を行う. 押すと 1 桁目が 0 になり, 押し続けると順次 1, 2, 3,…, とカウントアップする. 9 の次は 0 になるが, この場合は 10 の位に桁上がりを行う. □ 10 の位入力 (RA1 に接続) … 10 の位の数の入力を行う. 押すと 2 桁目が 0 になり, 押し続けると順次 1, 2, 3,…, とカウントアップする. 9 の次は 0, 1, 2, … と循環する. □ プラス (RA2 に接続) … 加算の指定 □ マイナス (RA3 に接続) … 減算の指定 □ イコール (RA4 に接続) … 加算または減算の実行と結果表示 • 2 数の加減算さえできればよい (1 + 2 + 3 = 等の連続した計算はできなくても良い). 例えば, スタートとし ては次のようなフローチャートが考えられる. • データ構造を良く考えよ. 2桁の値を保持する方法としては,以下の 3 種類が考えられる. 方法 1 : 十の位と一の位をそれぞれ 4 ビットで保持し, 2 桁を 1 バイトで保持する.

(8)

方法 2 : 各桁を 1 バイトで保持し, 2 バイト使って 2 桁を保持する. 方法 3 : 2 進法で 1 バイトにそのまま 2 桁を保持する. 例えば「 39 」は,それぞれのパターンで下図のように保持される. 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 11 00 00 11 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 00 00 00 00 1 01 0 00 11 3 9 3 9 39 方法1 方法2 方法3 選択した方法によって処理方式が変わってくるので, よく検討すること. レポート 3 【課題 10】 および 【課題 11】の経過とそれに対するコメント, 感想を簡単にまとめよ.

【第 4 週】 電卓 V1 の完成と V2 の構想

電卓バージョン 1 を完成させ, 設計・実装結果を見直す. これに基づいて, バージョン 2 の構想を練る. 【課題 12】電卓 V1 を完成させよ. • 完成すれば, コードを見直して改良を加えよ. 例えば, 連続した計算もできるようにするなど, アルゴリズム全 体を見直して整理せよ. 【課題 13】電卓 V1 を参考に, その改良版 V2 の設計について構想を練れ. • 工夫する点としては, 例えば次が考えられる. – 連続計算や加算以外の計算が行えるようにする. – 3桁以上の計算を行うようにする. – 操作しやすいスイッチのインタフェース. 見やすい表示. • スイッチや表示器の数が制限されているので, 入力/出力の方法を工夫する必要がある. また, 設計・作成に使 える時間は次週のみなので, 仕様が無理なものにならないようにすること. • 最後の 40 分程度で, 各班の構想を発表する. レポート 4 【課題 12】の経過と【課題 13】のまとめ, および実験に関するコメント, 感想を簡単にまとめよ.

(9)

【第 5 週】 電卓 Ver 2 の設計・実装

【課題 14】電卓 V2 を作成せよ. • 最後の 40 分で, 各班の作品の発表を行う. レポート 最終 電卓 V2 の仕様, その設計, 動作結果についてまとめ, 本実験全体に関するコメント, 感想を述 べよ. ○ レポートには次の基本事項を書くこと. 1. どのような仕様の電卓 V2 を作成したか. 2. ボードの接続関係. 3. 基本的な計算法 (データ構造, フローチャート/アルゴリズム/状態遷移グラフ等) とプログラムの構成の 説明. プログラムのソースコード (のコピー) は付録として添付せよ. 4. この実験に対する感想. ○ 「工夫した点」がよくわかるように書くこと. (例えば, 次のような点) [仕様] – 入出力にどのような工夫をしたか. – 演算結果が表示できる範囲外になった場合どうしているか. – 連続した計算や, ”12 + 34 = - 235 + =” 等, 規定されていないキーの入力系列に対する動作をどうしてい るか. [ボードの実装] – 部品の配置, 配線等の工夫. [プログラム実装] – データ構造をどう工夫したか. – 桁上がり, 桁下がりの計算法をどう工夫したか. – その他, 前述の仕様を実現するため, どのようなプログラミングの工夫をしたか. ○ 感想には次のような点を書くこと. – 今回の実験で新たに得た知見. 理解できなかった点. – 興味が持てた点, 持てなかった点. – 苦労した点. – 実験の運営上, 工夫した方がいいと思う点. – その他.

(10)

付録 1 LED 点滅プログラム (timer.asm)

; ************************************************* ; 0.5秒タイマ(0.5秒毎にPORTBをON/OFF) ; 注:クロックは10MHzの場合に0.5秒になる. ; ************************************************* LIST P=PIC16F84 ;; 決まり文句 INCLUDE "P16F84.INC" ;; 決まり文句 CNT1 EQU 0CH ;; 変数 CNT1 を 0C 番地に確保するという宣言 CNT2 EQU 0DH ;; なお 00∼0B 番地までは他目的で既に使用されている CNT3 EQU 0EH ORG 0 ;; リセットするための決まり文句 MAIN ;; 入出力モードの設定を行っている (参考図書を参照せよ) BSF STATUS,RP0 CLRF TRISB ;; PORTB をすべて「出力」に設定 BCF STATUS,RP0 MAINLP ;; このループが本体

CLRF PORTB ;; PORTB をクリアして 0 にする (LED 点灯)

CALL SECTIM ;; タイマーサブルーチンを呼び出す (0.5秒待つ)

MOVLW 0FFH ;;

MOVWF PORTB ;; PORTB をオール 1 にする (LED 消灯)

CALL SECTIM ;; タイマーサブルーチンを呼び出す (0.5秒待つ) GOTO MAINLP ;; 以下はタイマーのサブルーチン TIM10 MOVLW 0F9H MOVWF CNT1 TIMLP1 NOP DECFSZ CNT1,F GOTO TIMLP1 RETURN TIM100 MOVLW 0F9H MOVWF CNT2

TIMLP2 CALL TIM10

DECFSZ CNT2,F

GOTO TIMLP2

RETURN

SECTIM MOVLW 5

MOVWF CNT3

TIMLP3 CALL TIM100

DECFSZ CNT3,F GOTO TIMLP3 RETURN END

付録 2 LED 制御プログラム (PAtoPB.asm)

;*************************************** ; RA0 -- RA3 -> RB0 -- RB3 ;*************************************** LIST P=PIC16F84 INCLUDE "P16F84.INC" ORG 0 MAIN BSF STATUS,RP0 MOVLW 0FH MOVWF TRISA CLRF TRISB BCF STATUS,RP0 MAINLP ;; ポート A の値をポート B にコピーするだけ MOVFW PORTA MOVWF PORTB GOTO MAINLP END

(11)

付録 3 二桁整数表示プログラム (dispnum.asm)

; *********************************** ; RA0 OFF -> "01" ; RA0 ON -> "23" ; *********************************** LIST P=PIC16F84 INCLUDE "P16F84.INC" CNT1 EQU 0CH CNT2 EQU 0DH CNT3 EQU 0EH COUNT EQU 0FH ORG 0 MAIN BSF STATUS,RP0 MOVLW 01FH

MOVWF TRISA ;; PORTA を全て入力に設定

CLRF TRISB ;; PORTB を全て出力に設定 BCF STATUS,RP0 MAINLP MOVLW 01H BTFSC PORTA, 0 CALL WAIT CALL DISP GOTO MAINLP

WAIT CALL SECTIM

BTFSC PORTA, 0 MOVLW 23H RETURN

DISP MOVWF PORTB

RETURN TIM10 MOVLW 0F9H MOVWF CNT1 TIMLP1 NOP DECFSZ CNT1,F GOTO TIMLP1 RETURN TIM100 MOVLW 0F9H MOVWF CNT2 TIMLP2 CALL TIM10

DECFSZ CNT2,F GOTO TIMLP2 RETURN SECTIM MOVLW 5

MOVWF CNT3 TIMLP3 CALL TIM100

DECFSZ CNT3,F GOTO TIMLP3 RETURN END

(12)

付録 4 カウントアッププログラム (countup.asm)

; *********************************** ; カウントアップ(0.5 秒) ; *********************************** LIST P=PIC16F84 INCLUDE "P16F84.INC" CNT1 EQU 0CH CNT2 EQU 0DH CNT3 EQU 0EH COUNT EQU 0FH ORG 0 MAIN BSF STATUS,RP0 MOVLW 01FH

MOVWF TRISA ;; PORTA を全て入力に設定

CLRF TRISB ;; PORTB を全て出力に設定 BCF STATUS,RP0 CLRF PORTB CLRF COUNT ;; COUNT=0 MOVLW 0AH MAINLP CALL SECTIM

INCF COUNT,F ;; COUNT++

CALL CHECK MOVF COUNT,W

MOVWF PORTB ;; COUNT をPORTB へ出力

GOTO MAINLP

CHECK

MOVLW 0FH

ANDWF COUNT, 0 ;; 上位4bitを0に

SUBLW 0AH

SKPZ ;; 下位4bitが0AH以外ならRETURN

RETURN

MOVFW COUNT

ADDLW 6 ;; 下位4bitが0aHの場合は+6

MOVWF COUNT

MOVLW 0F0H

ANDWF COUNT, 0 ;; 下位4bitを0に

SUBLW 0A0H

SKPZ

RETURN ;; 上位4bitが0AH以外ならRETURN

CLRF COUNT ;; 上位4bitが0AHならCOUNT=0

RETURN TIM10 MOVLW 0F9H MOVWF CNT1 TIMLP1 NOP DECFSZ CNT1,F GOTO TIMLP1 RETURN TIM100 MOVLW 0F9H MOVWF CNT2 TIMLP2 CALL TIM10

DECFSZ CNT2,F GOTO TIMLP2 RETURN SECTIM MOVLW 5

MOVWF CNT3 TIMLP3 CALL TIM100

DECFSZ CNT3,F GOTO TIMLP3 RETURN END

参照

関連したドキュメント

[r]

* 施工手順 カッター目地 10mm

のようにすべきだと考えていますか。 やっと開通します。長野、太田地区方面  

OFFI CI AL SCORE CERTI FI CATE GTEC (4技能) (CBT可). Test Repor t For m I ELTS™(Academi c

レジェンド KA9系 98.09~04.09 HID車 H1 D2R H1 × × × KB1 04.10~ HID車 HB3 D2S H11 V9TZHB003 V9TZHB003 × V9TZFB001 V9TZFB001 KB2 08.09~

※ MSCI/S&P GICSとは、スタン ダード&プアーズとMSCI Inc.が共 同で作成した世界産業分類基準 (Global Industry Classification

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

(2)