FC2ブログ

IPEで書けた!

2014-03-29      
 今となっては元の環境に戻せないため、そもそも何故書けなかったのかは判りませんが、とりあえずIDEでビルドしたHEXファイルがIPE(V2.05)できちんと書き込めました。設定について覚え書きをしておきます。



 PIC12F1822をターゲットにしましたが、以下のように設定変更が必要です。

 ◆「Advanced Mode」の「Power」タブで「VDD」 を3.3V に設定(ディフォルトは5V)
 ◆同タブの「ICSP Option」内の「Power Target Circuit from Tool」のチェックボックスをオン

 ターゲットの基板で直接プログラム書き込みを行う場合の「LVP」(Low Voltage Programming)では、PICのMCLR/Vpp端子を用いることになりますが、この端子を使わない(入力ポートとして使う)場合のConfig ビットが上手く反映するかなど、確認事項は他にもあるものの、ひとまず書き込めたというのは収穫です これで「PICkit 3 Programmer」から卒業かな

Windows7移行後のPIC開発環境準備

2014-03-29      
 今後の作り物を見据えると、そろそろPICの開発環境準備が必要に・・・というわけで、今朝からPICの開発環境準備を始めました。直前のPIC活用工作は「ミニ・エレキー」で、このときは未だ「Windows XP」がOSだったため、今回の環境構築は「Windows7へのクリーン・インストール」ということになります。勿論、この辺りの差異については供給されているインストーラが保証するでしょうから、「必要な作業をすればOK」となるはずと高を括って作業開始。

 まずは「XC8」(V1.30)。普通に考えれば「MPLAB X IDE」を先に・・・となりますが、これを先にインストールしておくと、「利用可能コンパイラ」としてIDE が自動的に組み込んでくれて便利なことが判っていたためこの順序とししました。最後の最後にエクスプローラが「(応答無し)」となりましたが、そこは我慢・・・暫くすると動き出してこれは問題無くインストールできました。

 続いてご本尊たる「MPLAB X IDE」(V2.05)をインストール。最後の段階で「MPLAB driver switcher」をインストールするかを聞いてきますが、これは自分のように「PICKit3しか使わん」とか「古いMPLABは卒業」という使い方では不要なソフトとなるためインストールせずに完了。

 さぁ、これでひとまずのコンパイル環境は構築完了です。早速、前述のミニ・エレキーをリビルドしてみたら、問題なく動作しました

 続いて「MPLAB X IPE」(V2.05)・・・これは、旧環境ではどういうわけかまともに動かなかったため、今回も期待はしていませんでしたが、更新が既に終了している「PICkit 3 Programmer」を使い続けるのもどうかと思い、何とかまともに動いてくれ・・・と思ったら、このソフトが利用する「javaw.exe」が見つからないという問題が発生。そこで、フォルダ参照している以下の箇所を覗くと、java関連のソフトがzipのまま展開されていないことが判りました。

 ★ C:\Program Files\Microchip\MPLABX\sys\java\jre1.7.0_25-windows.zip

 多分、switcherを入れなかった弊害なんでしょう(この辺りの処理をスキップされたんでしょう)が、とりあえずこのzipを解凍してフォルダ構成を整え、さらにPICKit3のファーム等のリセット(USBケーブルを挿す際に、PICKit3本体のボタンを押しながら挿す)を行ったら、IPEとPICKit3の接続は上手くいきました。「Config Bit の怪」など確認しなければなりませんが、ひとまず全ての準備は完了。

 この後、PICが上手く焼けるか試してみたいと思います。

PIC12(L)F・・・「L」の意味合い

