GPSモジュール(GMS6-CR6)の動作実験パート4
(GPSにメッセージを送信して見ます)

〔パート1〕 〔パート2〕 〔パート3〕   〔マイコンのトップに戻る〕


GPSにメッセージ(コマンド)を送信する事によりGPSの挙動を制御する事が出来ます。
GMS6-CR6用の"Input Messages"仕様書をネットで探したのですが見当たりません、
なので、こちらの「NMEA Reference Guide」と「NMEA Reference Manual」を頼りに行なっています。

GMS6-CR6用の"Viewer"では[HotStart][WarmStart][ColdStart][FactoryReset]のリセットコマンド
しか有りません。
GT-723F用の"SkyTraq View"はその他のコマンドを送信する事が出来ます。
因みに、"SkyTraq View"でGMS6-CR6の受信表示は可能なのでコマンドを送信して見たが
ダメでした、メッセージが異なるのでしょうね。

《Input Messages》

メッセージのコマンドは実際に動作させた物を記述して行きますので解ったら少しづつ記載をして
行きたいとは思っていますがぁ....
尚、コマンドIDの107以上は各ODMメーカにより異なり、ローカルコマンドの様です。
また、メッセージのコマンド発行は「Tera Term」から送信しての確認となります。

Input Messagesの構造
$<PSRF><コマンドID>,<コマンドパラメータ1>,・・・・・,<コマンドメータn>*<チェックサム><CR><LF>
また、チェックサムについてはこちらの毛虫計算機さんブログを参照下さい、 *1)

コマンドID種類
ID 名称 説明
100 シ リアルポートの設定 通信のパラメータとプ ロトコルを設定
101 ナビゲーションの 初期化 GPSの再起動を行う
XYZ のECEF座標で 初期化する場合
102 DGPSポー トの設定 DGPS通信のパラメータとプ ロトコルを設定
103 メッセージ問合せと出力レー ト制御 標準のNMEAメッ セージGGAGLLGSAGSVRMCVTG、 ZDAの出力を制御するために使用する
104 LLAナ ビゲーションの初期化 GPSの再起動を行う
緯度(L)/経度(L)/高度 (A)で初期化する場合
105 開発データの オン/オフ デバッグメッセージのオン/オフ を行う
106 測地 系の設定 座標変換の ためのデータの選択を行う
デフォルトは"WGS84"
赤色のコマンドIDのみ記載しています。
尚、現在の記事はGMS6-CR6で実験しています、他のGPSで動作するかは不明です。

103:Query/Rate Control

GMS6-CR6では、[GGA][GSA][RMC]メッセージが1秒毎に出力され、[GSV]が5秒毎で、
[GLL][VTG][ZDA]は出力する様にはなっていないみたいです。

例) GSVメッセージを出力しない様にする例です。
$PSRF103,3,0,0,1*27<CR><LF>
項目 用例 単位 説明
Message ID $PSRF103 PSRF103 Protocol header
Msg 3 制御するメッセージを選択
0:GGA 1:GGL 2:GSA 3:GSV 4:RMC 5:VTG 6:MSS 8:ZDA
Mode 0 0:Rateの設定 1:問合わせ(1回に付き1回の返 答)
Update Rate 1Hz standardだが、5Hz/10Hz special orderの
変更もここで行うようであるが番号が不明。
Rate 0 0:出力無
1:1〜255秒の出力間隔を設定
CksumEnable 1 0:チェックサム付加しない 1:チェックサム付加する
Checksum *27
<CR><LF> 0D 0A

104:LLA Navigation Initialization

下記内容は、GMS6-CR6用の"Viewer"で[ColdStart]を実行させその時の送信内容を
ロジックアナライザーで見たデータで記載。

$PSRF104,0,0,0,75000,0,0,12,4*17<CR><LF>
項目 用例 単位 説明
Message ID $PSRF104 PSRF104 Protocol header
Lat 0 緯度(度、WSG84、北緯:0〜90、南緯:0〜- 90)
Lon 0 経度(度、WSG84、東経:0〜-180、西経: 0〜180)
Alt 0 高度位 置
Clk Offset 75000 Hz 受信機のクロックオフセット
Time Of Week 0 GPS週秒(0〜604,799)
WeekNo 0 拡張GPS週番 号(GPS週番号+1024)
ChannelCount 12 チャネル(1〜12)
ResetCfg 4 1:HotStart  2:WarmStart  3:WarmStart(初期化する)
4:Cold start  5:Factory start(工場出荷状態にリセット)
Checksum *17
<CR><LF> 0D 0A
Lat/Lon/Altは現在位置の情報をセットすればその値で初期化されます。
"Viewer"での[WarmStart]はResetCfg=2の様である。

《改良プログラム》

