ArduinoでPICマイコンに書込む~OpenStickLite(PIC18F14K50)編~

ジョイスティック自作用ツールキットOpenStickは元々PIC18F2550(又は2553)を採用していました。このマイコンは28pinで、DIPパッケージだと結構大きい部類になります。
そこで先日PIC18F14K50を使用したOpenStickLiteをβリリースしました。こちらは20pinなので入力ピン数は少なくなりますが、これでも大抵の用途には事足りると思っています。
価格もこちらの方が大幅に安くてすみます。

OpenStickもOpenStickLiteもUSBからプログラムを書き込む為のブートローダを使用しています。 電源投入時(またはリセット時)の条件設定によりブートローダが書き込みモードで立ち上がります。この状態で書き込みツール「MybootOS」を使うとUSBポート経由でプログラムを書き込める訳です。

この種の話題でいつも問題になるのがブートローダ自体はどうやって書き込むかという事です。 ブートローダでブートローダを書き込む事はできないので、通常はそのマイコン専用のライター(PICKit3など)を使用します。
しかし皆がライターを持っているわけではありません。 そこでArduinoを使ってPIC18F2550にブートローダを書き込む実験を過去に行い、問題なく書きこむ事ができました(下記を参照ください)。

今回はArduinoからPIC18F14K50にブートローダを書き込んでみます。これが可能になればOpenStickLiteを安価に使用できます。

まずここの資料でPIC18F14K50の書き込み仕様を調べます。 大体はPIC18F2550と同じですが微妙に違うところがあります。一番問題なのはPGD,PGC端子が耐圧3.3Vという記述です。 PIC18F2550の時はArduinoUNOを用いて5Vで駆動していました。特にPGDは双方向なのでレベル変換は面倒です。 よって今回は3.3V版ArduionoProMiniを用いることにします。
またスケッチには若干のWAITタイムの変更と書き込みイネーブルONのコードを追加しました。
スケッチ→PICWrite18F14K50.ino

書込み電圧は006Pの積層乾電池(9Vの四角いやつ)を用いる事にします。先の資料によると書込み電圧の上限は9Vという事なので、新品の電池だと定格を超える可能性がありダイオード一本で電圧を下げました(使い古した電池だとそのまま繋いで大丈夫です)。

回路

ArduinoProMiniはUSBシリアル変換回路を内蔵していないので、外部にFT232RLの変換回路を接続し、Arduino/PIC18F14K50に供給する3.3V電源もFT232RL内臓のレギュレータから取っています。
PIC18F14K50の電源-GND間のコンデンサは当初0.47μFを使いましたが、PIC18F14K50に電源を投入した瞬間にArduinoProMiniから反応が無くなる事がありました。恐らくFT232RLの3.3V出力が瞬間的にダウンする為と思われ0.22μF(実際には0.1μ×2本)に変更しました。 

PIC14K50WriteByArduinoProMiniSch

PIC18F14K50へArduinoProMiniで書き込む回路図。

参考までにUSBシリアル変換は次の回路です(最近の電子工作には何かと登場しますね。一家に一台FT232RLです)。
FT232RLは3.3Vのレギュレータを内蔵しており、これをVCCIO端子に入力する事で3.3Vレベルで使用できます。この回路ではスイッチを設けて5Vと3.3Vを切り替える様にしています。
但しレギュレータから取れるのは50mAまでなのであまり大きくはありません。

USBSerial

FT232RLによるUSBシリアルインターフェース

PIC18F14K50WriteByArduinoProMini

Arduino ProMiniで書き込み中。
横のFRISKケースはUSBシリアル変換です。

書込み手順

PIC18F2550の時に書いた内容とほぼ同じです。
※前回同様TeraTermの「貼り付けの行間遅延設定」を50mS程度にしておく必要があります(書込み時間待ちの為です)。

