まごころせいじつ堂

浜町庄金 研究開発 最近はArduinoとセンサ類ばっかだなあ。マイコン楽しいよマイコン

Galileo

Galileo / Galileo Gen2のGPIO速度測定

 Galileo Gen2はGPIOがI2CのI/Oエクスパンダ経由からダイレクト制御に変わったということで動作速度が改善されてある。実際、キャラクタLCDはちゃんと表示された。簡単なスケッチを書いて動作速度を確認した。

 以下のスケッチでピン0〜13について0/1を繰り返し動作速度を求める。
https://gist.github.com/houmei/7a9a04c019c31098497a

Galileo 1.0.2 10000ループ
0 44534ms 4453.4us 224.5Hz
1 44684ms 4468.4us 223.8Hz
2 44514ms 4451.5us 224.6Hz
3 44947ms 4494.7us 222.5Hz
4 44785ms 4478.5us 223.3Hz
5 45071ms 4507.1us 221.9Hz
6 44928ms 4492.8us 222.6Hz
7 45096ms 4509.6us 221.7Hz
8 45207ms 4520.7us 221.2Hz
9 45225ms 4522.5us 221.1Hz
10 45298ms 4529.8us 220.8Hz
11 45265ms 4526.5us 220.9Hz
12 45097ms 4509.7us 221.7Hz
13 45188ms 4518.8us 221.3Hz

Galileo Gen2 1.0.2 100000ループ
0 222ms 2.22us 450.5KHz
1 222ms 2.22us 450.5KHz
2 222ms 2.22us 450.5KHz
3 222ms 2.22us 450.5KHz
4 257ms 2.57us 389.1KHz
5 257ms 2.57us 389.1KHz
6 257ms 2.57us 389.1KHz
7 56093ms 560.93us 1.783KHz
8 56027ms 560.27us 1.785KHz
9 257ms 2.57us 389.1KHz
10 222ms 2.22us 450.5KHz
11 257ms 2.57us 389.1KHz
12 222ms 2.22us 450.5KHz
13 257ms 2.57us 389.1KHz

Galileo Gen2はGalileoにくらべて充分高速。ピン7,8だけ極端に遅いのはここだけI/Oエキスパンダ経由になっているからと思われる。他のピンは450KHzと390KHzに分かれているがこれはなんだろう?

Galileo2届いた

 Galileo2届いた。スイッチサイエンスから購入。Galileoの時と同じくパソコンショップでも購入できるようだ。
Intel Galileo Gen 2開発ボード(スイッチサイエンス)

 GalileoとGalileo2の比較レビュー。
Arduino互換IoT向け開発ボードIntel Galileo Gen 2ってどこが変わった?(ひとりぶろぐ)

 さて、以下のドキュメントを読んで準備。
Intel Galileo Gen 2 Development Board Documents

 こちらからGalileo/Galileo2用のArduino IDE 1.5.3をダウンロード。
Software Downloads - Drivers

 MacOSXではアプリケーション以下のサブフォルダに入れたり長いファイル名では動かないことがあった。Arduino→ArduinoG513に改名して置く。
[ツール]→[マイコンボード]→[Intel Galileo 2]を選択。シリアルポートはGalileoと同じでケーブルを接続しただけではすぐには現れない。一分ほど待って選択。
[ヘルプ]→[Firmware update]で確認。現在、最新は1.0.2なのでそのまま。
 サンプルスケッチの01.Basics→BlinkでLチカ確認。USBホストコネクタ近くの緑色LEDが点滅する。

 さてGPIOの速度が気になる所だがLCDを使って確認することにした。Galileoでは表示はできるが更新が遅くとても使えない感じだった。

 LCDでFizzBuzzをやってみる。問題なく動作した。Galileoではinit.lcd(...)を追加しないと動作しないというワークアラウンドがあったが、GPIO直結のせいか必要がなくなった。
https://gist.github.com/houmei/a009ea0622b92779db7b

2014galileo2



Intel Galileo Gen 2 Disti Kit Arduino互換のインテル製開発ボード
Intel Galileo Gen 2 Disti Kit Arduino互換のインテル製開発ボード
Intel
売り上げランキング : 36854


