2008年7月16日水曜日

円・丸を認識する


 円・丸のエッジを発見する方法(結構、サギ的アプローチですが)を考えてみて、特定の条件では、いい成績が出ました。ようは、22.5度方向とか、通常の縦横斜の線が持つ傾き以外の傾きを持つ部分のエッジを探せば、(工業製品のパターンなど、条件がそれえば)うまくいくんじゃないかというモノです。詳しくは、
こちらから

2008年7月6日日曜日

デジタル計測アンプの試作(の試作)



 お客さんが研究用、評価用として使いたいらしいので、ひとまずAVRにADコンバータつけて、計測アンプからの情報を取り込めるようにして、それをRS485で転送できるようなボードを作ってみました。以前より減ったものの、まだまだノイズレベルが高いので、ガンガンにLPF効かせています。(お客さんの話によると問題ないらしい)

 ノイズ問題ですが、(入力インピーダンスのバランスが悪かったとか、LPFの抵抗配線間違っていたとか)いろいろありまして(おいおい)減ってはきているのですが、12ビットで2-3程度はバラつきます。それも、ハード、ソフトで平均化を行っての話です。

 最初7805の電源がマイクロボルトレベルでは安定していないのかと思い、006P(9Vの角型電池)を接続してみました。結果は、多少改善するものの、まだかなりのレベルです。ブレッドボード版、ユニバーサル基板版の双方で同じような挙動です。

 今回は、とりあえずお客さんセンサ側のデータを見たいので、このままいくとして(この状態ですら、お客さんが用意したアンプより数段マシ・・・)少し時間が出来たときにでも追い込みたいものです。

100円の充電器を買ってみる


外見(裏側)


分解してトランスと基板を取り出す


一緒に購入した電池 1300mAh

 100円ショップに、2次電池の充電器が売っていました。100円(税別)です。NiMH電池の単三型も売っていました。こちらも100円(税別)。1300mAhだそうで、本当に1300mAhあるなら、結構コストパフォーマンスのいい製品になります。

 ひょっとすると、いろいろな部品が手に入るかもしれないと思い、充電器も2個購入しました。で、そのうちの1つをバラしてみると、基板に載っている部品は、LEDx2、ダイオードx2、抵抗x2の6点。後は電池用の端子、トランス(これだけでも100円以上の価値がありそう・・・)が全てでした。

 リップル除去コンデンサとか、ヒューズとか、入っていそうな部品はありませんでした。まだ回路詳しく見ていませんが、なにやらコンセントに挿すには勇気のいるような製品です。当然、PSE取得しています。

2008年6月30日月曜日

MCP3208をAVRにつなぐ

 通信回線も確保できたことですし、次にADコンバータを試します。ADコンバータを外付けするくらいなら、(しかもCPU価格の4倍!)内臓されているものを買ったほうがよいのではという意見もありましょうが、12ビット得られるのと、ノイズ対策しやすいかなという理由で。(でも、すべてをブレッドボードでやるのはかなり難しい模様・・・)


実験の様子

 これが、実験の全貌です。ボード上に、ATtiny2313と、LTC1485,MCP3208を配置し、MCP3208の入力部分には、可変抵抗を実験に接続します。この内容をSPI通信で読み取り、RS485とUSBを経由してパソコンに取り込み表示してみようというものです。判りにくいですが、パソコン画面で表示されている縦長のウィンドウに取り込み結果が順次表示されています。


ブレッドボードの様子

 実験は、CPU最高周波数で行いたかったので20MHzのセラロックをブレッドボード仕様(?)に加工し、挿してあります。手元にヤスリなどがたまたま無かったため、基板破片みたいなものに載っていますが、まあ実験ということで。

 デジット書込み器用のコネクタ6本もボードに接続しましたが、接続わかりにくいですね。バラバラにすると戻すのが面倒。。。専用のコネクタを作ったほうがいいかもしれません。シリアル通信部分は、ピン互換性ないようなので2313専用になりそうだけど。



 MCP3208に入力したチップセレクト信号の周波数を測定してみました。どうも1秒間に631回ほど送信できているようです。1回ごとに、38400ボーで6文字(数字4文字+0D,0A)をホスト送信しているので、これくらいの速度でしょう。

2008年6月29日日曜日

LTC1485でRS485通信をしてみる。



 さて、導入したAVRですが、LED点滅試験プログラムを動作させ、書き込みができるところまではわりとすんなりできました。計測アンプに使いたいという考えでAVRを試していますので、まずはパソコンとの接続をルートを確保したいところです。
 オーソドックスなところではRS232C、トレンドはUSBや10BASEになるのでしょうが、あえて、RS485で通信を行うことにします。これは、

 *USBは、専用チップがあり開発がラクであるが、仕事で出荷するには、やや問題がある。
 *RS232Cは、12Vを扱うため、昇圧回路(ICでやりますが)が必要でノイズの問題もある。

