micro:bit で,簡易オシロスコープを作ってみました.

 

10kHz〜80kHzのサンプリング周波数でキャプチャできます.

micro:bit用の拡張OLEDディスプレイに表示します.

トリガを設定して,決まった電圧を検出したらスキャンする,みたいなこともできます.

 

Aボタンで再スキャン,Bボタンでキャプチャ画像の保存です.

キャプチャした画像はファイルとして保存され,PCに転送できます.

 

乾電池&PC無しで動作させられるため,出先でちょっとオシロを使いたいときなどに便利かなと思います.

(家に余っているmicro:bitを簡易オシロにできます)

 

NLL for micro:bit のアプリとして作ってあるので,簡単な改造もしやすいと思います.

 

NLL for micro:bit

↑「アプリケーション」の「簡易オシロスコープ」です

 

 

NLLのmicro:bit移植を進めていますが,micro:bit shields for Arcadeのゲームパッド上で動作しました.

 

 

NLL for micro:bit

 

対象ハードウェアは以下です.ほぼリファレンス回路どおりのようなので,micro:bit shields for Arcadeの他のハードウェアでも動作するかもしれません.

 

https://kitronik.co.uk/products/56116-kitronik-arcade-for-bbc-micro-bit-makecode-arcade

 

独自言語「NLL」で動作します.テキスト型プログラミング言語で,ゲームを作ったりすることができます.

(NLLがベアメタルで動いています.言いかたを変えると,NLLがOSとして動いています)

 

PCとUSBケーブルで接続し,TeraTermなどの端末エミュレータで接続して操作します.

 

フラッシュROM上にファイルシステムを持っているので,プログラムを保存することができます.プログラムを書き込んで保存し,電源ON時に起動するプログラムを指定することで,PCと切り離して動作することができます.

 

このゲームパッドの標準の開発環境はMakeCodeですが,ディスプレイの下8ラインが使えない(320x240のディスプレイにスムーズに拡張できるようにするためらしい)のですが,NLLだと全画面が使えます.

あとMakeCodeでのグラフィックプログラミングは基本的にキャラクタベースなので(よく知らないですが),線や円を描くようなプログラムを書きたい場合には,NLLのほうがやりやすいかもしれないです.

 

独自言語「NLL」をmicro:bitに対応しました.

PCとmicro:bitをUSBケーブルで繋ぎ,端末エミュレータで接続するとNLLのプロンプトが出ます.

以下のことができます.ファイルシステム上にNLLのプログラムをいくつか保存しておいて,ロードして起動したり,テキストエディタで編集して実行したりができます.

micro:bitは標準の開発環境はブラウザ上でのプログラミングで,テキスト型言語だとMicroPythonが使えるようですが,それらとはまた違った「80年代のBASICっぽい感じの言語」でmicro:bitを制御できます.

  • micro:bitとPCをUSBシリアルケーブルで接続し,NLLでプログラミングして動かす
  • LED(5x5)へのグラフィック表示(グレースケール)や文字の表示
  • A/Bボタンの検知
  • 加速度センサ,磁気センサ,温度センサの値の取得
  • CPU温度の値の取得
  • GPIOの操作
  • サウンド
  • フラッシュROMをファイルシステムとして利用可能(ファイルサイズに上限あり)
  • ファイルシステムに設定保存
  • 起動時の実行ファイルを指定して,PC無しで起動して動作
  • USBシリアルケーブル経由でのPCとのファイルの送受信(XMODEM/YMODEM)
  • 簡易テキストエディタ(アプリケーション)

 

vectorにもあります.

 

 

大熱血!アセンブラ入門のアセンブラ出力環境のバージョンアップ版と,NLUXのバージョンアップ版を一気にリリースしました.

https://kozos.jp/books/asm/ →アセンブラ出力環境(gcc-11)
https://kozos.jp/nlux/download.html →2025/06/13版

これらは今まで別々のツールだったのですが,今回,これらが協調動作するようになりました.

まず,大熱血アセンブラのアセンブラ出力環境はgccベースになっていて,各種CPUアーキテクチャ向けのクロスコンパイラ(gcc)をビルドし,サンプルプログラムをクロスコンパイルすることで実行ファイルを生成したり,その実行ファイルをシミュレータ上で動作させたりすることができます.

またNLUXには,独自のCコンパイラ(NLCC)と独自の標準Cライブラリ(のサブセット)(nllibc)が含まれています.

