Transcript
Page 1: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

[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 .

• .

1

Page 2: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

• ダイオードのピンは,長い方が+側になるように接続する.

• 抵抗を色々変えて,電流を測定せよ (テスタを用いよ). ダイオードを発光させるには 5 ∼ 10 mA程度が適当.

• ブレッドボード上での部品の接続については下図を参考にせよ.

F G H I JA B C D E123456

123456

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の各セグメントの点灯信号を生成する組合せ回路.

2

Page 3: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

• ピン配置と真理値表は下の通り. (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 A 数 a b c d e f g

0 0 0 0 0 0 0 0 0 0 0 10 0 0 1 1 1 0 0 1 1 1 10 0 1 0 2 0 0 1 0 0 1 00 0 1 1 3 0 0 0 0 1 1 00 1 0 0 4 1 0 0 1 1 0 00 1 0 1 5 0 1 0 0 1 0 00 1 1 0 6 1 1 0 0 0 0 00 1 1 1 7 0 0 0 1 1 1 11 0 0 0 8 0 0 0 0 0 0 01 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.4mAしかなく,正論理では LEDを点灯させるに十分な電流を供給できないためである.

– 入力が素数の時に 0となる論理回路を設計してもよいし,入力が素数の時に 1となる論理回路の出力をNOTで反転させても良い. 回路が小さくなる方を選べばよい.

• 入力は 10進数で 0から 9までしか入力されないと想定する. 10進数で 10以上の入力は don’t careとすることにより,回路を極力簡単にせよ.

3

Page 4: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

14

13

12

11

10

8GND

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に接続する.

• 抵抗の接続を忘れないこと.

4

Page 5: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

• 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を起動する.

– 右下の Chip Selectorで PIC16F84を選択する.

5

Page 6: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

– 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”が表示されるようにせよ.

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

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

6

Page 7: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

• これを防ぐために,例えば,ボタンが押されてから 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バイトで保持する.

7

Page 8: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

方法 2 : 各桁を 1バイトで保持し, 2バイト使って 2桁を保持する.

方法 3 : 2進法で 1バイトにそのまま 2桁を保持する.

例えば「 39」は,それぞれのパターンで下図のように保持される.

10 1 10100 10 1 10100

1100 1100 1001 1001

10 0 10000 10 0 10000 01 0 10000 01 0 10000

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】のまとめ,および実験に関するコメント,感想を簡単にまとめよ.

8

Page 9: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

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

【課題 14】電卓 V2を作成せよ.

• 最後の 40分で,各班の作品の発表を行う.

レポート最終 電卓 V2の仕様, その設計, 動作結果についてまとめ, 本実験全体に関するコメント, 感想を述べよ.

○ レポートには次の基本事項を書くこと.

1. どのような仕様の電卓 V2を作成したか.

2. ボードの接続関係.

3. 基本的な計算法 (データ構造,フローチャート/アルゴリズム/状態遷移グラフ等)とプログラムの構成の説明. プログラムのソースコード (のコピー)は付録として添付せよ.

4. この実験に対する感想.

○ 「工夫した点」がよくわかるように書くこと. (例えば,次のような点)

[仕様]

– 入出力にどのような工夫をしたか.

– 演算結果が表示できる範囲外になった場合どうしているか.

– 連続した計算や, ”12 + 34 = - 235 + =”等,規定されていないキーの入力系列に対する動作をどうしているか.

[ボードの実装]

– 部品の配置,配線等の工夫.

[プログラム実装]

– データ構造をどう工夫したか.

– 桁上がり,桁下がりの計算法をどう工夫したか.

– その他,前述の仕様を実現するため,どのようなプログラミングの工夫をしたか.

○ 感想には次のような点を書くこと.

– 今回の実験で新たに得た知見. 理解できなかった点.

– 興味が持てた点,持てなかった点.

– 苦労した点.

– 実験の運営上,工夫した方がいいと思う点.

– その他.

9

Page 10: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

付録 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,RP0CLRF 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 CNT1TIMLP1 NOP

DECFSZ CNT1,FGOTO TIMLP1RETURN

TIM100 MOVLW 0F9HMOVWF CNT2

TIMLP2 CALL TIM10DECFSZ CNT2,FGOTO TIMLP2RETURN

SECTIM MOVLW 5MOVWF CNT3

TIMLP3 CALL TIM100DECFSZ CNT3,FGOTO TIMLP3RETURN

END

付録 2 LED制御プログラム (PAtoPB.asm);***************************************; RA0 -- RA3 -> RB0 -- RB3;***************************************

LIST P=PIC16F84INCLUDE "P16F84.INC"

ORG 0MAIN

BSF STATUS,RP0MOVLW 0FHMOVWF TRISACLRF TRISBBCF STATUS,RP0

MAINLP ;; ポート A の値をポート B にコピーするだけMOVFW PORTAMOVWF PORTBGOTO MAINLP

END

10

Page 11: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

付録 3 二桁整数表示プログラム (dispnum.asm); ***********************************; RA0 OFF -> "01"; RA0 ON -> "23"; ***********************************

LIST P=PIC16F84INCLUDE "P16F84.INC"

CNT1 EQU 0CHCNT2 EQU 0DHCNT3 EQU 0EHCOUNT EQU 0FH

ORG 0

MAINBSF STATUS,RP0MOVLW 01FHMOVWF TRISA ;; PORTA を全て入力に設定CLRF TRISB ;; PORTB を全て出力に設定BCF STATUS,RP0

MAINLP MOVLW 01HBTFSC PORTA, 0CALL WAITCALL DISPGOTO MAINLP

WAIT CALL SECTIMBTFSC PORTA, 0MOVLW 23HRETURN

DISP MOVWF PORTBRETURN

TIM10 MOVLW 0F9HMOVWF CNT1

TIMLP1 NOPDECFSZ CNT1,FGOTO TIMLP1RETURN

TIM100 MOVLW 0F9HMOVWF CNT2

TIMLP2 CALL TIM10DECFSZ CNT2,FGOTO TIMLP2RETURN

SECTIM MOVLW 5MOVWF CNT3

TIMLP3 CALL TIM100DECFSZ CNT3,FGOTO TIMLP3RETURN

END

11

Page 12: 1 ,LED, - Hara Laboratory Home Page€“ セラロック発振子は3ピンのうち中央のピンを0Vに接続し, 外側の2ピンをPICのOSC1とOSC2 に接続する(この2

付録 4 カウントアッププログラム (countup.asm); ***********************************; カウントアップ (0.5 秒); ***********************************LIST P=PIC16F84INCLUDE "P16F84.INC"

CNT1 EQU 0CHCNT2 EQU 0DHCNT3 EQU 0EHCOUNT EQU 0FH

ORG 0

MAINBSF STATUS,RP0MOVLW 01FHMOVWF TRISA ;; PORTA を全て入力に設定CLRF TRISB ;; PORTB を全て出力に設定BCF STATUS,RP0CLRF PORTBCLRF COUNT ;; COUNT=0MOVLW 0AH

MAINLPCALL SECTIMINCF COUNT,F ;; COUNT++CALL CHECKMOVF COUNT,WMOVWF PORTB ;; COUNT を PORTB へ出力GOTO MAINLP

CHECKMOVLW 0FHANDWF COUNT, 0 ;; 上位 4bitを 0にSUBLW 0AHSKPZ ;; 下位 4bitが 0AH以外なら RETURNRETURNMOVFW COUNTADDLW 6 ;; 下位 4bitが 0aHの場合は+6MOVWF COUNT

MOVLW 0F0HANDWF COUNT, 0 ;; 下位 4bitを 0にSUBLW 0A0HSKPZRETURN ;; 上位 4bitが 0AH以外なら RETURNCLRF COUNT ;; 上位 4bitが 0AHなら COUNT=0RETURN

TIM10 MOVLW 0F9HMOVWF CNT1

TIMLP1 NOPDECFSZ CNT1,FGOTO TIMLP1RETURN

TIM100 MOVLW 0F9HMOVWF CNT2

TIMLP2 CALL TIM10DECFSZ CNT2,FGOTO TIMLP2RETURN

SECTIM MOVLW 5MOVWF CNT3

TIMLP3 CALL TIM100DECFSZ CNT3,FGOTO TIMLP3RETURN

END

12


Recommended