1
マ イ コ ン ボ ー ドの
LED制御
∼ 準備編そ の 1 ∼
・マイコンとノートPCの役割
・どうすればLEDは光るの?
・光らせるLEDの選択は?
・マイコン端子に接続されたLED
・マイコン端子の電圧設定
・制御用ソフトウェアの注意点
2
マイコンとノートPCの役割
ノー トPC
タイマー
プログラム
メモリ
発光ダイオード
ブザー
手動スイッチ
温度センサ
光センサ
デ
ジ
タ
ル
入
出
力
ポ
ー
ト
マ イコ ン ボ ー ド
プログラム実行中での状態モニタと入力
(Accemic MDE)
USBポ ー ト
プログラム作成(Softune)
ア
ナ
ロ
グ
入
出
力
ポ
ー
ト
AD変換器
(アナログ入力をデジタル信号へ変換)
DA変換器
(デジタル信号をアナログ出力へ変換)
3
ど う す れ ば LEDは 発光す るの ?
LEDに電流を流すと
LEDは発光する
LED+Rの両端はどちらも5V
LED+R両端の電位差はない
LEDに電流は流れず、発光しない
LED+Rの両端で5Vの電位差がある
LEDに電流が流れ、発光する
Vcc (=5V
DC
)
LED
R
S
A
Vcc (=5V
DC
)
LED
R
S
A
Vcc (=5V
DC
)
LED
R
S
A
4
発光させ る LEDの 選択は ?
Vcc (=5V
DC
)
LED1
R
E1
LED2
R
E2
LED3
R
E3
LED4
R
E4
1 1
1 1
1 1
0 1
E1~E4
1・・・5V
0・・・0V
全て1なのでどのLEDも
光らない
Vcc (=5V
DC
)
LED1
R
E1
LED2
R
E2
LED3
R
E3
LED4
R
E4
E3が0なので、LED3だけが
光る
光らせたいLEDの電源電圧を選択的に設定する
5
マ イ コ ン 端子に 接続され た
LED回路
・
・
LED
LED
は
は
P10
P10
∼
∼
14
14
に 接続され て い る 。
に 接続され て い る 。
・
・
P10~14
P10~14
を
を
0
0
(
(
0V
0
V
)
)
に す る と 、
に す る と 、
0
0
の 端子に 接続され た
の 端子に 接続され た
LED
LED
が 発光す る
が 発光す る
マイコン
LED
6
P10~14の 電圧設定
000001
H
番地
ポート1データレジスタ(PDR1)
000011
H
番地
ポート1方向レジスタ(DDR1)
アドレス番地
メモリ
役割
P10~14の値のセット
(1)
ポート1データレジスタ
に、P10~14の設定電圧のデータを代入する。
(0V => 0、5V => 1:例ではP14 だけが0なのでLED5のみが発光する)
(2)ポート1データレジスタのデータが、出力用データか、読み取ったデータか、
の選択を
ポート1方向レジスタ
によって行う
(読取り用 => 0 、出力用 => 1:例ではP10~14すべてで1なので、ポートデータ
レジスタの各ビット値に従って、P10~14の電圧が設定される )
x x x
0
1 1 1 1
x x x
1 1 1 1 1
レジスタ・・・8ビット
8ビット <==> 1バイト
7
プ ロ グ ラ ム 上での
P10~14の 電圧設定
Port 10
Port 10
∼
∼
14
14
の
の
“
“
1
1
”
”
,
,
“
“
0
0
”
”
状態を 指定す れ ば よ い
状態を 指定す れ ば よ い
16進数で E
F
1 1 1 1 1
0
1 1 1 1
(1 1 1)
x x x
16進数で 1
F
(0 0 0)
x x x
1.P14 だけを0にセット
2.P10~14すべてで1なので、
ポートデータレジスタの各ビッ
ト値に従って、P10~14の電圧
が設定される
LED5のみが発光
いかなる場合もこの部分
は消してはいけない!
8
開発環境の イ ン ス トー ル
◆
◆
USB
USB
−
−
仮想
仮想
Serial Port
Serial Port
ドラ イバ の イン ス トー ル
ドラ イバ の イン ス トー ル
◆
◆
統合開発環境の イン ス トー ル
統合開発環境の イン ス トー ル
◆
◆
ACCEMIC MDE
ACCEMIC MDE
(
(
モ ニ タ?)の イン ス トー ル
モ ニ タ?)の イン ス トー ル
⇒
USB_driver_installation_manual_J.pdfを参照
⇒ユ ー ザ ー ズ マ ニ ュ ア ル
(第1章∼1.1.3 ま で)
(
jouet_bleu_start_kit_manual_J.pdf) を 参照
⇒ユ ー ザ ー ズ マ ニ ュ ア ル
(本資料6∼7ペ ー ジ目)
実習
実習
実習
実習
CD
CD
ー
ー
ROM
ROM
の 内容を
の 内容を
HDD
HDD
(
(
デ ス ク トッ プ 等)に コ ピ ー して くだ さい
デ ス ク トッ プ 等)に コ ピ ー して くだ さい
実習
実習
9
マ イ コ ン ボ ー ドの
LED制御
∼ 準備編そ の 2 ∼
<0>システムの概要と留意点
<1>動作確認
<2>プログラムの作成/編集/保存/読み出し
・プログラムの作成と編集
・作成したプログラムの保存
・作成したプログラムの読み出し
<3>プログラム実行時の変数のモニタと入力
(scanf/printfの代用方法)
10
システムの概要
各要素の(最低限の)役割
<Softune>
・プログラムの作成/編集とコンパイル
<Accemic MDE>
・マイコンボード上でのプログラムの実行
・実行中におけるグローバル変数のモニタ(printf文に相当)
・実行中におけるグローバル変数への入力(scanf文に相当)
マイコンボード
ノートパソコン
USB
インターフェース
<Softune・・・実行以前>
・プログラムの作成/編集/コンパイル
・コンパイルしたプログラムの書き出し
<Accemic MDE・・・実行時以降>
・マイコンボード上での実行
・グローバル変数のモニタ
・グローバル変数への入力
11
留意点
(1)マイコンボードは,特定のUSBポートでのみ動作するように設定されている。複
数のUSBポートがある場合は,どのUSBポートで動作するかを確認すること。
(2)
講義で用いるノートPCは他の講義との共用のため,自作したプログラムは,次
回の講義まで残っている保証はない。
従って,自作したプログラムは, 「メモ帳」や
「ワードパッド」などを用いて,別のテキストファイルとして保存する。
(3)
講義で用いるノートPCは最新の状態になっていないため,講義のノートPCはウィ
ルスに感染されている可能性がある。従って,個人のUSBメモリ等を直接講義のノー
トPCに接続することを禁止する。
(4)講義で用いるノートPCで作成したファイルを各自の環境に持ち込むため,USB
メモリを貸与する。ただし,
貸出したUSBメモリについてもウィルスの感染を否定で
きないため,貸出したUSBメモリを各自個人所有のノートPCにせつぞくすることを禁
止する
。
(4)
自作したプログラムを各自の環境に保存したい場合は,以下の手順を経ること。
・講義のノートPCに貸出したUSBメモリを接続し,そのUSBメモリに自作したプログ
ラムのテキストファイルを保存する。
・そのUSBメモリを学情センターのデスクトップパソコンに接続し,webメールでの添
付ファイルなどを使ってネットワーク経由で各自の環境にファイルを移す。
・USBメモリやファイルそのものが汚染されている場合は,学情センターのデスクトッ
プパソコンに接続したときに感染されている旨のメッセージが出力されるので,速
やかに作業を中断し,担当の教員に相談すること。
12
動作確認(1)∼プログラムの編集とコンパイル
<Softuneの起動とプログラム編集>
(1) スタートメニュー → プログラム → Softune V3 → FFMC-16 Family Softune Workbench(trial version) 起動
(2) Softuneで ファイル → ワークスペースを開く → 「Start_kit.wsp」を選択
(3) プロジェクトリストのプロジェクト「Sample.abs」にマウスを合わせ,右クリックで「アクティブプロジェクトに設定」を選択。
(4) プロジェクト「Sample.abs」をダブルクリック → フォルダ「Source files」をダブルクリック → 「main.c」をダブルクリッ
ク によりプログラム編集画面を表示。
(5) main.cのプログラムの中身を,テストプログラムに置き換える。
・授業ホームページからテストプログラム「test_prog1.txt」をダウンロードして「メモ帳」等で開き,全てを選択しコピー。
・main.cのプログラムリストを全て選択して,ペースト(貼り付け)する。
(6) プロジェクト → ビルド によりコンパイルする。main.cの中身が保存されていない場合は保存を促すメッセージが
出力されるので,「はい」をクリックする。
プログラム編集画面
メッセージエリア
プ
ロ
ジ
ェ
ク
ト
リ
ス
ト
<Softuneの画面>
<= プログラムの編集は,プログラムリストの中で行う。
13
動作確認(2)∼プログラムの実行
<Accemic MDEの起動とプログラムの実行>
(1) プログラムにエラーがなければAccemic MDE
が自動的に起動し,「OK」をクリックするとモニタ
画面が表示される。
(2) Accemic MDEで「実行ボタン」をクリックし,プ
ログラムを実行する。
(3) マイコンボード上のLEDが,プログラムに従っ
て明滅することを確認する。
実行ボタン
<Accemic MDEの画面>
14
プログラムの作成/編集
プログラム編集画面
メッセージエリア
プ
ロ
ジ
ェ
ク
ト
リ
ス
ト
Softuneのプログラム編集画面で,プログラムの作成/編集を行う。
15
作成したプログラムの保存
Softuneのプログラム編集画面で作成したプログラムを,別の
テキストファイルとして保存する。
(1) Softuneのプログラム編集画面のプログラムを全て選択
し,コピーする。
(2) スタート → プログラム → アクセサリ から,「メモ帳」
を立ち上げ,新規のウィンドウにペースト(貼り付け)する。
(3) 「メモ帳」で,ファイル → 名前をつけて保存 より,ファ
イル名をつけて適切な場所に保存する。
16
作成したプログラムの読み出し
「メモ帳」によりテキストファイルとして保存されているプログラム
ファイルの中身を,Softuneのプログラム編集画面に貼り付ける
ことで,「ファイルの読み出し」に相当する作業を行う。
(1) テキストファイルとして保存されているプログラムファイル
を「メモ帳」などにより開き,全てを選択してコピーする。
(2) Softuneのプログラム編集画面で,全て選択してdeleteキー
などにより,プログラムを削除した後,ペースト(貼り付け)する。
17
プログラム実行中における変数のモニタと入力
∼scanf/printfの代用法∼
Accemic MDEでは,プログラム実行中に
グローバル変数の値をモニタ表示す
ると同時に,グローバル変数に値を入力する
ことができる。
前者はprintf文,後者はscanf文に相当する。
<Accemic MDEの画面>
変
数
リ
ス
ト
(1)「test_prog2.txt」の内容を,softune 上
のプロジェクト「sample.abs」中のmain.cに
差し替えてプログラムを実行する。
(1)Accemic MDEにおいて,変数タブが
「Globals」となっていることを確認する。
(2)50音順の変数リストから,目的のグ
ローバル変数を見つけ,その数値の内容
を確認する(printfに相当)。
(3)そのグローバル変数の数値をダブル
クリックし,表示される入力欄から所望の
数値を入力する(scanfに相当)
※入力する数値が10進数の場合は
「DEC」,16進数の場合は「HEX」を選択。
変数タブ
18
test_prog1.txt
/** THIS IS A SAMPLE CODE of “test_prog1” FOR SOFTWARE ENGINEERING A **//** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR OMMISSIONS **/ /*****************************************************************************
* Date : 2010/01/06 * PROJECT: Sample * Program: Nakamura
* CPU : FMC-16LX(MB90F387)/jouet_bleu: San-Hayato
/*****************************************************************************/ #include "_ffmc16.h" #include "extern.h" #include "monitor.h" void main(void) { __set_il(7); __EI(); IO_PDR1.byte=0xFE; IO_DDR1.byte=0x1F; } /***************************************************************************** interrupt routine ******************************************************************************/ /* reload timer interrupt routine */
__interrupt void reload_int(void) {
}
/* ADC interrupt routine */ __interrupt void ADC_int(void) {
}
/* Ext interrupt routine */ __interrupt void ext_int(void) {
}
/* Vector Table */
#pragma section INTVECT,locate=0xfffc00
#pragma intvect _start 0x8 0x0 /* Reset Vector */
#pragma intvect reload_int 17 /* reload timer interrupt vecter */ #pragma intvect ADC_int 18 /* AD converter Vector */ #pragma intvect ext_int 24 /* Ext Interrupt vecter */
main関数
←
データレジスタPDR1を0xFEとし,方向レジ
スタDDR1を0x1Fとしたので, PDR1のビッ
ト0∼5の内容を, LEDに対して出力する。
・・・
PDR1のビット0に接続さ
れたLED1だけが光る
この部分のプログラムを編集する。
19
test_prog2.txt/
グローバル変数
/** THIS IS A SAMPLE CODE of “test_prog1” FOR SOFTWARE ENGINEERING A **/ /** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR OMMISSIONS **/ /*****************************************************************************
* Date : 2010/01/06 * PROJECT: Sample * Program: Nakamura
* CPU : FMC-16LX(MB90F387)/jouet_bleu: San-Hayato
/*****************************************************************************/ #include "_ffmc16.h" #include "extern.h" #include "monitor.h" int led=0xFE; void main(void) { __set_il(7); __EI(); IO_PDR1.byte=0xFE; IO_DDR1.byte=0x1F; while(1) { IO_PDR1.byte=led; } } /***************************************************************************** interrupt routine ******************************************************************************/ /* reload timer interrupt routine */
__interrupt void reload_int(void) {
}
/* ADC interrupt routine */ __interrupt void ADC_int(void) {
}
/* Ext interrupt routine */ __interrupt void ext_int(void) {
}
/* Vector Table */
#pragma section INTVECT,locate=0xfffc00
#pragma intvect _start 0x8 0x0 /* Reset Vector */
#pragma intvect reload_int 17 /* reload timer interrupt vecter */ #pragma intvect ADC_int 18 /* AD converter Vector */ #pragma intvect ext_int 24 /* Ext Interrupt vecter */