パーソナルツール
現在の場所: ホーム Members ichiro Life + Radio BLOG Categories PIC
編集操作

PIC

一つ上に移動

編集操作

久々にPIC書き込み

作成者 Ichiro Hieda投稿日 2008年02月19日 12時25分 最終変更日時 2008年10月22日 22時00分

PICは公私で使っています.PIC16F84で始めちゃったので,その後も使ってますが,次はA/D, D/Aの付いたものを使ってみようと考えてます.

使っているのはいつもなのですが,プログラムするのはごくたまのことなので,プログラムする度にPCもソフト環境も激変してます^^; 一番最初にやってた頃は,秋月のキットを買ってきて,MPLABの古いバージョン(V-5)と秋月の書き込みプログラムをWindows 98SEのマシンにインストールしてやってました(秋月の書き込みソフトはお世辞にも使いやすいソフトとはいえませんでした^^; ).

ソフトのできもさりながら,はんぱに高い電圧の電源が必要,制御用PICが必要なので,プログラマーの増設が簡単にできないという不満がありました(秋月から買うしかない).

その後,電源不要,制御用PIC不要のプログラマー,PIC Programmer 2を知り,作って,Linuxのコンソールからコマンドラインで読み書きしてました.アセンブラは相変わらず,MPLABを使ってました.たぶん,V-6あたりでしょうか.Linuxへのこだわりはともかく,MPLABがWindows環境でしか動かないので,分散した,効率の悪い開発システムでした^^;

それから,また数年が過ぎた今日,Windows 98SEのマシンなどは,ソフトが入ったまま廃棄してしまったので,あらたにMPLABの最新版8.02を現用のWindows XPのマシンにインストールしました.

PICのプログラマーは,引き続き,PIC Programmer 2です.読み書きも引き続き,Linuxのコマンドラインでもできないことはないのですが,どっちみちWindowsは使うので,プログラマーのソフトもWindows用のGUIのものを試してみたところ,サクッと動いてくれました.DL4YHFというドイツのアマチュア無線家が開発したWinPicです.Windowsがメインの人たちには有名なようですが^^; よくできたソフトです.これで当分いきます(日本語版もありますね.わたしゃ使わないけど^^; ).

結局,某所ではWindows XPに,

  • MPLAB IDE 8.02
  • PIC Programmer 2
  • WinPic

という体制です.うちのMac miniにUSB-Serialをつないで,WinPicが読み書き可能か後で試してみます.できなければ,Linuxのコマンドラインに戻ります^^;

USB-ParallelとUSB-Serial

作成者 Ichiro Hieda投稿日 2008年04月17日 17時05分 最終変更日時 2009年02月26日 05時15分

今日の昼に,秋月通商にFTDI社のチップを使ったUSB-ParallelアダプターとUSB-Serialアダプターを1個ずつ注文しました.

パラレルアダプターはzLogで試そうかと思っています.zLog用のUSBアダプターは持っていますが,符合が乱れるし,他のUSBのディバイスとの相性が悪くて,試してみることにします.だめでも900円なので^^; 他に使い回しは厳しいかも.

シリアルアダプターは,PIC Writer用です.FTDI社のFT232シリーズだと,シリアルポート用に設計されたライターがたいてい使えるということで,試してみます.シリアルアダプターは,他にも使い回せますし.

USB-Serial + Picprog2

作成者 Ichiro Hieda投稿日 2008年04月20日 07時33分 最終変更日時 2009年06月03日 12時32分

秋月のUSB-SerialとUSB-Paralleアダプターが届きました.

P1020817.jpg

さっそく,USB-Serialを,一番の目的であるPicprog2 (別名JDM)ライターにつないでみました.このライターの最大の特徴は電源が不要であるということです.逆に,制御線からプログラム用電源を取り出すので,ProlificのPL2302のように,信号線を省略してあるUSB-Serialアダプターは,全く使用できません.

P1020818.jpg

最初は,他のUSB-Serialアダプターのドライバーがいくつか先にインストールしてあるので,このFTDI社のFT232RLを使用したアダプターをつなぐと,COM8になります.

ライターソフトであるWinPicのメッセージは,COM4より上は,WindowsのAPI経由になるとのメッセージが出ます.API経由だからどうなのかは表示されないですが,まあNGなんでしょう.実際,いろいろやってもなかなかうまくいきません.

そこで,解っている他のアダプターのドライバーを削除したりしましたが,まあWindowsのことですから^^; 何の前進もありませんでした.

