2020年3月26日木曜日

ZED-F9P + RTKCONV(b33) だと raw DATA の L2 を処理できない

 結論から行くと、RTKLIB(b33)ではなく、Demo5 を使うべし。

----

 MG1 を使っているお客さんから、「ubx raw データを RKTLIB で処理したが、L2 が表示されない」と連絡を受けた。

 お客さんにもらったデータを自分のところで RTKLIB で処理してみると、確かに L2 が出てこない。ZED-F9P の USB から直接出力されたものを TeraTerm でログに落として RTKLIB で処理しても L2 が出てこない。これは MG1 のプログラムの問題ではなく ZED-F9P の設定の問題か?と思って調べてみてもそれらしいものが見つからない。

 もしやと思って u-blox の Support Community で「F9P raw rtklib」で検索すると、こんな書き込みが。

Multi-frequency RINEX from F9T with RTKLIB

 ここにある返信の「Tim over at RTK Explorer would have an appropriate and functional fork」から探すと Demo5 なる改造版を見つけた。これの RTKCONV を使うと L2 が出てきた。

 RTKCONV だけでなく、RTKPLOT も表示が違う。お客さんからの情報によると RTKPOST もだいぶ修正されているらしい。

2020年3月19日木曜日

CPU が STM32 の Arduino で SerialEvent を使う方法

 adafruit Trinket M0 を Arduino IDE から使って SerialEvent を使おうとしたらなかった。サンプルソースに

  NOTE: The serialEvent() feature is not available on the Leonardo, Micro, or other ATmega32U4 based boards.

ってあるけど、STM32 based board も追加希望。

 嘆いていてもしようがないのでやる方法を見つけた。

C:\Users\<ユーザー名>\ドキュメント\ArduinoData\packages\adafruit\hardware\samd\1.5.11\variants\trinket_m0\variant.cpp

の最後の方にある

void SERCOM0_Handler() {
  Serial1.IrqHandler();
}

void SERCOM0_HandlerX() {
  Serial1.IrqHandler();
}

に変更。そのあとに自前のスケッチに
 
void SERCOM0_Handler() {
/* 元の割り込みハンドラの実行前にさせる処理 */
 Serial1.IrqHandlerX();
/* 元の割り込みハンドラの実行後にさせる処理 */
 }

を追加。

adafruit Trinket M0 に serial port を追加する方法

 商品説明ページの説明を読むと(Native hardware SPI, I2C and Serial available on two pads so you can connect to any I2C or Serial device with true hardware support (no annoying bit-banging). You can have either one SPI device or both I2C and Serial.)、簡単にできそうに思えたのに、やってみたら 4-5 時間かかったのでメモ。

#include <Arduino.h>   // required before wiring_private.h
#include "wiring_private.h" // pinPeripheral() function

#define PIN_SERIAL2_RX       (2ul) // PA09
#define PAD_SERIAL2_RX       (SERCOM_RX_PAD_1)
#define PIN_SERIAL2_TX       (0ul) // PA08
#define PAD_SERIAL2_TX       (UART_TX_PAD_0)

Uart Serial2( &sercom2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ;

void setup() {
    Serial2.begin(9600);
    pinPeripheral(0, PIO_SERCOM_ALT);
    pinPeripheral(2, PIO_SERCOM_ALT);

}

void SERCOM2_Handler() {
    Serial2.IrqHandler();
    }

パラメータの変更ができるところはほぼ無し。転送速度と、多分 TX/RX ピンの入れ替えぐらい。

・大元(Arduino ZERO, MKRZero, MKR1000)の説明はこちら

・Arafruit xxx Mx 向けの追加資料はこちら

・PA08, PA09 を使っている理由
 こちらの図にある通り、Trinket M0 で外部に引き出されているポートは PA02, PA06, PA07, PA08, PA09, PA18。このうち PA06, PA07 はオリジナルの Serial で使用。
 こちらの図(説明はこちら)にある通り、PA02 に SERCOM のピンを割り当てることは不可。

・sercom2 を使っている理由
 この pdf の Available SERCOM & Pins の項目にあるが、PA08, PA09 を使えるのは sercom2 だけ。

追記
 サンプルプログラムを gihub に置いた
追記2
 ちょっと整理して qiita にも投げた



2020年3月7日土曜日

購買:ネジはホームセンターには無い

 お客さんから「3Dプリンターで、こんなのができたらいいなぁ」という要望をいただいて、ちょっとしたモノを作ってみた。ネジ止めが必要なので皿小ねじ M3 12mm,16mm、M3 4mm のスペーサー、M3 8mm の両ネジスペーサーが必要になった。

 近所の、ちょっと大きなホームセンターに、2-30m はある通路の両側にネジがびっしり並んでいるのを思い出して買いに行った。

 結果、無かった。一つもなかった。車を出して片道 10分ほど、探した時間は 30分ほど。小一時間無駄にした。

 結局モノタロウに発注。

 次からは最初からモノタロウにしよう...