mbed

Sigfox使い始めた

ee9king に投稿

やっと使い始めたのに、Sigfox経営難で破産しているね。。段階的にメッセージの保管期間も短縮される予定だそうです

https://www.kccs.co.jp/sigfox/blog/technical/2022/0225/

う〜っむ、何かやろうとするといつもこれだな、旬な時すぐ飛びついてやらないからだね。まぁ、そういう技能がないからだという話もあるけど。スイッチサイエンスにはたくさん在庫があるようなので、購入して登録、1年間の無料期間ということになっている。

mbedから接続してAT$SF=なんかpayloadを送信。。sigfoxクラウドで見ることはできた。

で、コレをどうすんだということだが、とりあえず、macに入っているphpとApacheで、urlを取得してみた。

Nucleo SPI CLK

ee9king に投稿

Nucleo(F411RE)のSPIクロックが想定通りにならなかった。2MHzで1.5MHzs、1.5MHzで750KHz・・・。半分というとそうでもない。。。

コミュニティーで答えをもらったのだが、結論としては、データシートをよく読みなさいということだと思われます。mbedで遊んでいると、ターゲットを変えるだけで普通に動いてhしまうため、そこがどうしても、気づかなくなってしまう。それに、KL25の時はあまり気にせずほとんどがその通りに動いていた。(実際、今回の件もあり確認したが細かく設定できる)

printf(“SystemClock=%d[Hz]\r\n”, SystemCoreClock);

クロック出力できるとのことでmNucleo-F411では内蔵発振、外部水晶時ともに、96MHzと出力される。

Nuleo-F411では、SPIクロックソースは内部クロックの分周を利用するがその設定が3ビットしかないとのことである。データシート

Nucleo 今度は外部クロック

ee9king に投稿

今度は外部クロックでハマった。こっちのブックに記載。

mbed-Tips

mbed-osのなかで、内部クロックが有効にされているため外部振動子を実装しても外部クロックに切り替わってくれないということのように思う。

最初に参考にしたページ

https://os.mbed.com/questions/79122/Nucleo-F303K8MSO/

 

Nucleo クロックソース

ee9king に投稿

Nucleoの水晶振動子

Nucleo基板(F411RE)には、水晶振動子が二つあり、そのうち32.768KHz(X2)は実装されている。mbedのTickerで時間を刻むと、少し短めになった。1msに対して985usあたり、1~2%の誤差であり、これはセンシング精度としては大きい。会社業務で使用していたため、問題があった。回路図を見ると、X3は8MHzであるが実装されてない。NucleoのDocumenntには、実装すれば自動で切り替わると書いてある。Target基板を作った際、実装できるようにしてあったので、X3を実装したもののTickerの時間精度が上がらず(変わらず)外部クロックが機能していないようだった。

オシロスコープで発振子の振動波形を見たところ、まったく振動していない。しかも、X2もまったく振動していなかった。mbedの中で外部クロックが有効とされずに内部クロックで動いているように思えた。

target.json の中の"STM32F4"に、"clock-source"の記述でHSIを使うようになっていたので、記述をまねして、下記のようにプロジェクトの中のmbed_app.jsonに記述する。

USBSerialの送信

ee9king に投稿

mbed-os5のUSBSerialはボーレート設定も要らず、パソコン側のOS標準ドライバで動作するようでTargetマイコンを変えても常にポート番号が同じで使いやすい。しかしprintfが遅い

mbed-os5のAPIにあるUSBSerialでprintfを使うと1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。USBデコードできるオシロで確認すると1byte=1packetで送信されていた。

mbed-os5 USBSerial

ee9king に投稿

エキスパートには当たり前だったかもしれないのだが、私は知らなかった。

mbed-os5のAPIにあるUSBSerialでは、printfの送信で1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。

mbed-os5でUSBSerial

ee9king に投稿

os2からos5へ変えていきなさいということを言われているらしいので、数週間ずっとチャレンジしていました。

直近でやりたかったことは、Keil Studio Cloudのos2では実現できていたので、これをos5に移行する試みだった。os5はmbed-os-example-blinky5を作って、LEDの点滅動作ができていることを確認してのち、USBSerialを追加するもの。

変数参照が最適化される

ee9king に投稿

os2からos5へ変更する際に、どうもTickerがうまく動かなかった。

Ticker tbase;
DigitalOut led(LED1);

volatile int tb_reach=0;
void tbase_t(void){
    tb_reach=0;
}
int main(){
    tbase.attach( callback(tbase_t) , 0.5 ) ;
    while (true) {
        led = !led;
//        thread_sleep_for(500);
        while( tb_reach );
        tb_reach = 1;
    }
}

mbed-os5-example-blinkyのthread_sleep_for()をTickerに変えるだけだから、動いて当然、と思ってたのに while( tb_reach ); のところからぬけてくれないみたいな動きになった。