<PIC18F14K50にブートローダを書込む手順>

  1. まずPIC18F14K50の3.3V電源と9V電池は切り離しておく。
  2. Arduino IDEを立ち上げこのスケッチを書込む。
  3. TeraTermをシリアルモードにしてArduinoに接続する。
    シリアル設定:9600bps,8bit,パリティ無し,stop=1,フロー制御=none
    改行コードは送信・受信共にCRにする。
    また、「設定」→「その他設定」メニューの「コピーと貼り付け」タグを選び、「貼り付けの行間遅延」を50mS程度にしておく。
  4. 接続するとTeraTerm上に以下のメニューが表示される。
    r  <start address> <count>: read from PIC
    e : all erase
    w : write to PIC
    v : verify
  5. ここでPIC18F14K50に3.3V電源→9V電池の順で供給する。
  6. 必要に応じ’r’コマンドで現在書かれている内容を確認する。たとえば・・・
    r 0 0×100<CR>
    と入力すると、FLASHメモリの0番地から0FF番地の内容を表示する。
    消去済ならCODEエリア全ての内容がFFになっているはずである。
    (消去チェック機能はないので、どちらにしても次の消去コマンドを実行しておくべきです)
  7. 消去済みでない場合はeコマンドで消去する。
    ALL Erase <y/n>?と効いてくるのでyを入力する。
    このコマンドはチップ全体を消去する(一瞬で終わります)。
  8. ‘w’コマンドで書込む。w <cr>を入力すると’Send me intelhex text’と表示されるので、ここでIntelHEXファイルを送る。この際、上に書いた理由でコピペで貼り付ける方法で送る。 たとえばブートローダのHEXファイルである’Bootloader18F14K50.hex’をメモ帳等で開いて全域をコピーした後、Teratermの画面上に貼り付ける。
    (前に書いた様に「ファイル」→「ファイル転送」メニューからの送信だと取りこぼしが発生する)
  9. エラーなく書き込みが完了したら’v’コマンドでベリファイを行う。方法は’w’コマンドと同じで、v<cr>入力後IntelHEXテキストを貼付けるとFlashメモリを読出して比較する。  エラーが出なければ正常に書き込めた筈である。
  10. 9V電池→3.3V電源の順で切り離し、TeraTermの接続を切りArduinoのUSBケーブルを抜く。

やっぱりArduinoUNOでやってみる。

と、ここまでで書き込みが出来たのですが、やっぱり3.3V版Arduinoは少数派で手元にない場合もあると思われ、メジャーなArduino UNO等でも書けると何かと便利です。 この場合5Vで動作するArduinoと3.3Vで動作するPIC18F14K50の間をどう繋ぐかが問題です。ArduinoからPIC18F14K50へ一方的に入力するPGC信号は単に抵抗分割で問題ありません。一方PGD信号は双方向なのでまじめにレベル変換器を入れると結構面倒な事になります。しかし3.3VのHレベルはArduinoはHと認識してくれる筈と期待しPGDも単純抵抗分割で試してみました。

PIC14K50WriteByUNOsch

ArduinoUNOでPIC18F14K50に書き込んでみる回路図。

実験風景・・・

ArduinoUNOで書き込み

ArduinoUNOで書き込み。UNOは直接USBケーブルを繋げるのですっきりします。

特に問題なく書けました。これが手っ取り早いです。
気をよくしてFritzingでも回路を書いてみました。

PIC14K50WriteByUNO_ブレッドボード

Fritzingでも描いてみた。

 

各ファイル 

※PIC18F14K50用ブートローダは上記バイナリセットかソースのどちらにも収録しています。※言うまでもないとは思いますが、同様の実験をされて万一デバイスが壊れたりしても責任は持てませんので、そこんとこはよろしくお願いいたします。

 

ヨットレースのスタート練習用タイマー