Amazonで詳しく見る
by G-Tools
LCDシールドキット(青)
LCDシールドキット(青)
スイッチサイエンス
売り上げランキング : 80600


Amazonで詳しく見る
by G-Tools

 

メモ:Intel Galileo Gen2の話題

 Galileo Gen2が出るらしい。
IntelがIntel Galileoボード(Gen2)の概要情報を公表
(KEI SASAKI's PAGE.)
Intel Galileo Gen 2は8月に発売予定(KEI SASAKI's PAGE.)

Intel unveils second generation Galileo hacker SBC(LinuxGizmos.com)

 プロセッサはそのまま。不評だったGPIOの速度、シリアルインターフェースが改善されているようだ。
 

Grove LEDbarを使う

 GroveのLEDbarを使ってみた。10個のLEDがレベルメータのように並んでいるモジュール。

Grove - LED Bar

ライブラリは以下から。zipでまとめてダウンロードし、展開後できるフォルダ名の末尾-masterを削除し、Arduino IDEのライブラリフォルダにコピーする。

https://github.com/Seeed-Studio/Grove_LED_Bar


2014LEDbar1

 動作確認はArduino Leonardo、Crowduino(5V)で問題なし。
 仕様上3.3Vで動くようなことが書いてあったが、Crowduinoの3.3V設定では止まってしまった。
 おまけとしてIntel Galileoでもやってみたがまったく動かなかった。

Crowduinoはこれね。Crowduino With ATMega 328 V1.1

 なお、このLEDbarは0〜9の番号がそれぞれに振ってあるが、0が赤、1が橙、あとは緑になっている。オーディオのレベルメータとは直感的には反対なので注意。


GalileoにGrove SerialLCDを接続する

 Galileoになんか表示器を付けるのはGPIO経由は無理。ということで部品箱を探してSeeed StudioのGrove SerialLCDを見つけてきた。これなら動きそうな気がする。

Grove - Serial LCD
Grove - Serial LCD(Wiki)

ライブラリは以下:
https://github.com/kc0tfb/Grove_LCD_Arduino

こっちにもあるが、少し違う:
https://github.com/Seeed-Studio/Grove_SerialLCD

 問題が。このライブラリはSoftwareSerialにしか対応していない。GPIOを制御してシリアル通信を行うのはGalileoではダメそうだ。通常のHardwareSerialで使えるようにと色々書き換えていたが降参。しばらく間を置いて検索したらHardware Serial用のライブラリがあった。

https://github.com/ElvisTheKing/SerialLCD

 入出力をストリームで抽象化したものらしいのだが、なぜかSoftwareSerialではなくなりHardwareSerial(従来のSerialやSerial1)だけに対応している。これを使った。Galileo用のArduino IDEライブラリのフォルダに入れて再起動。Grove Base Shield経由でPin0/1にSerialLCDを接続し、exampleにあるスケッチを呼び出す。ここでSerialの記述をすべてSerial1に書き換える。

2014galiserialLCD

 ライブラリは無修正で動作した。

いくつかの問題点:
・Grove SerialLCDは扱いが少ない(が、プロトコルは単純なので作れそうではある)
・Galileoのシールド、Pin0/1によるシリアル通信はSerial1()だった。Arduino互換のピン配置はUNO R3やLeonardoでない古い方に合わせているみたいなんだけど。なぜ新しい方に合わせなかったんだろうか?
・RTCバックアップ用の端子に接続しているとシールドと干渉する

Galileo用シリアル変換の工作

 前回、Galileo用のシリアルポート用ケーブルを作ったけど特殊なのでもっと汎用性のあるものを、と考えArduinoの通信などに使うUSBシリアル変換アダプタをRS232Cのレベルに変換する工作をした。使い勝手を考えてFRISKケースに入れた。

 USBシリアル変換アダプタはこういうものです→FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
 レベル変換に使ったのは手持ちのADM3202。こちらのセットは必要なコンデンサやICソケットも一緒になっている→RS232CインターフェースIC(DIP)ADM3202AN(2個入)

 Galileoのシリアルポートは3.5mmのピンジャックで、先端がRxD、真ん中がTxD、根元がGND。なのでアダプタ側は先端がTxD、真ん中がRxD、根元がGNDになるようにしなければならない。

2014GalileoSerialschm

Intel Galileo回路図(PDF)

 こんな感じで作った。
GalileoSerial_2014-02-07 11_28_38
 ピンジャックには3.5mmステレオミニジャックDIP化キットを使っているがFRISKケースにぎりぎり収まらないのでハンダ付けした足をカットする必要がある。というか基板にハンダ付けするんじゃなかった。ユニバーサル基板は適当にカット。基板裏にハンダを盛るとやはりケースに収まらなくなるので、ICは浮かせてハンダ付けしてある。C5は電解コンデンサを使ってるが実際は0.1μFでもよい。
 RTSはオープン。CTSは一応GNDに落としている。

 USBシリアル変換アダプタは3.3Vでも5Vでも動作する。

 これでGalileoのブートメッセージを採取した。https://gist.github.com/houmei/8856634


 さてここからは失敗談。簡単な回路だと思いデータシートを見ながら適当に工作して接続したら、受信はできるが送信はできないという状態になった。Windows/TeraTerm接続とMacOSX/SerialTools接続で送信文字が見えたり化けたりする。エコーバックはおかしいがブートメッセージの表示はできるので送信のレベル変換がおかしいのでは?とおもいV+とV-を観測したらVccと同じレベルだった。見なおしてみるとチャージポンプ用のコンデンサ付けるのを忘れてた。ということで簡単な回路でもちゃんと自分で回路図描きましょう。
 

GalileoのGPIOは遅い

 GalileoのGPIOを更新する速度は最大230Hz程度ということなので実測してみた。

Intel® Galileo 開発ボード FAQ [日本語訳](Galileoぶろぐ) 
 これによるとGPIOはI2CのI/Oエキスパンダ経由で入出力され、I2Cの速度は100KHz。Quark SoC X1000は400KHzのモードも持っているが、I/Oエキスパンダ側の制限で100KHzと。
ピン出力をHIGH/LOW繰り返すスケッチを書いてオシロで観測した。
 2014galitoggle

 一目盛り0.5ms×4.6=4.5ms。約220Hz。
 
 比較のためArduino Leonardo(ATmega32U2)で同様の観測をしてみた。
2014leonardoHIGHLOW 
 2μs×6.2=12.4μs。約80.6KHz。

 これらはpin3で測定してみたが、他はどうだろうか。以下のスケッチで測定した。
pinXに対して10000回、HIGH-LOWを繰り返してシリアルポートに経過したマイクロ秒を表示。

https://gist.github.com/houmei/8769953 

これらの測定結果のうちで、HIGH-LOWを除いたもののループ時間を測定して引いてやるとHIGH-LOWだけ行った時間がわかる。

Galileo GPIO speed (ms)
4.448620513
4.447915384
4.452584615
4.54159021
4.536844755
4.539793846
4.535693846
4.535053846
4.531913846
4.539608391
4.531913846
4.528699301
4.582708391
4.76309021
4.452417482
4.464853846
4.458908391
4.458935664
4.455917482
4.457762937
0.794843846

2014galileogpio 
 このうちpin20は存在しないので外にアクセスしに行っていないと思われる。pin13だけ少し遅いが、ブロック図から考えるとLEDはQuark X1000に繋がっており、かつGPIOは外に存在している。両方制御しているので時間がかかるのではないだろうか。

 あと調べた所ではSCLがA5、SDAがA4とショートしてた。ここまで真似せんでもいいだろうにとは思った。



・以下の本手配中 はよ届け

Getting Started With Intel GalileoGetting Started With Intel Galileo
Matt Richardson

Maker Media, Inc 2014-01-22
売り上げランキング : 3140

Amazonで詳しく見る
by G-Tools

Galileo シリアルポート用ケーブルの工作とRTC設定

 GalileoのLinux側にログインしてなんかしようとするにはスケッチ経由でやる方法もあるがシリアルケーブルがあると便利。が、Galileoは3.5mmのステレオプラグをシリアルポートとして使っているので手持ちのもので工作してみた。

 たまたま、Dsub9ピン→RJ45のコンソールケーブルとサンハヤトのRJ45変換基板CK-18があったのでこれとステレオプラグを使って組み立てた。コンソールケーブルはCiscoのネットワーク機器以外の一部のサーバ機でも使われているのでたまたま持ってた。

参考:
Ciscoコンソール用 DB9-RJ45変換コネクタの自作
RS-232(Wikipedia)
「Intel Galileo Development Board」を起動して動作確認
【CK-18】コネクタ変換基板・モジュラー88タイプ


※追記 秋月電子のUSB-シリアル変換ケーブルでも動作確認
USB-シリアル変換ケーブル グレー色 延長ケーブル付

 プラグ加工。ケーブルの赤が先端、緑が中央、黒が根元。
2014galiseri1

 これをCK-18基板の端子に接続。赤=3,緑=6,黒=4または5。
 RJ45端子における信号は
1 CTS (in)
2 DTR (out)
3 TxD (out)
4 GND
5 GND
6 RxD (in)
7 DSR (in)
8 RTS (out)
 となる。フロー制御をなしにするのでTxDとRxDだけの接続でよい。
ハードフロー制御をONにしてしまった場合は端末側が送受信できなくなるのを防ぐため、CTS/DSRをGNDに落とせばよい。または、CTS-DTRをショートなど。
2014galiseri2

 TeraTermによる画面表示。 通信速度は115200bps。起動時はGRUBのブートメニューが出る。10秒ほほど待つと起動し、login:プロンプトが出たらrootでログイン。
2014galiseri3


 さて、ついでにRTCのバッテリバックアップも作ったので動作確認する。CR2032の電池ボックスから2本線出してくっつけただけ。

2014galirtc

 時刻の設定は以下のようにする。

# date -s "2014-01-31 01:45:00"

 時刻設定が終わったら、RTCに転送しておく。

# hwclock --systohc

 電源をいったん切って、起動後にdateコマンドで確認。

参考:
システムの時計を設定する方法
 

 
エムサーブ コンソールケーブル(RJ45-DB9)エムサーブ コンソールケーブル(RJ45-DB9)

エムサーブ
売り上げランキング : 22506

Amazonで詳しく見る
by G-Tools

GalileoのファームウェアアップデートとLCD表示

 Arduino互換のIDEとシールドが使えるIntelのGalileoを使ってみた。

 まずはこちらを参考にファームウェアのアップデート。
Intel Galileoはじめの一歩 (人と技術のマッシュアップ)

ハマりどころは
・シリアルデバイス名でtty.*でなくcu.*を選択する
だが他にもあった。MacOSX(10.8)で専用のIDEを使ってアップデートする場合、ファイル名にスペースなどを含めてはいけない。ファイル名の長さも8文字まで。さらに、[アプリケーション]フォルダ以下に直接置かないといけない。私はArduinoのサブフォルダを作って複数の環境を置いていたのだが、ここでは動かなかった。

Problems updating firmware

 さて、Lチカも確認し手持ちのシールドが動くかどうかテスト。Galileoは5V/3.3Vのシールドが使える(ショートプラグで切り替え)。LCDキーパッドシールドを使った。スケッチは過去やったFizzBuzz。が、液晶の上の行に全部トーフが表示されたままで変わらない。調べたらlcd.init()を追加する必要があった。

Intel GalileoでHD44780キャラクタ液晶を使う方法(もへある)
Problems getting LCD to work with Galileo

LiquidCrystal lcd(8,9,4,5,6,7);

に対し、lcd.begin()の前に

lcd.init(1,8,255,9,4,5,6,7,0,0,0,0);

が必要。ピン8,9,4,5,6,7はそれぞれRS,ENABLE,D4,D5,D6,D7に対応。

ソース:https://gist.github.com/houmei/8505883

2014galileoLCD

 表示できることはできるのだが表示が遅い。感覚では300ボーの端末の画面表示よりも遅い。

 Galileoでは既存のライブラリはあまりあてにできないようだ。


 
No brand LCD キーパッド シールド Arduino 計測結果 表示No brand LCD キーパッド シールド Arduino 計測結果 表示

ノーブランド
売り上げランキング :

Amazonで詳しく見る
by G-Tools
記事検索
電子部品通販リストなど
竹下世界塔の計算機よもやま話
竹下世界搭のソフトウェア
zigsow (houmei)
ーーーーーー
ーーーーーー
livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