フォト
2019年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

TinyBASIC

2019年10月29日 (火)

豊四季タイニーBASIC for Arduino機能拡張版 のマニュアル完成

「豊四季タイニーBASIC for Arduino機能拡張版 V0.07」のマニュアルがやっと完成しました。

01_20191029115601

マニュアル作成は非常に単調な作業で面白くないのですが、
しっかりと作っておかないと、1年後には全て忘却してしまいます。
全ては1年後の自分のためなのです。

  公開サイト  豊四季タイニーBASIC for Arduino機能拡張版 V0.07
  https://github.com/Tamakichi/ttbasic_MW25616L

これで、やっと電子工作の時間が取れます。


2019年10月23日 (水)

豊四季タイニーBASIC for Arduino機能拡張版 V0.07の公開

ブランチ版の仕様が確定し、メインストリーム(V007) にマージして正式版として公開しました。

  豊四季タイニーBASIC for Arduino機能拡張版 V0.07 メインストリーム(仕様確定版) 
    ・ https://github.com/Tamakichi/ttbasic_MW25616L

     ※ブランチは削除予定です。

V007版公開ですが、まだまだテスト不足で不具合対応、プログラムソースのダイエット等の修正を
メインストリームに逐次マージしていきます。

マニュアル(pdf形式)の内容もV007に対応しました。
まだまだ誤字等の記載ミスがあると思いますが、ぼちぼちと修正してまいります。

01_20191023093601

02_20191023093601

03_20191023093601

2019年10月18日 (金)

豊四季タイニーBASIC for Arduino機能拡張版の更新

開発中の豊四季タイニーBASIC for Arduino機能拡張版 V0.07を更新しました。

Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除予定です。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L


主な変更点
1)マニュアルの更新
  ・完成度 90%

2)システムコマンドを一般コマンドに変更
  コマンドラインでのみ利用可能なコマンドの大半をプログラム内でも利用出来るようにしました。
  LOADコマンドもプログラム内で実行出来ます。
  プログラムから別のプログラムをロードして実行することも出来ます。

3)Arduino MEGA2560ではデフォルトでVFD以外全て利用可能変更
  ttconfig.hの機能利用設定をArduno UnoとArduino MEGA2560 と別々にしました。
  Arduino MEGA2560 では、VFD以外全ての機能が利用可能です。

4)不具合修正
  いくつかの不具合を修正しました。


話が変わりますが、Arduino MEGA2560 の小型のボードを入手し使ってみましたが、小さくていい感じです。
形状的に、Arduino用のシールドは利用できませんが良しとします。

左が小型ボード、右が通常サイズのボード
Dscn2239

Arduino MEGA2560 は、フラッシュメモリとSRAMにまだ余裕があるのでフルスクリーンエディタ対応をちょっと考えています。


2019年10月 8日 (火)

マニュアル作成は楽しくない

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

現在、「豊四季タイニーBASIC for Arduino機能拡張版 V0.07」のマニュアルをちびちびを作成しながら、
プログラミングの細かい不具合の修正を行っています。

この作業を夏からやっているのですが、あまり楽しくなくないです。

01_20191008233201

細かな仕様の再確認をしながら、
サンプルプログラムの作成、その実行結果の解説、実際に動作させての結果の記載、
なかなか面倒で退屈な作業です。

(写真は、Arduno MEGA2560での動作確認)
02_20191008233401

ただし、この地味な作業でエラーチェック漏れ等が見つかり、品質は向上にはつながっていると思います。

マニュアルをWordで作成してしまったのも、ちょっと失敗でした。
文章内の類似・関連記事を同時に多数開いて横並びにして眺めたり出来ないことがストレスとなります。

とりあえずの目標として、10月中には完成させたいところです。

2019年9月 4日 (水)

豊四季タイニーBASIC - I2C EEPROMへのプログラム保存

豊四季タイニーBASIC for Arduino機能拡張版は、
作成したプログラムを内部EEPROMの領域に1つだけ保存することが出来ます。

これとは別に、外付け(I2C接続)EEPROMにも保存出来ます(以降、外部接続EEPROMと呼称)。

下記の写真はブレッドボード上に実装したEEPROMです。
   Dscn2173

対応しているEEPROMは24xxx系 (5V対応のもの)で、
4kバイト(32kビット)~64kバイト(512ビット)の容量に対応します。

動作確認 EEPROM
   AT24C32、AT24C64、24LC64、AT24C256、24LC256、24FC512、AT25C32

保存可能ファイル数
   17
   ※ 容量が1024ビットタイプのEEPROMでも保存は可能ですが、利用出来る容量は512ビット(64kバイト)となります。

使い勝手は次のような感じです。
10_20190903184501