ヨットレースのスタート練習用タイマーを作ってみました。
ヨットのレースはまずスタート5分前に旗が上がり、それから色々と手順を踏んで5分後にスタートとなります。この5分の間に選手は色々な準備を行います。
たとえば陸上の競技と違ってスタートラインに線を引く訳にはいかないので海上のブイとコミッティボートの間の直線がスタートラインとなるのですが、自分がはみ出しているかどうかが判りにくいので一旦ライン上に船を止め、ブイの向こうに見える景色を確認しておきます。そうするとスタートの瞬間にブイと向こうの景色を見る事で自分がラインを超えているかいないかが一目でわかるわけです。
また風の方向や海面の状況をチェックし、どのあたりを走っていくと有利かを予想します。 さらにスタート直前になるとラインの手前に多くの船が集まり混雑する中で有利と思われる場所に船を停止させる必要があります(
船は同じ場所に留まるのが難しいのです)。

RaceStart

スタート前


で、日ごろからスタート練習をやる訳です。
その際、ゴムボート上の先生や関係者が時計を睨みながら5分前とか1分前とか叫んだり、スタートの瞬間にホイッスルを鳴らしたりします。しかし5分間ずっと時計を睨んでいるのは結構苦痛ですし、ホイッスルを鳴らし忘れたりしもします。

そこでこのタイマーです。
スタートボタンを押すと「スタート5分前の5秒前」からカウントダウンし、1秒毎に発信音が鳴ります。そして5分前には長音1回+単音5回で5分前である事を知らせます。
その後、10秒置きに単音1回。また4分前には 長音1回+単音4回、3分前には長音1回+単音3回といった風にカウントダウンしていき、スタート10秒前からは1秒毎に発信音が鳴ります。
また5分スタートの他、4分、3分でのスタート練習にも切り替えられます。

製作

今回はArduinoを使用しました。
プログラムはArduinoUNO上でデバッグし、生のATmega328Pに書き込みます。

Arduionoブートローダ書き込み。

まずFT232RLでArduinoブートローダを書き込み、その後ArduinoUNOに挿してスケッチをダウンロードします。

 

そしてプリント基板を切削。

ヨットスタート練習タイマー基板

切削中。

 

ケースはポリプロピレンのタッパーです。
初めてレーザーでポリプロピレンを切ったので加減が分からず、スピーカー側は十分切れていなかったため後から手で切り抜く羽目に。

ヨット練習タイマー4

十分に切れていませんでした。
結局手作業で切り抜き中。

ヨット練習タイマー5

こちら側はパワーを上げたのでバッチリ切れています。というか少し強すぎたかも。

 

液晶は以前カホパーツセンターのジャンク市で買ったものです(既に3年も経っていました)。
液晶の前面にはクリアーのプラバンを張り、押しボタンの前には厚手のビニールを張って防水しました。
スピーカーを鳴らすアンプには秋月電子で購入したPAM8012モジュールを使いました。D級なので2W出せるのに小さいです。

ヨットスタート練習タイマー

モバイルバッテリーで電源供給。

ヨット練習タイマー2

こちら側はスピーカー。海上でも聞こえる様に3Wクラスです(アンプからは1Wしか入っていませんが)。
ケースとの間にビニールを貼って防水処理しました。

 

回路図

ヨットレース練習用タイマー回路図

クリックすると拡大します。

Arduinoスケッチ

 

まだ実際にスタート練習で使っていません。今度試してみます。

ArduinoでPICマイコンに書込む~その3~

先日の「ArduinoでPICマイコンに書込む」ではMCLR端子の電源として12Vのスイッチング電源を用いたが、今回は9V電池(006Pという四角いやつ)で試してみた。
PIC18F2550の規格上は「VDD+4V~12.5V」の範囲となっており、VDDが5VならばMCLRには9Vの印加で書き込めるはずだ。

やってみたところ特に問題なく消去/書込み/ベリファイができた。
これが一番手軽な書込み方法かもしれない。

PIC write with Arduino AND 006p BATTERY

Arduinoと9V電池を使用したPICマイコンへの書込み

 

ArduinoでPICマイコンに書込む~その2~

