カテゴリー別アーカイブ: 電気・電子

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プリンタを購入した

去年の話になりますが、3D プリンタを購入しました。
3D プリンタはこれが1台目です。

入手容易な 3D プリンタには大きく分けて XYZ 3軸型のものと Z 軸のみのデルタ型の2 種類があるようで、
デルタ型のほうがかっこいいのでこちらを選びました。
amazon にあるものから、Anycubic というメーカの Kossel Plus リニアガイドタイプを買いました。
aliexpress などにもありますが、送料を考えると amazon 購入の方が安い気がします。


こんな感じの結構大きい箱で届きます。
組み立てキットなのでマニュアルどおり組み立てます。
どうでもいい話ですが、これと本 1 冊を同じ日に注文したら、
なぜか amazon 側でまとめられて超巨大な段ボール+大量の緩衝紙で届きました。
別配送にした方が効率よい気がするのですが。

付属のフィラメント色はランダムと説明文にありましたが、黒色のものがついていました。
変な色でなくてよかった。

組み立てていくうちに問題発生。


写真のように、ヒートヘッドの軸が折れていることに気づきました。
途中まで組んでから気づいたので、最初から折れているのか私の不注意で折ってしまったのか判断がつきません。
最初に全ての部品をチェックするべきでした。
まあ、この程度なら、瞬間接着剤でうまくつければ使えそうなので、補修してこのまま組み立て続行です。

で、ブログを編集していて気づくのですが

最初の写真を拡大すると、折れてるのがしっかり写っていますね!
輸送中に折れたものと思いますが、この箱
デリケートなヒートヘッドの梱包としては、ちょっと不十分な気がします。


組み上げると、カラーボックスの上に置けるくらいのサイズになります。
この部屋にはここしか平地がないので。

マニュアルは決して不親切ではないけど、下手な人が組み立てるとちゃんと動かないような気がします。

簡単なキャリブレーション後、Thingiverse の 3DBenchy をプリント (積層厚 0.2mm)すると、こんな感じになりました。
 

電子工作するうえで 3D プリンタの使い道はけっこうあって、
簡単に mm 単位の精度が出せるので、
たとえば基板固定用の支持具などを作れば、プラ板加工に比べてはるかに楽できます。

(以前作ったユニバーサル基板用の固定具)

モジュール式ユニバーサル基板を作った

TTL IC をたくさん組み合わせて回路を作ろうとしたとき、既存のユニバーサル基板はどれもあまり使い勝手が良くありません。
最近は安くプリント基板が作れるようになっているので、オリジナルのユニバーサル基板を作ってしまいました。

なぜモジュール式か?

設計した基板はモジュール式、つまり複数の基板を組み合わせて使うことを前提としています。
モジュール式とした理由は以下のとおり

  • 回路規模に合わせて基板面積を調整可能
  • モジュール間に空隙を設けることで基板面積の効率利用
  • 量産効果により面積比コストダウン
  • 基板裏面からIC実装状態を確認可能

基板外観

表面

裏面

これが1つのモジュールで、複数のモジュールを組み合わせて大規模回路を作っていく形になります。
2.54mm 間隔で 4×42 のスルーホール穴が開いており、表面にはピンの間に V+/GND のパッドが交互に配置されています。
V+/GND は両端の 1×4 部分と接続されています。
モジュールを5.08mm 間隔で配置して、モジュールの間にDIP14,16,20 の IC を実装することを想定して設計しています。
DIP16 ならちょうど 5 個、DIP20 ならちょうど 4 個の IC を実装できます。

特徴

通常のユニバーサル基板と異なり、1列目-2列目、3列目-4列目に配線がされています。
これにより、40 ピンのラッピングポストと組み合わせて裏面ラッピング配線ができます。
ラッピングポストは高いので、安い 2×40 のピンヘッダで代用しています。
本来はラッピング用 IC ソケットが使いたいのですが、高価なので・・・。

電源の配線ははんだブリッジでできるので簡単です。
秋月で売っているパワーグリッド基板と同じ仕組みですが、こちらは DIP IC 用に最適化されています。
1005 あるいは 1608 のチップ抵抗を使えばプルアップも実装できます。

