秋月電子で買ってあったGPSモジュールMSP430FR4133を組み合わせてGPS時計を作ってみるテスト。
 GPSモジュールのUART出力は3.3V/9600bps、MSP430FR4133のI/Oも3.3Vなので直接接続しても問題なし。ただし、GPSモジュールの電源に5Vが必要だがデフォルトではLaunchpad側に+5Vの出力ピンは立っていない。デバッガとのブリッジポートから引っ張ってくることも考えたがよく見ると+3.3Vピンの横に+5Vのピンを立てる穴が開いていたので、ここに適当なピンヘッダをはんだ付け。
 GPSモジュールもピンヘッダなので手持ちのQIコネクタで5ピン−1ピン×5本の変換ケーブルを圧着して作成。5V→+5V/GND→GND/RXD→P1.3/TXD→P1.4/1pps→P1.5に接続。
 TIからMSP430 Launchpad用のUARTドライバを拾ってきてインストール、Energiaもインストール。LaunhpadをUSB接続すると無事GPSモジュールのLEDも点灯して、しばらくすると1ppsの点滅も始まった。
 EnergiaにはサンプルにFR4133のLCD動作確認プログラムもあったのでコンパイルして走らせてみた。
 Softwareserialもとりあえず受信確認にはサンプルプログラムがそのまま使えそうだったがコンパイルするとCPUクロックが16MHz以外はサポートしないというエラーが出る。そんなはずはないとhardware/msp430/boards.txtを見るとFR4133はなぜか8MHzになっていた。16MHzに書き換えると別のところでエラーが出るのでsoftwareserial.cppを書き換えて対応。具体的にはDELAYテーブルの定義部分でF_CPUが16MHz以外だとエラー終了するようになっていたところを8MHz用のテーブルを使うようにした。16MHzのテーブルをコピペして試しにそのままコンパイルすると文字化けしているが信号は受信できているのが確認できた。
 今回は9600bpsだけしか使わないので、該当部分をコメント部分の計算式を参考にしながら値を少しづつ変えていって一応文字化けしないレベルの値を確定。puttyでシリアル通信しながらコンパイルして流し込めるので楽だった。
 GPSステータスをUSBシリアルで出力できるようになったので、次に時刻ステータスをLCDライブラリを使って表示させるようにしてみた。GPSのステータスは$から始まるのを利用してそこから3文字目が「Z」だったら時刻情報のはずなので、時分秒だけを抜き出してLCD表示。ここは比較的簡単だった。UTC表示だがGPS時計完成。
 ついでに時刻だけなので単純に9時間足した表示に書き換えてJST対応させてみた。