先日ArduinoをPICライター代わりにした事を書いた。その際、書込みモードに設定するために外部電源から12Vを印加したが、今回は5Vのみで書き込んでみた。

まず5V書込み(Low Voltage ICSP)を実行するにはコンフィグビットのLVPを’1′にセットしておく必要がある。 PIC18F2550の工場出荷時設定はLVP=’1′なので問題ないが、ブートローダを書込むと’0′に変更してしまうので一旦ブートローダを書込むと5Vモードでは変更できなくなってしまう(LVPビットは12Vモードでなければ変更できないのだ)。

また、LVP=’1′の場合、通常動作時にRB5端子(PRMと兼用)をGPIOとして使用できなくなる。この端子はLにしておかなければ正常動作しないので、OpenStickとして動作させる場合IN16が使用不可となる(デジタル入力端子が一つ減る)。

これらの制約はあるが、12V印加が不要なのは便利かもしれない。

実験開始

まず書込むべきブートローダファイルをLVP対応に変更しなければならない。 具体的には’20M-18f2550.hex’の最後から8行目あたりにある次の記述「:010006008178」を「:010006008574」に変更し、’20M-18f2550LVP.hex’というファイル名で保存した。

次に回路を変更する。12V印加回路は取り除き、Arduinoの10番ピンをPGM、11番ピンをMCLRに接続した。

PICwriteLVPsch

5V書込み(LVP-ICSP)用回路図

Arduinoのスケッチを5Vモード仕様に変更した。

あとは12Vを印加しない事以外、前回と同じ手順で(先程つくったLVP版)ブートローダの書き込みを行なった。

なお先程書いた通りPIC18F2550をLVP=’1′状態で使用する場合はPGM端子(RB5)をLに接続する必要があるので、OpenStickの回路を変更してGNDと接続しなければならない。
あとはいつも通り、OpenStick基板上のModeスイッチを押しながらリセットする事でブートローダが起動し、MyBootOSツールでOpenStickファームウェアを0×800番地から書込み、OpenStickConfigツールで作成した定義ファイルを0×4000番地から書込むとジョイスティックコントローラとして動作した。

この方法での弱点はRB5をGPIOとして使用できなくなる事であるが、そこまでデジタル入力を使う事は少なく、むしろOpenStick基板を変更するのが面倒な事が一番問題かもしれない。
また上にも書いた通り一旦通常のブートローダを書込むとLVP=’0′(5Vモード使用不可)になり5Vモードでは消去すらできず、12Vモードでしか変更できないので注意が必要である(但しそもそも5VモードではLVPを変更できないので最初から5Vモードだけを使うなら間違って使用不可にしてしまう心配はない)。
このあたりの管理を間違うとハマるかもしれない。

・Arduinoのスケッチ(5V書込み版)
・ブートローダ(LVP=’1′版)

 

ArduinoでPICマイコンに書込む

MakerFaireOpenStickを展示していると、「Arduinoでできないの?」と聞かれる事がある。
しかしArduinoでは(Leonardo等の一部を除き)USBとは仮想シリアルで接続しており、HIDデバイスを実現しにくいのだ。 しかもPIC18F2550で製作するのと比べて値段も高い。

PICでなくてArduinoを使いたい理由のひとつとしてはPICライタが必要という点であろう。
OpenStickの場合、あらかじめPIC18F2550のFlashメモリにブートローダを書込んでおくのだが、その為にPICライタが必要になる。しかし一般的なライターであるPICKit3秋月電子でも¥4500する。
こんな自作ライターを使っていた時もありましたが最近のPCはプリンタポートが無いし・・)

昨今、PICライタよりもArduino基板の方がよっぽど浸透しているだろう。
OpenStickをArduinoに移植するのは難しいが至る所に存在するArduinoを使ってPIC18F2550にブートローダを書込む事ならできそうな気がする。という事で実験を行った。