実装途中を裏面から見るとこのようになります。トータルで見ると楽なのでラッピング配線をしています。
デカップリングコンデンサはピン間に直接取り付ける形になります。ここだけはモジュール式にしたデメリットです。アキシャルリードのセラミックコンデンサがあるとすっきりします。
裏面から見たとき実装されている IC が見えるのがポイントです。これにより裏面配線をしたときの配線ミスが大幅に減少します。
さらに、隙間があるということはその分コストダウンされているということを意味します。まさに一石二鳥。

使用例

モジュールを並べて回路を作るとこのようになります。右側に繋がっているのは一緒に作った接続ボードで、MIL 規格コネクタと LED、電源コネクタ等が実装できます。裏面配線なので表面は非常にすっきりします。
IC 実装レーンが 10 列あり、DIP 16 なら 10×5 = 50 個の IC を高密度実装できます。2つ並べたら 100 個です。左側に見えるグレーの板はタミヤのユニバーサルプレートを切ったものです。

接続ボード

基板の製造

KiCAD で設計して pcbcart に発注しています。
勢い 400 枚作りましたが、2-3 年で使い切りたいです。

PLL クロック逓倍回路

ディジタル回路のクロックは重要ですが、ちょうどいい水晶発振子がなかったりするときなど、クロック N 逓倍器があると便利な場合があります。
最近は 21.48MHz (3.58MHz x6) の水晶がなく、某所で中国製の水晶発振子を購入したらぜんぜん違う周波数で(基本波から違う)困ったことがあります。
PLL を組めば N 逓倍できますが、いまさら VCO + MC4044 という組み合わせの回路は設計が面倒です。

CY2308


最近 Cypress の CY2308 (+IDT23S08) という石をたくさん手に入れました。
これはもともとクロック分配の用途に作られた IC ですが、PLL を内蔵しており、フィードバック端子が外部に出ているので、ディバイダを外付けすれば手軽なクロック逓倍回路に使えそうです。
ただし出力周波数は10-133MHz と規定がありますが、入力周波数の規定がありません。
私が使用する周波数帯はだいたい 1-30MHz なので、この用途で使えるかどうかは基準周波数と発振周波数の下限(PLL 特性で決まる)にかかってきます。

テスト回路

 
というわけでテスト回路を組んでみました。
使用したのは CY2308SC-2 なので CLK と CLK/2 が出力されます。
CY2308 の CLK/2 または CLK 出力を 74ALS161 の 1/N 分周器で分周して FBK 端子に戻しています。
FBK のデューティは 50% でなくてもいいようです。

基準周波数は TC40H000 で発振させた 3.58MHz で、その 1/2 と 1/4 も選択できるようにしています。
したがって、出力周波数は fout = (3.58 / M) x N (x 2) MHz となります。
この回路の最大周波数は分周器に依存しますが、CO – /LD 間に使った TC40H000 の伝達遅れが大きく、これをたとえば 74AS04 などにすれば CLKOUT = 80MHz 以上出せるはずです。

波形

fREF = 3.58 MHz、N=3 の CLK 出力は上図で、CH1 が CLKOUT 信号の波形を示しています(以下同じ)。この程度の REF 入力なら問題ないようです。

fREF = 1.79 MHz, N=6 の CLK 出力が上図で、fREF = 1.79 MHz はまだ大丈夫そうです。
fREF = 0.9MHz にすると CLK 出力が不安定になりました。(画像保存失敗)
よく使う 4MHz とか 6MHz のクロックなら、REF 入力にしても問題なさそうに見えます。

fREF = 1.79 MHz でどこまで出力周波数を下げられるかやってみます。

N=3 つまり fout = 5.37MHz はまだ安定しています。

N=2 つまり fout=3.58MHz では出力周波数が不安定になりました。
5.37 MHz で OK とはいえ、温度変化を考えるとやはり出力周波数はできるだけ 10MHz 以上に設定するべきでしょう。

 

とりあえず最初にほしかった 21.48MHz が簡単に作れるようになったので満足です。

DSP-444 の I2C テスト その2

ある程度実用的になったので DSP-444 ラジオの I2C テストの回路図とソースコードを公開します。