2013-09-24      
 エレキー自作三昧が漸く一段落しましたが、コメント欄ではお馴染み()の「昔ローカルさん」にコメントでアシストを貰ったことを書き留めておきたいと思います。

 PIC16F18xxシリーズの「8ピン版」としてPIC12F1822があり、こいつが拡張ミッドレンジのPICで結構な機能を持った代物。その上1個80円@秋月と来れば「買い」でしょう・・・というわけで、ミニ・エレキーは製作途上で宗旨替えしてこいつを心臓部と決めたわけです。また、小さい割にはプログラム容量が2Kワードもあり「C言語でもいけるっしょ」と高を括り、初の「オールC言語」にしてみましたが、何とか目論見通り収まりました。

 エレキーの機能に着目すると、「殆どパドル入力待ちになる」ということには簡単に気づきます。即ち、PICの「SLEEP機能」を上手く使えば電池入れっぱなしで何年も保つものが作れちゃうわけで、今回これを目指しました。ところが、SLEEP状態で実測20μA程度の消費電流あり 「おかしいなぁ・・・もっと少ない筈」とあれこれ試してみたんですが、詰まるところ20μA以下にはできませんでした。

 そこで、改めてこのPICのマニュアルをよく読んでみると、その謎は明白に記されていました。



 このシリーズには「(L)」が付いたものがあるわけですが、今回使ったのは「L無し」・・・上の表でグレーのハッチングが掛かった方です。VDDが3Vの時、Typicalで22μA このデータ、基本機能を全部OFFった値ですから・・・合ってるじゃねぇか

 要は「もっとすんげぃ省エネしたけりゃ、『LF』の方を買ってね」ということです。旧来の8ピンPICは、諸機能を切った状態での待機電流がnWクラスなんだよね・・・同じような型名付けるから、間違うじゃろがぁぁぁ ということで、「PIC12LF1822」を探してみたら、マルツさんに132円で売っておりましたとさ・・・。

 このエレキーを追試される方も少ないかと思いますが、他の用途にせよ、省エネ狙いなら「L付き」にしましょう。ちなみに、扱える電源電圧(VDD)が違います(タダの「F」は5.5V・・・TTLレベルまでOK、「LF」は3.3V・・・乾電池2本までOKです)のでお気を付けあそばせ

XC8の「クセ」など

2013-09-18      
 最近使い倒しているXC8とその関連について、忘れそうな些細なことを記録しておきます。

 ◆ 変数を使うか使わないかの差異

 当たり前と言えば当たり前ですが、コンパイラのクセを理解して使うことで、無闇に大きなプログラムにしない工夫はできるわけですが、とりわけ「変数」を使う、使わないという根幹的な判断は、やはり試してみないと判らない・・・ということが判りました。

 例えば配列のインデックスについて、インデックスの要素番号を示すものを計算して記述する以下のような場面では、どちらのパターンが効率が良いか、やはり試してみないと判らないようです。

 unsigned char   n,idx,ans;
 unsigned char        tbl[10];
         :

 n = idx << 3;                     // A
 ans = tbl[n];

 ans = tbl[idx << 3];          // B

 きっと規則性はあるんだと思いますが、まぁ上記のように2パターンをコンパイルして短い方を選んでいくという作業で切り分けするのが簡単。全く同じ場合もあるんですが、数ステップの差が出る場合があります。XC8の無償版は肥大化傾向にありますから、小さなメモリでは直ぐに一杯に・・・暇潰しに如何ですか

 ◆ const 定義が256バイトまでとは・・・

 これ、結構な足枷です。テーブル論理重視でコーディングするとif 文等の分岐が減って論理バグが少なくなるため、結構初期値有りデータは使います。const を付けないとデータエリアをジャンジャン食い潰すためどうしても使いたいんですが、コンパイラの仕様だから「しようがない」・・・って、駄洒落かよぅ

 ◆ やはりライブラリ関数は巨大過ぎ

 EEPROMのちょっとした読み書きライブラリについては少し前に記事にしたように、やはりライブラリ関数は「プログラムの大きさ」の観点ではあまり好ましくない感じです。勿論メモリさえ大きければ、こうした部分を自前で作った挙げ句に潜むバグは撃滅できますから一長一短ですが、何にせよでか過ぎ・・・って、まぁこれも「しようがない」・・・って、続けんのかよぅ

 ◆ 汎用変数を用意するといいかも・・・

 PIC如きのプログラムで、リエントラントな関数がどうしても必要ってなことにはまぁならんでしょう。そうすると、割込処理との競合(共用)だけを考慮して、あまり意味を持たないワーク変数はまとめてしまうという手が使えます。何気なく関数内でポツポツ使うワーク変数(for 文のループ回数用の変数などなど)は、代表名を決めてしまい「グローバル変数」として1つ用意しておけば十分でしょう。この辺り、あまり「プログラムの美しさ」を重視せずに「自分のローカルルール」を作った方が良さそうですよ。

 ◆ とにかく四則演算は注意して使うこと

 PICに関する解説ホームページの各所に丁寧な説明が見られますんで、そちらをご覧下さい・・・なんですが、「符号無しchar」に拘りつつ、乗除算を無碍に使わぬように工夫すれば、メチャメチャ大きくはならないしスピード的にも有利。その分クロックを落とすとさらに「省エネ」のオマケが貰えます

 ◆ XC8無償版は「アセンブラの倍」と思え

 純粋に二倍・・・とはなりませんが、やはりかなり冗長です。多分、最も高価な有料版だと半分になる・・・という謳い文句そのものだと思います。
 アセンブルリストが吐き出せれば、ソースベースで自動的に不要な処理をちょん切ったりできそうですが、どうにかならないかしらん・・・と頭をひねっています。

 ◆ ポインタも使い方次第

 構造体配列などは、そのまま配列番号でインデックスせずポインタで扱ってやると、吐き出されるニーモニックがかなり小さくなる場合があります。見通しが悪くなるんで良し悪しですが、お好きな方はお試しあれ。

 自分的にショックだったのは、やはり「const 定義の256バイト制限」です。新しいPICはプログラムエリアのインデックスができますから、この辺りはアセンブラに逃げるのも有りかもしれませんが、ちょっと萎えちゃった部分でもあります。