パート2でGPS信号をSDに書き込む記事を書きました、その時の内容に、
ここの"PSRF103"をGPSへ送信しメッセージ出力を制御するプログラムに改良をして見ました。
尚、"PSRF103"の送信は回路電源が入った時GPSに送信されます。

以下の構造体データがプログラムに記述されています、
[GGA][RMC]のみ3秒間隔で出力する様になっていますが、変更する場合は"Rate"を書換えて下さい。
struct {                                // センテンスの出力制御情報
  int Msg ;                             // メッセージID(PSRF103のMsg)
  int Rate ;                            // 0:出力しない 1-255(秒):出力間隔
} MsgControlInfo[] = {
  {0,3} , // "$GPGGA"  出力必須です
  {2,0} , // "$GPGSA"
  {4,3} , // "$GPRMC"  出力必須です
  {1,0} , // "$GPGLL"
  {3,0} , // "$GPGSV"
  {5,0} , // "$GPVTG"
  {8,0} , // "$GPZDA"
} ;
ここでGPSへ送信した内容は電源が切れても暫くは設定内容を保持している様ですが、
  多分"ColdStart"状態に移行した時だと思いますが、設定情報は元に戻ります。


Arduino

改良版スケッチは"ここ"からダウンロードします。

PIC

改良版プログラムは"(16MHz)"/"(32MHz)"からダウンロードします、 *1) *2) *3)
但し、メインプログラムのGPS.cのみです、それ以外はパート2から得て下さい。

《GPS時計》  *2)

パート2ではGPSからの位置情報をSDカードに記録する事の実験でした、
ここではGPSから[$GPRMC]センテンスのみ1秒毎に受信してそのデータの日付情報を得てLCDに
表示する事を行って見ます。
私のGPSのHP記事からGPS時計を作成する動画を、”三角むすび”さんが作っておられますので
合わせて見てもらえば解り易いと思います。

[$GPRMC]センテンス
      ┌──UTC時刻(07時54分52秒10)         ┌──UTC日付(15日08月14年)
    ──┴──                   ─┴─
$GPRMC,075452.010,A,3252.8026,N,13039.3711,E,0.00,2.83,150814,,,A*69
         └──"A"センテンスは"有効"
※ "有効"になったら日付と時刻を取出しUTC時間なので日本時間のJSTに変換しLCDに表示します。
   (UTC+9時間 が日本時間となります)

JSTの変換について

UTC -> グリニッジ標準時間の1970/1/1 00:00:00からの経過秒数+9時間 に変換します。
なぁぜぇ〜
この変換により、"time.h"時間管理の標準ライブラリが利用出来る様になり簡単に時間管理が
可能だからさぁ。

尚、GPSのセンテンス送り出しからLCDに表示するまでに幾分か時刻は経っていると思いますが
その調整等は行っていません、そのままLCDに表示している事に注意しましょう。

回路について

回路は、パート2の配線と同じですが、 スイッチ・LED・SDスロットは使わんけん取り外してもよかよ。
GPSとLCDだけなのでぇ電源も5Vにしてよかばってん、
  LCD_Init(LCD_NOT_ICON,32,LCD_VDD3V,8) ;
の記述ばぁ"LCD_VDD5V"に書き換えなっせぇ。

プログラムについて

LCDの動作図  サンプルプログラム(GPSclock.c)を動作させると、
 まず、LCDに"StartGPS"が1行目に表示されます。
 有効になれば2行目に"used OK!"が表示されるが、
 その後すぐに日付と時刻が表示されるので、
 "used OK!"は見えないと思います。
 
 左のLCD表示は
 1行目が日付: 年/月/日
 2行目が時刻: 時:分:秒


プログラムは"(16MHz)"/"(32MHz)"からダウンロードします、
但し、メインプログラムのGPSclock.cのみです、それ以外はパート2から下のファイルを得て下さい。
尚、16MHz/32MHz用とそれぞれに有りますから注意しましょう。
 skI2CLCDlib.c・・・・I2C接続LCDライブラリ関数ソースファイル
 skI2CLCDlib.h・・・・I2C接続LCDライブラリ用ヘッダファイル
 skI2Clib.c・・・・・・・・I2C通信を行う関数ソースファイル
 skI2Clib.h・・・・・・・・I2C通信を行う関数のヘッダファイル
 skUARTlib.c・・・・・・USART通信を行う関数ソースファイル
 skUARTlib.h・・・・・・USART通信を行う関数のヘッダファイル




"skSDlib.c"を変更(*3) 2017/02/26
32MHzとGPS時計記事追加(*2) 2017/02/07
ライブラリ更新による変更と見直し(*1) 2017/01/10


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2017 Shigehiro Kimura All Rights Reserved.