[MPLAB]エラー”Argument out of range. Least significant bits used.”が出る時にチェックすべき事
MPLABでアセンブル時、Warning[202] Argument out of range. Least significant bits used.エラーが出る場合があります。 このワーニングは、セットした値を代入したとき代入先に値が入りきらないという警告です。 warningなのでhexファイルは作成されますが、値が意図したとおりセットされず、プログラムの動作は期待したものとは異なってしまうため、修正が必要です。 問題が発生する状況を分かりやすい例で言うと、以下のコードはWarning[202]が発生します。 MOVLW 0x100 MOVLW 0x100 Wレジスタは8ビットなので最…
続きを読む
[PIC]アセンブラで数値を記述する場合は基数指定が必須です
PICのアセンブラで基数を明示せずに数字を指定すると、通常は16進数として認識されます。 例えばPIC16F84で、以下のコードを実行すると… LIST P=16F84 INCLUDE P16F84A.INC ORG 0 MAIN MOVLW 0x10 GOTO MAIN END LIST P=16F84 INCLUDE P16F84A.INC ORG 0 MAIN MOVLW 0x10 GOTO MAIN END このように、Wレジスタに0x10(10進数で”16″)がセットされます。 ですがMPLABを使用している場合、この振…
続きを読む
[C#]PIC16シリーズのバイナリを逆アセンブルする
前回、MPLABで生成されたhexファイルを解析するプログラムをC#で用意しました。 今回はこのバイナリ(機械語)を元に、逆アセンブルするプログラムを作成します。 というわけでプログラムです。 13bitの2進データをみて文字列に変換するだけなので、単純に力技です。 今回は分かりやすいように全命令の処理を列挙しましたが、PICの機械語命令は、命令の各bitに何の情報を持たせるかの構成パターン数が少ないので、最適化させればもう少しシンプルに書けそうです。 PICアセンブラ入門 using System; class Pic16f84 { //***************…
続きを読む
C#でintelのhexファイルフォーマットを解析する
C#でintelのhexファイルフォーマットの解析プログラムを作成したので,公開しておきます。 hexファイルフォーマットはアスキー形式の可変長テキストですが、シンプルな作りになっているので読み込みは簡単です。 ファイルフォーマットの詳細が知りたい場合は、以下のエントリで説明しています。興味があれば参考にしてください。 MPLABで作成されたhexファイルのフォーマットを解析する ここで読み込んだ情報を元にPIC16F84A用のバイナリを逆アセンブルしてみる予定ですが、本クラス自体はターゲットデバイス非依存な作りです。 (pic以外用のROMデータでも解析できるはずです) というわけで、解析処…
続きを読む
PICkit3のファームを手動でアップデートする
MPLABでPICkit3を使用している場合、通常は初回接続時に自動でファームアップデート処理が走ります。 正常にプログラムが書き込めない等、PICkit3の動作が安定しない場合は、手動でファームを更新させると上手くいく場合があります。 ファームの手動アップデートは、以下の手順で行う事が出来ます。 メニューバーのProgrammer->Settingsを選択します。 Configrationタブを選択し、Manual Downloadボタンをクリックします。 ※MPLABをデフォルトの場所にインストールした場合、PICkit3のファームは以下の場所にあります。 C:\Program Files…
続きを読む
[PIC]TMRモジュールを使用する(タイマー割り込み)
PICにはTimer0モジュールというものがあり、このモジュールはカウンタやタイマー処理として使用できます。 今回はPI15F84におけるタイマー処理について説明します。 Timer0モジュールの仕組み Timer0モジュールは、カウンタ又はタイマーのどちらか一方として使用することが出来ます。 どちらのモードとして使うかはオプションレジスタ(0x81:OPTION_REG)の5ビット目にあるT0CSビットで指定することが可能で、このビットは以下の意味を持ちます。 OPTION_REG.T0CS(bit5) 1:RA4/T0CKI -> カウンタモード 0:内部クロック -&…
続きを読む
[PIC]内蔵EEPROMへアクセスする
PICには電源を切ってもデータを保存して置ける領域としてEEPROM(Electrically Erasable Programmable ROM)が用意されています。 PIC16F84Aの場合EEPROMのサイズは、データ長8bitのものが64個で計64byteの領域が存在します。 このEEPROMですが、その特性上書き込み回数の上限値が決まっており、仕様上は1000万回までの書き換えが保証されています。一見すると1000万回なんて到達しなさそうですが、PICの動作速度が速い為、頻繁に書き換えると、意外とすぐに上限に達してしまいます。 計算してみると、1回の書き込みは10msec程度で終わる…
続きを読む
[PIC16シリーズ]ピン数別の機能・評価一覧
PICはシリーズが多すぎて各チップの機能が分かりづらいのが難点ですが、価格と特徴を上手く整理してくれているものがあったので備忘録としてメモっときます。 PIC16ではなく18シリーズについて知りたい場合は、下記の記事を参考にして下さい。 [PIC18シリーズ]ピン数別の機能・評価一覧 【Pickit3】PIC専用のスレPart21【速度3倍?】 http://uni.2ch.net/test/read.cgi/denki/1228312753 より ——————————&#…
続きを読む
PICkit3を使用時,PICを認識できない時にチェックすべき事(PK3Err0045エラー)
MPLABより、PICkit3を使用してPICに書き込みを行おうとした際、OutputウィンドウにPK3Err0045のエラーが表示する事があります。 PICkit 3 detectedConnecting to PICkit 3… Running self test… Self test completed Firmware Suite Version…… 01.27.15 Firmware type………………….Midrange PICkit 3 Connected. PK3Err0045: You must connect to…
続きを読む
MPLABでPICkit3を使用してのデバッグが出来ない理由Top10
PICkit3のユーザガイドで、デバッグが上手く行えないときにチェックすべき点が掲載されていました。 日本語の情報が見当たらなかったので、訳したものを置いときます。 (ざっくりな意訳なので、おかしな所があったら指摘してくださると幸いです) 1.オシレータが正しく動作していない。 オシレータに関するコンフィグレーションビットの定義もチェックしてみてください。 2.デバッグ対象の回路に電源が供給されていない。 電源ケーブルの接続確認と、テスタで電圧チェックしてください。 3.デバッガが物理的にPC(もしくは回路側)とつながっていない。 ケーブルの接続を確認してください。 4.PICでコードプ…
続きを読む
PICアセンブラにおける分岐/ループ処理の組み立て方(基本編)
C言語では、if,switchによる分岐や、for,whileによる繰り返し命令を持っています。 一方、PICのアセンブラはどうかというと、当然ながらそんな便利な制御機能は持っていません。 というか、PICに限らずほぼ全てのCPUは、機械語レベルで上記のような繰り返し処理を持っていません。 それでは、アセンブラレベルでどうやって制御構造を組み立てていくかというと、条件付分岐命令というものを利用していきます。 PICのアセンブリにおいて、条件付き分岐を行える命令は以下の4つです BTFSC ; bit test file-reg skip if clear BTFSS ; bit test fi…
続きを読む
VMware上でPICkit3は使用できるか?
MPLABをインストールした環境をVMwareで構築しているのですが、 PICkit3を接続してみたところ、問題なく使用することが出来ました。 以下、証拠画面です(クリックで拡大します)。 動作を確認した環境は以下の通りです。 ホストOS Windows7 SP1 ゲストOS WindowsXP SP3 App VMware Player 3.1.4ホストOS Windows7 SP1 ゲストOS WindowsXP SP3 App VMware Player 3.1.4 注意すべき事はVMにUSBポートを追加するぐらいで、特にハマリどころもなく動作しました。 USBポートの追加…
続きを読む
MPLABでPICkit3使用時,PICkit3から電源を供給する
MPLABでPICへのプログラム書き込みにPICkit3を使用している場合、PICkit3から回路へ電源を供給することが出来ます。 電源供給はMPLABで設定を行います。 MPLABを起動し、Programmer->Settingをクリックします。 Powerタブをクリック後、”Power target circuit from PICkit3″にチェックを入れるとPICkit3側からPIC回路へ電源を供給することができます。 供給する電圧は、画面よりある程度指定可能です。 スライドバーを操作することで、2.75V~5.5Vを選択可能です。 電流については30mAが上限…
続きを読む
PICkit3を使ってMPLABからプログラムを焼く方法
前回MPLABを使ってプログラムを作成する方法を確認したので、今回は作成したプログラムを実際にPICへ焼いてみました。 今回の書き込みを行ったのはPIC16F84Aです。 PICへの書き込みにはライタが必要なので、まずは以下のハードを用意します。 用意する道具一覧 PICkit3 今回、ROMの書き込みにはPICkit3を使用しました(PICkit2でも書き込み可能です)。 楽天だと2021年7月現在、Debug Express付きのものが1万円ほどで販売されているようです。 プログラムの書き込みだけならDebug Expressは不要です。PICkit3単体だと4000円程度で入手できます。…
続きを読む
PICで一定時間のスリープ(ウェイト)を行う
アセンブラではスリープ処理も,ひと苦労 プログラムの中で一定時間処理を止めたい場合、C言語だとsleep()関数を使用することで秒単位のスリープ処理を行えます。 一方、PICでアセンブラを使って処理を行う場合はどうかというと、残念ながら一定時間処理を待つという命令は有りません。アセンブリのニーモニック一覧を見るとSLEEPというのがあるので、一見するとこれでいけそうな気もしますが、残念ながらPICのSLEEPはMPU自体をスリープモードにする(Windowsでいうサスペンド状態)命令なのでこれは使えません。 このような場合、PICではループを空回しする事でビジーウェイトを作り、所定の時間だけ経…
続きを読む
[MPLAB] MPASMアセンブラで良く出るエラーメッセージとその対処一覧
PICの開発をMPLABを使用してアセンブラ(MPASM)で開発しているときに、良く表示されがちなエラーメッセージとその対処法の一覧です。 開発を始めたばかりは、特にエラーの意味が分かり辛く、デバッグに手間取る事もあるので参考にしてみてください。 ※以降のメッセージと対処法はP16F84Aの場合を元に説明しています。 他のPICを使用している場合は、一部対処法が異なる場合もあるかもしれません。 その場合は各自読み替えてください。 よくあるエラーメッセージ一覧 Register in operand not in bank 0. Ensure that bank bits are corre…
続きを読む
[PIC]MPLABでデバッグ時に,入力用ポートの値を操作する(Stimulusウィンドウ)
MPLABでは実際のマイコンチップを用意しなくても、IDE上に用意されたシミュレータを使用してプログラムをデバッグする事ができます。 また、PICマイコンでは入出力ピンを使用して外部とのデータをやり取りを行います。 この際に出力ピンについては、PORTAやPORTBなどのレジスタ値を見れば0/1のどちらが出力されているか、確認する事ができます。一方、入力については、実機上はボタンなどを用意すれば入力のON/OFFを変更できますが、シミュレータ上ではボタンが無いのでピンの状態を変更する事が出来ません。 このようなときはStimulus機能を使用することで、ピン状態を変更する事が可能です。 Sti…
続きを読む
[PIC]PIC16F84Aのコンフィグレーションビットを指定する
PICでは、マイコンの内部動作を規定するために、コンフィグレーション用のデータが存在します。 PIC16F84Aマイコンの場合、このデータはプログラムメモリの0x2007番地に存在します。0x2007番地は、ユーザプログラムメモリの範囲外なので、通常のアセンブラ命令では値のセットを行うことができません。 それでは、この値をどうやって指定するのかという疑問が出てくるのですが、MPLABのアセンブラでは__CONFIG命令でこの値を設定することができます。 ここでは PIC16F84Aのコンフィグレーションビットの内容について確認してみます。 まず、アセンブラプログラム上での指定方法ですが、以下の…
続きを読む
[PIC]MPLABで作成されたhexファイルのフォーマットを解析する
MPLABで開発を行い、コンパイル(orアセンブル)を行うと*.hexファイルが作成されます。 PICのマイコンへは、hexファイルを元に書き込みが行われます。 このhexですが、エディタで開いてみると普通のテキストファイルである事が分かります。 前回の動作確認で作ったasmファイルを確認してみると、以下の様な内容になりました。 作成したPICのアセンブラコード ; LEDを点滅させる ; (点滅が速過ぎるので、実機で実行すると目視では確認できませんが…) LIST P=16F84 INCLUDE P16F84A.INC ORG 0 ; ポートBのRB0ピンを出力にする BS…
続きを読む
[MPLAB]作ったプログラムのデバッグ実行が出来ない場合の対処法(Debugger->Run)
MPLABでは、IDEなので当然ですが、作成したプログラムをPC上でデバッグ実行する事が出来ます。 メニューバーのDebuggerを選択すると、以下のようにF9を押す事で、デバッグ実行が可能です。 なのですが、MPLABをインストールした直後では、なぜかPC上での実行が出来ない状態になっています。 Debuggerメニューを見ても項目が2つしかありません… というわけで、MPLABでデバッグ実行を行うための設定方法ですが、以下の作業をすればOKです。 Debugger->Select ToolにあるMPLAB SIMを選択し、チェックを入れます。 以下のようになっていればOKです。…
続きを読む