PIC12F1822の「RA4」が曲者!?

2013-09-09      
 随分お気に入りになってしまったPIC12F1822ですが、やはり「クセ」のようなものがあります。ちょっとした落とし穴がありましたので覚書・・・。

 このPICを「MPLAB X IDE」でコンパイルして「PICkit 3 Programmer」で書き込みを行うと、RA4のビットがディフォルトで「CLKOUT」として動作するピンになってしまうんです。これに気づかずにデバッグしていると、RA4のピンが全く動作しないため、「おいおい、飛ばしちゃったかな」と焦りますのでご用心
 多分、 IDEでCLKOUTのデバッグをする機能を使えるようにこうなっているんでしょうが、「#pragma config」での指定(CLKOUTEN = OFF)は見事に無視されます IDE上でConfig ビットを弄ってからコンパイルしても反映されず・・・。

 解決策としては、今いまの書き込みツールである「PICkit 3 Programmer」でHexファイルを読み込む度に、Configの当該ビットの値を書き換えていますが、実際ちょっと難儀です



 まぁ、操作自体は簡単で、矢印の先の部分をクリックするとポップアップでConfigエディタが開くんで、当該ビットを「お好きにどうぞ」という寸法です。

 IDE自体、デバッグ用のフォルダと書き込み用のHexファイルが吐き出されるフォルダは違っていますから、ちょっと工夫すれば解決しそうですがねぇ・・・Microchipさん、何とかしてけろ

「MPLAB X IPE」でプログラムできない・・・

2013-09-08      
 ミニ・エレキーに採用した「PIC12F1822」・・・ピリリとアレンジの利いた小粋な8ピンPICに何とか収まる程度のプログラムが書けて、いざプログラムの書き込みをやろうとIDEと一緒に付いてくる「MPLAB X IPE」を動かしてみたんですが、この小さなPICへの書き込みが上手くいきません

 このプログラム書き込みツールはMicrochip社純正ですから、同社製品であるPICkit 3 とのコンビで書き込めないはずはないんでしょうが、どうも直視的に「よく判らんツール」に成り下がってしまっています。PICkit 3 には無事つながったものの、このPICは低圧でも書けるぜ、でもイヤなら「No」を押せ・・・みたいなメッセージの後、何と「No」が表示されないんです
 IDEの前バーションである「MPLAB IDE」(「X」が付かない奴)は、プログラマが内包された形であり、IDEから直接書き込むようなイメージだったため、唯一「PICkit3を扱う際の注意事項」を守れば比較的手軽に書き込めて便利だったのにぃ・・・と文句を言っても始まらず。

 結局、「PICkit 3 Programmer App and Scripting Tool v3.10」でお茶を濁しましたが、このツールの正式サポートはつい最近終わってしまったようで、今後の新しいPIC群への書き込みは「MPLAB X IPE」に踏襲されるはず・・・まぁ、何れ直るんでしょうが、ちょっと気持ちが悪いです 本当は原因追及したいんですが、「書き込めるルート」は確保しましたんで、ひとまずこれでいきます。

 ちなみに、上記ツールをインストールしたら、「MPLAB IDE」からPICkit 3 につながらなくなってしまいました。多分、デバイス認識時点でこのツールとバインドされちゃうんでしょうかねぇ・・・。

XC8が用意するEEPROM用関数