で,今回のリリースでは,以下のようなことができるようになりました.(やりかたはNLUXのトップのREADME.txtの「クロスコンパイル」の章を参照)

  • 大熱血アセンブラの環境にNLCCを使ってアセンブリを生成できる.さらに実行ファイルを生成し,シミュレータで実行ができる.
  • 大熱血アセンブラの環境とNLCCを使って,nllibcをクロスビルドできる.(コンパイラにはNLCCを使うが、アセンブラやリンカには大熱血アセンブラの環境を使う)
  • そのクロスビルドしたnllibcとNLCCを大熱血アセンブラの環境に使って,実行ファイルを生成できる.
  • さらにその実行ファイルをシミュレータで実行できる.(MIPS16/RX以外)
  • これらのことが,11種類のCPUアーキテクチャでできる.(AArch64/ARM/MIPS/MIPS16/PowerPC/RISC-V/RX/Thumb/Thumb2/x86/x86-64)

MIPS16とRXはnllibcを用いての実行確認ができていませんがそれを差し引いても,NLCCは9種類のアーキテクチャで,標準Cライブラリのサブセット(printf()含む)をビルドして動作確認できる程度には動いたということなので,そこそこ動作確認がとれたということにはなるかなと思います.

これはNLCCが新たなCPUアーキテクチャに対応しやすいという特徴があるためです.

詳しくはNLUXのREADMEに書いてあるのですが,具体的には以下のような方針で設計することで実現しています.

  • 利用するレジスタを限定(演算は2種類のレジスタのみで行う)
  • 出力するアセンブリのパターンを限定(最低限のアセンブリパターンのみ登録し,それらの組み合わせで処理を実現する)
  • ビルトインの活用(他の命令で代用可能な処理は,未登録でも代用され動作する)

2つのレジスタ(NLCC内では「R0」と「R1」と呼んでいる)に何を使うかを決めて,R0に定数値を代入する命令,R1をR0に代入する命令,R0とR1を加算しR0に格納する命令,などを登録しておけば,それらを組み合わせて処理をするようなアセンブリのコードを生成してくれます.

 

x86-64の例だと,R0にRAX,R1にRDXを指定して,上の例なら以下のような関数を登録しておくことになります.(asm_code_amd64.c参照)

static void get_value(FILE *out, long value)
{
  ASM_CODE_OUT(out, "\tmov\t$0x%lx, %%rax\n", value);
}

static void get_r1(FILE *out)
{
  ASM_CODE_OUT(out, "\tmov\t%%rdx, %%rax\n");
}

static void calc_add(FILE *out, model_t model, model_t model_arg0, model_t model_arg1)
{
  ASM_CODE_OUT(out, "\tadd\t%%rdx, %%rax\n");
}

現状では最適化を一切しないため,生成されるアセンブリは非効率極まり無いものとなっています.

が,10アーキでとりあえず動きますし,新たなアーキに対応させるコストも極小です.
 

バイナリかるたをリニューアルしました.

 

https://kozos.jp/binary-karuta/

↑ここの「バイナリかるたのサンプル」「バイナリかるたのサンプル(初心者向け)」「バイナリかるた生成ツール」です.

 

「初心者向け」は,入門向けにカードを限定してファイル種別等も入門向けにして,1枚シートで印刷できるようにしたものです.

 

バイナリかるたは独自の生成システムがあって,makeするだけでかるた札のデータやスライドPDFを自動生成してくれるというものなのですが,今回大幅にリニューアルしました.新規データも追加されています.

もともと2013年ごろにSECCONで始めたバイナリかるたですが,その後に書籍「バイナリで遊ぼう」の題材になったり,とある会社のノベルティグッズになったりしましたが,最近とあるところでやる機会があったので,良い機会なので生成システムをリニューアルしました.

今回は,市販の標準的な名刺シート用の印刷データ生成を追加しています.

標準的な名刺シートというのはA4サイズで2×5で10枚の名刺が作成できるものですが,これに印刷するためにサイズ合わせして縁塗り足しも追加した印刷用データを生成してくれます.

(生成後のデータも添付しています)

 

これを名刺シートに印刷すれば,自前でかるた札の印刷が可能です.

(ただコンビニとかの印刷サービスとかでは,印刷用紙の持ち込みはほとんど対応していないので注意してください(紙づまり等するとトラブルになる可能性有り).自宅のプリンタか,持ち込みの名刺用紙での印刷を受け付けてくれる印刷所とかでの印刷が必要)

makeしなおせば自前でデータ作成も可能ですが,必要ツールをインストールする必要があるのと,あと私はFreeBSD上でやっているので,DebianやUbuntuとかだと動作や生成データに微妙な違いがあるかもしれないです.

ホームページ上では、他のシートサイズに合わせた印刷用データも配布しています.

A-ONEの通常名刺シート,角丸マルチシート(キャッシュカードサイズ),つり下げ名札シート,店頭POP用シートのサイズに合わせたデータがあります.

新規データは,初心者向けにテキスト系のデータを追加しました.

また今まで無かった音声系,ファイルシステム系を追加しました.


Let's binary karuta!