|
夕べのうちにハードウェアを製作し、今朝Arduino版対局時計のスケッチからPIC16F1827版へファームを移植しました。
やってみるとArduinoは簡単だということがよくわかります。移植するのにPIC16F1827のデータシートとずーっとにらめっこ。
まぁ、でも千番PICの概要がだいぶわかりました。
これからなにか作るときは千番PICだな。なんせ安いもん。
|

- >
- Yahoo!サービス
- >
- Yahoo!ブログ
- >
- 練習用
こんにちは、ゲストさん
[ リスト | 詳細 ]
|
夕べのうちにハードウェアを製作し、今朝Arduino版対局時計のスケッチからPIC16F1827版へファームを移植しました。
やってみるとArduinoは簡単だということがよくわかります。移植するのにPIC16F1827のデータシートとずーっとにらめっこ。
まぁ、でも千番PICの概要がだいぶわかりました。
これからなにか作るときは千番PICだな。なんせ安いもん。
|
|
その後、プログラムメモリが4kワードだったら入るところまで目処がたったので、PIC16F1827で回路図・配線図を再設計。
14ピンと18ピンではまったくピン配列が違うのでアートワークに苦労しました。
痛いのがPIC16F1823ではファームウェアでポート単位で全ピンプルアップが可能だったのが、PIC16F1827ではPORTAがRA5しかプルアップできない。しょうがないから無理やりRA5とRB0にスイッチつけました。PORTBは全ピンポート単位でプルアップ可能。
来週の月曜を有休にして4連休にしたので、今週末でなんとか作っちゃおうかなぁとおもっちょります。
|
|
秋月で最近販売開始された千番PICが安い。14ピンのPIC16F1823なんて1個100円。
試しにと思ってオセロ対局時計のハードウェアを設計してみた。
なんと抵抗が一本もない。PIC16F1823はRA0〜RA5、RC0〜RC5のすべての入出力ポートをファームで弱プルアップできるので、プルアップ抵抗が不要にできる。
まだハードウェアも作ってないから、実物はこれから。ファームウェアもまだこれから。まぁ、基本的には100ms毎に割り込みを発生させて計時させるだけだから大したことはないだろう。
|
|
では次に16桁2行のLCDをコントロールしてみましょう。 ↓回路図 前回の回路に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に直接接続できるのがいいですネ。 ↓プログラム たったこれだけです。 レジスタ設定は前回までで説明していますので割愛して、つぎに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 しょっぱなに「LCD_Config」が記述されています。このHELPの内容どおりに記述しただけです。 ちなみにLCDとPICをMikroBasic標準の接続をした場合は「LCD_Init」という簡単な関数が使えるようです。 次に「Lcd_Cmd(Lcd_CURSOR_OFF)」として、余分なカーソル表示を抑止しています。このLcd_Cmdも色んなコマンドが指定できるようです。同じようにHELPで調べてみましょう。 カーソルを2行目に持っていったり、画面をクリアしたり、アンダーラインをつけたり、カーソルをブリンクさせたりできるようですネ 最後にLcd_Outで文字を表示しています。表示する文字「text」変数へはその前の行で「Orion's Blog」と設定しています。 変数タイプはと見ると、3行目のdim文で定義していますネ。キャラクタタイプ20文字を確保しました。 ご覧のように表示されました。表示されない時はコントラスト調整して見て下さい。調整しないとまったく映りませんので結構焦るんですよ(笑)。
|
|
続いて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チカチカのプログラムのすべてです。どうですか? アセンブラよりはかなり簡単ではないでしょうか?
|
[PR]お得情報