フォト
2020年2月
            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
無料ブログはココログ

TinyBASIC

2019年12月10日 (火)

IchigoJamのファームウェア 1.4.1が正式に公開されました

IchigoJamのファームウェア 1.4.1が正式に公開されました。
早速、ファームウェアをアップデートしました。

関連記事
  ・こどものプログラミング教育ツール『IchigoJam BASIC』ver 1.4リリース
  ・IchigoJam ダウンロード
  ・documents of IchigoJam
  ・IchigoJam BASIC リファレンス ver 1.4
  ・IchigoJam BASIC 1.4 コマンド一覧
  ・IchigoJam BASIC 1.4 コマンド一覧(印刷用)
   
追加された機能の中で、クリスマスが近いということで、
NeoPixel(WS2812B)の制御を行うコマンド WS.LED の動作を試して見ました。
このコマンドは、表示する色のパターンを配列([0]~)に定義し、そのパターンを繰り返して表示します。
下記に仕様をまとめました。


WS.LED
---------------------------------------------------------------------------------------------
【概要】
    NeoPixel(WS2812B)の制御を行う  

【書式】
    WS.LED 色パターン定義数 {,繰り返し数}

【結線】
    IchigoJam側          NeoPixel(WS2812B)
     LEDピン                  DIN
     GND                       GND
     5V                         VCC(5V)

【引数】
  色パターン定義数:  配列に定義(緑、赤、青の3つで1セット)のする色パターン数
  繰り返し数        :  色パターン繰り返し回数

【解説】
    配列の先頭([0]~)から緑、赤、青の順に設定された連続する3つの値(0~255)でLEDピンに接続された
    NeoPixel(WS2812B)を1つ分、光らせます。
    緑、赤、青の値は複数定義可能で、複数のNeoPixelを光らせることができます。
    繰り返し回数を指定することで、緑、赤、青の値のパータンでの光らせます。
    
    データ送信の際、割込みを中断するためNTSCビデオ出力の画面表示が一瞬止まります。
---------------------------------------------------------------------------------------------

実際に、NeoPixel(WS2812B)30個接続のリボンタイプのモジュールを制御してみました。

    02_20191210094401

まずは、全30個のLEDを次のコマンドで赤(最大輝度 255)で表示してみます。 
   LET [0],0,255,0:WS.LED 1,30

    Dscn2305

あらかじめ配列に1つ分のLEDの色パターン 緑:0、赤:255、青:0を格納します。
次にWS.LEDコマンドにて、パターン数=1、繰り返し数=30回を指定して実行します。
これだけで、30個のLED全点が赤になりました。

次に緑、赤、青のパターンを10回繰り返す表示をやってみます。
   LET [0],255,0,0,0,255,0,0,0,0,255:WS.LED 3,10

    Dscn2306

  配列に3個分のパターン 
      緑:255、赤:0、   青:0
      緑:0、   赤:255、青:0
      緑:0、  赤:0、    青:255
  を格納します。
  次にWS.LEDコマンドにて、パターン数=3、繰り返し数=10回を指定して実行します。

今度は、プログラムを組んで動きのある表示をやってみます。
  10 LET [0],255,0,0,0,255,0,0,0,255:WS.LED 3,10:WAIT 30
  20 LET [0],0,255,0,0,0,255,255,0,0:WS.LED 3,10:WAIT 30
  30 LET [0],0,0,255,255,0,0,0,255,0:WS.LED 3,10:WAIT 30
  40 GOTO 10

    Dscn2307

  0.5秒間隔でLEDの表示がシフトして表示されます。

  なかなか遊べるコマンドですね。
  

 

2019年11月16日 (土)

TextsでWord文書をMarkdown形式に変換してみる

豊四季タイニーBASIC for Arduino機能拡張版 」用のリファレンスマニュアルは
Word 2016で作成し、PDF形式に変換して公開しているのですが、今一閲覧しにくいです。

オンラインドキュメント化したいと思い、「Texts」を使ってWord文書からMarkdown形式に変換してみました。

 ■ Texts  - Rich Editor for Plain Text
    公式サイト http://www.texts.io/

TextsはMarkdown形式の文書を作成できるエディタですが、
Word文書をインポートしてMarkdown形式に変換することが出来ます。

インストールして、初回起動時に「Pandoc」のダウンロードとインストールを要求されるので、
Pandocもインストールします。Pandocはコマンドラインで利用する変換ツールです。

01_20191116114501

さっそく、Word文書をインポートしてみました。
ざっくり変換結果を見ると、テキストに関しては欠落なく変換できているようです。
Wordの図形はダメみたいです。
表は比較的良好ですが、セル結合には対応出来ていないようです。1つ前に詰められてしまいます。

部分的に元のWord文書と比較してみます。

元のWord文書「1.15 美咲フォント対応」部分
06_20191116114901

変換したMarkdown形式の文書をTextsで表示
07_20191116114901


変換したMarkdown形式の文書のテキスト
08_20191116114901

インデントがあったり、スタイル指定していたり、文書を罫線で囲ったりしていると、
引用文(">")扱いとなるようです。
引用文(">")指定は、簡単な文字列置換を行ってプレーンテキスト化した方がよいでしょう。

完全には変換できないものの、変換作業の支援ツールとしては使えると思います。
変換自体は「Pandoc」を使ていると思います。

ただし、Markdown形式ではページの概念がないのでArsciiDoc形式に変換した方が良さそうです。
「Pandoc」単体での利用ではArsciiDoc形式への変換も出来るので、単体利用も調べたいと思います。



 

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抜けを検討します。