まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

メモ:201403


IRKitの作り方(SlideShare)

PS4 controller support for the USB Host library

Boards.h in Firmata library needs an update

https://github.com/yishii/Galileo_useLinuxShellFromUSB/blob/master/Galileo_useLinuxShellFromUSB/Galileo_useLinuxShellFromUSB.ino

mbed
STM32 Nucleoで始めるmbed開発:mbed開発でデバッグするにはどうすればよいのか

mbedをHTTPサーバ化メモ

ビット制御のBITBANDは超便利 (2012.12.07)

MB2051-206E-SPN

第17回 MSP430™ LaunchPadの入出力機能を拡張する、省電力モードを活用したプログラミング

電子箱庭『のらぴか 明-mei-』

無線LAN(Wi-Fi) SDカードまとめ ~Arduinoで使いたい~

http://arduino.densikit.com/jikken-shitsu/aqm1248a


 

Grove 4-Digit DisplayをCrowduinoで使うためのパッチ

 Groveの4-Digit Displayを使ってみたが、Arduino互換のCrowduinoではライブラリに修正が必要だった。これについてはモヤモヤするものがあるがメモ。

Grove - 4-Digit Display 

ライブラリは以下より。
File:DigitalTube.zip

 サンプルスケッチのClockDisplayはArduino LeonardoとArduino UNO(SMD)では問題なく動作したのだが、互換品のCrowduinoでは5Vモードで最初数回コロンが点滅して停止、3V3モードでは動作するという状態だったので調べた。
 スケッチ側から停止している部分を探すとtm1637.display()〜の箇所で止まっている。この部分に対応するライブラリがなんらかの原因で止まっている。動作電圧を切り替えると動いたり止まったりするのでタイミングの問題だろうか。LEDドライバはTM1637という石で最大6桁まで制御ができるらしいのだが、データシートを見つけることができなかった。仕方がないのでライブラリ TM1637.cpp 内のCLKとDATAをピンの信号を上げ下げしている部分に適当にdelay(10);をかませてみたら5Vでも動作するようになった。
 次はこのdelay(10);を少しづつ削っていく。最終的に

void TM1637:writeByte(int8_t wr_data) 以下にある

digitalWrite(Clkpin,LOW); //wait for the ACK の次の行に

delay(1);

が必須となった。これがないとCrowduinoの5Vではハングする。確認のためまる1日走らせて止まらないことを確認。

 さて、なにがモヤモヤしているかというとこれは
// なぜか動く
行になってしまっているからだ。本来どうすべきか。
・データシートを見て該当するタイミングの箇所を確認する
・波形を観測。5Vと3V3でどのような差があるか、タイミング違反はどの箇所か
・ソース修正によりタイミング違反が解消されていることを観測
・連続ラン確認
・さらに温度を振ってより厳しい条件で確認

 なぜか動くものはなぜか止まることもあり得るのよ。

 やはりリファレンスとして純正品のボードは必要。Arduino互換品はピンが直接マイコンから接続されているので問題ないように思えるのだが、違いはあるみたいだ。

2014ledtube

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が橙、あとは緑になっている。オーディオのレベルメータとは直感的には反対なので注意。


201402メモ

Arduino
Crowduino v1.1


Arduino用 音声合成LSIライブラリ

BS21 Lab の製品

Arduinoがあなたのトレーナーに――「運動しなさい! 電光掲示板」を作る (1/3)

パラレル→シリアル変換ボード付き 16×2OLED カラーディスプレイ(PDF)

XBeeをはじめてみよう(シリーズ1編)

mbed/ARM
トラ技ARMライタを mbed interface にする

トラ技ARMライタ仕上げ部品セット

[lang:ja] mbed LPC1114での遊び方

LPC1114でビデオ出力

2014.02.06 LPC810のI/Oマップを作ってみました

Flash Magic


2014.02.02 LPC810(通称どんぐり)をmbedのクラウドで開発

lpc21isp


MMC/SDCの使いかた

漢字フォントROM(GT20L16J1Y)

GR-SAKURA用ソフトウェアとシールド

ALTERA Recommended HDL coding styles(PDF)


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と同じレベルだった。見なおしてみるとチャージポンプ用のコンデンサ付けるのを忘れてた。ということで簡単な回路でもちゃんと自分で回路図描きましょう。
 

201401メモ

FPGA PACMAN with Velilog

Verilog Lecture 1 of 10 - 2009 (YouTube)

TI ホーム > 「マイコン基礎の基礎」シリーズ

An MSP430 based Clock

TI Stellaris Launchpad Rebranded to Tiva-C Launchpad

Aruduinoはじめました。

fabiankr / Cocoduino

aitendo 3.5インチ液晶 for Arduino MEGA2560 を使う。

ロータリーエンコーダーを使ってみる
Arduino – ロータリーエンコーダを回す
ロータリー・エンコーダの使い方

122X32モノクログラフィックLCDシールド

各種I/FのVFDモジュールに表示させよう!

Beagle Bone Black に4.3'LCDをつなげる

SBBLE(サブレー) I2C対応版 公開!

MCUで遊ぼう(43)

LPC810でLチカしてみた。

LPC810(通称どんぐり)をmbedのクラウドで開発

DIP_ARM LPC1114FN28のプログラムをシリアルで書き込む

mbedボード FRDM-KL46Z

Free/Open ARM Cortex MCU Development Tools CooCox

シリアルSRAM 23LC1024 の接続テスト

素子:I/Oエキスパンダ MCP23017

OpenWrt → Hardware Hacking → Transcend WifiSD / PQI AirCard / FluCard Pro

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
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