仕方がないので,Windowsの再インストールをしました.まあ,どうでもいいNo. 3のワークステーションですから.そして,FTDIのドライバーをインストールしたところ,なんとかCOM3になり,WinPicでも認識されました.

ただし,よく使う12F683, 16F84, 16F88の余分がなかったので,12F509で試しましたが,うまく書けるときと書けないときがあります.もう少し様子を見ないといけません.

そして,書けるときも,ものすごく遅いです.RS-232CのポートのあるPCにつなげば,一瞬で書き込めるのに,30秒くらいかかります(12F509の場合).

Re:USB-Serial + Picprog2

投稿者 JJ1NNH 投稿日時: 2008年04月22日 19時37分

いつも、お世話になってます。

SGHさん、私もPICに興味あります。でも、全くやった事ありません。
記事を見ていて、いーなーと思っちゃいました。

何かお勧めありましたら、ご教示頂けると嬉しいです。

よろしくお願いします。

Re:USB-Serial + Picprog2

投稿者 JE1SGH 投稿日時: 2008年04月22日 21時44分

JJ1NNH局,こんばんは.

シリアルポートがしっかりしていると,2番目の写真の手前に写っているライター(JDMライター)は非常に軽快です.しかし,今時はデスクトップPCにもシリアルポートがついてませんね.USB用としては,Halfmatという,個人経営の会社のライターがいいようです.
実は今日注文しました.来たらまたご報告します.

Re:USB-Serial + Picprog2

投稿者 JJ1NNH 投稿日時: 2008年04月23日 08時30分

JE1SGHさん、おはようございます。