Formatコマンドで初期後、Saveコマンドでファイル名で保存、
Filesコマンドでファイル一覧の表示、Loadコマンドでプログラムの読み込みが出来ます。
プログラムは、ファイル名(12文字)を付けて保存することが出来ます。

12

Filesコマンドでは、ワイルドカード(*、?)が利用可能です。
Files ""、Files " は Files "*"と等価です。


外部接続EEPROMの実装

EEPROMの結線は次のような感じになります。
    09_20190903181301
       プルアップ抵抗は、2 ~ 10kΩの範囲(Arduinoでプルアップしているため無く可)、
       コンデンサは無くても可、I2Cスレーブアドレスは$50に設定(A0 ~ A2ピンで$50 ~ $57の設定が可能)

EEPROMI2Cアドレスの設定により、最大8個のEEPROMを同時接続して利用することが出来ます。

実際には、市販モジュールの利用がお手軽です。種類も色々とあるようです。
いくつか持っている中で、写真のタイプが使いやすいです。
Dscn2166

amazonでもいくつかの業者が取り扱っています。
 ・KKHMF AT24C256 I2C インターフェースEEPROMメモリモジュール
   13

このモジュールは、ジャンパピン (ショートピン) の設定でI2Cスレーブアドレス、ライトプロテクトの設定が出来て便利です。
乗っているEEPROMをの差し替えも出来ます(4kバイト(32kビット) ~ 64kバイト(512ビット)で交換)。
(ICソケットが逆についているモジュールがあるようです。基板のシルク印刷を確認し、逆ならICを付け直しましょう)

動作確認のため、4つのモジュールを同時接続してみました。
Dscn2179
4つのうち2つはAT24C256、残り2つは24FC512を乗せています。
I2Cスレーブアドレスは、0x50、0x51、0x52、0x53と異なるアドレスを割り当てています。

アダプタを製作して接続してみました。

Dscn2180

4つをI2C接続している様子
Dscn2184

4つ同時利用はあまり意味が無いのですが、スレーブアドレス違いでの利用の検証です。

まずは、Formatコマンドで各EEPROMを初期化します。
Driveコマンドで利用するEEPROMを指定して、フォーマットします。

14

DRIVEコマンドの引数 "A"、"B"、"C"、"D"はEEPROMのI2Cスレーブアドレス $50、$51、$52、$53に対応します。
Formatコマンドの引数はEEPROMの容量指定と、ドライブ名(任意)です。
"A"、"B"、"C"、"D"のかわりに、$50、$51、$52、$53の指定も可能です。

次に簡単なプログラムをファイル名を変えて各EEPROMに保存してみます。

15

保存したプログラムをFilesコマンドで確認してみます。
Filesコマンドの引数 "" すべてのファイルを一覧表示します。
ワイルドカード指定 "*" でもOKです。

16

個々のEEPROMをちゃんと識別し、それぞれに保存出来ています。

Filesコマンドの出力の1行目はドライブ名、
2行目はファイル名一覧(存在するファイル数により出力行数は可変)、
3行目の出力は
  条件パターン一致ファイル / 全ファイル数 (保存可能ファイル数) 
を意味します。

条件パターン一致ファイル数 は "t*.bas" のようにワイルドカード指定時で一致したファイル数が表示されます。
今回は一致ファイルが1つで、存在するファイル数も1つなので 1/1 となります。

こんな感じで、外付けのEEPROMへの保存が可能です。

2019年8月29日 (木)

豊四季タイニーBASIC for Arduino機能拡張版のラインエディタについて

豊四季タイニーBASIC for Arduino機能拡張版のラインエディタについて少々、解説します。
(現在整備中のマニュアルにも記載します)

SRAMが2kバイトしかないため、スクリーンエディタの実装が無理だったのですが、
ラインエディタでもストレスなく編集できるよう、機能強化しました。

下記が利用可能な操作で利用する編集キーの一覧です。

04_20190829085501

いくつかの編集操作を紹介します。

1) 行番号 + [Tab]キーで編集対象行の指定
  05_20190829202601
   ">"(プロンプト)の後に、編集したい行番号を入力し、[Tab]キーを押すと、
   その行の内容を表示して編集できる状態にします。

  06_20190829202601 
   20 と入力し[Tab]キーを押すと、該当行の内容を表示します。

  07_20190829202601
  この状態で、[←][→]キーでカーソル移動、[Home]、[End]キーで行頭、行末にカーソルを移動、
  [BS]、[Del]キーで文字削除、任意の文字入力、IMEを使った日本語入力が出来ます。
    
  修正確定は[Enter]キーを押します。
  修正確定前に[Tab]キーを押すと修正前の内容に戻します。

2) [↑][↓]キーで前後の行の表示

