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

arduino

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年8月 2日 (金)

SSD1322搭載3.12インチ OLEDの動作確認

AliexpressでコントローラSSD1322搭載 3.12インチ OLEDディスプレイを入手しました。

入手サイト
TZT Real OLED Display 3.12" 256*64 Dots Graphic LCD Module Display Screen LCM Screen SSD1322 Controller Support SPI
01_20190802090601

$20.70と少々お高いですが、以前に比べるとお手頃な価格になってきました。

実際の製品

届いた製品です。0.96インチ(上)と比較するとやはり大きいです。
Dscn1942

マニュアル類の付属がないため、製品販売ページの情報をもとに使い方は調べる必要があります。
購入先の業者に問い合わせても良いと思います。


製品仕様について

てっきりモノクロ(単色)だと思っていたのですが、
SSD1322の仕様を調べると、1ドット当たり4ビットの16階調表示でした。
256x64ドット、1ドットあたり4ビットのためバッファを使う方式でのプログラム実装では
バッファサイズは8kバイト必要となります。

2x16のピンヘッダでの接続となります。
インタフェースとしては、SPIの他にパラレル接続も可能です。
Photo_20190802094501
デフォルトではパラレル接続モードになっています。
裏のシルク印刷の設定をみてSPI(4SPI)接続に変更しました(R6の抵抗を取ってR5につける)。
Dscn1976

SPI(4SPI)で利用する場合、モジュールのピンヘッダのうち、下記のピンを利用します。
(Reset、CS、DCはArduinoの任意のピンでOK)
02_20190802094201
Arduinoでの動作確認

利用ライブラリ

ググって探して、次のライブラリを試してみました。
1) U8glib V2 library for Arduino
    https://github.com/olikraus/U8g2_Arduino
2) Arduino library for 256x64 OLED ER-OLED032-1 (SSD1322 driver)
    https://github.com/cvonk/arduino-SSD1322

接続はこんな感じです。
Dscn1977
結論を先に述べると、1)のU8glibの利用がお勧めです。
16階調表示には対応していないですが、フレームバッファ使わない方式にも対応しています。
下記の画像はU8glibを使った動作です。

Dscn1961
Dscn1965
Dscn1966
表示がとても綺麗です。文字の表示にも、もちょうど良いサイズです。

U8glibのサンプルスケッチをコンパイルする使う場合、コメントアウトされている下記を有効にします。
   U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h

U8glibでも、フルサイズのバッファを使う場合、バッファサイズとして2kバイトが必要です。
Arduino Unoでは利用出来ません。Arduino MEGA2560で利用出来ました。

SPI接続では、OLEDモジュールからの表示内容の読み出しが出来ないため
表示している内容に追記するような場合は、Arduino側でバッファが必要となります。
バッファを使いない場合、グラフィック描画時に制約が発生します。

2)のライブラリはAdafruit_SSD1306がベースのライブラリなのですが、
古いAdafruit_GFXを使っているためか、Adafruit_GFXのメンバ変数参照でコンパイルエラーが
発生し、ライブラリソースの修正が必要でした(このあたりの対応は省略します)。

さらにバッファとして最低2kバイト(単色利用時)が必要です。Arduino Unoでは利用出来ません。
Arduino MEGA2560ではとりあえず動きました。

Dscn1970

16階調での利用は、バッファサイズ8kバイトが必要なため、Arduino MEGA2560でも利用出来ませんでした。


まとめ

このSSD1322搭載の本製品、ドットサイズが256x64、16階調、表示が綺麗で見やすいのです。
文字を表示にも適したサイズです。
ただし、16階調(1ドット4ビット)は、メモリ消費が多くなり、ちょっと使いにくいです。

16階調の表示の評価として、何か写真っぽいのを表示を試して見たいと思います。

2019年7月16日 (火)

Arduino用美咲フォントライブラリを更新しました

Arduino用美咲フォントライブラリ 2つを更新しました。

01_20190716204201

更新したライブラリ

Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版(UTF16/8対応)
   https://github.com/Tamakichi/Arduino-misakiUTF16

Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版 SJISバージョン
   https://github.com/Tamakichi/Arduino-misakiSJIS

※ 美咲フォントは、Little Limitさんが開発し、配布しているフォントです。
  ・8×8 ドット日本語フォント「美咲フォント」
     http://littlelimit.net/misaki.htm

主な変更点

ライブラリサイズ 約1.7kバイト弱 削減
   美咲フォントは8x8ドットのフォントなのですが、実質的には8x7ドットのため、
  1文字あたり1バイトを減らすことが出来ました。
  ライブラリサイズ的には、約15kバイト強となります。

SJISバージョンの半角全角変換不具合対応
   ","が全角に変換できませんでした。

#include <arduino.h> ⇒ #include <Arduino.h>に訂正
   大文字小文字を区別するOS(Linux、Mac)でエラーとなる不具合に対応しました。

ライセンスについて追記
  このフォントライブラリについては、
 「美咲フォント」と同様にフリー(自由な)ソフトウエアです。
  あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、複製、再配布することができます。
  ただし、全て無保証とさせていただきます。


より以前の記事一覧