2013-08-17      
 旅行から帰ってからの3日間の休みも終わって、その後の木、金の2日間は出勤・・・とは言え、まだお盆休みを中心に夏期休暇真っ最中の連中が多いため、比較的ボンヤリと過ごせた2日間でしたが、まぁ暑いのは相変わらずで、都内への外出がちょっと堪えました。いくら「クールビズ」とは言え、ワイシャツとスラックスでは汗がそう簡単には蒸発しませんから、下手をするとあの「灼熱旅行」よりも暑い感じ

 あっという間に週末を迎えて漸く普段の生活に戻った感じで、今日は昼間からあれこれ同時進行ながらも、例のエレキーのプログラミングを進めました。骨格になる部分は大体できてきて、あとはLCD表示を含むメモリ・キーイング周りの部分が残るのみとなりましたが、ここにはEEPROMの読み書きが欠かせません。ところが、この部分のプログラミングは未経験・・・アセンブラ数行で書ける程度なんで、まぁ手作りしても大したことはないんですが、XC8のマニュアルに「関数とマクロ、用意してあるわよ」と書いてあったのを思い出し、どんなコードが吐き出されるのか見てみようとちょっと実験。



 EEPROM内の変数は「__eeprom」を使って定義、読み出しは「eeprom_read」、書き込みは「eeprom_write」という関数を使えるようになっています。「xc.h」のインクルードが大前提です。
 最初この関数に「こんなシンボル無いぞ」というエラー(コンパイルは正常にできるが、IDE上に赤いエラーマークが出る)が付きまとったため閉口しましたが、xc.hのインクリードの直前に「EEPROM_SIZE」というシンボルを以下のようにdefine定義したらエラーが取れました。

#define EEPROM_SIZE   256

 その後は、この定義を外してもどういうわけか大丈夫になっちゃいました。海外で困っている人もいて、「古いMPLAB IDE 8.xxでは上手く行くぞ」・・・みたいなことが書いてあったんですが、まぁひとまずこれで回避できたんで様子見。

 さて、興味津々の展開形です。



 44行・・・うーん、ちょいと冗長です。EEPROM制御レジスタがBANK3であり、一般変数置き場のBANK0との切替が煩雑になっていますね。アセンブラで10行程度の筈なんで、ちょっとなぁ・・・と思いつつも、ちゃんと書込完了を待つ処理も入っていますから、長ささえ気にしなければ使えそうです。今回はこれで目を瞑ろうかな

 ちなみに、コンパイラが引っ張ってくるお便利関数は、「Windows XP」では「C:\Program Files\Microchip\xc8\vx.xx\sources\」の配下に格納されています。他のOSでも似たような場所かと思います。いろいろと参考になりますよ

追記 2013/08/19>
 この書込処理以外に、「__eetoc」「_eecpymem」いう関数が展開されるため、もっとプログラムメモリは食われていました ・・・。場合によっては、自作した方が良いかも。

PIC16F1829に決定!

2013-07-23      
 秋の全市全郡に向けての準備・・・結構間があるとはいえ、ボンヤリ過ごすとあっという間に近づいてくるこのコンテスト向けに、外付けのエレキー製作を画策しています。「目移り症」であることは前から判っていて、ローカルノイズの撃退工作やトランスバータの製作等々宿題は沢山あれど、やはり「期日が決まっているもの」の方が気になります。さらによく考えたら、この夏休みは家族旅行で埋まってしまい製作時間が案外少ないこともあって、ちょっと焦ってきました。
 エレキー作成では、自分的には勿論PICの出番なんですが、少し前にあれこれ味見していた「XC8」の気になる不具合が直ったことも製作に向けて動ける原動力に。さらに、アセンブラより生産性で圧倒的に有利なC言語で作ろうと、先週辺りからあれこれ悩み始めていました。

 エレキーの単機能としては長・短点メモリの付いた小型のもので十分であり、それならPIC12Fシリーズでも良いんですが、逆に「納得できる機能を具備したもの」を作ってみるのも一興。ファンクションスイッチによるメッセージ・キーイング機能付きのものを捻り出そうと、このところ思案を続けてきましたが、具体的な形に持っていこうとプログラミング準備に入る傍ら、必要機能を実現するためのI/O数などを考え始めました。そして、18本のI/Oが制御できるPIC(=20ピン)、それも拡張ミッドレンジのもので、ある程度の量作り込んでもメモリがパンパンにならないものを探していたんですがなかなか見つからず そこで、常套手段である本家Microchipのホームページから順を追って探していったら、PIC16F1828/1829を発見しました。

 このPIC、秋月の「PIC16Fの20ピン」という辿り方では見つからず(秋月のホームページの仕分けが上手くないです)、かなり遠回りをしました・・・が、結局秋月にも売っていて、よりメモリの多いPIC16F1829が150円也 これで行くことにしました。



 エレキーの入出力をざっと分けると、入力にはパドルやエンコーダ、スイッチ類が居並び、出力はLCDとキーイングTR程度・・・圧倒的な「入力マシン」であるエレキーは、殆どの時間を「入力待機状態」で過ごす代物です。即ち、何らかの入力が無いときはほぼ「待ち状態」ですから、入力トリガの割り込みで起き上がるような仕掛けができれば、かなり省電力の(ひょっとしたら、電源SWが不要になるぐらいの)エレキーができそう。そこで、入力ポートの変化で割り込む仕掛けが欲しいなぁ・・・と、このPICのマニュアルをしげしげ眺めていたら、「INTERRUPT-ON-CHANGE」という機能を発見 これぞ、PICの「スリープを呼び覚ます入力割り込み」として利用でき、省電力対策は万全となりました

 一方、スイッチ操作に付きものである「チャタリング」には、それを取り除く仕掛けが付いて回ります。これは、ルックイン方式のタイミング論理(プログラム論理)により解決できて造作もないんですが、結果的に「ルックイン=間欠動作」となるため、省エネ的には不利。まぁ、次回のルックインまでタイマ割り込み待ちで寝るっていう方法もあるんですが、とにかくスイッチ数が多く面倒・・・何とか複数回のリードをせずに済む「CR+シュミットトリガ」辺りで抑え込みたく、PICの外にシュミトリ(74HC14辺り)でも並べるべか・・・と思いつつこのPICのマニュアルを眺めていたら、何と全てのポートをシュミトリ仕様に設定できることが判りました。つまり、CRのパッシブ部品で時定数だけ作ってやれば何とかなるということに

 今回のPIC選定でPIC16F18xxシリーズのマニュアルをかなり眺めることになりましたが、ピン数もさることながら個々の具備機能が少しずつ違っていることを含め、結構様々な用途に使えることが判りました。特に今回選定した「1829」は、プログラム空間が8Kワード、自由に使えるSRAM領域(GPR)が1Kバイトもありますから、C言語で開発しても1Kライン程度(無論、乗除算等が多いと厳しいですが・・・)は組み込めてしまいそうです。クロックも最大32MHzですから、かなりの用途に使えるのではないかと思います。