PIC18F2XXXにプログラムを書込む方法はマイクロチップテクノロジー社のこの資料に書いてあった。 このマイコンでは書き込みモードに設定する為に12Vを印加するHigh Voltage ICSPモード(以下12Vモードと呼ぶ事にする)と、5V電源のみで済むLow Voltage ICSPモード(以下5Vモード)がある。 但し5Vモードを使うには制約があり、コンフィグ設定のLVPビットに’1′が書かれていなければならない。新品購入時、LVPビットはデフォルトで’1′なのだが、ブートローダを書込むと’0′になってしまう。 5Vモードだけだと一度書き込んだら書き換えができないという事になるので、今回は外部電源を使って12Vモードで書込む事にした。

<今回の回路図>

PIC write schematic

今回の実験に使用した回路図

MCLR端子に外部から12Vを与えている。デバイスの規格でここの電源はVDD+4V~12.5Vの範囲となっており、12V電源のままで入力可能な筈だが上限値に近いので、念のためダイオードで少し電圧を落とした。 ArduinoはUNOを用い、+5V,GNDのほかは8ピンをPGC、9ピンをPGDに接続した。PGDは双方向なので念の為3.3KΩを挿入したが、デバッグ完了後はダイオードも抵抗も直結で問題なく動作した。

PIC Writer with Arduino

ArduinoでPICライター

PC側はTeraTermでArduinoに接続し、キーボードからコマンドを入力して操作する。
プログラムの書込みおよびベリファイは’w'コマンドに続いてIntelHEXのデータをテキストとして送る。 Arduino UNOのRAMは2KBしかないので全部を蓄えてから書込む事はできず、IntelHEXデータを1行ずつ読んでは書込みを繰り返すのだが、ArduinoとPC間のシリアル通信ではフロー制御を行っていないため、一気にデータを送ると書込みが間に合わず取りこぼしが発生してしまう(この場合パリティエラーとなる)。 この対策としてTeraTermの「貼り付けの行間遅延」設定を増やしておく必要があった(こちらの環境では行間遅延が20mSだと取りこぼしが発生し、50mSだとOKだった)。 なお、この関係でTeraTermからIntelHEXデータを送る際はコピペで送る必要があり、これを「ファイル」→「ファイル転送」メニューで送ると行間遅延が加わらないらしく取りこぼしが発生した。

結果として下記の方法で書き込み/読み出しができ、更にOpenStickを使ってジョイスティックコントローラとして動作させる事ができた。

<PIC18F2550にブートローダを書込む手順>

  1. まず12V電源はOFFにしておく。
  2. Arduino IDEを立ち上げこのスケッチを書込む。
  3. TeraTermをシリアルモードにしてArduinoに接続する。
    シリアル設定:9600bps,8bit,パリティ無し,stop=1,フロー制御=none
    改行コードは送信・受信共にCRにする。
    また、「設定」→「その他設定」メニューの「コピーと貼り付け」タグを選び、「貼り付けの行間遅延」を50mS程度にしておく。
  4. 接続するとTeraTerm上に以下のメニューが表示される。
    r  <start address> <count>: read from PIC
    e : all erase
    w : write to PIC
    v : verify
  5. ここで12V電源をONにする。
  6. 必要に応じ’r'コマンドで現在書かれている内容を確認する。たとえば・・・
    r 0 0×100<CR>
    と入力すると、FLASHメモリの0番地から0FF番地の内容を表示する。
    消去済ならCODEエリア全ての内容がFFになっているはずである。
    (消去チェック機能はないので、どちらにしても次の消去コマンドを実行しておくべき)
  7. 消去済みでない場合はeコマンドで消去する。
    ALL Erase <y/n>?と効いてくるのでyを入力する。
    このコマンドはチップ全体を消去する。
  8. ‘w’コマンドで書込む。w <cr>を入力すると’Send me intelhex text’と表示されるので、ここでIntelHEXファイルを送る。この際、上に書いた理由でコピペで貼り付ける方法で送る。 たとえばブートローダのHEXファイルである’20M-18f2550.hex’をメモ帳等で開いて全域をコピーした後、Teratermの画面上に貼り付ける。
    (上に書いた様に「ファイル」→「ファイル転送」メニューからの送信だと取りこぼしが発生する)
  9. エラーなく書き込みが完了したら’v'コマンドでベリファイを行う。方法は’w'コマンドと同じで、v<cr>入力後IntelHEXテキストを貼付けるとFlashメモリを読出して比較する。  エラーが出なければ正常に書き込めた筈である。
  10. 12V電源をOFFにした後、TeraTermの接続を切りArduinoのUSBケーブルを抜く。

