プロポとPCの接続完了

propo2pc_sch.gif

プロポとPCを接続する話ですが、コンパイラのバグに遭遇するなど不運な事態に遭遇したものの、ようやく完成しました。回路図(EPS版)と使用したPIC(16F648A)に焼きこむためのバイナリ(HEXフォーマット)PCからのコントロールライブラリ(C++ヘッダファイル)をおいておきます。

propo2PC.jpg
完成したハードウェア。

コンパイラのバグですが、結局バージョンをあげる(3.174->3.249)ことで解消されました。バグと戯れている間にPICのアセンブラが読めるようになったので、その成果がプログラムにも反映されているかと思います。
例えば、CCSのC言語コンパイラにはタイマのカウント値を設定したり読み込んだりするための関数、set_TIMERX()やget_TIMERX()があるのですが、これらを使って

set_TIMER1(get_TIMER1());
などとすると、思ったとおりの動作が実現できず、タイムラグが発生します。これはタイマー1が16bitタイマーであるのに対し、PIC16には16bit操作命令が存在しないため、8bit命令を駆使して実行されます。そのためタイマー1のカウント値を読み込んだ直後にカウント値が設定されることはなく、タイムラグが生じているようです。

そのようなことを踏まえて、今回のソースを書きました。一部書き方が素のC言語のようになっている部分がありますが、その部分がタイミングシビアな部分です。あと、結局バグが生じていたINT_RDAはバージョンをあげることにより解消したものの、今回は使用しないことにしました。

現在快適にプロポのコントロールができています。室内飛行機の自律制御に向けて、次は機体搭載機器の検討をしてみる予定です。

※その後、接続部分を基板化しました。

May 31, 2006 22:21 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

まずは解決されて良かったですね。

3.174はある意味暗黒時代のバージョンです。(T_T)
この頃MPLABが6.xになったりしたのでこの頃は日替わりでバージョンアップしたりしたらしいです。
(とにかくバージョンアップがこまめ(?)に行なわれていました。)

しかもこのバージョンは3年以上前だと思います。
もしかしたらPIC16F628が出てまだ間もない頃かもしれません。

バージョンアップはどうやって行ないましたか?
(WEBからのアップグレードですか?)
WEBのバージョンアップだと1年間メンテナンスになります。
新品を購入したとしたらダウンロードできなくなるまで毎日アクセスして最新版のパッチを入手しましょう。
(入手してもすぐに適用してはいけません。十分見極めて当てます)
特にトラブルがなければ現状で行くのがよいと思います。
現在は3.249が最新版だと思いますけど・・・・。(入力ミス?)
また一つ前の3.236がダウンロードできると思いますので可能であればダウンロードしておくと良いかもしれません。
最新版が必ずしも良いとは限らないのがCCSのクオリティです。

私の場合はチップの不具合(仕様)に泣きました。
あと使いたい機能が入手したコンパイラーのバージョンで未対応だったので買い直ししたりしました。
(最初に購入したコンパイラーの登録が何度やっても出来なかった(T_T))

fenrirさんのblogは巡回していますので、疑問に思ったらblogに書いていただければ私の出来る範囲でサポートします。

Posted by: 軽石 : June 1, 2006 09:39 PM

>軽石さん
色々とアドバイスありがとうございます。参考にさせていただきます。
バージョンアップですが、Webからです。CCSからなかなかメールがこないので、色々と催促したりして大変でした。

Posted by: fenrir : June 2, 2006 11:17 PM

コメントする