08_20190829214601
[↑]キーで現在編集している前の行、[↓]で次の行の表示をします。
また、   ">"(プロンプト)表示だけの状態では先頭行、最終行を表示します。

大した追加機能では無いですが、ラインエディタでもそこそこ使えるようになったと思います。

2019年8月26日 (月)

豊四季タイニーBASIC Arduino機能拡張版 V0.07 ほぼ完成

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の次バージョンV0.07、
ほぼ修正を完了し、以降はテストとマニュアル類の整備作業に入ります。
作業が終わり次第、メインストリームにマージします。

Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L

主な変更点
1)GPIO入出力の簡略化
  ・OUT、IN()等のコマンド・関数で事前ピンモード設定を不要にしました
  ・LEDコマンド、LED定数の追加

2)イベント処理・SLEEP機能の追加
  ・タイマー割り込み機能の追加
  ・外部ピン割り込み機能の追加
  ・ボードをスリーブ状態(停止状態)にする機能の追加

3)NeoPixel(WS2812B)対応
  ・リボン・テープ形状、リンク形状の直線タイプの制御
  ・8x8ドットマトリックス形状の制御(メッセージ表示、描画処理)

4)8x8ドット 美咲フォント(シフトJIS 全角500字:英数記号・カタカナ・ひらがな・漢字)対応
  ・指定文字フォントデータの取得

5)中間コードの固定
  ・従来は、ttconfig.hの機能利用オプション設定を変更すると中間コードの値が変わってしまい、
     保存していたプログラムが動作しない問題が発生しましたが、それを解消しました。
   
6)キーワードの変更
  ・可読性を考え、英数字は大文字・小文字を混ぜた表記に変更
  ・下記のキーワード名称の変更
     POUT => PWM、INPUT_FL=>FLOAT、INPUT_PU=>PULLUP


とりあず、新機能でLEDをSLEEP機能を使って点滅させるサンプルです。

サンプルプログラム

10 Print "LEDのピン番号は、";LED ;"です。"
20 Print "LEDを5回点滅させます。"
30 For I=1 To 5
40 LED On
50 Sleep 500
60 LED Off
70 Sleep 500
80 Next

40行、60行のLEDコマンドでボード上のLEDをオン・オフしています。
50行、70行はSleep 500ではなく、Wait 500でも同様の点滅を行いますが、
Sleepの場合、ボードが休止するため省電力化を図ることが出来ます(多分)。
ちなみに、SLEEPはウオッチドックタイマを使っています。

実行の様子
01_20190820151201

汎用的なGPIO出力コマンドのOUT命令を使った場合は次のようになります。
旧バージョンでは、OUT命令を使う前に、GPIOコマンドでピンモードの設定が必要でしたが、
指定不要にしました。ちなみにLED定数は13の値を持っています。

OUT命令を使ったサンプルプログラム

10 Print "LEDのピン番号は、";LED ;"です。"
20 Print "LEDを5回点滅させます。"
30 For I=1 To 5
40 OUT LED,On
50 Sleep 500
60 OUT LED,Off
70 Sleep 500
80 Next

とりあえず、今後はドキュメント類を整備していきます。

2019年8月12日 (月)

豊四季タイニーBASICにSLEEPコマンドを追加する試作

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)に
SLEEPコマンド(スリープ機能)を追加しているのですが、意味不明の挙動でハマってしまい、
10日間も停滞して悩んでいました。
本日やっと、解決しました。

Arduino・パソコン間のシリアル通信を確立したまま、スリープ状態に入り、再度起き上がると
シリアル通信が不安定になり、コンソール画面での対話が利用不能になっていました。

対策として、スリープに入る前にシリアル通信を終了し、起き上がるときに再接続をするようにしました。
    Serial.end();
      [スリープ処理]
    Serial.begin(SERIALBAUD);

これで、スリープから起き上がった後に問題無く、通信が出来るようになりました。
試作段階ですが、次のリストは外部割込み処理を行うBASIC言語での記述例です。

サンプルプログラム

1 '外部割込みによるスリープ抜け
10 Gpio 2,Input_PU
20 D=0
30 On Pin 2,Rising GoSub "ext"
40 Pin 2,On
50 ?"スリープ"
60 Sleep
70 ?"スリープ抜け"
80 Input "継続? ",C
90 D=!D
100 LED D
110 Wait 500
120 GoTo 40
130 "ext"
140 Return

サンプルプログラムでは、60行のSleepコマンドでスリープ状態(パワーセーブ)となります。
ピン番号2にボタンを付け、外部割込みを発生させます(30行で定義、40行で有効化)。

02_20190812204601

実行した画面

01_20190812204601

プログラムを実行すると60行でスリープ状態となり停止します。
その状態でボタンを押すと、130行の割り込み処理(実際は何もしていない)を実行後、
70行からプログラム実行を再開します。