Arduinoのスケッチ
ブートローダ(千秋ゼミさんへのリンク)

※言うまでもないと思いますが、試される方は自己責任でお願いします。
(特に12Vを印加する端子を間違ったりすると・・・ああ)
※コマンド入力のエラーチェックはあまり詳しく行っていません。

 

http://www.hoihoido.com/rudder/index.html

XBee経由でArduinoのスケッチ書き込み

昨日書いたBLOGの続きで、XBee経由でArduinoにスケッチを書込む方法を模索中。

波形をみるとArduino IDEは57600bpsで書き込もうとしていた。XBeeの設定は9600bpsなのでこのままだと通信が成立しない (ところでArduinoは機種によって書き込み速度が違うらしく、UNOとかは115200bpsだそうだ)。
書き込み速度を落とす事は簡単ではないので、XBeeの方を57600bps設定にしてみた。
フロー制御無しなのが不安ではある。
また手動リセットだとタイミングがつかめないのでリセット信号だけは図の様に有線で接続した。
これで試したところ、正常にスケッチを書き込めている。

リセットだけ有線

XBee経由でスケッチ書き込み。
(リセットだけ有線。描いてないがGND同士は接続。)

リセット入力から書き込みデータ送信までの時間を波形で確認したところ意外に長く、2秒程度であった。またリセット信号が出るタイミングはArduiono IDEに「マイコンボードに書き込んでいます」の表示が出る瞬間である事も判った。という事はこの表示が出てから2秒以内にリセットボタンを押せば書き込めるはず・・・。
有線リセットの配線を取り外し、このタイミングで手動リセットを押してみたところ、無事スケッチを書き込む事ができた。

これでとりあえずはスケッチの更新を無線でできる様にはなった。しかしなんとか自動リセットにならないものか? もう少し調べる事にする。

XBee

だいぶ前に購入して放っておいたXBee(Series2)を動かしてみた。

XBeeの端子は2mmピッチなので、まずは変換基板を作成する。早速CNCで切削してみた。 基板の真ん中付近はユニバーサル領域である。

Board for XBee

XBee用2.5mmピッチ変換基板 その1

この基板にXBee用2mmピッチコネクタを取付けた後で失敗に気付いた。2.54mmピッチのコネクタ部分の幅が広すぎてブレッドボードに載せられないのだ。

Board for XBee

こりゃ失敗。幅が広すぎた。

市販の変換基板は2mmピッチ端子よりも内側に2.54mmピッチ端子が並んでいる。しかしなんだか使いにくそうに見えたので外側に配置したのだが、そういう事だったのね・・・。
教訓:先人の知恵に学べ(違う事をするならよく考えてからにしろ)

早速作り直した基板がこれである。2.54ピッチ端子を内側に移動した。これにより外形がコンパクトにもなった。 中央付近のユニバーサル領域は8×2に変更。

Board for XBee 3

XBee変換基板 その2

この基板を先日作成したFT232RLアダプタ経由でPCと接続するのだが、XBeeは3.3V電源なのでアダプタを少し改造した。FT232RLは3.3Vレギュレータを内蔵しており、この出力(3V3OUT:17pin)をIO電源(VCCIO:4pin)に接続することで3.3V化できるのだ。 そこで小型のスイッチを取り付け、5Vと3.3Vを切替え可能にした。

FT232RLtoXBee

