Tiny Basic Plus を動かしてみる

Tiny Basic Plus を動かしてみます。Half-Byte の Tiny Basic とは異なり、シリアルコンソール経由で動作します。



ハードウェア

特別なハードウェアは不要ですが、オプションで、

が使えます。microSD ブレークアウトとパッシブブザーをミニブレッドボードに配置しておくといいでしょう。

多くのパッシブブザーは図のように回転させると (ナナメにすると) 挿しやすいようです。

See Also:



ソフトウェア

Tiny Basic Plus は以下から DL できます。

TinyBasicPlus.ino しか要らないのでお手軽です。DL して適当な場所に保存しておいてください。


パラメータ

Tiny Basic Plus に指定できるパラメータです。

ENABLE_FILEIO (デフォルト: 無効)

SD カードの使用の有無を決定します。microSD との接続はこちらを参照してください。

//#define ENABLE_FILEIO 1
#undef ENABLE_FILEIO

有効にした場合、LOAD / SAVE でプログラムを SD カードに読み書きでき、FILES でファイル一覧を閲覧できます。上の行をアンコメントして下の行をコメントアウトすると有効になります。

kSD_CS で、SS ピンを指定する必要があります (デフォルトで 10)。

#define kSD_CS 10

有効にするとフリーエリアが 9KB 程減ります。

ENABLE_TONES (デフォルト: 無効)

TONE (SOUND) の使用の有無を決定します。

//#define ENABLE_TONES 1
#undef ENABLE_TONES

有効にした場合、TONE / TONEW / NOTONE で音を鳴らせます。kPiezoPin でスピーカーを接続するピンを指定する必要があります (デフォルトで 5)。

#define kPiezoPin 5

有効にするとフリーエリアが 1KB 程減ります。

ENABLE_EEPROM (デフォルト: 有効)

EEPROM の使用の有無を決定します。

#define ENABLE_EEPROM 1
//#undef ENABLE_EEPROM

有効にした場合、ELOAD / ESAVE でプログラムを EEPROM に読み書きできます。下の行をアンコメントすると無効になります。

EEPROM は使う前にゼロクリアしておく必要があります。EEExplorer でフォーマットをかけるか、BASIC 上で EFORMAT を実行してください。

kConsoleBaud (デフォルト: 9600)

コンソールのデータ転送レートです。115200 とかにしておくといいでしょう。なお、コンソールの改行コードは "LFのみ" にしておいてください。

#define kConsoleBaud 9600

RAMEND (デフォルト: 自動)

AVR 系のマイコンの場合には自動で設定されますが、それ以外の場合には明示的に RAM 容量 (の最終アドレス) を指定してやる必要があります。デフォルトで 4096-1 となっていますが、AVR 以外のマイコンの場合、これがフリーエリアサイズに比例します。

#define RAMEND 4096-1

少なめに設定しておかないと、スケッチを改変した場合にブートローダーをフッ飛ばす事があります。



for ATMega328P

オーソドックスに。SD カードを接続する場合には電圧に注意してください。

機能 可否 備考
SD Card SS は 10 に接続
TONE スピーカーは 5 に接続
EEPROM

そのままコンパイルできます。

SD Card TONE FREE AREA
× × 1,039
× 999
× 9
-31

SD カードで 1,030 バイト、TONE で 40 バイトのフリーエリアが減るようです。SD カードを使うのは現実的ではないですね。

See Also:



for ATMega32U4

ほぼ UNO と変わりません。SD カードを接続する場合には電圧に注意してください。

機能 可否 備考
SD Card SS は 10 に接続
TONE スピーカーは 5 に接続
EEPROM

そのままコンパイルできます。

SD Card TONE FREE AREA
× × 1,551
× 1,511
× 521
481

ATMega32U4 は SRAM が ATMega328P より大きいので SD カードを使っても大丈夫そうです。

See Also:



for ATMega2560

SD カードを接続する場合には電圧に注意してください。

  1. SD カードを使う場合には ENABLE_FILEIO を有効にした上で、pinMode のピンを 53 に変更します。

      pinMode(53, OUTPUT); // change this to 53 on a mega

修正は以上です。

機能 可否 備考
SD Card SS は 10 に接続
TONE スピーカーは 5 に接続
EEPROM

