「Arduino」カテゴリーアーカイブ

Arduino開発奮戦記

USBシリアル変換アダプタ(CP2102)からDTR信号を引き出す

前回の投稿の続きです。

Arduino公式ドキュメントによれば、Arduio Pro Miniはプログラム書き込み時にリセット信号をGRNピンに送信する(またはリセットボタンを毎回押す)必要がありますが、私が購入したUSBシリアル変換アダプタ(CP2012チップ使用)には、その機能がなかったため、アダプタを少しだけ改造してみました。

CP2102_usb_serial_adapter

最初はピンヘッダのひとつに「RST」という記載があったので、てっきりこれがArduinoのリセットに使えるとばかり思っていたのですが、CP2012のデータシートを確認したところ、CP2012をリセットするための信号でした。ちゃんとデータシート読まないとダメですね(汗)。

CP2012_DTR
その代わり?28番ピンにDTR(データ端末レディ)信号が出ているのを見つけました。
28番ピンは何処にも接続されていなかったので、この信号を何とかしてArduino Pro Miniに繋いでやることにします。

CP2102 howto

具体的には、RST用のピンヘッダを拝借して、代わりにDTR信号を送ることにしました。
最初はRST用のピンヘッダから9番ピン(RST)へ繋がっているパターンをカットするつもりだったのですが、途中に抵抗R3がハンダ付けされていたので、こいつを外してパターンカットの代わりとして、さらに空いたランドに積層セラミックコンデンサを取り付けました。

capacitor 0.1μF (104)

積層セラミックコンデンサは0.1μF(104)を使用しています。Arduino公式の回路図を見ると、DTRからRESETへのラインには0.1μFが入っているので、積層セラコンを入れずに直接28番ピンをRSTピンに繋いでも動作するかもしれません(未検証ですが)

CP2102_modified

できあがりはこんな感じになります。
積層セラコンの足はなるべく短くカットしてみました。長すぎると抜き差ししているうちに指が当たってパターンごと剥がれる事故が発生するかもしれないので。というかしました。(涙)

28番ピンには作業前に少しだけハンダをのせておくと作業がしやすいです。
ただし0.5mmピッチなので隣のピンとくっついてしまわないように注意して下さい。

arduino_pro_mini_connected

Arduino Pro Miniと接続してみました。こうしてみるとPro Miniの小ささが際立ちますね。
小さなデバイスを作りたいユーザにとって、この小ささと低価格(互換機だとさらにお安く!)が大きな魅力です。ブレッドボードに直接刺さるというのもお手軽で良いですね。

もし安価にArduinoを試したい!という方はぜひチャレンジしてみて下さい。
もちろん最終的には自己責任でお願いしますが、もし質問などあればコメント欄にお願いします。m(_ _)m

Arduino Pro Mini 互換 起動メモ

AliexpressでArduino Pro Mini互換機を購入しました。
USBシリアル変換アダプタ(CP2102)付きで1セット4ドルちょっとという破格のお値段でした。
何よりもArduino Pro Mini初体験ということで、色々とはまりどころもあったのでメモしておきます。

Arduino Pro Mini Compatible
Arduino Pro Mini Compatible

駆動電圧は2種類存在

まずArduino Pro Miniには5V版と3.3V版が存在します。
これは使用されているマイコンATMEGA 328Pの仕様として、最大動作速度が供給電圧に依存していることに起因しています。データシートを確認すると4.5V以下の電圧で使用する場合は最大動作速度が線形に変化することがわかります。

ATMega328P Speed Grades

今回私が入手したのは5V版ですが、供給電圧を3.3Vに変更することと、スケッチの「ツール」メニューから「Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328」を選択すること以外は特に利用方法は変わりません。

Microprocessor Board Select

プログラム書き込みにはUSBシリアル変換アダプターが必要

Arduino Pro Miniの最大の特徴がこれで、Arduino UNO等には標準で装備されているデータ書き込み用Micro USBコネクタが存在しません。このためUSBシリアル変換アダプターを本体のTX/RXピンに接続して、アダプタ経由でプログラムを書き込むことになります。
ちなみにこれはVCCとGNDを接続するのと同じく必要最低限の準備であり、実際には後述するデータ端末レディ(通称DTR。シルク基板上にはGRNと表記)ピンを接続しておかないと、プログラム書き込み時に毎回リセットボタンを押す事になります。

プログラム書き込み時には毎回リセットが必要

今回自分がつまづいたのがここでした。Arduino UNOと同じ感覚でスケッチをArduino Pro Miniに描き込もうとすると、実行時に「マイコンボードに書き込もうとしましたが、エラーが発生しました」というメッセージが表示されます。

avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: ser_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
avrdude done.  Thank you.

原因はプログラム書き込み直前にArduino Pro Miniをリセットしないと書き込みが許可されず、結果としてタイムアウトしてしまうというものでした。

当初はこちらのサイトを参考にして上記ログが出力される直前にArduino Pro Mini本体にあるリセットボタンを押してリセット信号を手動で送出していましたが、毎回押すのが面倒な上に、タイミングが結構難しいので何度も失敗するとストレスがたまります(笑)

この問題の解決策は、プログラム書き込み時に使用するUSBシリアル変換アダプターのDTR信号ピンを、Arduio Pro MiniのGRNピンに接続してやることです。Arduino Pro Mini用と謳われているUSBシリアル変換アダプター(例えばスイッチサイエンスさんで販売しているこちらの商品とか)であれば、このあたりのお約束は特に意識する必要がないと思いますが、自分が入手したCP2102チップを用いたUSBシリアル変換アダプターには実はこの信号がCP2102チップから引き出されていなかったために、結果として変換アダプタを改造してやる必要がありました。

このCP2102のUSBシリアル変換アダプタの顛末については次回詳細に述べたいと思います。→書きました