FT232RLボード+XBee 5V/3.3V切替えSW付き。

 

通信の相手方にはArduino Pro Miniを使う事にする。先程失敗したピッチ変換基板であるが、よく考えると最低限必要な端子は左半分で済むので写真の様にずらして挿せばブレッドボードで使用できる事に気付いた。
電源は3.3Vのスイッチング電源である(壊れたプリンタから取り外したもの)。

XBee実験

とりあえずこれで通信できた

あちこちのサイトを見て回り、XBeeモジュールの最低限のお手軽設定を次の通りに実施。
<PC側モジュール>
・まずXCTUで出荷時の設定を読み込み。
・Function Setを “ZIGBEE COODINATOR AT”に設定。
・DHを0013A200(相手方のアドレス上位)
・DLを409EXXXX(相手方のアドレス下位 XXXXは4桁のHEX)

<Arduino側モジュール>
(一旦Arduiono側ソケットから外し、ホスト側に指した状態で設定する)
・まずXCTUで出荷時の設定を読み込み。
・Function Setを “ZIGBEE ROUTER AT”に設定。
・DHを0013A200(相手方のアドレス上位)
・DLを409EXXXX(相手方のアドレス下位 XXXXは4桁のHEX)

※XCTUはXBeeの設定ツールで、Digiのサイトからダウンロードした。
※各モジュールのアドレスは裏側に書いてある。

Arduinoにシリアルを読んでLEDをつけたり返事を返したりするスケッチを書き込んでおき、シリアルモニターから色々入れてやると、それに応じてあっけなく動作した。

しかし・・・
もう一つやりたかったのが無線経由でのスケッチの書き込みである。しかしこのままでは上手く行かず、次のエラーがでる。
avrdude: stk500_getsync(): not in sync: resp=0×00
Arduinoはリセット後一定の時間の間に書き込みを開始しなければならなず、普通にシリアルアダプタを使う場合はDTR信号でリセットして直後に書き込みを開始するらしいが、現状のXBee経由だとこの方法が使えない。 何度か手でリセットボタンを押しながら試したのだが、タイミングが合わない為か上手く書き込めなかった(最近のArduinoは自動リセットが前提なので待ち時間が短いらしい)。
XBeeの説明書を見て何とかリセット信号を出せないかと考えているのだが・・・これまた英語なので苦労している。
あちこちのサイトを見て回ってもスケッチを書込む例が見当たらないので、かなり厳しいのかもしれない。

FT232RL

バッタ物Arduino Nanoから外した故障と思われるFT232RLをもう一度動作させてみるため、0.65mmピッチSOPの変換基板を作成した。 ウチのCNCの精度で大丈夫か不安だったが、バックラッシュのため一本置きに太さがが違うとかを気にしなければ何とか使えそうである。

SOP065x28pin

ピッチ変換基板。上半分は彫り込みが浅かったので後から少し深めに再切削した。

先日Nanoから取り外したFT232RLを実装してみた。

FT232RL Nano

故障と思われるFT232RLを再実装。

そして周辺回路を取付けた。

FT322RL Nano2

周辺回路を取り付けたところ。

しかしPCと繋いだところ、やはり以前と同じ症状だったので、このFT232RLはあきらめる事にする。
一旦取り外して秋月電子で買った新品を取付けてみたところ、(当然ながら)問題なく動作した。 今後この基板は龍山電子商街で購入したArduino Pro Miniの書き込みアダプタとして使うことにする(先日のblogではArduino Miniと書いたが、じつはArduino Pro Miniだった事に後で気付いた)。

ArduinoProMini

LEDも取付け、今後Arduino Pro Miniの書込みアダプタとして使う。

FT232RL3

裏から見たところ

 

龍山電子商街で買ったArduino Nano

