2015年3月8日日曜日

秋月旧GPSモジュール(GT-723F)をPICに接続してみました

JUMA送信機にGPSを内蔵させる計画の一歩として、GPSモジュールをPICに接続して必要な情報を表示させる実験を行いました。

試用したGPSモジュールは以前秋月で購入していたCanMore製のGT-723Fというアンテナつきで2cm角厚さ8mm程度の小型モジュールです。

コネクタつきケーブルは付属していますが、aitendoでも探すと同様のものが見つかります
いま入手できるのは同じCanMore製のGMS6シリーズで、同じくらいの値段ですがふたまわりほど大きくなってしまいました(しかし両方ともTTLレベルとRS232レベル両方対応しているのが便利、通信速度はデフォルトで4800bpsに変わりました(GT-723は9600bps)

使用したPICは16F1847というメモリ搭載量の多い(プログラムメモリ14KB, RAM 1024B)モデルですが、これは現在秋月に取り扱いがありません。しかし16F1827をターゲットにXC8Freeモードでコンパイルしてもプログラムメモリ34%、RAMも28.1%消費にとどまるので1827でも問題ありません。

UARTはPIC内蔵モジュールを使用しました(そのほうが楽)。表示部は秋月のI2C OLEDで、I2Cはソフトウエアで制御しています。

動作としては、UART受信割り込みを使用し64byteのバッファに順次受信データを格納します。リングバッファを使う方法も考えましたが、せいぜい50byteまで一時的に保持できればよいので64byteを超える場合は以後の受信データを捨てています。GPSから送られてくる1秒ごとのテキストデータは膨大ですが、各NMEA0813センテンスが"$"から始まるため"$"を拾って各センテンスが順次バッファに入れ替わるようにして、メインループで必要なセンテンスを拾って(GGAセンテンス)その後に続く情報をバッファから得て加工表示します。

必要な情報は時刻と緯度経度、GPSが測定可能状態くらいなので、GGAセンテンスのみ抽出できればOKです。

NMEAフォーマットについて詳細は解説しませんが、GGAセンテンスの一部先頭から44byte目までが必要な情報です。

GGA    $GPGGA,hhmmss.sss,ddmm.mmmm,N,dddmm.mmmm,E,1,....
       ↑    ↑          ↑         ↑          ↑ ↑
       0      7          18     28 30        41 43

0:NMEAセンテンスの種類(GGA、RMC、GSAなどなど $GP~)
7:時刻(UTC)
18:緯度(度、分フォーマット)
28:N⇒北緯、S⇒南緯
30:経度(度、分フォーマット)
41:E⇒東経、W⇒西経
43:GPS衛星捕獲状態 1or2⇒衛星捕獲

数字はGGAセンテンスが流れた瞬間に収められたバッファ中の各情報のインデックスです。得られた情報ごとに加工表示していくわけです。

GL(グリッドロケータ)計算についてはJARLのこのページを参考にプログラムしました。ややこしいのは西経、南緯の場合でそのことについてはページでは触れていません(日本に居る限りはあまり必要ないといえばそうかもしれませんが)。経度で180度、緯度で90度のオフセットを与えているので南緯、西経の場合は計算方法が違うのです。

あと、経度緯度ともに小数点4桁まで表示されますが計算では2桁目までが有効なので3桁目4桁目は捨てています。

というわけで、時刻とグリッドロケータ、GPS衛星捕獲状態の表示が出来ました。

SDカードインターフェースつけるとGPSロガーもできそう
ソースファイルはここにあります。XC8でコンパイル可能ですがあくまでも実験用ですのでご承知おきを。

いよいよJUMAに組み込みを
次はJUMA送信機のファームウエアに徐々に組み込んでいきます。

0 件のコメント:

コメントを投稿