2013年4月19日金曜日

押しボタンスイッチの故障

30年前の装置の電源ユニットの交換修理を頼まれた。作業終了後テストしていると、押しボタンスイッチの動作がどうもおかしい。オシロスコープで観ると、下の図のような動作をしている。
NO接点とNC接点はハンダ付け端子が分かれており、内部のスイッチも物理的にも分かれていると思われ、未使用の方のNC接点側は正常だ。
装置にトラブルでもないと使われない手動操作用のスイッチなので、普段オンオフされることが無い。これまで、古くなるとチャタリングしまくるスイッチだと思っていたが、これは初めてのケース。
製作時のハンダ付けのフラックスのせいではないかと思われ、スキマからフラックス除去用のスプレーを噴射、エアーダスターで吹き飛ばし、何度も操作しているうちに復活した。

別の古い装置では、レバー形のスイッチが固着していて動かないものがいくつもあった。これは、置かれている「環境」が悪いのでは無いかと思っている。装置自体はばりばり動いていたので、まだここでは書けない。

2013年4月5日金曜日

ハイパーターミナルが無い!


dynabook には、シリアルポートがないことは既知だったが、Windows8にはハイパーターミナルがついていない。

測定データをシリアルポートから垂れ流し出力する装置のテストを始めようとして、困ったことに。この為に DELL Latutude の再登場かと。

10年前に購入したUSBシリアルケーブル(Arvel)を、がらくた箱から探し出して使うことにし、シリアル通信のフリーソフトを探す。

Rs232c をダウンロードした。バイナリデータ表示にも切替えられ、自動的にファイルに記録される。

ベクターついでに、バイナリエディタも新しいものをダウンロードした。Stirling だ。バイナリデータをテキストへ変換、ワードパッドで特定データを検索して色づけや強調表示して解析する作業を最近も何度かしたが、このソフトだけでできることになる。

ケーブルはUSBポートに挿すだけで使えた。無問題。この手の手軽で便利なフリーソフトを提供してくれる方々へ感謝。

2013年4月2日火曜日

could not find definition of symbol 'WriteSPI' in file"

Dynabook 購入の本来の目的のひとつでもあった、Microchip MPLAB IDE と C18 をインストールし、使い始めた。久しぶりのPICプログラムの仕事(既製品の改造)が、タイミングよく入った為だ。古いノートパソコン方の旧バージョンで着手し、だいたい目処がついたところでソースを移して  Dynabook + MPLAB V8.90 + C18 V3.45 の新しい組み合わせへ移行する。
MPLAB X版のインストールは今回見送った。

ところが、Build でいきなりつまずく。タイトルにあるメッセージでエラーになった。幸いマイクロチップのフォーラムで同様の質問を見つけた。10日前の日付だ。そこに述べられていた解決策の通りやってみた。(私の場合は使用デバイスがPIC18F4520)

古いノートパソコンから、PIC18F4520.lib ファイルをコピーして、
  1. PIC18F4520.lib をリネーム後、古い方のファイルをライブラリフォルダへコピーする
  2. PIC18F4520.lib はそのままにして、古い方のファイルをプロジェクトフォルダへコピーする
1.で試してOK。明示的な方法をとりたいと思い、2.の方法に改めた。ライブラリのフォルダを指定しなくても、プロジェクトフォルダから優先的に探すようだ。

Build が通ったので、メモリ使用量とチェックサムを旧バージョンと比較し、一致。早速、実機にプログラムした。当たり前のことながら変わりなく動く。めでたし。

* 古いノートパソコンの方のバージョンは、MPLAB IDE V8.63, C18 V3.36 。この不具合の理由はバグとのこと。次のバージョンで修正されるみたい。

2013年4月1日月曜日

データ構造の違いで(PIC C18)

2008年に納品した装置の改造依頼が来たので、マイコンプログラムの変更に着手した。
2010年にこの装置の高機能版を作った際は、この間の勉強の成果もあって、かなり進化したプログラムとなった。

今回は、古いほうのプログラムの修正で対応することにした。これは、初のボリウムの大きい作品で、ずらずらとプログラムを書いてある。ファイルはいくつかに分割されているが、インクルードしているだけ。ヘッダーファイルの意味や必要性がまだよく分からない頃のもので、まず「実現すること」が優先だった。

で、始めると本来の改造以前に、手を加えたくなるところが次々に出てくる。まずデータの構造化によって、ずらずらと記述していた部分が、簡単な For 文で済んでしまうような個所がいくつも見つかる。struct, union, 配列などを用いてプログラムの中で使われる固定値を整理することで、プログラムもすっきりする。また、機能が重複している部分の関数の整理。その後アルゴリズムが改善されステップ数が減った関数などもあった。

実現する機能としても単純化の方向ではあったが、7723 byte -> 5752 byte とプログラムメモリ使用量はずいぶん減った。