先日、韓国出張時に龍山電子商街で買ったArduino Nano(バッタ物)がPCとつながらない話を書いた。 Nanoの基板に載っているFT232RLが返すPID(プロダクトID)が0000になっているのが怪しく、ドライバーとの関連付けが上手く行かない。そこでドライバーインストールディレクトリにある*.infファイルを書換えてPID=0000としてインストールを試みた。NanoをPCに挿すとドライバーのインストールが始まったが、途中でなにやらエラー(内容は忘れた)が出て結局正常に動作はできなかった。
仕方が無いのでFT232RLの交換を決意。秋月電子から2個購入した。

FT232RL

FT232RL 念のため2個購入。
1個300円。

Arduino NanoからFT232RLを取り外す。 購入時から取付け済だったピンヘッダがあり狭い。 しかし何とか外せた。

FT232RL取り外し

FT232RLを取り外したArduino Nano

そして新品のFT232RLを再ハンダ付け。

Nano2

新しいFT232RLを取付けた。

そしてPCに挿すと、以前とは違う状態(Unknown device扱いになりFT232RLである事も認識できない)ながら依然として正常には接続できない。そこで前から疑っていたTEST端子(26pin)をGNDに落としてみる事にした。 幸い隣の25pinがAGNDなので26-25pin間をハンダでブリッジさせ、PCに挿すと正常に接続できる様になった(上の写真もよく見るとハンダブリッジが見える)。
ArduinoIDEからプログラムを書込む事もでき、修理完了である。
購入時、導電ではなさそうなスポンジに挿してあった事が原因なのかどうかは判らない。取り外したFT232RLをもう一度動作させてみたい気もするが、SOP→DIP変換基板がもったいないので少し考えてからにする。

龍山電子商街(ソウルの秋葉原)

先日、韓国に出張した。 最終日に少し時間があったので龍山電子商街(ヨンサンチョンジャサンガ)に行ってみた。

龍山電子商街3

このあたりの感じは日本橋っぽい。

それ関係のビルが幾つもあるのだが今回は家電やPCはパスし、電子部品屋があるという「電子ランド」に向かった。

龍山電子商街1

見えてきた。

部品屋は地下1Fにあるそうなので直行した。

龍山電子商街2

なんか、寂れてる・・・

人があまりおらず閉まっている店も多い。それでもArduiono関係の店が2軒ほどあり、そこだけ客が居た。
値段はというと、例えばArduinoMEGAだと80900ウォン(約¥8900)で日本よりもかなり高い。しかしバッタ物(中国製)もあり、こちらは23000ウォン(約¥2530)である。
本家Arduionoをリスペクトしつつもバッタ物の安さに負けて以下を購入した。

購入部品

ArduinoMEGA,Nano,Mini 全てバッタ物
モーター付きの車輪
UNOのブートローダ書込み済ATmega328P

よく見るとNanoを挿してあるスポンジは導電性に見えない。
ATmega328Pも普通のスチロールみたいなのに挿してある。

Nano(Batta)

普通のスポンジに見える。

で、家に帰ってMegaとNanoをLチカしてみたところ、Megaは問題なく動作したがNanoはPCとの接続が上手く行かない。
デバイスマネージャーに 「FT232R USB UART」の表示は出るがドライバが見つからない。 手持ちのFT232RL使用ボードだと問題ないのだが・・・。
プロパティを見ると手持ちボードのPIDは6001で仕様書通りだがNano(バッタ)のPIDは0000なのが怪しい。
PIDはFT232RL内のEEPROMに書かれているので正しい値に書換えるため、FTDIからFT_PROGなるツールをダウンロードしてきた。しかしこのツールでも認識できない(手持ちボードだと認識できる)のでやっぱり壊れてるのかなぁ?

ところでNanoのFT232RLのTEST端子(26pin)は回路図上オープンになっているがこれで良いのだろうか? データーシートによると、ここはGNDに落とせと書いてある。 検索してみると海外のサイトでTEST端子をGNDに落としたらトラブルが解決したという記事もあったが、ウチのは効果がなかったので別の問題なのだろう(でもTEST端子はGNDが正解だと思う)。