I2C で操作しているのは
・受信周波数の取得
・FM/AM/SW、受信バンドの選択
・音声出力の位相(デフォルトがLR反転なので、イヤホンで聞くためには設定が必要)
の3点です。

現時点でI2C での選局の方法はわかりません(対応するレジスタを設定しても変化なし)ので、ダイヤルによる設定としています。
適合するバリコンつまみを持っていないので、可変抵抗で選局するよう改造しています。
ここまで改造するならもう別のモジュールを使った方がいいような気もします。

表示器には hp の HPDL-1414 を使っています。この表示器はアルファベットも表示できるので、放送局のコールサインでも表示できるようにしようと思っています。
写真のように FM 補完放送も受信できます。


回路図

ソースコード (gcc)

 

DSP-444 のテスト

何年か前の福箱に入っていた、aitendo で売っている DSP ラジオモジュール DSP-444 のテストをしています。

モジュールを解析した結果 I2C レジスタの仕様がある程度わかったので、とりあえず受信周波数の表示ができるようになりました。

写真は TBS ラジオ 954kHz を受信しているのですが、このモジュールは AM のチャンネルスペースが 5kHz の米国仕様なので 955kHz の受信になってしまいます。AM の音質が悪いのもこのせいだと思います。どこかの設定でチャンネルスペース 9kHz にできるといいのですが。

ロジック IC の出力特性を実測する その2

今回は偽ブランド品 (counterfeit) ロジック IC を中心に…

74HC04D(HYC)

これは NXP 社のロゴがありますが偽ブランド品だと思われます。
・同社 DIP の型番は 74HC04N であり、74HC04D ならば本来 SOP
・パッケージ形状が NXP のものと異なる

偽造 IC にはロット番号に本来の製造社名を入れている場合があり、この IC の場合 HYC というのが本来の社名だと思います。

特性を見ると、H 出力のドライブ能力が L 出力に比べて低くなっていますが、JEDEC 規格は満たしています。ファンクションも確認した限り正常です。

SN74HC164N (15FVNS)

・ロット番号の桁数が異なる
・ピンの太さが本物と比べて太い
ことから、偽ブランド品と判断しています。

ドライブ能力を見ると、L 出力がぎりぎりですが、一応規格は満たしているようです。

SN74HC164N(65CXD2K)

この IC はマーキングがきわめて薄く、パッケージ形状も TI のものと異なるので、人目で正規品でないとわかります。ドライブ能力は正規品と遜色ありません。

SN74HC595N(93DN8WY)

シフトレジスタの 74HC595 は需要が多い汎用 IC のため、偽造ブランド IC が多く見られます。実感として aliexpress では 90%、国内通販で 20% 程の確率でこうした IC を手にすることができます。

この IC のドライブ能力は本物より強いです。

SN74HC595N(11HMK7J)

この IC は機能が微妙に 74HC595 と異なっており、本来なら RCLK  ピンの rising エッジで出力データをロードすべきところ、トランスペアレントラッチ動作となっていました。たまにこういうことがあります。

74HC595N(YRD0914)

偽ブランド IC の世界でも、YRD はよく見かけるブランドです。ディジタルのみならずリニア IC も手がけているようです。

74HC595N(1108LHW)

SN74HC595N(13CNONK)

このロット No の IC もポピュラだと思います。出力特性はオリジナルよりむしろ良くなっています。他の IC も似たような特性なので、ダイスとパッケージングで水平分業になっているのではないかと思います。

ここまでの偽ブランド IC と比較して、正規品の特性を以下に示します。

M74HC595B1(正規品)

ちょうど TI の 74HC595 がなかったので、STMicro のものを示しています。

ここに示していないものも含めて多数のサンプルで測定をした結果、 74HC シリーズでは、正規品に比べて偽ブランド品の方がドライブ特性が強い傾向にあるように感じます。ただし、サンプル 11HMK7J のように、機能が微妙に異なる IC も混ざっているので注意が必要です

ロジック IC の出力特性を実測する その1

