月別アーカイブ: 2018年2月

AVR HVS (High Voltage Serial) ライタの作成

最近になって AVR HVS ライタを製作したので、ここで紹介します。

完成写真

いきさつ

最近 ATtiny11 という古めのチップを(大量に)入手したのですが、
この書き込みは ISP 非対応ということに、入手後になって気づきました。

2018 年現在、AVR マイコンのプログラミングインタフェースをリストにすると、おおむね以下の通りです。

以前からの品種でサポート
SPI ISP: ほとんどの品種でサポート
HVS (High Voltage Serial): 8ピン tiny13A 等, 12V 必須
HVP (High Voltage Parallel): 16ピン以上, 12V 必須

新しい品種でサポート
TPI (Tiny Programming Interface): tiny10 等
PDI (Program and Debug Interface): XMEGA系

AT90S / tiny / mega を中心に使用する限り、AVRISP のような SPI ISP 書き込みに対応した
ライタさえ持っていれば、「少数の例外を除いては」ほとんどの品種に対応できます。

ところが tiny11 は「少数の例外」にあたり、プログラミングインタフェースは HVS のみに対応しています。
HVS 対応のライタは持っていなかったので新しく作る必要に迫られました。

設計

製作にあたって下記の条件を定めました。
(1) USB で動作すること (IF, 電源共)
(2) MCU は ATmega8 を使用すること (手持ちの関係)
(3) 既存のソフトウェアを使用できること
(4) 安価であること

(1)(2) を満たすライタがネット上に公開されていればそのまま使いたかったのですが
条件に合うものが見つからなかったので、回路と FW は新たに作ることにしました。

ホスト側ソフトウェアは私が作ると中途半端な実装になりそうなので、
既存の HVS 用ソフトウェアに対応することが望ましいです。
ちょうど、neko JAVA さんが USB 対応のパラレルライタを公開されていたので、
ホスト側ソフトウェアはこれをそのまま使用できるようにします。
FW の実装は v-usb ベースですが、HVS / HVP 実装部分でソースコードを参考にさせてもらいました。

回路図:

FW ソースコード: 180219_YLE_HVS_Writer_Source
ホスト側ソフトウェア: 本文参照

動作

HVS + tiny11 で FLASH 書き込み、読み込みできることを確認済み。
HID なのでドライバは不要です。
HVP (High Voltage Parallel; 高電圧パラレル) も一応実装していますが、動作は未確認です。

動作速度は正直言って遅い(tiny11 Program + Verify で 1 分以上)です。
FW は v-usb ベースにしており USB1.1 LS なので、interrupt 通信の
ポーリング間隔の制約からオリジナルの 10 倍程度遅いと思います。
tiny11 のようなページを持たないマイコンの FLASH を書く場合、
このライタのプログラムが 1バイトあたり 3-4 個の interrupt 通信するので
ほとんどの時間を通信待ちに費やすことになります。
このへんはプログラムの変更で 3 倍ほど改善可能ですが、
「(2) 既存のソフトウェアを使用できること」なのでそのままにしています。

PIC18F2450 など USB2.0 FS 対応マイコンに移植すればもっと高速になるでしょう…。

SOP の AVR の書き込みは、写真のようなアダプタ (aliexpress で ¥600) により行っています。

MPLAB X IDE のメモリ使用量を削減する

PIC の開発では MPLAB X IDE を使用していますが、MPLAB は起動するだけで大量のメモリを消費することが難点です。


たとえば私の環境では 32bit PC で起動時 430MB、スクリーンショットがありませんが 64bit PC で 800M-1GB、これでは他のソフトを立ち上げているとすぐにメモリ使用量がいっぱいになってしまいます。

これは起動時に JRE がヒープ領域を確保するためであり、MPLAB の読み込む設定ファイル mplab_ide.conf を書き換えるとヒープサイズを調整できます。

ファイルのコメントによると「-J-mx」以下でヒープサイズの上限を指定するようです。
デフォルト値はインストール時の環境に依存し、32bit OS だと 「-J-Xms256m -J-Xmx512m」
サイズを小さくしすぎると動作が極端に遅くなります。
PIC18F を使用するだけなら 「-J-Xms96m -J-Xmx128m」で十分動きます。

ファイル書き換え後再起動すると、起動時のメモリ使用量は 210MB と半分近くになりました。

3Dプリンタで半固定抵抗のつまみを作る

試作品の動作中に半固定抵抗を調整するとき、毎回ドライバを差し込んで・・・というのはいかにも操作性が悪く、ダイヤル式のつまみがほしい。
もちろんつまみ付きの基板取り付け型 VR は存在しますが、入手しづらかったりサイズが大きかったり、何かと使いづらいのです。

そんなわけで、下図のような半固定抵抗用つまみのモデルを 3DCAD で作り、先日買った 3D プリンタで印刷します。
うちに大量ストックしている NOBLE の VM6CK という VR がおあつらえ向けの形状(摺動子と連動する円形カバー、太く深いドライバ溝)だったので、それにマッチするようモデリングしています。

プリントするとこんな感じ。

便利に使えています。