じゅんのなんでもD.I.Y.

インターネットラジオVer.2を製作中・・・

├対局時計

[ リスト | 詳細 ]

記事検索
検索

全4ページ

[1] [2] [3] [4]

[ 次のページ ]

イメージ 1
 
 
イメージ 3
 
 
イメージ 2
 
 
イメージ 4
 
 
 
 
夕べのうちにハードウェアを製作し、今朝Arduino版対局時計のスケッチからPIC16F1827版へファームを移植しました。
 
やってみるとArduinoは簡単だということがよくわかります。移植するのにPIC16F1827のデータシートとずーっとにらめっこ。
 
まぁ、でも千番PICの概要がだいぶわかりました。
 
これからなにか作るときは千番PICだな。なんせ安いもん。
 
 
 
 
イメージ 1
 
 
イメージ 2
 
 
その後、プログラムメモリが4kワードだったら入るところまで目処がたったので、PIC16F1827で回路図・配線図を再設計。
 
14ピンと18ピンではまったくピン配列が違うのでアートワークに苦労しました。
 
痛いのがPIC16F1823ではファームウェアでポート単位で全ピンプルアップが可能だったのが、PIC16F1827ではPORTAがRA5しかプルアップできない。しょうがないから無理やりRA5とRB0にスイッチつけました。PORTBは全ピンポート単位でプルアップ可能。
 
来週の月曜を有休にして4連休にしたので、今週末でなんとか作っちゃおうかなぁとおもっちょります。
 
 
 
 

オセロ対局時計の設計

秋月で最近販売開始された千番PICが安い。14ピンのPIC16F1823なんて1個100円。
 
試しにと思ってオセロ対局時計のハードウェアを設計してみた。
 
イメージ 2
 
イメージ 1
 
なんと抵抗が一本もない。PIC16F1823はRA0〜RA5、RC0〜RC5のすべての入出力ポートをファームで弱プルアップできるので、プルアップ抵抗が不要にできる。
 
まだハードウェアも作ってないから、実物はこれから。ファームウェアもまだこれから。まぁ、基本的には100ms毎に割り込みを発生させて計時させるだけだから大したことはないだろう。
 
 
 
 
では次に16桁2行のLCDをコントロールしてみましょう。

↓回路図

イメージ 1


前回の回路にLCDを追加してみました。

LCDのDB4〜DB7をPICのRB4〜RB7へ、EをRA2へ、RSをRA3へ接続します。

それ以外にLCDへは+5VとGNDも接続します。VSS(GND)とVDD(+5V)ですね。LCDによってはこのVSSとVDDのピンが入れ替わっている場合がありますので注意してください。

それとコントラスト調整用の基準電圧を10kΩのボリュームでつくってLCDのVOへ接続しています。

今回はLCDを4ビットモードで使用しますので、使わないDB0〜DB3へはなにも接続しません。

回路はこれだけです。PICに直接接続できるのがいいですネ。



↓プログラム

イメージ 2


たったこれだけです。

レジスタ設定は前回までで説明していますので割愛して、つぎにLcd_Configという関数があります。これはLCDをPICから設定をするわけですが、パラメータとしてPICとLCDをどのように接続するかを与えます。

カッコの中の左から「データポート」「D7」「D6」「D5」「D4」「コントロールポート」「RS」「R/W」「E」です。回路図の接続と見比べてみて下さい。

一箇所だけ、R/Wが接続されていませんが、これは接続してもいいんですが、R/WというのはLCDに対してデータを読み込むか書き込むかを指定するピンで今回は書き込みしかしませんので、接続しなくてもいいというわけです。ちなみに書き込み専用にするには回路図のようにR/WのピンをGNDへ落とします。

さて、MikroBasicを解説しているサイトというのは非常に少ないのですが、わたしはどーやって勉強したかというと、「ねぇ〜、教えて」と聞いて教わりましたww。

具体的にはHELPです。

HELPファイルを出して、キーワードに「LCD」と入れてみました。そしたら出てくるわ出てくるわww

イメージ 3