ロジック IC のきわどい応用を考える上で知っておきたいのがその出力特性です。
ロジック IC のデータシートには ○ mA のとき○V 以上、といった記述があるのみで、インピーダンスの非線形性や定格以上の電流を流す場合の特性などにはふつう言及されていません。
specsheet_example
(データシート上の出力特性例)
また、最近は中国製とみられる偽ブランド (counterfeit) IC も多く小売されており、それらが規格を満たしているかも興味深いところです。
そこで、いろいろなロジック IC の出力特性を実測してみました。

なお、以下では IC の最大絶対定格以上までグラフを引いていますが、言うまでもなく、実使用上は絶対定格を超えない範囲で使用すべきです。

SN74Nシリーズ (スタンダード TTL)

SN7400N

output_SN7400N

IOL-VOL、IOH-VOH グラフおよびその定格値、VIL(max)、VIH(min) を同じグラフ上に表示しています。上図はちょっとミスで 74LS の定格値が入っています。編集の段階で気づいたのですが、TTL は 5V ± 5% なので Vcc = 4.75V にすべきでした。(74HC に合わせてしまいました。以下同様)

74LS シリーズ

SN74LS00N

output_SN74LS00N

HD74LS00P

output_HD74LS00P

とりあえず TI の SN74LS00N と日立 HD74LS00P を測定しています。
VOL に変曲点が見られます。74LS は内部回路をみると高速動作のため出力から入力に SBD が入っており、この影響です。また、出力 Tr が非飽和動作をするため、スタンダード TTL と比較して VOL が高くなっています。

74ALS シリーズ

SN74ALS00AN

output_SN74ALS00AN

74ALS シリーズは 74LS を高速、低入力電流にしたもので、出力特性は 8mA/-0.4mA で 74LS と変化ありません。回路上の工夫で VOL はスタンダード TTL 並に戻っています。

74HC シリーズ(正規品)

HD74HC00P

output_HD74HC00P

TC74HC00P

output_TC74HC04P

とりあえず東芝と日立の 74HC00 を選択しています。
緑線は JEDEC の最悪値を示しています。JEDEC では Vdd = 4.5V で規定されているのでここでも 電源 4.5V でグラフを引いています。
グラフのように、それなりに対称な出力特性となっています。

次回は、いろいろな偽 IC を試してみる予定です。

測定風景

e_170423_221844_0

このような自作回路により測定しているので、値の正確性については一切保障できないことをおことわりしておきます。

Si5351A を使ったユニバーサル・オシレータの製作

Si5531A はワンチップの PLL IC で、25MHz の源信号から 25kHz – 200MHz までの任意のクロックを生成できる便利な IC です。

秋月で扱い始めた直後(2016/02)に、私はこの IC を使用して自作機器のテスト用オシレータを作りました。そのうち公開しようと思い気づけば1年…、今更ながら公開します。

Dscf0930

上掲はタカチのケースに入れた写真で、右の 5 つのボタンで電源 ON/OFF と周波数選択を行います。周波数は桁ごとに 1Hz 単位で設定できます。一応、 2 系統(Si5351A の出力は 3 系統だが、独立に設定できる 2 系統のみ使用)設定できるようになっていますが、ケースの空間がないため 1 系統のみ外に出しています。

Dscf0929

内部はこんな感じで、見ての通りいい加減な作りですが、私しか使わないので…。変換モジュールは使わず、べたグランドにコプタンテープ(カプトンテープではない)を張って IC 直付けです。写真の通り電池動作で設計していますが、この装置が役に立つのは試作時で、試作時はふつう電源装置があるので、素直に外部電源仕様にすればよかったと後悔しています。

コントローラには Atmel (今は Microchip というべき?)ATTINY26L を使用していますが、もっと ROM の大きいものを使うべきでしょう。ROM 領域が足りなくなってしまい、500kHz 付近の精度は少し妥協しています。プログラムは 2k の ROM をほぼ全て使っています。

LCD は以前日米で売っていた SC1602 というモジュールを使っています。一般的な 16×2 パラレル LCD なら何でも使用できます。

Schematics

ソースコード (C 言語)

回路図とソースコードを示します。操作方法や動作詳細はこれらを参照してください。Si5351A の制御部分は si5351a.c にまとめています。