Home
PICあれこれと失敗談
All rights reserved JA3OOK 中村 利和
PICを利用した機器を製作するに当たっての要点をまとめました。私の経験が中心ですから極一部
のことになります。私自身のメモですが誰かの役に立てば幸いです。
目次
'14/07/14 1.なぜPICを選んだか
'14/07/14 2.入門にPIC16F88を選んだ理由
'14/07/14 3.開発環境を何にするか
'14/07/14 4.LCDの輝度調整のVRは低めに! マニュアルの間違いもある!
'14/07/14 5.ストップビット数 one or two stop bits
'14/07/14 6.PICへ再書き込みができないトラブル
'14/12/15 7.PICkit3でPICを認識しないトラブル(MPLAB X IDE v2.10 PICkit3)
'14/12/15 8.PIC18F25K22の64MHz
'14/12/15 9.LATレジスター(PIC16からPIC18への移行問題)
'14/12/15 10.PIC18F25K22のEUSART関係のレジスタ名
'14/12/15 11. EUSARTが動かない(PIC18F2550からPIC18F25K22への移行問題、ANSELの罠)
'14/12/15 12.EEPROM 使用上の注意
'15/01/03 13.WDT(ウォッチドッグタイマー) 使用上の注意
'15/02/25 14.PIC18F25K22やPIC16F1936の受信エラー処理
'15/04/09 15.バイナリーエディター
'16/02/03 16.IDEやxc8コンパイラーをバージョンアップしたらEEPROMにアクセスできなくなった
'17/05/23 17.IDEやxc8コンパイラーをバージョンアップしたらEEPROMに関してコンパイルエラーになる
'17/05/23 18.コメント右端が 文字「表」 だとコンパイルエラーになる 原因はMicrochip社に関係なし
'17/05/26 19.MPLAB X IPE を使ってHEXファイルを書き込む
'17/08/29 20.PICの低消費電力/省電力の方法
1.なぜPICを選んだか '14/07/14
私は全くのMCU(マイクロコンピューター)の初心者。クラブ仲間でワイワイ雑談したりW
ebを見ていくうちにMCUにはいくつかのメーカーがあることを知り、まずその違いを大雑把
に把握することから始めた。
・AVR
詳しい資料は大半が英文。しかしコンピュータや通信の英文でありなんとか理解できるはず。
Webでの事例も増えてきている様子。デビューが新しくPICよりアーキテクチャが洗練され
ているらしい。開発ツールも大丈夫。
・H8
全ての資料が日本語。これは心強い。開発ツールも遜色ない。Webでの事例も多い。
PICやAVRよりIO数が多くRAM/ROMの容量も大きい。大規模領域がターゲットのようだ。
純国産のMCU。心情的には使いたい。
・PIC
Webで事例の記事が多い。PIC固有の使いにくさを指摘している方々がおられるがCで組め
ば個性が包み隠されて使いにくさは感じないはず。
(これは予想とおりであった。ABSの機能を実現する範囲だけのことかも・・・)
詳しい資料は大半が英文。しかしコンピュータや通信の英文でありなんとかなるはず。
決め手は
・「Ethernetコントローラ内蔵CPUボード/KBC-P18LAN2」が共立から、
・「新PIC−NICキット」が秋月から
発売されていること。いずれは購入してカスタマイズしてみたい。そのためにはPICに慣れ
ておきたい。
2.入門にPIC16F88を選んだ理由 '14/07/14
私の最初の開発目標はRS-232CでのPCとの通信。初心者向けに、RS-232C電圧変換ICも付いた
キットが秋月から販売されていたこと。
(K-01714 PIC16F88 CPUボードモジュールキット Ver.2 1,130円)
そしてWebには88での製作や実験k時も多かった。それで結果的にPIC16F88になった。
MCU初体験の私にとって手ごろのように思え、もし性能が不足していたら乗り換えればいい
だけのことと考えた。
半田付けが必要なピン間隔も重要な選定要素。このキットでは1/10インチであった。
細かな物を見ることが苦手になっている私にはこれが限度。これでも虫眼鏡やカメラから外し
た凸レンズが必要な場合がある。
3.開発環境を何にするか '14/07/14
今後も長いつきあいになるので、末永く保守してくれたり新製品に対応してくれる製品を使い
たい。数千円の差ならメーカー純正が正攻法。
ほとんどの開発環境が無償。CもOptimize機能を犠牲にすれば無償。
(Optimize機能:無駄な処理やメモリーを見つけて高速化や最小化を行ってくれる機能、に頼
らなければならないほど複雑なプログラムになるとは思えない)
ということで構築した開発環境は
・MPLAB X IDE v2.10 (Microchip)
・MPLAB XC8 C Compiler Free mode v1.31 (Microchip)
・PICkit2 v2.61.00 (Microchip) + 書き込みアダプタ(秋月 K-05355)
Cを選んだ(アッセンブラでなく)理由。
・C言語は最も普及しているプログラミング言語の一つ。
このXC8 CはISOやANSIに準拠しているとのことで、もし他メーカーのMCUに乗り換える
ことになっても楽そうだ。ソースプログラム互換は期待できないがノウハウは使える。
・Webを読むとPICの弱点を挙げている方々がいるが、CならMCUの弱点が包み隠されていて使
いにくくないはず。
・アッセンブラーをこの年齢(1945年生まれ)で覚えるのはつらいし、同じ覚えるなら
応用範囲が広い言語を覚えるべき。
・若いとき仕事で使っていたSYSLやHPLとCは似ているので理解が早そうだ。
SYSL : 電電公社(現NTT)のDIPS用システム記述言語
HPL : NECのシステム記述言語
(独り言・・・懐かしいなあ)
なお、マシン語やアセンブラーの言語経験があり、コンパイラーの製作経験もあるので
マイクロコンピューターの世界に違和感がないのはラッキー。
PICkit2について。
・PICkit2とPICkit3を比較してPICkit2の方が良いとのWebの記事に引かれてPICkit2を購入し
た。しかしこれは選択ミス。PICkit2の方が良いというのはずっと昔の話だったのだ。
今(2014年)ならPICkit3を購入すべきであった。と言っても致命的問題に遭遇したわけで
はなく、PICkit2より長く使えるかも・・・との程度のこと。
◎数あるPICの中から適切なPICを選定したり開発環境を準備したりするに当たっては、数ある
Webの中から、特にair variableさんの記事(参考資料1)および木村繁裕さんの記事(参考
資料2)を参考にした。感謝します。
と考えてPICkit2を買いました。
しかし、PICkit2を使い慣れたころ(追記)
新しい機器の製作に取り組もうとしてPIC16系では実現できないことが分かり(12項:EEPROM
サポート関数)PIC18系のPIC18F25K22に絞った。ところが困ったのはこのPICへPICkit2でプロ
グラムを書き込めない(サポートしていない)ことが分かり、がっかり!
しかたなくPICKit3を購入せざるを得なくなってしまった。うん千円の損!
教訓:初期トラブルの収まった程度の新しいツールを買おう。
4.LCDの輝度調整のVRは低めに! マニュアルの間違いもある! '14/07/14
開発環境とPIC自体を入手してから、最初の目標はLCDに文字を映し出すこと。
なぜなら、ABS(私が最初に取り組んだ開発対象の名称)の一番重要な機能はRS-232Cから
文字を受信することであり、そのためのデバッグ手段として受信した文字をLCDに表示する
ことが第一歩。
LCDドライバーソフトを自分で組むことが可能とのことで、これもair variableさん(参
考資料1)を一番の参考にして組み込み、MCUの処理速度に合わせた適切なタイミングと適
切な幅のチューニングを自分でやった。
<失敗談>
初めて文字をLCDに表示させるのに手こずった。
盲点はLCDの輝度調整用の電圧を加減するボリュームを最初に調整しなかったこと。電圧が
高すぎ画面が真っ白で、文字が出ているのに気づかず、タイミングと幅の調整ばかり行って
いて数日を無駄にした (^_^;)
教訓:輝度調整用の電圧は低めにしてテストを始めること。
<余禄>
この貴重な経験を積むことができたほかに、もう一つの成果はSC1602BSLのマニュアルに、初
期設定の一連の命令シーケンスの中で「100s待て」との記述があるが長すぎる。実験の結果
「100μs」待てばよいことも確認できた。
その後→100μsでは正常に初期化が終わらないことがあることが分かりその後は1msにしてい
る。
5.ストップビット数 one or two stop bits '14/07/14
・two stop bitsはPIC16F系ではできない。AUSARTを使わず全てプログラミングして送信すれば
実現できるかもしれないがやっていない。
two stop bitsはPIC24系を使えばUARTで実現できるようである。(参考資料5 page149)
6.PICへ再書き込みできないトラブル '14/07/14
PICにPICkit2でプログラムを書き込めず、PICが壊れた! と早合点した経験談。
・購入した秋月の PIC16F88 CPUボードモジュールキットには20MHzの外付け発振子が付属して
いて最初の数日はこの外付け発振子で実験していた。
・このPICは外部発振子を使わない内部発振方式も可能で、それを試してみたときのトラブル。
プログラムを内部発振方式に変更し机上デバッグを終え、PICに書き込んだら正常に書き込め
た。動作も正常。
・プログラムを一部変更して書き込もうとしたら書き込めない! デバイス名称を認識できな
いとのエラーメッセージ! 何回やっても書き込めない。再書き込みができないのだ。
プログラムを外部発振子をつける仕様に戻しても書き込めない。
・PICが壊れたと思って、やむなく同じPICを追加購入。念のため4個。
・新しいPIC16F88でやってみると、初回は書き込めるが2回目以降は書き込めない!
・同様のトラブルをWeb調べてみると、参考資料6が見つかった。要約すると
プログラムを書き込む前にPICに通常電圧が供給されてしまい、書き込み済み
プログラムが内部発振で動いてしまって、新しい書き込みができない
とのこと。これと同じ症状に思える。
・これまでの書き込み方法は、MPLABでソースプログラムを修正後に、コンパイルとPICへの書
き込みを行うために Make and Program Deviceアイコンをクリックしていた。
・そこで、MPLABではBuildアイコンでコンパイルまで行い、PICへの書き込みはPICkit2
単独で行う(そのつどHexファイルのImportとPICへのWriteを指示する)ようにしたら正常に
書き込めることが分かった。 以来この方法で書き込んでいる。
・二次的効果として、書き込み後にPCへのUSB端子をそのつど抜く必要がなくなった。
(書き込みが終わると電源供給も自動停止される。Make and Program Deviceを利用する場合
にも書き込み後に電源供給を自動停止するオプションがあるのかもしれないが私には分か
らない)
この電源供給のことで、その後にPICkit3を買って分かったこと。
MPLAB X IDEでのコンパイルとPICへのプログラミング(書き込み)が一体化しているので
USB端子を抜かないとPICへの電源供給が切れないようだ。それで、PICを抜く前に
USB端子を抜いている。わずらわしい。
古いドライバーを使えばPICkit3単独でプログラミングできるようだが試していない。
そのうち、いちいちUSB端子を抜き挿しするのがめんどうで、挿し
たままでPICを外したり付けたりしているが問題は起こっていない。今のところ・・・
7.PICkit3でPICを認識しないトラブル(MPLAB X IDE v2.10 PICkit3) '14/12/15
PICkit3を始めて使うときに経験する恐怖! それは次のエラーが赤文字で出ること。
Target device was not found. You must connect to a target device to use PICkit 3.
原因はPICkit3ではPICkitから電気を与えないことが既定値になったため。
解決策は
・ProjectのProperties(プロジェクト名を選択し右クリック、一番下)
→ PICkit3を選択
→ Option categories:のプルダウンメニューでPowerを選択
→ Power target from PICkit3にチェック
(Voltage Levelはさわらなくてよく、5.0のまま)
→ OK
・プログラム書き込みを指示
→ その電圧を本当に与えるかを問い合わせてきた場合は
→ OK
8.PIC18F25K22の64MHz '14/12/15
/* Internal OSC 16MHz 電源ON直後(Reset直後)は16MHzで内部発振させる */
#pragma config PLLCFG = OFF //Oscillator used directly
#pragma config FOSC =INTIO67 //Internal oscillator block
#pragma config PRICLKEN =OFF //Primary clock can be disabled by software
mainの最初に次の3行を記述する
IRCF2 = 1; IRCF1 = 1; IRCF0 = 1; //16Mhz
SCS1 = 0; SCS0 = 0; //Primary clock
PLLEN = 1; //Frequency Multiplier 4x
mainの最初でなくても良いが、PLLENがONになった時からこのスピードで動き出す。
64MHz化と直接関係ないが、SCSレジスターについての次の記述はさけたい。
OSCCON = 0b01110000; //16Mhz, Primary clock
PLLEN = 1; //Frequency Multiplier 4x
OSCCONのIRCF<2:0>,SCS<1:0>以外のビットの値も変えてしまうのはまずいから。
9.LATレジスター(PIC16からPIC18への移行問題) '14/12/15
PIC16F88 や PIC16F1936 から PIC18F25550 や PIC18F25K22 にプログラムを移行して最初に
とまどったのが ポートB2を示す「RB2」 がコンパイルエラーになってしまうこと。
(コンパイルエラーの不親切なメッセージだけでは修正方法を思い浮かばなく苦労)
対策は
例えば RB2 を LATB2 や PORTBbits.RB2 に変更すればOK。
混在がいやなので LATB2(LATxn)に統一した。
説明不足なので追記
→ 入力ポートで使用する場合は PORTBbits.RB2 形式の方が入力ピンのON/OFF状態を正しく
読み取れます。
10.PIC18F25K22のEUSART関係のレジスタ名 '14/12/15
PIC18F25K22は二つのEUSARTを持っている。従ってレジスターを区別するために番号がつけられ
た。(参考資料8 PIC18(L)F2X/4XK22 Data Sheet 272pageなど)
他のPICからプログラムを移行したり一つのEUSARTしか使わない場合でも関係するレジスター
名を修飾付きや番号付きにしないとコンパイルエラーになる。
例えば
TXSTA1bits.TX9 = 0; //Selects 8-bit transmission
TXSTA1bits.SYNC = 0; //非同期モードを選択
RCSTA1bits.SPEN = 1; //シリアルポートを有効にする
RCSTA1bits.RX9 = 0; //Selects 8-bit reception
BAUDCON1bits.BRG16 = 0;
TXSTA1bits.BRGH= 0;
SPBRG1 = 103; //OSC=64MHz 非同期 9600bps
TXSTA1bits.TXEN = 1; //送信を有効にする
RCSTA1bits.CREN = 1; //連続受信を可能にする
RCREG1 = 0; //受信バッファをクリア
while(!RC1IF){} //1文字入力まで待機
11. EUSARTが動かない(PIC18F2550からPIC18F25K22への移行問題、ANSELの罠) '14/12/15
PIC18F2550には通常のPICに存在するANSELレジスターがないのだ。(PIC18F97J60にもない
ことを後で知った)
2550で完成したプログラムをPIC18F25K22に移行したとき罠にはまった。
25K22でも2550と同じように動作するものと思い込んでしまい、ANCELxの設定を失念していた。
ANCELを指定しない場合、つまり既定値はどのポートもアナログなのだ。
しかし、どのポートもアナログなのに液晶出力に使っているポートAは期待とおりに動作し
液晶に文字が正しく表示されている。
EUSARTから送信もできるのだ。
でも受信ができないのだ!
あれやこれやいじくってもANCELに思いが及ばず、1日ほどの回り道・・・
やっとANCELCでデジタルを指定して解決。えらい時間の浪費であった (^_^;)
同じ系統の(同じ系統と思い込んだ)PICでも油断してはいけないという教訓。
12.EEPROM 使用上の注意 (MPLAB XC8 C Compiler) '14/12/15
EEPROMを使用しようとするとコンパイラが提供するマクロや関数の利用が便利だがいくつか
注意点あり。(参考資料7 MPLAB_XC8_C_Compiler_User_Guide.pdf 183〜184page)
・__EEPROM_DATA マクロ
このマクロを書く場所に注意
Cプログラムの初め(Functionより前)に、#includeや#defineに続いて書くこ
と。(Functionやmainの中に書かない)
このマクロの役割
HexファイルがPICにプログラミングされるとき(書き込まれるとき)に、
このマクロで記述したアドレスにその値が書き込まれる。
・eeprom_write() function および eeprom_read() function
これらのfunctionが使える対象はPIC18系。
eeprom_write() functionをcallした次に各PIC毎に決められた時間Waitすること。
(例えばPIC18F25K22の場合は最低4ms、参考資料8 PIC18(L)F2X/4XK22 Data
Sheet 438page)
・上記のように「これらのfunctionが使える対象はPIC18系」と書かれているが、
後日、実験したら「PIC16F1936」でも動作した!
13.WDT(ウォッチドッグタイマー) 使用上の注意 '15/01/03
a WDTクリア命令を書く位置に注意すること。
・メインループの中に一箇所だけ記述
理由 一定時間以内でWDTクリア命令を実行する必要があり、上記の注意を守って
プログラムを書くと実行時間を推定しやすい。
一般的に、functionの中とか複数個所に記述すると実行時間を推定しずらい
プログラムになることが多い。
その一定時間間隔はシステム毎に適した間隔を設定すること。
・割込み処理内に記述しない
理由 WDTを使用する目的は実行時のプログラムの暴走を防止することにあるが、
プログラムが暴走していても割込みは所定通りに行われることがあるので、
割込み毎にWDTクリア命令を実行してしまっては暴走を発見できない。
b WDTの応用
複数の通過処理毎に通過フラグを立て、通過したことをメインループで確認するこ
とも有効。
例えば、一定時間毎に割り込みが発生することが前提のプログラムなら割込み処理
内に通過フラグを立て、メインループで通過フラグを判定すれば、割り込みが発生
していないことを検出できる。
上記abはPICに限らない注意事項であり、参考資料9(Spansion Inc. ソフトウエアで
のEMC対策)から引用した。そこにはab以外にも有用な事項が書かれている。
MPLAB XC8 C Compiler および PIC18F25K22 において上記の、
・WDTクリア命令とは CLRWDT() マクロのこと。
・WDTの一定時間間隔は #pragma config WDTPS = n で設定し、
CPUクロックに依存せず4ms×n が設定時間間隔である。
nに記述可能な値は \Microchip\xc8\v1.31\docs\chips\18f25k22.htmlを参照。
14.PIC18F25K22やPIC16F1936の受信エラー処理 '15/02/25
EUSARTの受信エラーの種類によって処置方法を変えなければならず、もし変えるのが
いやなら SPEN をOFF,ONしなければならないのだ。
・FERR ON: Framing Errorの場合
処置 SPENをオフにし、オンにする(間にNOPを1個入れる事例もある)
・OERR ON: Overrun Errorの場合
処置 CRENまたはSPENをオフにし、オンにする( 同上 )
書かれているのはデータブック「PIC18F2x_4xk22.pdf」の269ページ。
PIC16F193Xの場合は295ページに同様の記載がある。
PIC16F88系やPIC18F2550系の場合は エラーの種類によらずCRENをオフにし、オンにすれば
よい。ややこしい〜
データブックをたまたま見ていて気づいた。めったに起こらないエラーなので普通のテス
トでは発見できないだろう! 要注意である。仕様を合わせておいてくれ〜
15.バイナリーエディタ「Stirling」 <PICとは直接関係はないが備忘録として記載> '15/04/09
PICで行う通信プログラム(ABS)のデバッグのために「Tera Term」から送り込むテストデータの
中に0x00や0x03を入れる必要に迫られた。Webを探し回ってたどり着いたのが
「Stirling(後藤 和重氏制作のフリーソフト)」である。16進数表記での編集が簡単にでき、
とてもよく出来ている。
デバッグ手順は、
Stirlingで0x00などを含むデータファイルを作成
↓
Tera Termのファイル送信機能で送信
(送信前に □バイナリ にチェックすることを忘れないように!)
16.IDEやxc8コンパイラーをバージョンアップしたらEEPROMにアクセスできない '16/02/03
現象:IDEとxc8コンパイラーをバージョンアップした。もちろん古いバージョンのそれらを
アンインストールしてから新しいバージョンをインストール。
MPLAB X IDE v3.05 → v3.20
MPLAB XC8コンパイラ v1.34 → v1.36
余談:microchip社の日本語公式HPのそれらのダウンロードメニュー画面上で表示
されているバージョン番号と実際にダウンロードされるバージョン番号が異
なっている!!! ご愛嬌?!!! かなんなあ!!!
そしたら新しいバージョンでEEPROMの読み書きができなくなった。
<eeprom_read()やeeprom_write() 関数が動作しない>
バージョンアップ作業時、コンパイル時、プログラム書き込み時および実行時に何のワ
ーニングメッセージも出ていない。
調査:元のバージョンを再インストールしたり、いろいろ試行錯誤したが直らず、思案投げ首。
今回たまたま別のPCに元のバージョンのIDEとXC8コンパイラでの開発環境が残っており、
EEPROMにアクセスできる場合とアクセスできない場合のプログラムサイズを比べること
ができた。
比較の結果、本来は全く同じはずなのに、アクセスできない場合の方がサイズが小さい。
これはEEPROMアクセス関するコードが作られていないことを意味する。
この明白な証拠によりコンパイラーの動作を疑いはじめ、コンパイラーへの動作指定ウ
インドウ内の各項目を比較したが両PCは全く同じ指定。
対策:次の対策を実施したらプログラムサイズも等しくなり、EEPROMにアクセスできるようにな
った。
・IDEやxc8コンパイラーをインストールしているMPLABXフォルダーやxc8フォルダーの
配下の古バージョンのフォルダーは残さずきれいに削除する。
(Program Files フォルダー配下のMicrochipフォルダーの中。アンインストール後
に目で確認して削除すること)
・IDEのプロジェクト定義の古いものを削除。
(IDEでプロジェクトを削除してからユーザーフォルダー配下のMPLABXProjectsの中
の残骸を削除すること)
・新しくプロジェクトを登録する。
これら三項目全てを行わないとダメなのかは不明。このうちどれか一つが根本原因かもしれ
ないが、これ以上の究明は力不足であり情報も不足。
想像だが、コンパイラーがヘッダーファイルを手繰る(たぐる)ときに連鎖が切れてもワー
ニングを出さずにほったらかしにしてしまっているのではないかな?Microchipさん頑張っ
て!
17.IDEやxc8コンパイラーをバージョンアップしたらEEPROMに関してコンパイルエラーになる '17/05/23
現象:
IDEとxc8コンパイラーを新しく買ったPCへインストールした。
MPLAB X IDE v3.40 (旧PCのときはv3.20)
MPLAB XC8コンパイラ v1.40 (旧PCのときはv1.36)
そしたら、eeprom_read()やeeprom_write() 関数でコンパイルエラー。
warning: (1404) unsupported: The Busy_eep routine is no longer supported. Please use the MPLAB X MCC.
warning: (1404) unsupported: The Read_b_eep routine is no longer supported. Please use the MPLAB X MCC.
メッセージの趣旨は
これらの関数は将来使えなくなるので、MCC を使いなさい!
とのこと。 何やて〜! MCCって何んや! HEXファイルが作られない!
旧PCでは同じソースプログラムで問題がなかったのに。
調査と対策:
Webで調べると、参考資料 13 ツール・ラボ さんが
・MCC(MPLAB Code Configurator)を使って自分で関数を生成する方法
・代替策として従来からの関数をMicrochip社からダウンロードしてくる方法
について書かれておられます。
詳しくかいておられますが私には関数をすぐに作る自信がなく、そこに書かれている代
替策(従来からの関数をMicrochip社からダウンロードしてくる方法)を採用しました。
その要点。
1 microchip社のXC8コンパイラーのページ(参考資料 14)から、
使用するPIC型番に該当する Legacy Peripheral Libraries をダウンロード
しインストール。 特別むずかしいことはなし。
<これはコンパイラーに対するオプションなので一回だけ実施すればよい>
2 Peripheral Librariesを使用することを設定する。
<これはプロジェクトを作成するごとに実施する>
該当プロジェクト → 右クリック → Properties → XC8 linker
→ プルダウンメニューRuntime
下に隠れている Link in Peripheral Library にチェック
もし、この設定を忘れるとコンパイルの結果、次のエラーになる。
:0: error: (500) undefined symbols:
_Write_b_eep(dist/default/production\ABS_25K22_v7.X.production.obj) _Busy_eep(dist/default/production\ 以下省略
ついでに書いておくと、XC8 compiler の Warning level の既定値も変わったように思う。ワ
ーニングでもHEXファイルを作ってくれないので変更しておくこと。私は 0 に設定。
18.コメント右端が 文字「表」「能」 だとコンパイルエラーになる '17/05/23
C言語の配列に対してコメントで、親切心で、〜表 って記述したらコンパイルでエラー!
何々が可能 もだめ!
文字「表」「能」は『Shift-JISのダメ文字』なんだ。他にもいろいろある。参考資料 15。
(〜表 は 〜テーブル と書くべし。〜が可能 は ができる と書くべし。)
原因はPICやMicrochip社に関係ないこと (^_^;)
19.MPLAB X IPE を使ってHEXファイルを書き込む(MPLAB IPE 使い方) '17/05/26
<本項の実績は、MPLAB IPE v3.40 MPLAB X IDE v3.40 PICkit3 Windows10です>
コンパイルしてからPICに書き込むなら MPLAB X IDE で行えばよい。しかし、出来上がっ
ている、または入手したHEXファイルの書き込みはどんな方法で行うか?
残念ながら MPLAB X IDE ではできません。
私は MPLAB IPE (Integrated Programmer Environment)を使うことにしました。その方法を
簡潔に説明します。
・MPLAB X IDE をインストールした時に MPLAB IPE をインストールしていなければ、
それをインストールする。
・MPLAB IPE を起動
<このIPEの画面の縦が長すぎて私の内臓液晶画面1366x768でぎりぎり。
外付け液晶画面1280x1024だと余裕あり>
・デバイス(PIC)へPICkit3経由での電源供給を設定
メニューバー Setting → Advanced Mode → パスワードに microchip
→ 左にメニューが現れる
→ Power
→ 次の画面例のように 電圧を選択(今回のPIC18F25K22の場合は5.0V)し、
Power Target Circuit from Tool にチェック
→ Log out → メイン画面
・デバイスを選択 → Apply
・PICkit3のUSBを挿す → ToolsでPICkit3を選択 → Connect
・Source の右端の Brows → 書き込みたいHEXファイルを指定 → Program
参考 HEXファイルの存在場所(MPLAb x IDE の場合)
: /プロジェクト・ディレクトリ/dist/default/production/
参考 加える電圧が正しいかの確認画面が出る場合がある
書き込みとベリファイが正常に行われたメッセージを確認し終了。
IPEには非常に多くの機能があるようですが、趣味で使うのは上記+α程度でしょう。理解
できないボタンや設定は触らないこと。(出荷時に戻す設定があるといいんですがね)
IPEを使うほかに、PICkit 3 Programmer App and Scripting Tool v3.10 を試してみました
がPICkit3にOSを組み込むようにとのメッセージが出て、怖くなって中止しました。
参考資料18を見つけ中止したことに安堵しました。
PICkit 3 Stand Alone Programmer App v1.0 を使おうとしましたが、それの起動時にエラー
が出てだめでした。これら二つは過渡期のツールのように思います。
本項は参考資料16、17、18を見ながら実験しつつ記述しました。
20.PICの低消費電力/省電力の方法 '17/08/29
本テーマについては多数の資料(参考資料19、20など)がありますが、記述範囲が広すぎて
分かりにくい面があり、私がPICを使用する範囲において留意すべきポイントについて、その要点
をまとめました。
a 電源電圧はなるべく低くする。
理想はメーカーが保証する最低電圧近く、または自己責任での低電圧。
b 電源レギュレータはなるべく使わない。
使う場合は消費電流やドロップ電圧が少ないものを使う。
上記a、bはPICに限らずLED(発光ダイオード)や抵抗などのパーツ類も含め電子機器一般的に
言えること。
下記はPICに限らずMCU一般に言えること。
c クロック周波数はなるべく低く設計する。
d 電源電圧が低下した場合の自動リセット(BOR:Brown-out Reset )機能はむやみに使わない。
e 使用しないI/Oピン
出力モードとし、値を0(Low)にしておく。
f 入力モードのI/Oピン
プルアップしておく。(使い方によっては外部からプルダウンしておく)
次のような場合は、プルアップのダイナミックな切替を利用すると省電力化できる。
・プルアップしておいて、スイッチによる接地か非接地でプログラムの流れを切り替える
ような場合、接地かどうかの判定後、
接地ならプルアップを止め、
接地でないならそのままプルアップしておく
ようにすれば無駄なプルアップ電流や貫通電流(1でも0でもないときに流れる電流)
をなくせる。
・押しボタンの長押しを判定するプログラムの場合、
接地されている間のループの中を、
プルアップ中止命令;
カウンターup命令など;
ディレイ命令(例えば200ms);
プルアップ開始命令;
ループに戻る命令;
のように長めのディレイを入れておくと、プルアップ電流(の合計値)を大幅に少なく
できる。
・プルアップをする/しないをダイナミックに切り替えるプログラムで、プルアップでき
ないケースがある場合、
外部から抵抗をつかってでもプルアップかプルダウンしておく
と無駄な貫通電流(1でも0でもないときに流れる電流)をなくせる。
g 出力モードのI/Oピン
一般的には値を0(Low)としておく。
接続されている相手によっては1(high)が望ましい場合(h項 LCD の一つ目)がある
し、逆に必ず0(low)にしておくべき場合(h項 LCD の二つ目)がある。
h 液晶キャラクターディスプレイ(LCD)を使用する場合の留意点
(ここの説明はSC1602系の場合だが、一般的に言えることかもしれない)
・LCD側でデータ受け取り(ラッチ)が終わった時点で、PIC側のプログラムがDB4(DB0)〜
DB7ピンを high に設定した方が望ましい。理由はLCD側の入力ピンがプルアップされて
いるので、PIC側が low の方がプルアップ電流が減るから。(参考資料21)
これは相手がLCDに限らずMCUが相手の場合も同様に言えること。
・LCDのVDD端子の電源がオフになっているとき、入力信号が印可されていないこと。(参考
資料22)
PICがスリープ(パワーダウンモード)に入った時にLCD画面を消して省電力するような
場合で、LCDへの電源供給をダイナミックに切り替えたいケース。
〇 LCDのVDD端子の電源をオンにする前は、LCDへのすべてのピンが low であること。
〇 LCDのVDD端子の電源をオンにしてからLCDを初期化すること。
○ LCDへのすべてのピンを low にしてからLCDのVDD端子の電源をオフにし、スリ
ープさせること。
○ wake-upした時点では、まずLCDのVDD端子の電源をオンにしてからLCDを初期化す
ること。
(失敗談:high のピンがあるままでLCDのVDD端子の電源をオフにしたら、PIC合計で
70mAもの電流がながれたままスリープした)
・LCDのVDD電圧が4.5V程度以下で設計すると、LCDのVo端子を接地するだけで実用上十分な
コントラストが得られ、コントラスト調整用のボリュームが消費する電流をなくせる。
i スリープ機能(パワーダウンモード)の利用
上記の節電方法を活用することによりスリープ機能が生かせる。
参考資料
1 air variable 昔から電子工作が好きな趣味の〜 → 無料のPIC最強開発環境
2 木村繁裕 〜電子工作(PIC,Arduino,AVR)情報発信のお役たちサイト
PIC全般は → マイコン
割込については → 使用PIC → PICの動かし方入門はこちら
→ タイマー割込を使ってLEDを点滅
3 あたるは ひとりでマイコンやら・・・ →PICマイコン →RS−232C通信1、2
4 Microchip社 PIC16F88 Data sheet
5 Microchip社 PIC24Family Data sheet
6 著者名不明 JDMプログラマで12F629/675に再書き込みできない問題
7 Microchip社 MPLAB_XC8_C_Compiler_User_Guide.pdf
8 Microchip社 PIC18F2x_4xk22.pdf
9 Microchip社 PIC16F193X.pdf
10 日本スパンション株式会社 Spansion Inc. →サポート→Microcontrollers
→開発に当たってのノウハウ→EMC設計(ノイズ対策)→ソフトウエア編
11 Tera Term プロジェクト Tera Term
12 後藤 和重氏 Stirling
13 ツール・ラボさん PIC18系マイコンでEEPROM書込み・ADCなど周辺機能が動作しない時の解決方法
14 Microchip社 MPLAB XC Compilers
15 fudistさん Shift_JISのダメ文字
16 Sahara's WebLog MPLAB X IPE の設定
17 Microchip社 MPLAB IPE ユーザガイド
18 air variable PICkit3をPICkit3スプリクティングツール内にあるアプリケーションを利用して書き込む時の注意
19 Microchip社 低消費電力設計ガイド
20 後閑 哲也 省電力化ノウハウ
21 杉原 俊雄 液晶モジュール (SC1602)の制御ソフトを作る の4.1項
22 JM1GAD's Home Page SC1602 LCDモジュール (HD44780コンパチブル) の使い方 の中の参考資料 三共社 アプリケーションノートpdf の15.項 L
直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome