ネコと和解せよ

マイクロチップ向けのTBSKmodemをリリースしました(ただし送信のみ)



先日作ったMicropython向けのTBSKmodemの続きです。Arduinoでも動くようにしました。

github.com

MicroPython

TBSKmodemMicro/README.ja.md at main · nyatla/TBSKmodemMicro · GitHub

コードからライブラリを分離しました。
セットアップがチョットめんどくさくなりましたが、アプリケーションのコードが大変短くなりました。

ラズパイPicoでのみ動作チェックを行いましたが、62.5usでGPIOを操作できれば他のマイコンでも行ける気がします。

サンプルスケッチ

from array import array
from machine import Pin
import gc
from tbskmicro import TbskPulseModulator

led=Pin(25, Pin.OUT, Pin.PULL_DOWN)
tmm=TbskPulseModulator()
led.value(1)
gc.collect()
gc.disable()
#Critical zone
tmm.write(
	Pin(2, Pin.OUT, Pin.PULL_DOWN),16000,
	array("B",b"Hello TBSKmodem from Micro Python.")
)
#/Critical zone
gc.enable()
led.value(0)

Arduino

TBSKmodemMicro/README.ja.md at main · nyatla/TBSKmodemMicro · GitHub

C++で書き直したものです。Arduinoの標準機能だけしか使用していないので、Raspberry pi pico以外のボードでも動くのではないかと期待しています。ZipファイルをIDEに直接セットアップできるので簡単です。

#include "TbskModemMicro.h"
using namespace TBSKmodemMicro;

#define LED_PIN 25
#define SPK_PIN 2
TbskPulseModulator<100> tpm;
void setup() {
  pinMode(LED_PIN, OUTPUT);  //LED
  pinMode(SPK_PIN, OUTPUT);   //OutputPin
}
void loop()
{
  digitalWrite(LED_PIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  tpm.write(SPK_PIN,16000,"Hello arduino");  //send message via GPIO pulse audio.
  digitalWrite(LED_PIN, LOW);  // turn the LED on (HIGH is the voltage level)
  delay(1000);
}

なお、基本部分は16bitで実装しておりますので、ChatGPT先生にCに変換してもらえばZ80でも動くような気がします。

性能

生成する信号の精密さの関係で、Arduinoの方が通信距離が長く、エラーレートも低いです。
とはいえ、本格的に使用するにはどちらもエラーチェックかエラー訂正機能が必要です。

チェックサムをつけた固定長のデータをちょろっと送るくらいの用途なら、無線設定などを気にせず使えるので便利かと思います。