鳥なき里のマイコン屋(152) 最強の8ビット?Z80の後裔?Rabbit走る

Rabbit4000
Joseph Halfmoon

以前から気になっていた「うさちゃん印」のチップを遂に入手、インストールして動作確認するところまでやって見ました。Digi international社傘下に入った元Rabbit semiconductorのRabbit 4000チップです。最新機種のRabbit 6000と比べると2世代前とは言え、Z80テイストの8ビット機としてはなかなか強力。

“鳥なき里のマイコン屋(152) 最強の8ビット?Z80の後裔?Rabbit走る” の続きを読む

モダンOSのお砂場(37) Mbed OS6、PWMを使う。STM32

PWM_DUT_EC
Joseph Halfmoon

今回はPWM(Pulse Width Modulation)出力をMbed OSのAPIを使って動作させてみたいと思います。前回、外部端子割り込みが使えるようになったので、外部端子割り込みでPWM出力を開始/停止する機能付きとしてみました。簡潔で分かり易いAPIのMbed OSです。サンプルプログラムの作成もお気楽。

“モダンOSのお砂場(37) Mbed OS6、PWMを使う。STM32” の続きを読む

ぐだぐだ低レベルプログラミング(51) RISC-V、浮動小数積和演算、4種あるノダ

maixFlash
Joseph Halfmoon

今回は前回と以下同文でラクチンなどと呟いていたら、前回コードにしょうもないバグ発見。天網恢恢疎にして漏らさず、違うか。お詫びして前回分をさきほど修正させていただきました。今回は前回一種しかやらなかった積和演算命令、実は全部で4種もあったという話であります。

“ぐだぐだ低レベルプログラミング(51) RISC-V、浮動小数積和演算、4種あるノダ” の続きを読む

Pico三昧(10) Pico C/C++SDKでinterpその4、クランプモード

interpClampVScode
Joseph Halfmoon

ラズパイPicoのinterpユニットを使ってみる4回目は、Clampモードです。前回Blendモードを使ってみましたが、これは各コアに2個づつあるinterpのうち「0」のみの機能でした。じゃ「1」の方は何かないの?というとClampモードを持っているのです。上下の境界を超える値を「クランプ」してくれる機能です。

“Pico三昧(10) Pico C/C++SDKでinterpその4、クランプモード” の続きを読む

MicroPython的午睡(61) M5ATOMLite、ランニングテスト用改良?改悪?

RunningTestDUT
Joseph Halfmoon

前回WatchDogタイマを使ってみたのは、M5ATOMLite用の「環境測定&MQTT報告」スクリプトを長時間走らせているとハングする現象の対策のためでした。しかしWatchDogで復旧を試みるまえに原因に当たりをつけておきたいです。そこで「ダイイングメッセージ」が残るようにスクリプトを改変。

“MicroPython的午睡(61) M5ATOMLite、ランニングテスト用改良?改悪?” の続きを読む

モダンOSのお砂場(36) Mbed OS6、InterruptInを使う。STM32

Nucleo_F401RE_UserButton_LD2
Joseph Halfmoon

前回はスレッドを使って2つの仕事を並行処理でした。今回は外部端子割り込みを使ってみます。Mbed OS6での割り込み処理の流儀は、FreeRTOSの割り込みの流儀とはちょっと違う感じがいたします。OSとして割り込みやIOなどを「仕切る」Mbed OS6と、他のフレームワークに乗っかってRTOS機能を提供するFreeRTOSと(個人の感想です。)

“モダンOSのお砂場(36) Mbed OS6、InterruptInを使う。STM32” の続きを読む

ぐだぐだ低レベルプログラミング(50) RISC-V、浮動小数積和演算、速さだけでないノダ

fmadd_fmul_EC
Joseph Halfmoon

前回、浮動小数点の加減算をやりました。その前に例外を「味わう」ために浮動小数点の除算をやっています。そこで今回は必然の乗算です。ただ掛け算が出来たと喜んでも芸がありませぬ。RISC-Vには、普通の掛け算命令だけでなく、積和演算命令もあります。信号処理(積分)などするときはこちらの方が「普通」。今回はこの2つを比べてみる、と。

“ぐだぐだ低レベルプログラミング(50) RISC-V、浮動小数積和演算、速さだけでないノダ” の続きを読む

