LANを使ってみよう ENC28J60

USBだと距離があるとき使えないのでLANも簡単に使えるかどうか実験してみることにします。


2008-04-03

mikroBASICにはENC28J60用の関数群が用意されています。これを使えばLANがお手軽に使えるはずです。LANインターフェースが内蔵されているPICもありますが、mikroBASICは内蔵LAN用の関数群が用意されていないみたいなので、これで我慢することにします。RTL8019AS用の関数群もありますが、これも同様に外付けです。RTL8019ASは蟹マークのICだったかな。

PICT6665.jpg

EthernetインターフェースIC ENC28J60。秋月電子で売っている。秋月にしてはちょっと高い。たぶん少ししか売れないからだろう。

2008-04-18

LAN上をどんなデータが流れているか解らないとバグ取りがやりにくいので、パケットキャプチャーについて情報入手。この本に紹介されているWiresharkというのを使うとLAN上に流れているデータを傍受できます。スイッチングハブを使っていたりすると見えないらしいのですが、普通のハブに繋がっているパソコンのデータなら傍受可能です。FTPのようにLOGONパスワードが暗号化されずに流れる物は、これを使われると簡単にばれてしまいます。不特定多数が使用するハブに繋がっているパソコンで暗号化されていないパスワードを使用するのはとても危険です。誰かがWiresharkで傍受しているかもしれません。

PICT6749.jpg

最近出版された本

2008-05-09

秋葉原に買い出しに行ってきました。パルストランスはRJ-45コネクターと一体になった物を秋月電子で購入。TTLはレベル変換用なので、よく使う74HCシリーズではダメで74HCTシリーズが必要。サンプルの回路では74HCT08になっているが、千石電商で売っていなかったので74HCT32APにした。

PICT6878.jpg

パルストランス内蔵のRJ-45コネクタ ¥300

PICT6880.jpg

74HCT32AP ¥40

RJ-45コネクターはピンが千鳥配列になっていてユニバーサル基板で使用できません。プリント基板を作る必要があります。EAGLEの標準ライブラリーにこの部品はありませんがダウンロード出来ます。EAGLEは使用しているユーザー数が多いCADなので、大抵の部品ライブラリーは誰かが作っていてくれています。ENC28J60もライブラリーがダウンロードできます。

PICT6881.jpg

2008-05-10

よく見たらダウンロードしたEAGLEのライブラリーと購入したRJ-45コネクターの結線が違っている。穴の位置は同じなので基板パターンは流用できる。

PICT6885.jpg

パルストランス付きRJ-45の回路図。内部はこんな構造。トランスでLANのハブとパソコンを電気的に絶縁する構造になっている。トランスというとアナログ信号しか伝達できないように思ってしまうがデジタル信号もOKだ。但し、あくまでトランスなので信号の変化が無いとエネルギーを2次側に伝達できない。入力側の変化が長時間無いと正しく信号を伝達することが出来なくなる。

PICT6883.jpg

ダウンロードしたEAGLEの部品

配線してみたら片面基板では、未配線が残ってしまう。この状態はまだ50Ωの抵抗などを配置していない物なので、回路図が完成した状態では相当未配線が残りそうだ。

PICT6887.jpg

未配線(黄色い線)がかなり残る

両面基板を作るのは面倒なのでブレッドボードで実験するための小物を作ることにした。ピンを曲げるとユニバーサル基板にもなんとか差し込める。

PICT6889.jpg

ピンを曲げてユニバーサル基板に挿してみた

ブレッドボード用の配線を切って、小物に直づけしました。USBはブレッドボードでも問題なかったがLANはどうだろうか? 周波数は高いがデジタル信号なので大丈夫だとは思うのだが...

PICT6894.jpg

完成した小物。フェライトビーズも入れてあります。

PICT6895.jpg

裏側には50Ωの抵抗が4本。両サイドのピンはブレッドボードに固定するための物で結線されていない。

2008-05-12

ENC28J60はマイクロチップダイレクトで購入。秋月よりだいぶ安く買えます。送料を気にしなければ...

PICT6897.jpg

LANの仕組みを知らないとちょっと難解ですが、日本語のデータシートもあります。

PICT6903.jpg

工作しやすいDIPパッケージ

電源装置は昔作った±15V 1Aの電源を復活させました。電圧はデジタル表示ですが、出力されている電圧を計測して表示しているわけではなく、ロータリースイッチに連動しているだけです。電圧表示の切り替えはダイオードアレイを使用した回路になっています。これは自分で設計した最初の作品です。

PICT6901.jpg

電圧はデジタル表示。ロータリースイッチで3V,5V,9V,12V,15Vが切り替えられるようになっています。電気工作ではこれ以外の電圧を使用することはあまりありません。

またまたブレッドボード用の小物を作りました。ENC28J60は3.3V電源なので5V->3.3Vに変換する電源装置が有ると便利です。抵抗を交換するといろいろな電圧に対応できます。

