2018年5月13日日曜日

Arduino Micro(SparkFun Pro Micro)の謎

これも、届きました!
前回のBluetooth Moduleは、特に速かったですが
どうゆう訳か、Arduino系のパーツは、配送速いですね~
ここんとこ、トラブル続きでスルッといきません。これもなのです。(´-﹏-`;)


すぐにUSBに挿入すると
緑のLED(Power)が1個、赤のLED(TX・RX)は2個ついたまま
デバイスマネージャーには、すぐに「Arduino Micro(COM10)」とでて
右下にデバイスドライバのセットアップが始まり
完了。
Arduino IDE v.1.8.3で[Arduino Micro]にして
Lチカを書き込みます。
これはすんなり行くだろうと思いきや、エラー
COMは、ちゃんとCOM10に設定しているのにです。
調べていくと
どうもこいつは、書き込みに非常に癖がある代物のようです。

ここが詳しそうです。
Arduino互換機でSparkFun Pro Microというものらしい
色んなバージョンがあるんですね~
マーティーが買ったのは、これです。
よーくみると16MHzの水晶発振子がついていて
J1パッド(上の写真の左端下)もあり、オープンになっています。
SparkFun純正は、これ
マーティーのは、いわゆる中華Cloneってやつで、Fakeではない事を願っています。
16MHzの水晶発振子がついているので必然的に5V動作ということになります。
どうやら本当は、3.3Vと5Vのシルクのどちらかにチェックがあるハズのようです。
が、マーティーのは、3.3V、5Vと印字があるも、どちらにもチェックなし(-_-;)
で、書き込みには、Arduino Microではなく
SparkFun Pro Microのボードマネージャーが必要のようです。
Digisparkの時にDigistumpのとSpence Konde氏のものをインストールしましたが
同じ様にSparkFunのボードマネージャーをインストールする必要があります。

Arduino IDE v.1.8.3を起動します。
[ファイル]-[環境設定]します。
赤枠部の[追加のボードマネージャのURL:]に次のURLを入力しますが
マーティーの場合、先にDigistumpのとSpence Konde氏のURLが入っています。
この後ろに「,」をつけて追加してもいいのですが
右下の赤枠部のボタンを押すと
このボックスで改行して次のURLを追加して
***
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
***
[OK]します。
環境設定を閉じて
[ツール]-[ボード]-[ボードマネージャー]をクリックします。
すると、ボードマネージャーのボックスが出るので
「プラットフォームのインデックスをダウンロード中」が終わるまで待って
[タイプ]の横の「検索をフィルタ」の欄に「SparkFun」と入力したら、
SparkFun AVR Boards by SparkFun Electronics 」をクリックすると
右側に[インストール]ボタンが現れます。
インストール前にプルダウンボックスでVersionをみると1.1.10でした。
そのまま[インストール]をクリック
ボードの定義がダウンロードされ
ボードがインストールされ
完了すると赤線部に「INSTALLED」がでたら[閉じる]します。
[ツール]-[ボード]で下の方にスクロールすると
今回は、懸念していた「先にインストールしたのが消える現象」はなく
[Arduino AVR Board]群ができています。
そこの[SparkFun Pro Micro]を選択します。
[プロセッサ:]の所を開いて
[ATmega32U4(5V, 16MHz)]にします。
[ファイル]-[スケッチの例]で下の方に
[SparkFun Pro Micro用のスケッチ]と
[Arduino AVR Boards用のスケッチ]が追加されました。
Arduino IDEの書込装置を何に設定していいか見つからず
ま~だ書き込みはできませんね~

この状態で[ボード情報を取得]をみると
 何と!「Arduino/Genuino Micro」とでたのです。
改めて上のシリアルポートの名称を見ると
”COM10(Arduino/Genuino Micro)”になっているのに今頃気づきます。
先のサイトの説明では、
「RESETスイッチを2回押し(ダブルクリック)すると
 シリアルポートが8秒間出現する」
ということなのですが
マーティーのは、RESET スイッチは、付いていないし
USBに挿したらすぐにArduino Micro COMポートができて
8秒過ぎても消えないのです。
このSparkfunサイトにも、RESET2回押しの説明があります。
Sparkfunサイトのここにボード上のTXとRXをBlinkさせるスケッチがありました。
インストール方法もあり、Windows10は、シリアルドライバは自動だとあります。
他にも色々サンプルスケッチがあります。
書込装置の設定はわかっていませんが、いつもの「AVRISP mkII」のまま
この設定で書き込んでみることにします。
そのSparkfunサイトからスケッチをコピペしてきますm(_ _)m
*****
/* Pro Micro Test Code
   by: Nathan Seidle
   modified by: Jim Lindblom
   SparkFun Electronics
   date: September 16, 2013
   license: Public Domain - please use this code however you'd like.
   It's provided as a learning tool.

   This code is provided to show how to control the SparkFun
   ProMicro's TX and RX LEDs within a sketch. It also serves
   to explain the difference between Serial.print() and
   Serial1.print().
*/

int RXLED = 17;  // The RX LED has a defined Arduino pin
// The TX LED was not so lucky, we'll need to use pre-defined
// macros (TXLED1, TXLED0) to control that.
// (We could use the same macros for the RX LED too -- RXLED1,
//  and RXLED0.)

void setup()
{
 pinMode(RXLED, OUTPUT);  // Set RX LED as an output
 // TX LED is set as an output behind the scenes

 Serial.begin(9600); //This pipes to the serial monitor
 Serial1.begin(9600); //This is the UART, pipes to sensors attached to board
}

void loop()
{
 Serial.println("Hello world");  // Print "Hello World" to the Serial Monitor
 Serial1.println("Hello!");  // Print "Hello!" over hardware UART

 digitalWrite(RXLED, LOW);   // set the RX LED ON
 TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
 delay(1000);              // wait for a second

 digitalWrite(RXLED, HIGH);    // set the RX LED OFF
 TXLED1; //TX LED macro to turn LED ON
 delay(1000);              // wait for a second
}
*****

途中でCOM11の文字が一瞬ちらっと!
COM10で書き込みしたハズなのに、どきっ!
また失敗なのだろうか?
書き込みは無地成功しました!
すぐに右下にこれがでて
SparkFun Pro Microのデバイスドライバが入ります。
TXとRXが交互にブリンクしています。
ひとまず書き込み成功です! ふ~っ!

と、デバイスマネージャーをみると
何と!「USBシリアルデバイス(COM12)」になっています。
書き込む前の「Arduino Micro(COM10)」は、どこに行ったのだろう?
COM12にしてシリアルモニタを開くと、ちゃんと動いています。
Arduino IDEのログをみてみると
「シリアルポート「COM10」を1200bpsで開いて閉じる事によって、
リセットを行っています。」
ってのがありました。
*****
C:\Program Files (x86)\Arduino1.8.3\...
~・・・・・
スケッチをコンパイルしています...
~・・・・・
最大28672バイトのフラッシュメモリのうち、スケッチが5078バイト(17%)を使っています。
最大2560バイトのRAMのうち、グローバル変数が346バイト(13%)を使っていて、ローカル変数で2214バイト使うことができます。
シリアルポート「COM10」を1200bpsで開いて閉じる事によって、
リセットを行っています。
PORTS {COM10, } / {} => {}
PORTS {} / {COM11, } => {COM11, }
Found upload port: COM11
~・・・・・
         Using Port                    : COM11
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega32U4
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
~・・・・・
avrdude: verifying ...
avrdude: 5078 bytes of flash verified

avrdude done.  Thank you.
*****

一度、USBを抜き差しすると
もう何度やっても「Arduino Micro(COM10)」が出てくることはなく
「USBシリアルデバイス(COM12)」にしかなりません。
不思議だ~
まさか元のBootloaderが消えてしまったのか、壊れたのか...(-_-;)

もう一度、標準スケッチ例のBlinkを書き込んでみます。
COM12を指定して(というかこれしかない)
LEDがないので動かないことはわかっているのですが
Blinkを開いて
書き込みます。
今度は、こんなログが

*****

最大28672バイトのフラッシュメモリのうち、スケッチが4126バイト(14%)を使っています。
最大2560バイトのRAMのうち、グローバル変数が149バイト(5%)を使っていて、ローカル変数で2411バイト使うことができます。
シリアルポート「COM12」を1200bpsで開いて閉じる事によって、リセットを行っています。
PORTS {COM12, } / {} => {}
PORTS {} / {COM11, } => {COM11, }
Found upload port: COM11

         Using Port                    : COM11
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega32U4

avrdude: verifying ...
avrdude: 4126 bytes of flash verified

avrdude done.  Thank you.
*****

デバイスマネージャーは、「USBシリアルデバイス(COM12)」から変わりません。
一度、USBを抜き差しても変わりません。
もう一度、RX・TX LED Blinkを書き込むと
一瞬、この「Arduino Micro bootloader(COM11)」がでて、すぐに消えて
上の様に「USBシリアルデバイス(COM12)」に戻るのです。
この時点で[ボード情報を取得]すると
「不明なボード」
ん~ん、いよいよ壊れたのか?
ひょっとして
「Arduino/Genuino Micro」にして書き込んだら。っと
ボードの設定では、変わらないとは思いますが
念の為、もう一度[ボード情報を取得]が変わってないことをを確認して
同じTX・RX LED Blinkを書き込みます。
また、「Arduino Micro bootloader(COM11)」がでて、すぐに消え
書き込みが完了しました。
お~~っ!「Arduino Micro(COM10)」に戻りました!
ボード情報を見ると、これに戻っています。
取り敢えず、もとに戻ったのでホット一息。
ところが、RXとTXが交互にブリンクするはずなのですが
両方同時にブリンクしています。
シリアルモニタに「Hello world」は、でています。

もう一度、SparkFun Pro Microの設定で同じスケッチを書き込みます。
ちゃんとRXとTXが交互にブリンクしますね~
でもボード情報は、これに戻ります。
このボードは、「SparkFun Pro Micro」クローンだけど
ボード情報は、「Arduino Micro」にフェイクって代物なのでしょう。
まあ、「SparkFun Pro Micro」の「5V 16MHz」の設定で書き込めば
正常に動作することは確認できました。
結局、こいつの本名は何なのかわかりません。
ここまでかなり気力を使ったので、そもそもこれをポチった目的である
「DigikeyboardとUSB-Serialの同時使用」は、お預けです。

kosakalabさんのここのは、似てるけど、チップの搭載角度が異なっています。
そこには、SparkFun Pro MicroをArduino Leonardo化する手順が詳しくあります。
今回は、記録に留めて止めておきます。

最近は、Arduino系にハマっております。
そろそろCNC2418で何か作ろうかな~
Fusion360やEAGLEの使い方を忘れそうだし。

2 件のコメント:

匿名 さんのコメント...

SparkFun Pro Micro(クローン)はLED周りのハードウェア構成がArduino Microと異なります。
お使いのPro Micro(クローン)はArduino Microのブートローダが書き込まれているのでArduino Microと認識されますがRXTXのLEDは正しく動作しません。
正しく動かすにはSparkFun Pro Micro(またはArduino Leonardo)のブートローダを書き込んでボードをSparkFun Pro Micro(またはArduino Leonardo)と選択して使用します。
Arduino Microのフェイク?と心配されていますが、SparkFun Pro Micro(クローン)はArduino Leonardoと同じハードウェア構成でArduino Microとは名前が似ていますが全くの別物です。

マーティーの工房日誌 さんのコメント...

コメントいただきありがとうございます。
公開が送れて誠に申し訳ございません。
コメントいただいた事情は、この次の投稿の検討で把握できたつもりでおります^^;
これらの検討で共通に乗っているATmega32u4が、とても好きになりました。