Pico三昧(9) Pico C/C++SDKでinterp その3、シンプルな線形補間

blend Mode Interporation
Joseph Halfmoon

ラズパイPicoの特長の一つであるinterpを扱って三回目にして、ようやく回路名称である interpolator (補間器)の主目的である補間を試みてみます。今回は整数型のシンプルな線形補間です。Blend Modeというモードを設定するだけで、後はレジスタに値を書き込むだけで補間を行ってくれます。便利っちゃ便利ですが、Blend Modeって何者?という疑問が残ります。

“Pico三昧(9) Pico C/C++SDKでinterp その3、シンプルな線形補間” の続きを読む

トホホな疑問(45) I2CでAQM1602通信失敗、Pull-up抵抗強すぎた。

AQMwaveformBAD
Joseph Halfmoon

今回はM5ATOM Liteに使い慣れたI2C接続のLCDディスプレイAQM1602XAを接続しようとして足をすくわれました。まさか。結論から言えばI2Cバスに接続してあった他のデバイスのプルアップ抵抗が強力すぎ。無駄な努力でMicroPythonでACK無視するI2Cもどきを作成、表示OK。端子変えれば済む話だ。

“トホホな疑問(45) I2CでAQM1602通信失敗、Pull-up抵抗強すぎた。” の続きを読む

鳥なき里のマイコン屋(151) PlatformIOのunittest、使ってみた

Uno_Nucleo_EC
Joseph Halfmoon

ホスト機上のテストフレームワーク、テストランナーは定番がありますが、組み込みマイコン上では独自路線が多いのではないかと想像します。そんな中、以前から気になっていたPlatformIOの単体テストランナーを試用してみました。とりあえずサンプルプロジェクトを持ってきて「ちょっと」修正しただけで別ボード対応可。いいんでないかい。

“鳥なき里のマイコン屋(151) PlatformIOのunittest、使ってみた” の続きを読む

モダンOSのお砂場(35) Mbed OS6、Threadを使ってみる、STM32

ProjectWizard
Joseph Halfmoon

前回はEventQueueを使った2つの仕事の並行処理例でした。今回はThreadを使ってほぼ同じ仕事を書き直してみます。プライオリティがないEventQueueと比べると、Threadはプラオリティ制御もできて、クリティカルな制御が可能なのだと思います。RTOSのカーネルのお陰。RTOS的にはこちらの方が「本流」でしょうか。

“モダンOSのお砂場(35) Mbed OS6、Threadを使ってみる、STM32” の続きを読む

ぐだぐだ低レベルプログラミング(49) RISC-V、アリガチな浮動小数加減算の落とし穴

VScodeEC
Joseph Halfmoon

前回までに浮動小数点の例外とか丸めとかのメンドイ部分を調べました。今回からは実際に計算していきたいと思います。まずは浮動小数の加算と減算からですな。ただ足し算が出来たと喜ぶのでは芸が無いので、皆さんご存じな「駄目」ケースの計算をあえてやって、バイナリで結果を見て行きたいと思います。

“ぐだぐだ低レベルプログラミング(49) RISC-V、アリガチな浮動小数加減算の落とし穴” の続きを読む

Pico三昧(8) Pico C/C++SDKでinterp その2、DeadBeef例題

DeadBeef
Joseph Halfmoon

前回からラズパイPicoの特長の一つである interpolator を使いはじめました。今回は、interpolator の内部にある、シフタ、マスク、符号拡張器を制御してみます。RP2040データシートを読むとちょうどいい塩梅に処理例が載っていました。DeadBeefとな。ここでは16進数でちょうど32ビットだからってことみたいですが。

“Pico三昧(8) Pico C/C++SDKでinterp その2、DeadBeef例題” の続きを読む

MicroPython的午睡(60) ESP32、WatchDogタイマの利用

DevKitC_WDTtest
Joseph Halfmoon

WatchDogタイマ(番犬タイマ)は、万が一ソフトウエアがxxな事態に陥ったときにRESETなどかけて制御を取り戻してくれる「転ばぬ先の杖」であります。40年ほど前のマイコンでは、ちょっとヘビイ・デューティっぽい機種にのみ搭載されていましたが、この頃はほぼほぼ漏れなく搭載されている標準機能かと思います。

“MicroPython的午睡(60) ESP32、WatchDogタイマの利用” の続きを読む