まごころせいじつ堂

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

Crowduino

GPSモジュールGM318Bの確認

 aitendoでGPSモジュールGM318Bを購入。ちょっと動作確認。
 このモジュールは4800bpsで受信したデータをシリアルから送り出す。フォーマットについてはよく知らないのでこれからやる予定。今回はハードウェアの接続のみ。Groveのコネクタに合わせてシリアル通信させればよいだろう。このモジュールは3.3V動作なのでCrowduinoを3.3V設定にしSoftwareSerialを使おう。

 Grove用コネクタにこんな感じで工作した。
2014GPS1

 配線はこんな感じ。Grove用のケーブルを中央から半分にカットする。黄=TX,白=RX,赤=Vcc,黒=GNDに接続。PWR_CTRLはメッキ線でGNDに接続。

2014GPS2

 これをGroveシールドのD10/D11コネクタに接続。スケッチは以下のとおり。(SoftwareSerialExampleをちょっと変えただけ)
https://gist.github.com/houmei/5020ac8527de0fa9c26f

2014GPS3


 今気付いたがこっちのほうが値段も変わらず楽だったか?……GROVE GPS 

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

hardyboy

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