PICライターは、秋月の物しか知りませんでした。
Halfmatの方が安いですね。ライターは書き込めればいいので、
どこのを使ってもいいのですね。(^^; (と、このあたりも全然分かっていません)

レポート頂きましたら、私も購入します。
その時は、よろしくお願いします。

Re:USB-Serial + Picprog2

投稿者 JE1SGH 投稿日時: 2008年04月24日 07時13分

ライターは,機能としては完成したプログラムのコードを正確に書き込めばいい,だけのものですが,案外使い勝手が重要です.それは,開発サイクルの中で,必ず行う行程だからです.プログラムのほんの一部を変更してもライターを使います.何度も何度も使います.
古いバージョンではありますが,AZ通販の製品で気になったのは,(1) 毎回コードのディレクトリーを探しに行かなければならない(ファイルオープンの時,いつもデフォルトディレクトリーに戻る.Windowsの仕様でしょうか^^; ) (2) (これは今でもそうですが)別電源が必要の2点です.何回も繰り返し作業していると,耐えられなくなります.
この2点がない,つまり,前に開いたファイルのあるディレクトリーにいってくれるプログラム(これ,Macなんかでは標準なんですけど^^; ),電源不要のライターは存在するわけですから.

Re:USB-Serial + Picprog2

投稿者 JJ1NNH 投稿日時: 2008年04月24日 21時17分

なるほど。
実際に使っている方ならではのアドバイスですね。
ありがとうございます。

Halfmatは、この2点を満足してましたでしょうか。
USBというのも、とてもいいですね。

HalfmatのPICプログラマー

作成者 Ichiro Hieda投稿日 2008年04月26日 19時00分 最終変更日時 2009年04月06日 05時07分

来ました.いやー小さい.オンラインカタログの写真で見て想像していたよりはるかに小さいです.

P1020819.jpg

毎回この小さいソケットにPICをさすのは辛いので,一緒に買ったヘッダーピンで,秋月のプログラマーから取ったレバー付きソケットをつなぎました.これは,購入前から考えていたことです.

P1020823.jpg

ソフトは,このプログラマーの原型Writer509(シリアル接続)を設計したゆうすけさん作のW509とHalfmat社の社長Feng3さん作のminiPICProgの二種が使えます.いずれも個性のあるものですが,できたHEXを書き込む,というだけ考えれば,大差はありません.

PIC関係の開発に実績のあるお二人の作なので,とにかく少ない手数で書き込めます.どちらもプログラマーがつながっているCOMポートを自動的に探し出すので,USB接続では特に楽です.

Windowsでは,コントロールパネルを開いて,いちいちCOMいくつかを確認するのがフツーなようで^^;

ただし,どちらのプログラムも,フォントを大きく設定していると,ボタンがはみ出したり,データの数字が隠れたりして,使えません.

横長の液晶モニターを使っているので,Windowsでは,フルの解像度である1680x1050以外だと,縦横比が正確でなくなり,GoogleEarthで地球がゆがみます.ですから,1680x1050にしてフォントを大きくしています.

Mac (Mac mini)だと1344x820なんてモードがあって,地球は丸いです.

このWriter509にはつかえない,WinPICは,フォントの大きさにかかわらず,使えますので,W509やminiPICProgも改善して欲しいと思います.

なお,手持ちの12F509, 12F683, 16F88は問題なく書き込めましたが,16F84はダメでした.Halfmatに質問したところ,16F84のように古いPICでは,Device IDがないので,Device IDを無視するように設定する必要がある,とのことでした.

Cでエレキープロジェクト

作成者 Ichiro Hieda投稿日 2008年05月06日 06時07分 最終変更日時 2009年06月03日 12時35分

最近,またPICをいじりはじめています.特に新しい制御をするというさしあたっての課題はありません.無理に考え出せば,

  • FT-1000MPからだけ行っているアンテナの自動切り替えをIC-740, TS-2000SXからもできるようにする
  • ローテーターの方向のデジタル的読み出し,制御

あたりがありますが,特に必要性があるわけでもなく,あまりやる気が出ません.

念頭にあるプロジェクトは,過去のプログラムの焼き直しです.

つづき

 

 

PICのC化

作成者 Ichiro Hieda投稿日 2008年05月14日 22時31分 最終変更日時 2009年06月05日 11時20分

もう,7〜8年前になりますが,PICで,エレキー,アンテナ切り替え器,FT-1000MPへPC音声送り込み機(ボイスメモリーDVS-2の代用)を作りました.

16F84で作ったのと,全部アセンブリ言語で作ったのとで,自分で修正するのもなかなかたいへんですし,機能拡張したり,他のPICへの移植はかなり困難です.

そこで,後々のことも考えて,プログラムをCに移植するプロジェクトに着手しました^^;

少しやってみると,条件分岐やループが非常に楽です.アセンブリ言語だと,

ステータスの変わるオペレーション
BTFSS  STATUS,Z
GOTO   どこか

なんてあったとき,Zeroフラグがセットされているときスキップだから,ゼロでないときにどこかに飛ぶんだな,といちいち考えないとなりません.BTFSCだとゼロフラグがセットされてないときスキップだから,ゼロでなくないときどかに飛ぶし,STATUS,2と書いてあったら,マニュアルを見なければ何のフラグか解りません^^; マニュアルを見ている間にゼロでないときか,ゼロでなくないときか忘れます^^;;

Cだと,

if (変数など) goto どこか;

でいいんですから.とはいえ,アセンブリ言語で書いたプログラムをCに変換するときは,さんざん悩みます.動かないときは,とりあえず!を付けてみたりして^^;;

いちおう,上記の三種については,今日までに完了しました.

ソースについても,順次公開していきます.エレキーは,まだ少々動作が怪しいので,もうしばらく自分で打ってみて,動作確認したいと思います.アンテナ切り替え器も検証中です.

あと,FOXハンティング用のFOXもありました.このプログラムのC化はまだ着手していませんが,そのうちやろうと思います.

詳細記事

PICのC化 その2

作成者 Ichiro Hieda投稿日 2008年05月15日 12時18分 最終変更日時 2008年07月20日 07時08分

今は,ステップモーターの制御プログラムのC化を手がけていますが,なかなか難しいです.パルスをジッタがないように発生させるために,タイマー割り込みを使っています.

まず,序の口ですが,

label1
    処理
    decfsz   ii,1
    goto     label1

でしたら,

label1:
    処理
    if ( --ii ) goto label1;

でいいのですが,

label1
    処理
    decfsz    ii,0
    goto      label1

だと,

label1:
    処理
    if ( ii-1 ) goto label1;

としないといけません.0と1の違いで^^; 解ってはいますが,ちょっと見ただけじゃなかなか間違いを見つけられません.

これだけならそんなに難易度は高くありませんが(といいつつ,気がつくまでかなり時間がかかりました),こういうのが複合して攻めてきますので,なかなか正解にたどり着けません.

本日の極めつけは,SDCCのbugというか仕様です.

    while( 1 ) {
        ii=1;
        jj=2;
        if ( RB1 ) break;
    }

です.毎回,iiとjjに新鮮な1と2を送り込みながら,RB1がHになるのを待つルーチンです.これしきのことがなかなか動いてくれなくて,生成されたアセンブリ言語を見たら,なんと,ii, jjへの代入は,1度だけで,RB1の読み込みのみでループしています.

確かに,これだけ見れば,毎回いちいちii, jjに定数を代入する必要はないですが,割り込みルーチンが,ii, jjを書き換えるので,常に新鮮な1, 2にする必要があるのです^^;

部分的に最適化を止める方法があるのかどうか解りませんので,

    while ( 1 ) {
        _asm
        movlw  1
        movwf  _ii
        movlw  2
        movwf  _jj
        _endasm;
        if ( RB1 ) break;
    }

として解決しました^^;

生成されたプログラムのサイズは,2.5倍で,16F84(A)の0x3FFまででは,残りわずかです.

ただし,オリジナルのアセンブリ言語ではEEPROM領域に入れていた,パルス発生タイミングのテーブルがプログラム領域に展開されているので,この2.5倍がまるまるコンパイラーのできの悪さではないです.いや〜,それも含めてコンパイラのできを考えるべきかも^^;

機能を拡張するためには,16F84Aより安い^^; 16F88に移植する必要があります.

カテゴリ
PIC

PICのC化 その3

作成者 Ichiro Hieda投稿日 2008年05月16日 12時30分 最終変更日時 2008年06月30日 08時42分

PIC16F84で,もともとアセンブリ言語で書いてあったプログラムのSDCCへの移植は,公私の案件ともほぼ完了しました^^;

そのうちの,特に重要なものについては,今後のことも考えて,16F88に移植することにしました.

16F84(A)から,16F88への移植については,あちらこちらに書いてありますが,SDCCを使っての移植についてはあまり見つからないですね.

実際やってみると,高速で割り込みがかかるようなプログラムでなければ,拡張されたconfigの設定と,ANSELの初期化くらいで動きます.

しかし,微妙なタイミングで動くプログラムの場合は,上記の設定をしてSDCCでコンパイルし直しても動いてくれませんでした.

遭遇した問題は,今のところ2点で,SDCCではデフォルトの演算が16bitで行われてしまう,ユーザーのデータ領域にもバンク切り替えがあるという点です..

インラインでアセンブリ言語を書く場合,

    _asm
    MOVLW    32
    MOVWF    _ii
    _endasm

は,

    _asm
    MOVLW    32
    BANKSEL  _ii
    MOVWF    _ii
    _endasm

としておく必要があるようです.インラインでアセンブリ言語を書くこと自体,普通は必要ありません^^;

16bit演算については,これも時間に余裕がない処理では気をつけた方がいいです.

    unsigned char jj;
    ...
    if ( jj-1 ) goto どこそか;

は,16F84では,8bitの比較として,jjから1引いて,ゼロかどうか判断するという,期待どおりのアセンブリ言語生成でした.

ところが,16F88では, ( jj-1 )を16bitとして見なすようで,生成されたアセンブリ言語の長さはもとの2倍以上になります.まあ,確かにそれが正しいCコンパイラーの所作なのかもしれません.これを避けるために,

    if ( jj!=1 ) goto どこそか;

と書き直しました.これは,jjが8bitの変数ですから,8bitでの比較をするのが正しいですし,アセンブリ言語の生成もその通りになっています(ただし,BANKSELの分,16F84(A)用よりは長くなります).

結局は,生成されたアセンブリ言語を眺めてトラブルシューティングということになります^^;

カテゴリ
PIC
« 2009November »
Su Mo Tu We Th Fr Sa
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          
このBlogについて
当サイトはFirefoxで閲覧すると整って見えます.
最近のエントリ
アンタッチャブル〜事件記者・鳴海遼子〜 ichiro 2009年11月21日
"QRZ" ichiro 2009年11月21日
ついに朝日新聞までが「入籍」 ichiro 2009年11月19日
「詳細」をデフォルトにできない ichiro 2009年11月19日
巨大スズメバチの訪問 ichiro 2009年11月18日
最近のコメント
Re: Confirmできないこと JE1SGH (管理人) 2009年11月11日
Confirmできないこと ON9CCS/はむ 2009年11月11日
Re:結婚会見と破局会見 ichiro 2009年10月22日
結婚会見と破局会見 ON9CCS はむ 2009年10月21日
Re:17m カリブオープン はむ 2009年10月05日
 
カテゴリ
Money (33)
iPod (37)
English (28)
Common (57)
COREBlog Plone Zope (65)
Ordinary Life (337)
Legacy Ham Radio (491)
Health & Food (246)
Network and Computer (469)
TV + MassComm (425)
Distributed Net (32)
JG1YGH (75)
Home and Garden (73)
Moblog (20)
Australia (90)
Politics and Economy (118)
Weather (111)
Music (46)
Auto (49)
Sports (37)
Mac Forever (152)
Travel (128)
Travel to Thailand (12)
Antenna (33)
PIC (11)
Consumer (17)
Security (5)
ことば (13)
人権問題 (9)