Tamakichi / ttbasic_arduino

TOYOSHIKI Tiny BASIC for Arduino STM32

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

豊四季タイニーBASIC for Arduino STM32 V0.85β(18/01/09)

(注意) このプロジェクト(リポジトリ)管理は下記に移行しました。


(New) V0.85β: OLED/TFTモジュール対応版(旧版はreleasesの方からダウンロードできます)
※本バージョンはβ版です(マニュアルも作成中です^^)。旧版の方が安定動作します.

V0.85β版修正履歴 2018/01/09
・2進数定数対応(例:A=`11001100) ・シリアルコンソールの改行'0x0A' 対応
・INPUTの不具合対応(変数名2文字対応、[ENTER]のみの入力確定禁止)
・コメント REM(') 、CLSのコマンドライン直接実行時はOKを表示しないように修正
V0.85β版修正履歴 2017/11/10
・PULSEIN()、RGB()関数の追加
・最新版Arduino STM32のRTClock仕様変更に対応
・OLED,TFT版でシリアルコンソール切替中もグラフィック描画可能に修正
V0.85β版修正履歴 2017/11/6
・DEBUG用出力消し忘れ不具合対応
・Serial1を初期状態ではオーブンしないように修正
・ttconfig.hでRTCクロックソースの指定可能に修正
・起動直後JTRST(PB4)がHIGHになっている不具合対応
V0.85β版修正履歴 2017/10/28
・TFTデフォルト設定の不具合対応
V0.85β版修正履歴 2017/10/27
・コンソール、画面モード切替周辺の不具合の対応
V0.85β版修正履歴 2017/10/24
・OLEDでのPRINT文で画面に表示されない不具合対応
・FILESコマンドの引数追加: FILES [開始,[終了]]
・フラッシュメモリ保存領域と仮想EEPROMの領域重複不具合対応
・コンパイル時のワーニングの幾つかを対応(キャスト、未使用変数削除等)

サンプル画像 サンプル画像 サンプル画像

本プログラムは、下記オリジナル版をArduino STM32 向けに移植・機能拡張版です.

STM32F103C8T6搭載のBlue Pillボード、Black Pillボードでの動作を確認しています.
機能等の詳細はリファレンスマニュアル(nmanual.pdf)に記載しています(ただし追加・修正中) .

V0.85βの追加・変更点

  • OLEDディスプレイ対応

  • TFT(ILI9341)ディスプレイのグラフィック描画対応

  • PWM出力の16Hz未満の出力不具合対応

  • シリアルターミナルコンソール画面切替を(SCREEN0) からCONSOLE ON/OFFコマンドに変更
    CONSOLE ON : シリアルコンソールに移行
    CONSOLE OFF : デバイスコンソール(NTSC、OLED、TFT)に移行
    ※シリアルコンソールの状態でSCREENコマンドを実行した場合、デバイスコンソールに移行

  • ファームウェア(ブートローダ+豊四季Tiny BASIC)の追加

    マイコンボードにファームウェアを直接書き込むことで利用可能となりました(ただし、BluePill限定)

著作権について

「豊四季 Tiny BASIC」の著作権は開発者のTetsuya Suzuki氏にあります.
プログラム利用については、オリジナル版の著作権者の配布条件に従うものとします.
著作権者の同意なしに経済的な利益を得てはいけません.
この条件のもとで、利用、複写、改編、再配布を認めます.

システム構成

システム構成図  

構成組み合わせパターン

上記構成で表示機器は排他選択となります。次の構成構成にてシステムを組むことが出来ます。

構成パターン

基本4構成の結線図

Blue Pillボードを利用した場合の上記①~④をベースとした結線図を示します。
圧電スピーカーはオプションです。必要に応じて接続して下さい。
RTC用バックアップ電池、SDカードモジュールも必要に応じて追加できます。  

①ターミナルコンソール版

ターミナルコンソール版

②NTSC版

NTSC版

③OLED版

(1)OLED I2Cインタフェース版

NTSC版

(2)OLED SPIインタフェース版

NTSC版

④TFT(ILI9341 320x240ドット)版

NTSC版

SDカードモジュールオプション

SDカード
※5V・3.3V変換レギュレータが乗っている製品の場合、VCCは5Vを供給しないと動作しない場合があります。

RTC用バックアップ電池 オプション

RTC用電池  

ピン利用構成

ピン割り付け

ボート上のピン一覧

ピン割り付け

利用可能市販パーツ

SDカード

OLED

TFT

ファームウェア書込み手順(Windows 10の場合)

プロジェクトファイルのbinフォルダに次の2つのタイプのファームウェアを用意しています。

  1. ブートローダー無しファームウェア(バイナリー形式)
    📁bin\
    ◾black_medium_small_square:ttbasic_NTSC.bin ・・・ NTSCビデオ出力版   ◾black_medium_small_square:ttbasic_OLED_SH1106_I2C.bin ・・・ OLED(SH1106 I2C接続)版   ◾black_medium_small_square:ttbasic_OLED_SH1106_SPI.bin ・・・ OLED(SH1106 SPI接続)版   ◾black_medium_small_square:ttbasic_OLED_SSD1306_I2C.bin ・・・ OLED(SSD1306/SSD1309 I2C接続)版   ◾black_medium_small_square:ttbasic_OLED_SSD1306_SPI.bin ・・・ OLED(SSD1306/SSD1309 SPI接続)版   ◾black_medium_small_square:ttbasic_Serial.bin ・・・ ターミナルコンソール版   ◾black_medium_small_square:ttbasic_TFT.bin ・・・ TFT(ILI9341))版  

  2. ブートローダー付きファームウェア(バイナリー形式)
    📁bin\PlusBootloader\
    ◾boot_ttbasic_NTSC.bin ・・・ NTSCビデオ出力版
    ◾boot_ttbasic_OLED_SH1106_I2C.bin・・・ OLED(SH1106 I2C接続)版
    ◾boot_ttbasic_OLED_SH1106_SPI.bin・・・ OLED(SH1106 SPI接続)版
    ◾boot_ttbasic_OLED_SSD1306_I2C.bin・・・ OLED(SSD1306/SSD1309 I2C接続)版
    ◾boot_ttbasic_OLED_SSD1306_SPI.bin・・・ OLED(SSD1306/SSD1309 SPI接続)版
    ◾boot_ttbasic_Serial.bin ・・・ ターミナルコンソール版
    ◾boot_ttbasic_TFT.bin ・・・ TFT(ILI9341))版

この書き込み方法について説明します.

ブートローダー無しファームウェア(バイナリー形式)の書込み手順

ブートローダーを利用したUSB経由によるファームウェアの書込みを行います。
利用するマイコンボードにはArduino STM32用のブートローダーが書き込まれている必要があります。

事前準備

「豊四季Tiny BASIC for Arduino STM32」ファームウェアの書込みには、

  • 事前にArduino STM32環境を導入し、付随するUSBドライバをインストール等が必要です.

  • Blue Pillボード(または他のSTM32F103C8T6ボード)ブートローダを書きこんでおく必要があります.

    このあたりの設定は、DEKOさんがまとめました記事が参考になると思います.
    (素晴らしいまとめの公開に感謝!!)
    DEKOのアヤシいお部屋-「STM32F103C8T6」 - http://ht-deko.com/arduino/stm32f103c8t6.html  

  • Arduino STM32モジュールは下記の安定版 を使って下さい
    https://github.com/rogerclarkmelbourne/Arduino_STM32/releases/tag/R20170323

書込み作業
  1. ブロジェクト一式のダウンロード

    プロジェクト一式をダウンロードし、解凍した中のフォルダbin内のフォルダを開いて下さい.
    binフォルダ

  2. ttwrite.batの修正

    set arduino_stm32="E:\Arduino\IDE\arduino-1.8.3"
    set dev=COM4
    ・・・
    

  arduino_stm32にArduino IDEのインストールパスを指定します。
  Javaをインストールしている場合は、ブランク指定:set arduino_stm32=でも可能です。

devにマイコンボードのUSBポートが利用するシリアルポートを指定します。COMは必ず半角大文字で記述して下さい。

  1. コマンドプロンプト上でコマンド実行

    コマンドプロンプトを実行します。
    上記のフォルダbinに移動し、次のコマンドを実行します。

    ttwrite ブートローダー無しファームウェアファイル
    

    指定する ブートローダー無しファームウェアファイル は各自の利用環境に合うものを指定して下さい。

    ttwrite ttbasic_TFT.binを実行した例:

    コマンドプロンプト  

    コマンド実行しても書き込みが開始されない場合、ボード上のリセットボタンを押すことで、
    ブートローダーが強制的に書込みモードに切り替わります。試してみて下さい。

    別の方法として、エクスプローラー上でttwrite.batアイコン上にブートローダー無しファームウェアファイルのアイコンをドラック&ドロップすることで書き込むことが出来ます。

    コマンドプロンプト

ブートローダー付きファームウェア(バイナリー形式) の書込み手順

ブートローダーと同じ方法で書き込みます。
ここではstm32flash.exeコマンドを使ったシリアル接続による方法を説明します。

コマンドプロンプト

本方法及び本方法以外の方法、Windows以外の環境での書き込み方法については、
下記のサイト掲載の手順を参考にして下さい。
DEKOのアヤシいお部屋-「STM32F103C8T6」 - http://ht-deko.com/arduino/stm32f103c8t6.html  

事前準備
  1. USB-シリアル変換モジュールを用意して下さい。

  2. 添付の書込み用バッチファイルttbtwrite.batを各自の環境に合わせて修正します。
    📁bin\PlusBootloader
    ◾stm32flash.exe ・・・ stm32flash(Arduino STM32に付属のもとの同じプログラムです)
    ◾ttbtwrite.bat ・・・ 書込み用バッチファイル

    set dev=COM5
    stm32flash.exe -b 115200 -f -v -w %1 %dev%
    

    devのシリアルポートの指定を各自の環境に合わせて変更して下さい。

  3. USBケーブルは電源供給を兼ねてパソコンに接続します。

  4. USB-シリアル変換モジュールとBlue Pillボードの結線

    USB-シリアル変換モジュール Blue Pillボード
    GND GND
    TXD A10
    RXD A9
  5. ジャンパースイッチの設定ボード上のBOOT0ジャンパを1に設定します。

    コマンドプロンプト

    BOOT0:1
    BOOT1:0

書込み作業

コマンドプロンプトを実行します。
ttbtwrite.batのあるフォルダbin\PlusBootloaderに移動し、次のコマンドを実行します。

ttbtwrite ブートローダー付きファームウェアファイル

ブートローダー付きファームウェアファイルは同じフォルダ内にあります。
各自の用途に合わせて指定して下さい。

ttbtwrite boot_ttbasic_Serial.bin を実行した例:

コマンドプロンプト

書込みはエクスプローラー上でブートローダー付きファームウェアファイルのアイコンをttbtwrite.batのアイコンにドラック&ドロップする操作でも行うことが出来ます。

コマンドプロンプト

書込みが完了したら、BOOT0ジャンバを0に戻して下さい。

スケッチの書込み手順

スケッチをコンパイルして書き込む場合の手順です。
スケッチを修正して機能拡張を行う場合、スケッチサイズの肥大化により、BASICプログラム保存領域と競合してしまう可能性があります。
その対処として、BASICプログラム保存領域をデフォルトの8よりも小さくして下さい。
basic.cpp#define FLASH_SAVE_NUM 8の値8を修正することで変更出来ます。

事前準備

  • 「ファームウェア書込み手順(Windows 10の場合)」の「事前準備」と同じ準備を行って下さい.

  • プロジェクトファイルのダウンロードと配置

    1. プロジェクト一式をダウンロードし、解凍した中の、フォルダlibraries内のフォルダを
      各自のArduino環境のライブラリ配置ディレクトリlibrariesに配置して下さい.
      ディレクトリ構成  

    添付のSDライブラリは既存のSDライブラリの修正版です.
    上書き(差し換え)したくない場合は、STM32F1\librariesの方に配置して下さい.

    添付ライブラリは、Arduino STM32環境に依存するライブラリを含むため、
    下記のディレクトリの配置でも良いです.   (古いバージョンのArduino IDEと共存利用している環境では競合等回避のためここへの配置を推奨)   \hardware\Arduino_STM32\STM32F1\libraries  

    添付ライブラリの個別利用・入手は下記のリンクを参照して下さい.

    1. スケッチ本体のフォルダttbasicを各自のスケッチ配置フォルダの配置
  • Arduino STM32モジュールは下記の安定版 を使って下さい https://github.com/rogerclarkmelbourne/Arduino_STM32/releases/tag/R20170323
    Arduino STM32環境に2017/08/04以降のバージョンを利用する場合は、

    配布スケッチの次の箇所を修正して下さい。

    • tconfig.hの修正

      OLD_WIRE_LIBの値10に変更して下さい .

       // Wireライブラリ新旧指定対応 0:新 1:旧(R20170323相当)  
       #define OLD_WIRE_LIB   0  
      
    • libraries/Adafruit_SH1106_STM32/Adafruit_SH1106_STM32.cpp の修正

      OLD_ARDUINO_STM32の値10に変更して下さい .

      #define OLD_ARDUINO_STM32 0  // Arduino STM32環境が R20170323:1、 それ以降 0
      
    • libraries/Adafruit_SSD1306_STM32_TT/Adafruit_SSD1306_STM32_TT.cppの修正

      OLD_ARDUINO_STM32の値10に変更して下さい .

      #define OLD_ARDUINO_STM32 0  // Arduino STM32環境が R20170323:1、 それ以降 0
      
  • システム構成別の修正

    デフォルトでは、基本4構成の②NTSC版(SDカードあり)の設定となっています。 異なるシステム構成で利用する場合は、それぞれに必要な修正を行って下さい。

    ①ターミナルコンソール版

    tconfig.hの修正

    • USE_SCREEN_MODEの値10に変更して下さい.

      #define USE_SCREEN_MODE 0 //※デバイススクリーン利用の場合、1を指定する (デフォルト:1)
      
    • USE_NTSCの値10に変更して下さい.

      #define USE_NTSC  1  // 0:利用しない 1:利用する (デフォルト:1)
      

    ③OLED版

    tconfig.hの修正

    • USE_NTSCの値10に変更して下さい.

      #define USE_NTSC  0  // 0:利用しない 1:利用する (デフォルト:1)
      
    • USE_OLEDの値01に変更して下さい. OLED_IFMODEの値をI2C接続の場合0、SPI接続の場合1を指定して下さい. 必要に応じて、画面の向きOLED_RTMODEを変更して下さい。

      #define USE_OLED     1 // 0:利用しない 1:利用する (デフォルト:0)
                             // 利用時は USE_NTSC を0にすること
       #define OLED_IFMODE 1 // OLED接続モード(0:I2C 1:SPI デオフォルト:1 )
       #define OLED_SCMODE 1 // スクリーンモード(1~6 デオフォルト:1 )
       #define OLED_RTMODE 0 // 画面の向き (0~3: デフォルト: 0)
      

    デバイス種類の指定:libraries/TTBAS_LIB/tOLEDScreen.hの修正

    • OLED_DEVの値をSH1106の場合は0、SSD1306、SSD1309の場合は1を指定して下さい.

       #define OLED_DEV 0 // 0:SH1106 1:SSD1306/SSD1309
      

    ④TFT(ILI9341 320x240ドット)版

    • USE_NTSCの値10に変更して下さい.

      #define USE_NTSC  0  // 0:利用しない 1:利用する (デフォルト:1)
      
    • USE_TFTの値01に修正して下さい. 必要に応じて、画面の向きTFT_RTMODEを変更して下さい。

    • #define USE_TFT     1 // 0:利用しない 1:利用する (デフォルト:0)
                            // 利用時は USE_NTSC を0にすること
       #define TFT_SCMODE 1 // スクリーンモード(1~6 デオフォルト:1 )
       #define TFT_RTMODE 3 // 画面の向き (0~3: デフォルト: 3)
      

スケッチの書込み

  1. Arduino IDE(Arduino STM32環境インストール済み)の起動

  2. Arduino IDEのターゲットボード設定

・ボード指定:"Generic STM32F103C series"  

・Variant:"STM32F103CB(20k RAM, 128k Flash)"

・CPU Speed(MHz): "72Mhz(Normal)"

・Upload method: "STM32duino bootloader" ※各自環境に合わせて任意  

・シリアルポート: ※各自環境に合わせて任意  

  1. コンパイル&スケッチ書込み

サンプルプログラム

ボード上のLEDの点滅

10 P=PC13
20 GPIO P,OUTPUT
30 OUT P,HIGH
40 FOR I=1 TO 10
50 OUT P,LOW
60 WAIT 300
70 OUT P,HIGH
80 WAIT 300
90 NEXT I

アナログ値表示

10 CLS
20 GPIO PB1,ANALOG
30 A=ANA(PB1)
40 LOCATE 5,5: ? A; "     "
50 GOTO 30

配列の連続設定

10 @(1)=1,2,3,4,5,6,7,8
20 FOR I=1 TO 8
30 ? "@(";I;")=";@(I)
40 NEXT I

シフト演算

10 A=1
20 FOR I=0 TO 16
30 ? HEX$(A<<I,4)
40 NEXT I

ラベルの利用

100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01"
180 PRINT "SUB01"
190 RETURN
200 "SUB02"
210 PRINT "SUB02"
220 RETURN

以降はオリジナルのドキュメントです

TOYOSHIKI Tiny BASIC for Arduino

The code tested in Arduino Uno R3.
Use UART terminal, or temporarily use Arduino IDE serial monitor.

Operation example

> list
10 FOR I=2 TO -2 STEP -1; GOSUB 100; NEXT I
20 STOP
100 REM Subroutine
110 PRINT ABS(I); RETURN

OK
>run
2
1
0
1
2

OK
>

The grammar is the same as
PALO ALTO TinyBASIC by Li-Chen Wang
Except 3 point to show below.

(1)The contracted form of the description is invalid.

(2)Force abort key
PALO ALTO TinyBASIC -> [Ctrl]+[C]
TOYOSHIKI TinyBASIC -> [ESC]
NOTE: Probably, there is no input means in serial monitor.

(3)Other some beyond my expectations.

(C)2012 Tetsuya Suzuki

About

TOYOSHIKI Tiny BASIC for Arduino STM32


Languages

Language:C++ 74.7%Language:C 20.0%Language:Java 4.3%Language:Roff 0.8%Language:Makefile 0.1%Language:Batchfile 0.1%