前回実装したタイマー割り込み機能でもスリープから抜けて欲しいところですが、
利用したTimer1ではスリープから抜けることは出来ません。
Timer2なら可能なので、変更して対応したいと思います。


2019/08/14 追記

タイマー割り込みの実装をTimer1からTimer2に変更するため、
ArduinoではメジャーなMsTimer2ライブラリを利用に修正しました。

確かにTimer2では、SLEEPから抜けることが出来るのですが
1ミリ秒でSLEEPから抜けてしまいました。

原因を調べるためMsTimer2ライブラリのソースを見てみると、
内部的には1ミリ秒毎に割り込みを行い、カウントして
指定した時間(ミリ秒)毎に登録した関数を呼び出すようになっていました。
MsTimer2は使えないことが判明しました。

タイマー割り込みで、SLEEP抜けをするのは諦め、
ウオッチドックタイマを使った、SLEEP抜けを検討します。

2019年7月13日 (土)

豊四季タイニーBASIC Arduino機能拡張版の修正中(5) タイマー割り込み機能の追加

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正、
タイマー割り込み機能を追加しました。

Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L

追加コマンド
■ タイマー割り込みの定義
  ON TIMER 周期 GOTO | GOSUB 行番号|ラベル

  周期はミリ秒単位 1 ~ 32767

■ タイマー割り込みのオン・オフ指定
  TIMER ON | OFF

サンプルプログラム

10 ON TIMER 500 GOSUB "BLINK"
20 GPIO 13,OUTPUT:D=LOW:TIMER ON
30 "LOOP":GOTO "LOOP"
40 "BLINK":OUT 13,D
50 IF D ?"Blink!"
60 D=!D
70 RETURN

サンプルプログラムでは、
10行で500ミリ秒毎に、"BLINK"ラベルのある40行のサブルーチンを呼び出すように定義しています。
20行は、LED用の13ピンを出力設定にし、TIMER ONでタイマー割り込みを開始しています。

30行は、"LOOP"ラベルの行、すなわち30行にジャンプです。ここ30行で無限ループを繰り返します。
40行~70行は、タイマー割り込みで呼び出される処理です。LEDを点滅させて、画面に"Blink!"を出力します。

実行時の出力

01_20190713203001

う~ん、
タイマー割り込みが出来れば、
「何か面白いことが出来るのでは?」と思い、組み込んだのですが
使い道が浮かびません。
まあ、イベント処理の実装はちょっと勉強になったので良しとします。

タイマー割り込みは、Timer1ライブラリを利用しました。
コンパイルにも別途、Timer1ライブラリが必要です。 (2019/07/16 本体に組み込みました)


タイマーイベントキューは最大1個としています。
呼び出される処理が、追いつかない場合はイベントは破棄されます。
ですので、呼び出される処理内でカウントして時刻を刻むような処理において、
イベントが破棄された場合は、カウント数がずれます。
回避策として、Windowsみたいに、多重のコマンドイベントが重なる場合は、
1つのイベントにまとめて回数情報を付加する等の処理等が考えられるのですが、
まあ、これで良しとします。

ピン変化イベントも追加する予定でしたが、どうしよう ...

2019年7月 7日 (日)

豊四季タイニーBASIC for Arduino機能拡張版の修正中(4)

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正、
前回から、美咲フォントの漢字選定の変更やらダイエットやらを行いましした。
(コード見直しで500バイトくらいダイエット出来たのですが、機能追加で差し引き0です)

・Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

   2019/10/22 追記
   ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
   メインストリーム(仕様確定版)   https://github.com/Tamakichi/ttbasic_MW25616L



見た目的には、前回とあまり変わらないのですが、修正で"埼玉"が表示出来るようになりました。

動いている様子



プログラム


10 NINIT ARRAY,64
20 NBRIGHT 1
30 FOR N=1 TO 5
40 C=RND(255)
50 FOR I=0 TO 3
60 NCLS 0
70 NLINE I,I,7-I,7-I,C,1
80 WAIT 150
90 NEXT
100 NEXT
110 NMSG 80,RGB(7,0,0),"こんにちは、埼玉♪"
120 NMSG 80,RGB(0,0,3),"今日は、7月7日です。"
130 GOTO 30


色々と悩んだ挙句、次のフォントを選定しました。
年号、季節、時刻、天気、方向、単位、地形、色を強化しました。

01_20190707203001

フォントは約5kバイト容量を喰うため、他の機能をOFFにする必要があります。
オプション指定で、フォントの利用を無効にすることも出来ます。

また、英数記号・カタカナ・ひらがな 288文字のみ利用可能とするオプション指定も
用意しました。この場合は3kバイト程度の消費となります。

NeoPixel制御はこれくらいにして、次はタイマー割り込み機能に着手します。