PICT6905.jpg

シリーズレギュレターはリチウムポリマー電池の充電器で使用した、低ドロップタイプのもの。

PICT6908.jpg

裏面

2008-05-13

データシートを見ながらブレッドボードに回路を組み立てていくが、よく見るとブレッドボードではまずそうなことが幾つか書いてある。発振子には25MHzのクリスタルをつかうがそれもちょっと不安材料。

PICT6909.jpg

低ESRとか、面実装タイプとか周波数にうるさそう

PICT6912.jpg

すごく半端な抵抗値。「面実装タイプの物を使え」と書いてある。

2008-05-18

そういえば実験用のHUBが無い。さすがにYahooBBのルーターを使ってしまうのはまずいだろう。

PICT6926.jpg

ブレッドボード上に組み上がった回路

PICを外した状態で通電してみた。120mAも流れたので誤配線かと思って慌てて電源を切る。データシートを見たらかなり電気大食いでした。

PICT6922.jpg

ずいぶん電流が流れる

PICT6925.jpg

何もしていなくても120mA,データ送信中は160mAも流れる。

2008-07-14

HUBは¥2000もしないので、購入しようかと思いましたが無線LANのルーターが出てきました。物が沢山ありすぎて何を持っているのか忘れてます。

PICT7424.jpg

無線LANルーターですがHUBにもなります

若干不安定な気もしますが、ブレッドボードで動きました。電流計は120mAを指したまま動きません。あっという間に転送が完了してしまうので、電流計の針が振れる時間がないのでしょう。

PICT7429.jpg

接続確認の定石。PING。最初の3つは届いたが、4つ目がタイムアウト。ブレッドボードでは不安定みたいだ。

PICT7428.jpg

IPアドレスやMACアドレスはPICからENC28J60のレジスターに書き込むことで行います。

MikroBASICのサンプルプログラムは簡易Webサーバーです。PIC+ENC28J60がWebサーバーとなって、それをパソコンからWebブラウザーで操作できます。ADコンバーター2CHとポートBの状態監視(つまり入力)、PORTDの操作(つまり出力)が出来るみたいです。

PICT7434.jpg

MikroBASICのサンプルプログラムを動かしたところ。

2008-07-15

ブレッドボードでは不安定みたいなので基板を作成。未配線が1本残ったので、これはリード線で配線します。サンプルプログラムはWebブラウザーを使うため基本的に手動操作になります。これでは都合の悪いこともあるので、VisualBASICのサンプルも作ってみることにします。

PICT7437.jpg

基板パターン。ブレッドボードで実験した回路に加えてLEDやスイッチなどを追加してあります。

PICT7439.jpg

最近、何故か基板の出来が良い。気温が高いためか?

2008-07-16

部品が1個だけ不足しているため未完成だが、ほぼ半田付け終了。ここから先はソフトいじり。

PICT7442.jpg

実験基板

2008-07-19

部品の買い出しに行って回路を完成させました。ICSPもOK。

PICT7468.jpg

基板裏面

PICT7453.jpg

Webサーバーは画面の見た目にかかわる情報を送信してくるのでICSP出来ないととても面倒なことになります。

ソフトの修正には手こずりました。表をJavascriptを使用して生成しているので、Javascriptの勉強もしないといけません。この程度の画面のにぎやかさでPIC16F877AのROMの84%、RAMは64%も消費してしまいます。Webプログラムを作る場合は一部のデータだけを、この装置から入手してそれ以外は別サーバーから出力するようにしないと見た目のいいプログラムは作れません。

PICT7464.jpg

回路にあわせて変更したソフト。もちろんファームウェア側を修正します。

簡易Webサーバーのプログラム&回路図

・WebサーバーのIPアドレスは 192.168.11.2 です
・プログラムサイズが大きいので有料版のmicroBASICが必要
・機能:
  1.Webブラウザーから3つのLEDを点灯/消灯させる
  2.2つのスイッチの状態をWebブラウザーに表示させる
     表示が変わるのは「Reload」リンクを選択したとき
     スイッチを押したタイミングで表示が自動更新されるわけではない
  3.半固定抵抗で電源電圧を分圧した電圧値をA-Dコンバーターを使用して取り込み
    画面に0~1024(10ビットです)の範囲で表示する
    実験回路はVR<->電源間に1kΩの抵抗が入っているので
    表示されれる値は0~約900になります。
ファイル ファイルタイプ 添付ファイルの解説
enc28webseerv.wmv MOVIE 動いているところ
ENC28SCEMA.GIF GIF 回路図 GIFファイル版
ENC28J60_eagle.zip EAGLE EAGLEの回路図&基板パターン EAGLE V4.15
SerialEthernet_mbasic.zip OTHER microBASICのプログラム microBASIC V6.0

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を使用するのが適当だ。