mbedで色んなことが簡単に出来るだろうことはわかったけど、遊びと勉強ばかりでは面白くないので、仕事に何か応用できないかと考えた。
そこでこの時にVB.netで作ったRS485通信のPC内シミュレータを、mbed LPC1114に移植できれば複数台の通信確認が取れるなと考えて、RS485通信トランシーバIC (TE)SN75176BP とブレッドボードその他を購入しやってみました。
今回は、3台分の機器側に成りすますシミュレータをブレッドボード上に配線します。 ブレッドボード上に1台ずつ、計3枚の普通のブレッドボードが必要。
- 購入部品 (LED、抵抗、配線材などは手持ち品を流用)
名称 型番 購入先 数量 単価(税抜) 普通のブレッドボード EIC-801 スイッチサイエンス 3枚 257円(税込) mbed対応マイコン LPC1114-FN28
生産中止(?)品秋月電子通商 3個 120円 RS485/RS422トランシーバIC (TE)SN75176BP 秋月電子通商 3個 80円 ディップSW 5P 秋月電子通商 3個 60円 タクトSW 各色 秋月電子通商 3個 10円
- 配線図
- 電源はトラ技ライタ経由USBから取る。
- ディップSWで局番(今回は1~3)設定可能とする。
- SN75176BPのDE端子は、機器1台なら3.3V印加しておくだけでOKだが、機器2台以上マルチドロップの場合は、マスタからのコマンドに返信するとき以外はバスを解放する必要があるため、マイコンのdp4を返信直前にHigh、返信後20msec後にLowとするソフト処理を行う。
- マイコン側は3.3Vなのでこのままで良いか不安もあったけど動いてるから大丈夫?
- マスタ側ソフトは、このディレイ時間20ms分の待ちが必要。
- この信号のHighの時に赤LEDを点灯させる。
- RS485バスラインのプルアップ抵抗(R5)、プルダウン抵抗(R6)の抵抗値は、実際の路線長で決める必要があると思うのだけど、今回はテストなので小さ目の抵抗を入れてみた。
- 生存確認用にLED1を点滅。 UARTポートと共に割り込みプログラムとする。
- プログラム
- 今回は、仕事の秘匿義務の兼ね合いもあるので非公開です。すみません。
- コーディング・デバグは、ある程度の段階でmbedオンラインコンパイラからエクスポートして、μVision4にて行いました。
- 配線状況
テストなのでヒドイ状態ですね。(汗) 下記動画の際には少しだけ整理しました。
- 動画
PLC側のテスト画面と共に映してみました。ボーレートは38,800bps。
機器1→機器2→機器3と通信先を切り替えてサイクリックに通信します。 機器側が受信し送信中に赤LEDが点灯します。 1回のコマンドで1点灯で、点滅回数分のコマンドを処理しています。
今後も仕事で通信案件が来た時には、こんな感じでシミュレータを作って事前テストするですね。 部品単価が安いので、USB/RS485コンバーターを買うよりずっと安価にできますし。
ここまでテストばっかりやってきたけど、そろそろ実際に動かす何かを作るかなあ。。
引き続き、mbedをいじってます。
先日入門したばかりでもとても便利と感じるmbedのオンラインコンパイラ。
オンライン上で先人の公開したライブラリやプロジェクトをさくっとインポート出来たり、自分のPC環境に依存しない、デバイス毎に異なる設定などは予め設定済みで、マイコンの種類を変えても少しの変更ですぐに移植できる、などなどとても良くできていて、私のような初級者には大変ありがたいものであります。
しかしですね、、やっぱりIDEでオフラインコンパイル、ステップ実行デバグをやりたいですね。 ということでmbedと先人の知恵を頼ってやってみました。
- 概要
トランジスタ技術2014年3月号には付録にトラ技ライタが付いてくる。 これをEIL-MDK(μVision4)でコンパイルしたバイナリをCMSIS-DAP経由でマイコンにロードするのと、デバグで使います。 UART(USBシリアル)は同時に使えなかったので(やり方がまずかった?)相変わらずFT232RLを繋げています。
もっと楽をしたい方は、素直にSwitchScienceでLPC1114のmbedボードを買ったほうが良いと思います。。たぶん。
→その後、UARTもCMSIS-DAPも同時に接続できるようになり、FT232RLは不要になりました。
- 接続図
左図ではUART(USBシリアル)用にFT232RLを入れていますが、これは不要になり右図のようにトラ技ライタ側のUARTポートからTx,Rxに繋ぎます。
- 現物
左図のブレッドボードの上段左側がトラ技ライタ。右側がLPC1114マイコンとUSBシリアルFT232RL。 右下のは次回テスト予定のRS485ドライバチップとディップSW。 右図はFT232RL無しの最終状態。
- μVision4でデバグポートにトラ技ライタを指定したところ。 速度は10MHzでも行ける。 μVision5では100KHzまでしか出なくて断念した。 →その後、トラ技のファームウエアではなく、このページのファームウエアに書き換えた後で、トラ技ライタをUSB接続した状態でこのページのUART最新ドライバをインストールしたところ、無事に全て使えるようになりました。 μVision側設定画面はこうなりました。 Windows8.1上のデバイス表示に、3つの接続が出現していればOK。 1つしか出ない場合は、USBドライバがインストール出来ていないです。
- 割り込みイベントが発生すると、デバグがここで止まってしまい再開不能でマイコンをリセットすることになる。
今のところ解決策がありません、どなたかご存じの方、Help me。もしかするとリアルタイムOS使っていないとだめなのかな? デバグしなければきちんと動くんだけど・・
→これもトラ技のファームから変えて、さらにnRESET配線1本をきちんと結線することでOKになりました。 nRESETを結線すると、LPC1114に付けたタクトSWでリセットできなくなるので、その際には毎回ライタからのnRESET結線を外してSWを押す、という操作が必要になります。
→上のほうの接続図のようにnRESET中間に1KΩの抵抗を入れることで、そのままリセットも効くようになりました。正しい回路ではないと思いますが、実用上は今のところ問題ありません。
参考:
- トラ技ARMライタを mbed interface にする(LPC1114FN28編)
まさにこれ!と思ってここのファームウエアを試してみましたが、UART(comポート)が出てこない、CMSIS-DAPが出てこない、という状態で断念。 PCがWindows8.1だからかなあ。。
→再度試したところ、下記ページにあるUARTドライバをインストールしたら全てOKになりました。
但し上のページの結線は、何かおかしいです。nRESETの配線が別のところへ行っている気がします。- μVision4でデバッグ!(mbed-MACRUM)
トラ技ライタでは無くファームウエアはここのものは使いませんが、作業の流れはこれが近いです。ファーム書き換え後のUARTドライバはここからダウンロードしてインストールします。 - Keil MDK-ARM v4 のダウンロード
このページのv4のリンクより。 ライセンスフリー版では32Kbの制約があります。v5は通信速度が出なかったです。→これも再度確認したら問題ありませんでした。 - mbedをIDEで使う(野良2-mbed)
μVision4のあたりが詳しいです。
- μVision4でデバッグ!(mbed-MACRUM)
- トラ技のページ
ファームウエアはここから「トラ技ARMライタ基板をCMSIS-DAP(デバッガ)として使うときのファームウェア」をダウロードして流し込みます。→当初はこれでやっていましたが、後で別のファームでOKになり不使用です。- トラ技2014-3月号
ここでまだ買えます。(マルツパーツ館) - 部品セットはここで買えます。(マルツパーツ館)
- トラ技2014-3月号
次回は、この時に仕事で作ったPC上のVB.NetなRS485シミュレータを、LPC1114マイコンに置き換えて通信してみるテストです。