XC8のアセンブルリスト不具合改善!

2013-06-27      
 XC8の「自分的不具合」を見つけてから、何となく疎遠になってしまったPICですが、漸く改善したようです。

 XC8のVer 1.12で見つけた不具合は、多分拘らなければどうということのないもの・・・アセンブルリストの「行情報」が何やらミョウテケレンなコメントになってしまい、直視的に「Cソースのどこをコンパイルしてこの結果になったのか」が解りにくくなったというまさに末梢の、それこそ「重箱の隅」的なものだったんですが、こうした細かいところが気になるように「ここのブログ主」はなっちゃっており、PICに関わる様々な作り物に対するやる気が失せてしまっていました。

 ところがたまたま今日の昼休み、「様々なマイクロチップの環境調査」と称し、仕事の立場上あれこれD/Lしても怒られないことをいいことにあちこちのサイトをチェックしていたら、XC8の最新版がVer 1.20になっていることに気づいて即インストール。そして、上記の不具合部分を確認すると、見事に元通り・・・というかVer 1.11の頃のような「正しきコメント」に戻っていました。

 帰宅後、早速最新版のMPLABX IDEと共に上記最新のXC8を改めてインストールし直し、アセンブルリストを確認してニンマリ これで、夏休みを含めた「交信停滞期」に、PICであれこれ遊べそうです

XC8のC言語のConfig設定(その2)

2013-01-19      
 XC8のConfig設定について、「ちょっとクセがあるぞ~」という覚書をしておきましたが、「#pragma config」を使った場合の設定値の反映について総ざらいをしておきます。

 ① 「#pragma config」では、2007番地と2008番地にある各種のビットを同時に設定できる。

  #pragma config WDTE = OFF, CPD = ON, LVP = OFF, MCLRE = OFF, FOSC = INTOSC

  ※ ピンクの太字は2008番地のコンフィグビット

 ② 「#pragma config」は、以下のように適当なところで複数行に分けて記述できる。

  #pragma config WDTE = OFF, CPD = ON, LVP = OFF
  #pragma config MCLRE = OFF, FOSC = INTOSC

 ③ MPLAB X IDEのデバッガ上、CPD=ONは設定反映されない。

 なお、MPLAB X IDE上でコンフィグビットを見るには、「Window ⇒ PIC Memory Views ⇒ Configuration Bits」で表示できます。英語ですが、きちんと整理されて見られて便利です。
Calendar
08 | 2018/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 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 - - - - - -
New !
Category
Comments
Monthly Archives
Track Backs
Counter
Sunspot Now !

 


Survey Results

 

Profile

どよよん無線技士

Author :どよよん無線技士
こおるさいん:JM1DPL

アパマンというハンデにさらにQRPまで課し、失敗連続のヘッポコリグや周辺機器の製作・・・趣味というより「荒行」か!?

メールは「JARL経由」でお願いします。

Links
Follow me !
RSS Links
QR Code
QR