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

« 2019年7月 | トップページ | 2019年9月 »

2019年8月の7件の記事

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月18日 (日)

食いしん坊たま吉さん(猫)の図

おやつに物足りなさを感じてごみ箱をあさり、袋を未練がましく舐める、食いしん坊たま吉さん(猫)の図。
先月、食欲不振で病院に連れて行き、非常に心配していたのですが、完全に回復しました。

Dscn2123

Dscn2125

ゴミ箱をあさるので一時、ふた付き(ふたが回転するタイプ)ゴミ箱に変更したのですが、
そのふたが首にはまった状態で、徘徊していたため危険と判断し、戻しました。

2019年8月14日 (水)

たまちゃんを保護して10年になりました

本日でたまちゃんを保護して10年となりました。

今日のたまちゃんの様子

   たま: 『おやつくれ~』

   おやつのおねだりは、この位置に来てふて寝&目力で「じー」とにらんでアピールします。
   ここにいるときに、おやつを何回かあげたのを学習したようです。
  Dscn2122

  たま: 『ね、はやく、おやつちょうだいよー』
  Dscn2103


10年前の保護時の様子


   保護時(段ボールで廃棄されていた)は、体重は200グラム後半、目は開いていたので
   生後10~14日くらいだと思います。とにかく小さい。

   生後間もないため、3~4時間おきにミルク授乳、おしっこ、うんちの介助が必要で大変でしたが、
   元気に育ってくれました。
   幸運なことに、非常に丈夫で元気なねこちゃんです。

  20090815114604

  20090815161412   

  20090817173432  

今後も健康で末永く時間を一緒に過ごしていきたいです。

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月 5日 (月)

Maker Fare Tokyo 2019に行ってきました

今年も東京ビッグサイトで開催されたMaker Fare Tokyo 2019に行ってきました。
01_20190805084801 02_20190805084801

今年は本家の運営団体が営業停止等、心配なところがありましたが、
会場は大盛況で、色々なアイデアと元気を分けてもらいました。楽しい時間を過ごせました。

とりあえず、会場の雰囲気の記録(メモ)として、写真を列挙します(自分用)。
Dscn1985 Dscn1984

Dscn1990 Dscn2025 Dscn2022 Dscn2021 Dscn2019 Dscn2017 Dscn2009 Dscn2005 Dscn1997 Dscn2055 Dscn2056 Dscn2060 Dscn2063Dscn2066
Dscn2070 Dscn2073 Dscn2076 Dscn2077 Dscn2078 Dscn2080Dscn2051 Dscn2046 Dscn2043 Dscn2031 Dscn2035 Dscn2021

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月 | トップページ | 2019年9月 »