という理由によるものです。FA分野ではRS485(422)結構使われています。速度も自由に選べるし通信自由度はRS232Cなみにあるし、0-5Vしか使わないし、1:nの通信もできるしといいことがたくさんあります。

 ネックとしては、パソコン側のインターフェースが高額なことです。インターフェース社やコンテック社からボードが出ていますが、安いものでも1万円以上します。でも、実験用に使うのであれば、USBからRS485の変換アダプタが5000円までで購入可能です。

 まずは、実験なので、ケーブルダイレクトさんから、USB-RS485変換ケーブルを購入しました。通信線のプラスマイナスを間違うこともあるだろうということで端子台タイプを購入しました。

 マイコン側には、LTC1485を使います。(秋月で300円)テキサスからも同様のICが発売されていてdigikeyで買うなら断然、テキサスのほうが安いのですが、今回は量が少なく、digikeyに頼むついでがなかったこともあって、秋月から購入しました。(ちなみにピンコンパチです)

 RS232Cをやったことがある人なら、RS485も簡単です。マイコンにシリアル機能がついているのであれば、ほぼ同等の処理でOKです。ただ、半二重なので、自分が送信中、受信中をはっきり管理する必要があります。無線マイクのように、自分がしゃべる時はボタンを押すという操作が加わります。

 このスイッチ(LTC1485の3ビン)をAVRの適当なポートに接続し、送信時にはHに、受信時にはLに切り替えます。ちょっとした注意としては、送信完了時に、HからLに戻す部分で、「送信完了」を確認してからLにする必要があることです。

 シリアル通信は、(たとえ1バイトしかバッファがないタイプでも)1バイトデータを渡した後、ただちに送信が完了するわけではありません。プログラムから最後の1文字を送った直後であればCPUから見れば送信完了ですが、実際の回線には最終バイトはまだ出ていません。スタートビットくらい出始めているかもしれませんが・・・

 そこで、周辺IOのステータスを見て、落とすタイミングを確認します。AVRの場合、送信バッファ書き込み可能フラグと、送信完了フラグが別にあります。(とてもいい設計(^^))今回の用途では送信完了フラグを見て、送受信を切り替える必要があります。この部分、まだ、実験ソフトにバグがあるようで、うまく切り替えできていません。まあ、大したことないだろうということで、次に進みます。(おいおい)

AVR最初の一歩

まず、CPUを購入する。
秋月電子で100円で売ってます。18個買えば90円になるらしい。あと、ブレッドボード(ちょっと大きめがお勧め)、ブレッドボード用配線材、12Vアダプタ、アダプタ用コネクタ、7805、0.1μのコンデンサ(どーんと20-30個)、100μ~470μくらいの電解コンデンサ(数個)、100、220、40、1K、2.2K、4.7K、10K、22K、47K、100Kの1/4W抵抗(各100本)、セラロック(2313でパソコンと通信するなら16メガ系がお勧め)、2SC1815と2SA1015、LM358N、OP07、ダイオード、LEDなんかも一緒に買っておきましょう(これだけ買うと、さすがに結構な出費か)どこかで、こんなキット売り出せばいいのにね。

AVRライター(ISP書き込み対応)を購入する。
ブレッドボードで書き込みをするには、バラ線のケーブルも一緒に買っておきましょう。

USBポートのついたwindowsパソコンを用意し、winAVR, AVRstudioをダウンロードしてインストールする。

デジットのAVRライタ付属のCDから、AVRWRTをインストールする。

これで開発環境がそろいます。

AVRを試してみる

 少し前に購入しておいたAVRのATtiny2313、デジットのライターを試してみました。またひとつ開発環境が増えてしまいました。
 昔導入したPICは、少し遊んだ後使わなくなり、H8/3664,SH7125ばかり使っていました。やっぱりC言語で開発できるのがいいですよね。アセンブラでもいいのだけど、さすがにPICのアーキテクチャは斬新過ぎて付いていけません。
 そんな中、ローエンドのCPUというか、DIPで手軽に使えるチップとしてAVRは前から導入を検討しておりました。が、3664がそこそこの価格で手に入ることと、超小規模モノの工作で興味のわくものがなかったこともあり、試せておりませんでした。
 今回は、計測アンプというテーマがあり、この場合、内臓ADコンバータではちょっと力不足(ビット数の問題ではなく、CPUに内臓しているとノイズ対策とか面倒そうだなあという予測です)もあって、「ADコンバータもいらなくって、入出力ピンも大して必要ないなら、AVRでいけるんじゃあ?」とのことで使ってみることにしました。
 いざ、データシートを読んでみると・・・「こんなCPUが100円(秋月)でいいのだろうか?」というくらい充実しています。正直RAMはもう少しあったほうが使いやすいように思いますが、この価格で大きな可能性をもったチップだなと思いました。