しょっぱなに「LCD_Config」が記述されています。このHELPの内容どおりに記述しただけです。

ちなみにLCDとPICをMikroBasic標準の接続をした場合は「LCD_Init」という簡単な関数が使えるようです。

次に「Lcd_Cmd(Lcd_CURSOR_OFF)」として、余分なカーソル表示を抑止しています。このLcd_Cmdも色んなコマンドが指定できるようです。同じようにHELPで調べてみましょう。

イメージ 4


カーソルを2行目に持っていったり、画面をクリアしたり、アンダーラインをつけたり、カーソルをブリンクさせたりできるようですネ

最後にLcd_Outで文字を表示しています。表示する文字「text」変数へはその前の行で「Orion's Blog」と設定しています。

変数タイプはと見ると、3行目のdim文で定義していますネ。キャラクタタイプ20文字を確保しました。

イメージ 5


ご覧のように表示されました。表示されない時はコントラスト調整して見て下さい。調整しないとまったく映りませんので結構焦るんですよ(笑)。
イメージ 1


続いてTurnOnサブルーチンの解説です。

引数としてPatternを定義していますネ。前回の解説でこのTurnOnサブルーチンに対して0を指定すれば交互に点滅、1を指定すれば同時に点滅でした。

サブルーチンの宣言の直後にまたdim文があります。これはこのサブルーチンのパラメータ以外に、このサブルーチンの中だけで使う変数があればここで指定します。

このサブルーチンの中だけなので、例えば別のサブルーチンやメインルーチンの中で同じ変数名が使われていたとしても、それとは別物になります。今回このiという変数名は後述のfor文で使用します。

次の「select case」文ですが、これはそれに続く変数を評価してそれに応じて処理ロジックを分けます。ケース別にプログラムを実行するということですね。今回は変数にこのサブルーチンのパラメタ「Pattern」を指定しています。

次の「case 0」ですが、これは「Patternが0だった場合」を意味しています。「case 0」と「case 1」で処理ロジックが分かれているみたいですネ。

Patternが0だった場合、次のfor文を実行します。

「for 変数名 = 開始値 to 終了値 step きざみ値」で指定します。今回のケースだとiを0から2までの間を1ずつ増やして実行することを指定しています。つまり0〜2の3回、この「for 〜 next i」の中の文を実行することになります。これが3回点滅の仕組みです。

プログラムをみるとPatternが0の時はRB0とRB1につながっているLEDが交互に点滅し、Patternが1の時は同時に点滅しているのがわかります。

Select文を使わずにif文を使うこともできます。

if 条件式 then
 条件式が真の時のロジック
else
 条件式が偽の時のロジック
end if

今回だと条件式に「Pattern = 0」を埋め込めば使えそうですよね。

if文だと真か偽かの二つのパターンにしか対応できませんが、Select文を使えばさらに多くのパターンに対応できますので、将来のプログラム改造に備えてSelect文を使用しました。

これで今回のLEDチカチカのプログラムのすべてです。どうですか? アセンブラよりはかなり簡単ではないでしょうか?

全4ページ

[1] [2] [3] [4]

[ 次のページ ]


.
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

ブログバナー

じゅん
じゅん
男性 / O型
人気度
Yahoo!ブログヘルプ - ブログ人気度について

スマートフォンで見る

モバイル版Yahoo!ブログにアクセス!

スマートフォン版Yahoo!ブログにアクセス!

検索 検索

過去の記事一覧

よしもとブログランキング

もっと見る

[PR]お得情報

いまならもらえる!ウィスパーうすさら
薄いしモレを防ぐ尿ケアパッド
話題の新製品を10,000名様にプレゼント
ふるさと納税サイト『さとふる』
お米、お肉などの好きなお礼品を選べる
毎日人気ランキング更新中!
ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!
いまならもらえる!ウィスパーWガード
薄いしモレを防ぐパンティライナー
話題の新製品を10,000名様にプレゼント
コンタクトレンズで遠近両用?
「2WEEKメニコンプレミオ遠近両用」
無料モニター募集中!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事