ものづくり基礎工学(情報工学分野)
今回の内容
マイコンから の出力 ◆マイクロコンピュータにおけるプログラミング ●機器の中に組み込まれる ●ロボット,自動車,家電・・・などいろいろな分野で利用 ◆プログラムを用いて外部の装置を動作させる●発光ダイオード(Light Emitting Diode)
●液晶ディスプレイ(Liquid Crystal Display) ◆プログラムを用いて外部の装置の状態を読み取る ●プッシュスイッチ ●ディップスイッチ コンピュータを用いた機器の制御の基礎 マイコンへの 入力 今の状態を知る 望ましい動作をさせる
J3.表示装置とスイッチの利用 3
実験に用いる機器
マザーボード H8/3048F-ONEマイコン 表示装置 制御用スイッチ シリアルコネクタ シリアルケーブル (ストレートケーブル) PCとマイコン間の通信 ACアダプタ H8/3069ではない 5 Vのものか 確認するプログラムの作成から実行までの手順
PC上でコンパイル
PC上でプログラムを作成
マイコンに転送
J3.表示装置とスイッチの利用 5
ケーブルの接続
ACアダプタ シリアルケーブル (ストレートケーブル)の を接続する SCI-1各部の名称
(1)-マイコンボード
CPU Central Processing Unit コンピュータ の頭脳J3.表示装置とスイッチの利用 7
各部の名称
(2)-動作用スイッチ
モード切替スイッチ プログラムの 転送 実行 で切り替える 電源スイッチ各部の名称
(3)-プログラムで用いるスイッチ
プッシュ スイッチ ディップスイッチ 8個のスイッチの 集合体J3.表示装置とスイッチの利用 9
各部の名称
(4)-表示装置
発光ダイオード (LED) 液晶ディスプレイ (LCD) パイロット ランプ (LED)WEBサイトの表示
Internet Explorerを 起動する クラス ↓ 1年生の皆さんへ ↓ ものづくり基礎工学(情報工学分野)WEBサイト と進む.J3.表示装置とスイッチの利用 11
必要なファイルのダウンロード
(1)
「『マイクロコンピュータで いろいろなものを制御しよう』の サンプルプログラムなど(ZIP)」を 「対象をファイルに保存(A)…」を 選択すると, 保存先を尋ねるウィンドウが開く 右クリックする ものづくり基礎工学 (情報工学分野)の WEBサイト必要なファイルのダウンロード
(2)
「 」を 選択し... 「保存(S)」を 選択する デスクトップ Jmonozukuri2011.zipJ3.表示装置とスイッチの利用 13
ダウンロードが完了したデスクトップ
Jmonozukuri2011.zipの
必要なファイルの展開
Jmonozukuri 2011.zip Jmonozukuri2011 ダブルクリック Jもの造り2011 ものづくり基礎工学 Webサイトからダウンロードする 閉じてしまった場合は, デスクトップ上の Jmonozukuri2011 をダブルクリックして開く Drag&Dropそれ行け 3048fone.cmd へのショートカット コンパイルと 転送に用いる このフォルダで 作業するJ3.表示装置とスイッチの利用 15
作業用フォルダを開く
Jmonozukuri2011 Jもの造り2011 を右クリックし, 「新しいウィンドウで開く(E)」を 選択する Jmonozukuri2011にある フォルダJmonozukuri2011 2つのフォルダを 開いたままにする Jもの造り2011 2つのフォルダを 開いたままにする
作業時のデスクトップの例
「表示」をクリックし, 「大アイコン」を選択 するとよい. が 隠れない ようにするJ3.表示装置とスイッチの利用 17
作業用フォルダの内容
サンプル ソースファイル C言語の ソースプログラム 種類は 「C ファイル」 Jもの造り2011プログラムの転送から実行まで
(1)
- ファイル名のつけ方-
◆ファイル名の末尾は「.c」 ●今回はC言語のソースファイル ◆使用できない文字 ●2バイト(全角)文字 ●スペース ●ハイフン ●末尾以外の「.」 ◆その他 ●どのプログラムなのかわかりやすい名前に 好ましくない例:a.c,b.c,c.c,・・・ (一目でわからない) fdsaf.c,fjdos.c,・・・ (でたらめ) LED 3.c LED-3.c prog3.5.1.c?
?
×
×
×
コピー.c×
J3.表示装置とスイッチの利用 19
プログラムの転送から実行まで
(2)
-
Progモードへの切り替え-
(1)電源をOFFにする (2)「Prog」側に倒す (3)電源をONにするプログラムの転送から実行まで
(3)
- コンパイルと転送 ー
Jもの造り2011 Jmonozukuri2011 (4)ソースファイルを コンパイル用の コマンドファイルに ドラッグ&ドロップ このようなウィンドウが表示 され,エラーがなければ転送 終了後に閉じる.J3.表示装置とスイッチの利用 21
プログラムの転送から実行まで
(4)
- 失敗例
(1) ー
書き込みに失敗した場合 ●シリアルケーブルの接続先は 正しいか ●マザーボードの電源が入って いるか ●モード切り替えスイッチは 「Prog」側になっているか ●以上のことを確認して電源を 入れ直すプログラムの転送から実行まで
(5)
- 失敗例
(2) ー
プログラムに誤りがある場合 (コンパイルエラー) ●プログラムを修正する エラーの内容 ファイル名が不正な場合も このウィンドウが消えない ↓ ファイル名を修正するJ3.表示装置とスイッチの利用 23
プログラムの転送から実行まで
(6)
-
Runモードへの切り替え -
(5)電源をOFFにする (7)電源をONにする (6)「Run」側に倒すおまじない /* LED点滅 */ #include <3048f.h> #include "lib\lcdlib.h" #include "lib\monozukuri.h" void main(void) { initMicon(); while(1) { turnOnLed(all); waitms(250); turnOffLed(all); waitms(250); } }
LEDの点滅
-リスト
3.5.1(01led1.c)-
無限に繰り返し 組み込まれた機器が 動作している間は繰 り返し 両方のLEDを点灯 両方のLEDを消灯 点灯した状態で待つ 消灯した状態で待つJ3.表示装置とスイッチの利用 25
周期と周波数
●周期 T 繰り返される現象において,1回の繰り返しに要する時間. ●周波数 f 繰り返される現象において,1秒間に繰り返される回数. 単位は Hz. f [Hz]= 1 T [s] 点灯 消灯 点灯 消灯 点灯 TON= 250 ms TOFF= 250 ms 周期 T = 500 ms リスト3.5.1では・・・ f = 1 500×10−3 = 1 0.500 = 2.00 Hz T =250+250=500 ms 接頭辞mは 10-3倍の意味 1秒間に 2回点滅LEDの明るさを調節する例
-課題
3.1(2)-
例.10 msの点灯と5 msの消灯を繰り返す ・ ・ ・ while(1) { turnOnLed(all); waitms(10); turnOffLed(all); waitms(5); } ・ ・ ・ 点灯 消灯 点灯 消灯 点灯 TON= 10 ms TOFF= 5 ms 周期 T = 15 ms デューティ比 = 10 10+5×100 = 67 %J3.表示装置とスイッチの利用 27
LEDの交互点滅
-リスト
3.5.3(02led2.c)-
/* LED交互点滅 */ #include <3048f.h> #include "lib\lcdlib.h" #include "lib\monozukuri.h" void main(void) { initMicon(); while(1) { turnOnLed(right); turnOffLed(left); waitms(250); turnOnLed(left); turnOffLed(right); waitms(250); } } 右のLEDのみ点灯した 状態が250 ms続く 右のLEDのみ点灯 左のLEDのみ消灯 左のLEDのみ点灯した 状態が250 ms続く課題
3.2におけるLEDの点滅
両方消灯 左のみ点灯 左 右 両方消灯 右のみ点灯 点灯するLEDが切り替わる間に すべて消灯する区間がある 左のみ点灯 右のみ点灯 左のみ点灯 左のみ点灯 右のみ点灯 両方消灯J3.表示装置とスイッチの利用 29 H e l l o !
LCDへの文字表示
-リスト
3.5.4(03printf.c)-
void main(void) { initMicon(); clearScreen(); gotoxy(2,0); printf("Hello!"); ・ ・ ・ } LCDの表示をすべて消す カーソル位置 (次のprintfで文字を表示する位置) の指定 LCDに文字を表示 2桁目 0行目プッシュスイッチの状態の読み込み
-リスト
3.5.6(04pushSW.c)-
/* プッシュスイッチの状態を知る */ #include <3048f.h> #include "lib\lcdlib.h" #include "lib\monozukuri.h" void main(void) { int sw; initMicon(); while(1) { sw=getPushSw(); gotoxy(0,0); printf("%04b, %2d",sw,sw); } } スイッチの状態を 記憶するための変数 押されたスイッチの組み 合わせによって異なる整 数がswに代入される. 組み合わせは 24=16通り swの値を 4桁の幅の2進数で表示 (上位0詰め) swの値を 2桁の幅の10進数で表示J3.表示装置とスイッチの利用 31
プッシュスイッチの番号
スイッチの番号
数の表現
●10進数 10nを単位として表わした数 0,1,2,3,4,5,6,7,8,9を用いる 2015=2×103+0×102+1×101+5×100 ●2進数 2nを単位として表わした数 0,1を用いる (11111011111)2=1×210+1×29+1×28+1×27+1×26+0×25 +1×24+1×23+1×22+1×21+1×20 ●16進数 16nを単位として表わした数 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fを用いる (7DF) 16=7×16 2+13×161+15×160 D F 10 11 12 13 14 15J3.表示装置とスイッチの利用 33
条件によって実行内容を変える
-
if文の利用(リスト3.5.7)-
かっこ内の が満た されるときのみ, の内容を実行する. 押された スイッチの 組み合わせに 応じた値が 代入される #include <3048f.h> #include "lib\lcdlib.h" #include "lib\monozukuri.h" void main(void) { int sw; initMicon(); while(1) { sw=getPushSW(); if(sw==1) { turnOnLed(right); } } } 条件 「swが1に等しい」 S1だけが押されたとき, swの値は1になる. 右のLEDを 点灯させるif文のひな形と条件式
いろいろな条件式 sw==0:swが0に等しい sw>=1:swが1以上である(1を含む) sw>-2 :swが-2より大きい(-2は含まない) sw<=3:swが3以下である(3を含む) sw<-4 :swが-4より小さい(-4は含まない) sw!=5 :swが5と等しくない if文のひな型 if( 条件式 ) { 条件が成り立ったときに実行する処理 }J3.表示装置とスイッチの利用 35
課題
3.4(2)
押すスイッチ swの値 動 作 実行させる文 S0 1 右のLEDを点灯 turnOnLED(right); S1 右のLEDを消灯 S2 左のLEDを点灯 S3 左のLEDを消灯 (1)で調べた 結果から 考える 実現したい内容を表にまとめると… プログラムにすると… リスト3.5.8ディップスイッチの状態の読み込み
-リスト
3.5.9(05dipSW.c)-
スイッチの状態を 記憶するための変数 スイッチのON/OFFの組み合 わせによって,異なる整数が dipに代入される. 組み合わせは 28=256通り /* ディップスイッチの状態を知る */ #include <3048f.h> #include "lib\lcdlib.h" #include "lib\monozukuri.h" void main(void) { int dip; initMicon(); while(1) { dip=getDipSw(); gotoxy(0,0); printf("%08b, %2d",dip,dip); } }J3.表示装置とスイッチの利用 37
ディップスイッチの番号
スイッチの番号
報告上の注意-課題
3.1における数値
●周期 1 msの位まで書く →10~99 msであれば有効数字2桁になる ●周波数 周期の逆数なので,有効数字の桁数は周期と同じになる →1桁多く値を求め,最後の桁を四捨五入する ●デューティ比 計算に用いた値のうち,有効数字の桁数が最も少ない値と 同じ桁数で求める →点灯時間と周期のうち桁数の少ない方に合わせる →百分率を求めるための100倍は無限大の桁数と考えるJ3.表示装置とスイッチの利用 39