流石に余裕がありますね。

SD Card TONE FREE AREA
× × 7,439
× 7,399
× 6,409
6,369

意外にフリーエリアが少ないのは ATMega2560 の SRAM が 8KB しかないからです。但し、EEPROM も 4KB 使えます。

See Also:



for ATMega4809

SD カードを接続する場合には電圧に注意してください。

  1. RAMEND を設定する必要があります。
    ////////////////////////////////////////////////////////////////////////////////
    // fixes for RAMEND on some platforms
    #define RAMEND 6144-1
  2. EEPROM を使う場合には E2END を設定する必要があります。
    // we can use the EEProm to store a program during powerdown.  This is 
    // 1kbyte on the '328, and 512 bytes on the '168.  Enabling this here will
    // allow for this funcitonality to work.  Note that this only works on AVR
    // arduino.  Disable it for DUE/other devices.
    #define ENABLE_EEPROM 1
    //#undef ENABLE_EEPROM
    #define E2END 256-1

修正は以上です。

機能 可否 備考
SD Card SS は 10 に接続
TONE スピーカーは 5 に接続
EEPROM

4KB 程あるとそこそこのサイズのコードが書けますね。

SD Card TONE FREE AREA
× × 4,879
× 4,839
× 3,849
3,809

See Also:



for SAM 3

USB ケーブルはプログラミングポートに接続する必要があります。ソースコードのちょっとした修正が必要です。

  1. TONE がサポートされていないので、ENABLE_EEPROM を無効にします。
  2. USB ケーブルを USB ネイティブポートに接続する場合には、ソースコード中の Serial を SerialUSB に置換する必要があります

修正は以上です。

機能 可否 備考
SD Card SS は 10 に接続
TONE × TONE ライブラリがない
EEPROM × 搭載されていない

流石に余裕がありますね。

SD Card TONE FREE AREA
× × 2,801
× 動作せず
× 1,771
動作せず

意外にフリーエリアが少ないのは SRAM を 4KB で計算してあるからです。RAMEND を設定するか、

////////////////////////////////////////////////////////////////////////////////
// fixes for RAMEND on some platforms
#define RAMEND 16384-1

DUE 用の SRAM 計算の所を変更すれば 16KB のフリーエリアは余裕です。

      // probably DUE - ARM rather than AVR
      #define RAMEND (16384-1)

See Also:



for SAM D21

USB ケーブルはプログラミングポートに接続する必要があります。ソースコードのちょっとした修正が必要です。

  1. RAMEND を設定する必要があります。
    ////////////////////////////////////////////////////////////////////////////////
    // fixes for RAMEND on some platforms
    #define RAMEND 16384-1
  2. USB ケーブルを USB ネイティブポートに接続する場合 (M0 等) には、ソースコード中の Serial を SerialUSB に置換する必要があります

修正は以上です。

機能 可否 備考
SD Card SS は 10 に接続
TONE スピーカーは 5 に接続
EEPROM × 搭載されていない

16KB 程あるとそこそこのサイズのコードが書けますね。

SD Card TONE FREE AREA
× × RAMEND - 1,294
× RAMEND - 1,334
× RAMEND - 2,324
RAMEND - 2,364

See Also:



for ATMega8

組み込むにはメモリが足りません。

See Also:



for ESP8266

ver 0.15 で対応になりました。コンパイルを通すにはちょっとした修正が必要です。

  1. コンソールのデータ転送レートを 115200 にします。

    #define kConsoleBaud 115200
  2. EEPROM は搭載されていないので、ENABLE_EEPROM を無効にします。
    #define ENABLE_EEPROM 1
    #undef ENABLE_EEPROM // <- アンコメント
  3. SD カードを使う場合には ENABLE_FILEIO を有効にした上で、kSD_CS に 15 を指定します。
        // Arduino-specific configuration
        // set this to the card select for your SD shield
        #define kSD_CS 15
  4. さらに、initSD() の pinMode~の行をコメントアウトします。
      // due to the way the SD Library works, pin 10 always needs to be 
      // an output, even when your shield uses another line for CS
    //  pinMode(10, OUTPUT); // change this to 53 on a mega
  5. TONE を使う場合には ENABLE_TONES を有効にした上で、kPiezoPin に 5 を指定します。
    #define kPiezoPin 5

修正は以上です。

機能 可否 備考
SD Card SS は 15 に接続
TONE スピーカーは 5 に接続
EEPROM × 搭載されていない

RAMEND をいじればフリーエリアはもっと増やせると思います。

SD Card TONE FREE AREA
× × 6,896
× 6,856
× 5,866
5,826

See Also:



for ESP32

analogWrite () がなかったりして現状ではコンパイルできません...てか、最初から TinyBasic Plus 載ってますしね。

See Also:



for STM32

ダークホースというかむしろ本命です。

ちゃんと動かすにはちょっとした修正が必要です。

  1. EEPROM は搭載されていないので、ENABLE_EEPROM を無効にします (有効にしても自動的に無効になります)。
    #define ENABLE_EEPROM 1
    #undef ENABLE_EEPROM // <- アンコメント
  2. AVR マイコンではないので RAMEND を設定します (デフォルトで 4KB)。16KB (16384-1) 程度は指定可能です。
    #define RAMEND 4096-1
  3. AVR マイコンでない場合、EEPROM が無効になるのは解るのですが、何故か TONE も一緒に無効にされてしまうのでここをコメントアウトします。
        // turn off EEProm
        #undef ENABLE_EEPROM
        //#undef ENABLE_TONES // <- コメントアウト
  4. setup() に2行追加します。これがないとタイミングの問題で Tiny Basic Plus のメッセージが読めません (最新の STM32 ライブラリでは不要かもしれません)。
    /***********************************************************/
    void setup()
    {
    #ifdef ARDUINO
      Serial.begin(kConsoleBaud); // opens serial port
      while( !Serial ); // for Leonardo
    
      while(!Serial.isConnected()) // <- 追加
        delay(10);                 // <- 追加
      ...
  5. SD カードを使う場合には ENABLE_FILEIO を有効にした上で、kSD_CS に PA4 を指定します。
        // Arduino-specific configuration
        // set this to the card select for your SD shield
        #define kSD_CS PA4
  6. さらに、initSD() の pinMode~の行をコメントアウトします。
      // due to the way the SD Library works, pin 10 always needs to be 
      // an output, even when your shield uses another line for CS
    //  pinMode(10, OUTPUT); // change this to 53 on a mega
  7. TONE を使う場合には ENABLE_TONES を有効にした上で、kPiezoPin に PB1 を指定します。
    #define kPiezoPin PB1

修正は以上です。

機能 可否 備考
SD Card SS は PA_4 に接続
TONE スピーカーは PB_1 に接続
EEPROM × 搭載されていない

指定した RAMEND からの相対的な容量となります。

SD Card TONE FREE AREA
× × RAMEND - 1,294
× RAMEND - 1,334
× RAMEND - 2,324
RAMEND - 2,364

SD も TONE も有効の時、RAMEND を以下のように設定すれば...

#define RAMEND 12605-1

フリーエリアはキッチリ 10KB (10,240 バイト) となります。

これだけ広いと充分実用的ですね。

See Also:



for BBC micro:bit

ちゃんと動かすにはちょっとした修正が必要です。

  1. EEPROM は搭載されていないので、ENABLE_EEPROM を無効にします (有効にしても自動的に無効になります)。
    #define ENABLE_EEPROM 1
    #undef ENABLE_EEPROM // <- アンコメント
  2. AVR マイコンではないので RAMEND を設定します (デフォルトで 4KB)。
    #define RAMEND 4096-1
  3. SD カードを使う場合には ENABLE_FILEIO を有効にした上で、kSD_CS に 4 を指定します。
        // Arduino-specific configuration
        // set this to the card select for your SD shield
        #define kSD_CS 4
  4. さらに、initSD() の pinMode~の行をコメントアウトします。
      // due to the way the SD Library works, pin 10 always needs to be 
      // an output, even when your shield uses another line for CS
    //  pinMode(10, OUTPUT); // change this to 53 on a mega

修正は以上です。

機能 可否 備考
SD Card SS は 4 に接続
TONE × TONE ライブラリがない
EEPROM × 搭載されていない

指定した RAMEND からの相対的な容量となります。

SD Card TONE FREE AREA
× × RAMEND - 1,294
× 動作せず
× RAMEND - 2,324
動作せず

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: