2008-04-03
mikroBASICにはENC28J60用の関数群が用意されています。これを使えばLANがお手軽に使えるはずです。LANインターフェースが内蔵されているPICもありますが、mikroBASICは内蔵LAN用の関数群が用意されていないみたいなので、これで我慢することにします。RTL8019AS用の関数群もありますが、これも同様に外付けです。RTL8019ASは蟹マークのICだったかな。
EthernetインターフェースIC ENC28J60。秋月電子で売っている。秋月にしてはちょっと高い。たぶん少ししか売れないからだろう。
2008-04-18
LAN上をどんなデータが流れているか解らないとバグ取りがやりにくいので、パケットキャプチャーについて情報入手。この本に紹介されているWiresharkというのを使うとLAN上に流れているデータを傍受できます。スイッチングハブを使っていたりすると見えないらしいのですが、普通のハブに繋がっているパソコンのデータなら傍受可能です。FTPのようにLOGONパスワードが暗号化されずに流れる物は、これを使われると簡単にばれてしまいます。不特定多数が使用するハブに繋がっているパソコンで暗号化されていないパスワードを使用するのはとても危険です。誰かがWiresharkで傍受しているかもしれません。
最近出版された本
2008-05-09
秋葉原に買い出しに行ってきました。パルストランスはRJ-45コネクターと一体になった物を秋月電子で購入。TTLはレベル変換用なので、よく使う74HCシリーズではダメで74HCTシリーズが必要。サンプルの回路では74HCT08になっているが、千石電商で売っていなかったので74HCT32APにした。
パルストランス内蔵のRJ-45コネクタ ¥300
74HCT32AP ¥40
RJ-45コネクターはピンが千鳥配列になっていてユニバーサル基板で使用できません。プリント基板を作る必要があります。EAGLEの標準ライブラリーにこの部品はありませんがダウンロード出来ます。EAGLEは使用しているユーザー数が多いCADなので、大抵の部品ライブラリーは誰かが作っていてくれています。ENC28J60もライブラリーがダウンロードできます。
2008-05-10
よく見たらダウンロードしたEAGLEのライブラリーと購入したRJ-45コネクターの結線が違っている。穴の位置は同じなので基板パターンは流用できる。
パルストランス付きRJ-45の回路図。内部はこんな構造。トランスでLANのハブとパソコンを電気的に絶縁する構造になっている。トランスというとアナログ信号しか伝達できないように思ってしまうがデジタル信号もOKだ。但し、あくまでトランスなので信号の変化が無いとエネルギーを2次側に伝達できない。入力側の変化が長時間無いと正しく信号を伝達することが出来なくなる。
ダウンロードしたEAGLEの部品
配線してみたら片面基板では、未配線が残ってしまう。この状態はまだ50Ωの抵抗などを配置していない物なので、回路図が完成した状態では相当未配線が残りそうだ。
未配線(黄色い線)がかなり残る
両面基板を作るのは面倒なのでブレッドボードで実験するための小物を作ることにした。ピンを曲げるとユニバーサル基板にもなんとか差し込める。
ピンを曲げてユニバーサル基板に挿してみた
ブレッドボード用の配線を切って、小物に直づけしました。USBはブレッドボードでも問題なかったがLANはどうだろうか? 周波数は高いがデジタル信号なので大丈夫だとは思うのだが...
完成した小物。フェライトビーズも入れてあります。
裏側には50Ωの抵抗が4本。両サイドのピンはブレッドボードに固定するための物で結線されていない。
2008-05-12
ENC28J60はマイクロチップダイレクトで購入。秋月よりだいぶ安く買えます。送料を気にしなければ...
LANの仕組みを知らないとちょっと難解ですが、日本語のデータシートもあります。
工作しやすいDIPパッケージ
電源装置は昔作った±15V 1Aの電源を復活させました。電圧はデジタル表示ですが、出力されている電圧を計測して表示しているわけではなく、ロータリースイッチに連動しているだけです。電圧表示の切り替えはダイオードアレイを使用した回路になっています。これは自分で設計した最初の作品です。
電圧はデジタル表示。ロータリースイッチで3V,5V,9V,12V,15Vが切り替えられるようになっています。電気工作ではこれ以外の電圧を使用することはあまりありません。
またまたブレッドボード用の小物を作りました。ENC28J60は3.3V電源なので5V->3.3Vに変換する電源装置が有ると便利です。抵抗を交換するといろいろな電圧に対応できます。
シリーズレギュレターはリチウムポリマー電池の充電器で使用した、低ドロップタイプのもの。
裏面
2008-05-13
データシートを見ながらブレッドボードに回路を組み立てていくが、よく見るとブレッドボードではまずそうなことが幾つか書いてある。発振子には25MHzのクリスタルをつかうがそれもちょっと不安材料。
低ESRとか、面実装タイプとか周波数にうるさそう
すごく半端な抵抗値。「面実装タイプの物を使え」と書いてある。
2008-05-18
そういえば実験用のHUBが無い。さすがにYahooBBのルーターを使ってしまうのはまずいだろう。
ブレッドボード上に組み上がった回路
PICを外した状態で通電してみた。120mAも流れたので誤配線かと思って慌てて電源を切る。データシートを見たらかなり電気大食いでした。
ずいぶん電流が流れる
何もしていなくても120mA,データ送信中は160mAも流れる。
2008-07-14
HUBは¥2000もしないので、購入しようかと思いましたが無線LANのルーターが出てきました。物が沢山ありすぎて何を持っているのか忘れてます。
無線LANルーターですがHUBにもなります
若干不安定な気もしますが、ブレッドボードで動きました。電流計は120mAを指したまま動きません。あっという間に転送が完了してしまうので、電流計の針が振れる時間がないのでしょう。
接続確認の定石。PING。最初の3つは届いたが、4つ目がタイムアウト。ブレッドボードでは不安定みたいだ。
IPアドレスやMACアドレスはPICからENC28J60のレジスターに書き込むことで行います。
MikroBASICのサンプルプログラムは簡易Webサーバーです。PIC+ENC28J60がWebサーバーとなって、それをパソコンからWebブラウザーで操作できます。ADコンバーター2CHとポートBの状態監視(つまり入力)、PORTDの操作(つまり出力)が出来るみたいです。
MikroBASICのサンプルプログラムを動かしたところ。
2008-07-15
ブレッドボードでは不安定みたいなので基板を作成。未配線が1本残ったので、これはリード線で配線します。サンプルプログラムはWebブラウザーを使うため基本的に手動操作になります。これでは都合の悪いこともあるので、VisualBASICのサンプルも作ってみることにします。
基板パターン。ブレッドボードで実験した回路に加えてLEDやスイッチなどを追加してあります。
最近、何故か基板の出来が良い。気温が高いためか?
2008-07-16
部品が1個だけ不足しているため未完成だが、ほぼ半田付け終了。ここから先はソフトいじり。
実験基板
2008-07-19
部品の買い出しに行って回路を完成させました。ICSPもOK。
基板裏面
Webサーバーは画面の見た目にかかわる情報を送信してくるのでICSP出来ないととても面倒なことになります。
ソフトの修正には手こずりました。表をJavascriptを使用して生成しているので、Javascriptの勉強もしないといけません。この程度の画面のにぎやかさでPIC16F877AのROMの84%、RAMは64%も消費してしまいます。Webプログラムを作る場合は一部のデータだけを、この装置から入手してそれ以外は別サーバーから出力するようにしないと見た目のいいプログラムは作れません。
回路にあわせて変更したソフト。もちろんファームウェア側を修正します。
2008-07-22
VisualBASIC版のプログラムの仕様を考えてみた。
・スイッチの状態はPC側から常に一定間隔で状態を監視することにする。
この方法のダメな所はスイッチを速く押したときにその状態を捕まえることが出来ないということ。
良いところはプログラムの造りがシンプルになるという点。
他のやり方として、スイッチが押されたときと離されたときに、装置側からパソコン側へデータを送信するという方法もある。
この方法だと送ったデータが届かなかったときの「再送」の仕組みや、確かにデータを受け取ったことを装置に伝えるための
受信確認(いわゆるACK)の送受信お作法を考える必要がありプログラムがとても複雑になる。
監視の仕組み:
・パソコン側から"SW"の2文字を送信すると装置側がスイッチ1,2の状態を文字で答える
・監視間隔は2秒間隔とする
スイッチ1が押されているときの例
パソコン 方向 装置
----- --- ------------
”SW” ->
<- ”1:ON 2:OFF”
・ADコンバータの状態もPCから一定間隔で監視することとする
メリット/デメリットについてはスイッチの状態監視と全く同じだ
監視の仕組み:
・パソコン側から"AD"の2文字を送信すると装置側がADコンバータの状態を4桁の文字で答える
ADコンバータの入力電圧がほぼ2.5Vの時の例
パソコン 方向 装置
----- --- ------
”AD” ->
<- ”0500”
・LEDの点灯/消灯は以下の文字をパソコンから送信することにより行う
パソコン側から装置に送るLED点灯/消灯コマンド文字
"11":LED1を ON にする
"10":LED1を OFF にする
"21":LED2を ON にする
"20":LED2を OFF にする
"31":LED3を ON にする
"30":LED3を OFF にする
装置側はコマンドに答えてLED1~LED3の状態を3文字で返す
例)
"100":LED1のみ点灯、他は消灯
"111":全部点灯している
"000":全部消灯している
LED1を点灯させるときの例
(コマンドを実行する前はLED1:消灯、LED2点灯、LED3消灯)
パソコン 方向 装置
----- --- --------
”11” ->
<- ”110”
・プロトコルはTCPを使用する
とりあえずこんな感じで作ってみることにする。もし装置に温度センサーしか付いていないなら装置側から常に一定間隔で温度情報を垂れ流してくるというのも有りだ。この場合はTCPではなくUDPを使用するのが適当だ。