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

ARM

2018年12月13日 (木)

豊四季Tiny BASIC for Arduino STM32 をV0.87に更新しました

豊四季Tiny BASIC for Arduino STM32 をV0.87に更新しました。

公開サイト
・豊四季タイニーBASIC for Arduino STM32V0.87β
  https://github.com/Tamakichi/ttbasic_arduino_stm32

  テストが不十分でβ版です^^;

マニュアルの作成がまだまだ進まないのですが、とりあえすコマンドリファレンスを
V0.87対応に更新しました。

・「豊四季タイニーBASIC for Arduino STM32」 コマンドリファレンス(更新中)

V0.87の主な追加機能


・漢字フォント利用の対応(SDカード上のシフトJISコードフォントファイルを利用)
   - KANJI コマンドによる全角文字列の描画が出来る
   - SETKANJI コマンドで全角文字描画時のフォントサイス等の設定が出来る
   - KFONT コマンドによる、漢字フォントデータの取得が出来る

・内部フラッシュメモリのプログラム保存領域の直接書き換え対応
   - 仮想化ドレスPRG2 の追加
   - BANK コマンドの追加
   - FWRITE コマンドの追加、
   - BLOAD コマンドの機能強化でバイナリファイルに直接書き込みに対応

   この機能は少々危険ですが、プログラム保存領域4096バイト x 6本の領域を
   有効利用するために、データを配置して利用出来たら.. と思い追加しました。
   
   SDカード上のバイナリーファイルをBLOADコマンドでフラッシュメモリに
   読み込んだり出来ちゃいます。
   ファイルからちょっとした画像や文書データを読み込んで配置出来ます。

・バイナリファイル操作の機能強化
   - BLOADBSAVE コマンドで、ファイル内読み書き位置を指定可能にしました

   ちょっとしたレコードファイルの構造を実現できると思います。

・文字列比較関数の追加
   - STRCMP 関数を追加しました

・グラフィック描画関連のコマンド追加
   - GCOLOR GCLS コマンドの追加

・その他
   いくつかの不具合対応を行いました


ここで、あらためて補足ですが、
豊四季Tiny BASICのオリジナル版開発は私ではなく、鈴木氏です。
私は、オリジナル版をSTM32対応し、機能拡張しているのみです。
オリジナル版  https://github.com/vintagechips/ttbasic_arduino


今後の予定としては、機能追加はこのあたり迄として、
ドキュメントの充実、BASICプログラムの作成、基板作成を行っていこうと思っています。

2018年12月 7日 (金)

豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中(4)

豊四季Tiny BASIC for Arduino STM32の日本語フォント対応版、
ちびちびとドキュメント類を作成しています。
ドキュメント作成は、モチベ―ジョンが下がり、なかなか作業が進みません。

今回は、リファレンスマニュアルよりも先に「早見表」(クイックリファレンス)を
先に作成しました。PDF化して添付を予定しています。

Dscn9093

パウチして、傍らにおいて参照する感じでの利用を想定しています。

Dscn9091

コマンド、編集キー、ボードピン配置、ピン用途一覧、結線図の
7ページにまとめています。

01

コマンド一覧を1枚に収めるのにちょっと苦労しました。

02

ピン割り付けと、起動時のコンソール選択の設定関連のシート

03

英語版も作成したいところですが、とりえずは後回しです。

追記

このドキュメントをブランチの方に追加しました。
ttbasic_arduino_stm32/TinyBASIC早見表.pdf

2018/12/08 修正

マスターブランチにマージしました。
早見表は下記のリンクからの参照となります。
ttbasic_arduino_stm32/TinyBASIC早見表.pdf

キーワード一覧(簡易コマンドリファレンス) キーワード.html追加しました。

04


2018年11月30日 (金)

豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中(3)

豊四季Tiny BASIC for Arduino STM32の日本語フォント乗せ対応、
追加したい機能の実装はほぼ完了し、マニュアル作成と動作確認中です。
文字列比較関数等も追加しました。

動作の様子


NTSC版で全角フォントを表示するデモです。
全角フォントは8、10、12、14、16、20、24ドットの7種類が利用出来ます。
また、倍角、四倍角等の拡大表示も可能です。

デモのプログラムソース

10 CONSOLE 0
20 GCLS
30 SETKANJI 20,1,0,0
40 KANJI 10,0,"こんにちは、埼玉!"
50 SETKANJI 10,1,2,1
60 KANJI 10,30,"7種類の漢字フォントを使って、"
70 KANJI 10,42,"全角表示が出来るようになりました。"
80 SETKANJI 24,2,2,2
90 KANJI 0,60,"豊四季"
100 SETKANJI 20,2,0,0
110 KANJI 0,106,"Tiny BASIC"
120 SETKANJI 16,1,0,0
130 KANJI 0,150,"for Arduino STM32"
140 SETKANJI 24,2,0,0
150 KANJI 90,170,"V0.87"
160 WAIT 2000
170 FOR I=1 TO GW
180 GSCROLL 0,0,GW-1,GH-1,LEFT
190 WAIT 10
200 NEXT I
210 WAIT 2000
220 GOTO 20

マニュアル作成とテストにちょっと手こずっています。

現時点のバージョンは、GitHubのブランチからダウンロード可能です。
(このブランチは随時更新しています)
https://github.com/Tamakichi/ttbasic_arduino_stm32/tree/add_SDSfonts

   2018/12/08 修正 マスターブランチにマージしました(上記ブランチは削除します)。
                     => https://github.com/Tamakichi/ttbasic_arduino_stm32

ただし、ファームウェア・マニュアル等は旧版のままです。
ソースからコンパイルする必要があります。

フォント利用には、解凍したfontbinの下にあるSFONT.BINをSDカードに入れる必要があります。

描画速度をもう少し何とかしたいです。
漢字フォントをSPI接続のフラッシュメモリに配置すれば高速化出来るのですが、
フラッシュメモリの入手と書き込みがちょっと面倒なので悩みどころです。

また、BASICプログラムのソースが英字大文字だと可読性が悪いので、
GOTO => GoTo
WAIT => Wait
SETKANJI => SetKanji
IF => If
FOR I=0 TO 10 STEP  2:NEXT I => For I=0 To 10 Step 2: Next I
のように大文字小文字を混ぜる感じにしようかと検討中です。

2018年11月15日 (木)

豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中(2)

前回からの修正、全角文字列を表示できるコマンドを追加しました。

表示している様子

01

プログラム

02

10 'OLED日本語表示デモ
20 @(0)=8,10,12,14,16,20,24
30 S="吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。"
40 L=LEN(S)
50 FOR J=0 TO 6
60 SETKANJI @(J):CLS 1:KANJI 0,0,STR$(S):WAIT 500
70 NEXT J
80 GOTO 50

KANJIコマンドで指定した座標に文字列を描画します。
  KANJI x,y,"文字列"
  KANJI x,y,STR$(文字列を格納した変数)

SETKANJIコマンドは、フォントサイズ等の設定を行います。

これで、簡単に全角文字列を描画出来るようになりました。
前回と同じことやってますが、プログラムがかなり短く出来ます。

OLED版では、CONSOLEコマンドにてプログラム編集画面をシリアルターミナルに
切り替えることが出来ます。
この場合でも、OLEDディスプレイへのグラフィック描画を行うことが出来ます。

2018年11月 7日 (水)

豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中

先日作成した「Arduino用SJIS漢字フォントライブラリ SDカード版」を
豊四季Tiny BASIC for Arduino STM32に組み込んで日本語表示対応を試みています。

(現時点の修正案は下記のリンク先にまとめています。
  ttbasic_arduino_stm32のプロジェクトのissues#58にまとめています^^)

日本語表示が出来れば、簡単なアドベンチャーゲームが作成出来ると思います。


日本語表示表示の雰囲気は次のような感じです。

OLED版の表示デモ


プログラムソース

10 'OLED日本語表示デモ
20 @(0)=8,10,12,14,16,20,24
30 S="吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。"
40 L=LEN(S)
50 FOR J=0 TO 6
60 Z=@(J):X0=0:X=X0:Y=0
70 CLS 1
80 FOR I=1 TO L
90 R=KFONT(MEM,ASC(S,I),Z)
100 BITMAP X,Y,MEM,0,Z,Z,1
110 IF (X+Z*2+1)>(GW-1) X=0:Y=Y+Z ELSE X=X+Z+1
120 IF Y+Z>GH-1 I=L
130 NEXT I
140 WAIT 500
150 NEXT J
160 GOTO 160

プログラムはKFONT関数で1文字ずつフォントデータを取得して表示しています。
フォントをSDカードから逐次参照して表示しているため、表示は遅いです。

表示専用のKANJIコマンドを追加予定です。
これを使えばもう少しプログラムが短くなり、表示も早くなると思います。

OLEDの他に、NTSC画面、TFT画面にも表示出来ます。


NTSCビデオ出力画面での表示デモ

プログラムソース

5 CONSOLE 0
10 CLS
20 S="日本語表示にほんご"
30 L=LEN(S):X0=0:X=X0:Y=30:@(0)=8,10,12,14,16,20,24
35 FOR J=0 TO 6
40 FOR I=1 TO L
50 R=KFONT(MEM,ASC(S,I),@(J))
60 BITMAP X,Y,MEM,0,@(J)/R,@(J),1
70 X=X+@(J)/R+0
80 NEXT I
90 X=X0:Y=Y+@(J)+10
100 NEXT J
110 GOTO 110

プログラムの日本語入力は、NTSC、OLED、TFT画面では入力出来ないため、
シリアル接続したTeraTermにて行います。

01


TFT版ではカラー表示に対応しています。

Dscn8965

2018年10月11日 (木)

Beginning STM32という電子書籍を楽天で購入したのですが..

("楽天kobo糞過ぎ"というお話です^^)

少し前に、「Beginning STM32 Developing with FreeRTOS, libopencm3 and GCC」という
書籍を見つけ、出版元から直接、PDF版を買わずに楽天からkobo版を買ったところ大失敗でした。

出版元の販売ページ
apress Beginning STM32 Developing with FreeRTOS, libopencm3 and GCC

  https://www.apress.com/la/book/9781484236239

02

Windows上で「Rakuten Kobo Desktop」を使って閲覧しているのですが、
PDFみたいな感覚での利用が全くできません(当然ですが)。

書籍記載のサンプルソースをエディターにコピーしたり、図(ピンレイアウト図)を印刷したり等
一切できません。これは技術書・リファレンスマニュアルとして使うにはちょっと辛い。
コピペしてグーグル翻訳が出来ないのも辛い。
kobo糞過ぎる。

スクリーンショットを取り、利用すればと思いやってみると、

表示内容が真っ黒になり画像化出来ません。

01

引用の手段として出来るのは、ディスプレイに映った内容をデジカメで撮影するくらいです。

Dscn8911

こんな面倒なことをするくらいなら、
新たにapress サイトからPDF版を買った方を購入した方がましですね。

技術書で一切の引用禁止は無茶苦茶使いにくいです。

楽天 kobo版の技術書買わない方が良さそうです。

楽天ポイントを使って割引購入したのですが、大失敗でした。

購入レビューにkoboの不満を書いたらいつの間にか、非公開にされていたので、
先ほど書き直しました。また非公開にされるかもしれません。

今回は勉強代として、apress サイトからPDF版を買いなおすかなぁ..
書籍自体は、BluePillボードをターゲットとした内容で良い感じなのですが..

2018年9月26日 (水)

豊四季Tiny BASIC for Arduino STM32 での単音演奏

豊四季Tiny BASIC for Arduino STM32 のV0.86で追加した、
PLAYコマンドで「ハレ晴レユカイ」を演奏してみました。

Dscn8878

演奏の様子


MML文で使用ているデータは「主体性の無いページ」さん公開が公開しているものを利用しました。
・主体性の無いページ(http://astr.me.land.to/
    MML(http://astr.me.land.to/tool/mabi/)
     ハレ晴レユカイ!(http://astr.me.land.to/tool/mabi/mml/hareyukai.htm)


この曲はアニメ 「涼宮ハルヒの憂鬱」のエンディング曲です。
勝手に使わせて頂き申し訳ないので、宣伝を入れておきます。
(バナーをクリックすると、各サイトにジャンプします)

Banner_sp_haruhi

Fanclub

Banner_kyoani_haruhi

Banner_kyoani_haruhimov

MML文はマビノギMMLに対応しています(ただし同時に1音しか出せません)。
MML文中の頭に"?"を付けると音を出す都度MML文を表示するようにしました。

01


豊四季Tiny BASIC for Arduino STM32では、NTSC、OLED、TFT等色々とサポートしていますが、
今回は最小構成+圧電スピーカーのシリアルコンソール画面の構成を使っています。

Serialconsole

MML文の音の大きさ指定のV(ボリューム)命令は、PWMのパルス幅の大きさで簡易的に対応しました。
引数の0~15のうち、0~5くらいは強弱が聞いて分かるのですが、
6~15は違いが判りません。まあ、おまけ機能的なものということで勘弁して下さい。


ちなみに、V0.86では、シリアルコンソール画面上で全角文字(シフトJIS)に対応しました。

02

2018年9月17日 (月)

豊四季Tiny BASIC for Arduino STM32 を更新しました

豊四季Tiny BASIC for Arduino STM32 をV0.86に更新しました。

注意:豊四季Tiny BASICのオリジナル版開発は私ではなく、鈴木氏です
オリジナル版 https://github.com/vintagechips/ttbasic_arduino
私は、オリジナル版からSTM32対応と機能拡張をしています。

V0.86の主な追加機能
・音楽演奏機能:PLAYコマンドの追加(MMLはマビノギMMLの文法をまねています)
・シリアルコンソール画面での全角文字対応(シフトJIS)
・TFT画面でのテキスト表示速度の改善(描画速度2倍、スクロール速度10倍)

V0.86からはプロジェクト管理サイトを
・Tamakichi/ttbasic_arduino_stm32
  https://github.com/Tamakichi/ttbasic_arduino_stm32

に変更しました。

01
マニュアル類は整備中です。AsciiDocを使ってリニューアル中です。
定数・コマンド関連のリファレンスマニュアル
https://tamakichi.github.io/ttbasic_arduino_stm32/manual.html

豊四季Tiny BASIC for Arduino STM32 コンパイル環境の構築
https://tamakichi.github.io/ttbasic_arduino_stm32/install.html


今回の修正ですが、
TFT(ILI9341)のフォント描画処理において、LI9341のウィンドウ機能とSTM32の
DMA転送の組合わせ技の効果が絶大で、いい感じに高速化出来ました。
DMA転送処理はオーバーヘッドが大きく、一回当たりのデータ送信量が少ないと、
効果で出ません。

通常、16ビットカラーで1文字(横6x縦8ドットx2バイト =  96バイト)を描画するにおいて、
1ライン目、2ライン目 ... 8ライン目とTFTへの転送アドレスは離散しており、
12バイト単位で8回発生します。オーバーヘッドの大きい、DMA転送において
これは効率が悪いです。

ところが、ウィンドウ機能を使って横6x縦8ドットの領域をウィンドウとして指定すると、
このウィンドウ内のドットは連続したシーケンシャルなデータ(連続したアドレス)とし
扱うことができます。

96バイトバイトを1回のDMA転送で行うことができます。
オーバヘッドが大きい処理が1回で済みます。
これは効果絶大でした。

また、TFT画面のスクロール処理や画面全体の再描画も
ウィンドウ機能を使うことで、DMA転送の一回当たりのデータ送信量を増やし、
DMA転送の回数を減らすことでオーバヘッドの大きい処理回数を減らすことで、
スクロール処理は10倍程度早くなりました。

このテクニックは、DMAを使わなくてもSPIのAPI呼び出し回数の削減にもなるので、
Arduino Unoでの高速化が期待できそうです。

2018年8月25日 (土)

中華製ST-LINKをBluePillボード専用に改造

使い勝手が悪いなぁと思っていた、この中華製ST-LINK、

Dscn8739


「そうだ、Blue Pillボード専用に加工しよう」


とのアイデアが浮かび、やってみました。

このピンヘッダ上にユニバーサル基板を乗せて変換し、左側にメスピンソケットを
取り付けて、Blue Pillボードを直結出来るようしたら便利かもというアイデアです。

01_3


当初、上記パーツをメスピンヘッダで脱着出来るように考えていたのですが、
高さがあり、直接はんだ付けすることにしました。

中略

取りあえず、完成です。
(製作に夢中になり、実物基板の写真を取り忘れてしまいました^^; )

Dscn8741

ショート防止に熱収縮チューブ、布テープを装着しました。
こんな感じで、直結出来ます。

Dscn8742

パソコンに接続し、STM32 ST-LINK Utilityにて問題なく接続出来ました。

Dscn8743

接続した様子

02

これは、結構便利で良さそうです。
ジャンパワイヤの接続は意外と面倒でしたが、ちょっと楽になりました。

2018年8月20日 (月)

Arduino STM32のUSB HIDインタフェースの新しいブートローダー (2)

記事「Arduino STM32のUSB HIDインタフェースの新しいブートローダー」を書いた時点では
Arduino IDEのメニューにてHIDブートローダ経由書き込み指定が出来なかったのですが、
先日の更新後のArduino STM32パッケージをインストールして確認したところ、
メニューに組み込まれていました。

そこで、実際にHID経由でのスケッチ書き込みを試してみました。

09_2


試してみたボード
  ・Blue Pillボード(写真 左)
  ・Bkack Pillボード(写真 中)
  ・RobotDym Blue Pill互換ボード(写真 右)

  Dscn8723

まずはHID用のブートローダを書き込む必要があります。
HID用ブートローダは、本来は下記のサイトが公式サイトになるのですが、
rogerclarkmelbourne/STM32_HID_Bootloader
まだ、Blue Pill用のものしか置いていないようです。若干古い可能性があります。

当面は、オリジナル版開発者の下記のサイトから入手した方が良さそうです。
https://github.com/Serasidis/STM32_HID_Bootloader

ダウンロードして解凍します。
HIDブートローダは、
  STM32_HID_Bootloader\bootloader_F1\bootloader_only_binaries\の中のファイルを利用します。

  ・Blue Pillボード、RobotDym Blue Pill互換ボード
    hid_generic_pc13.bin を利用
  ・Bkack Pillボード
    hid_generic_pb12.bin を利用

ST-Linkを使ってHIDブートローダを書き込みます。

  Dscn8724

ツールは、ST-LINK Utilityを使いました。   

  14

  HIDブートローダのファイルをロードして書き込みます。
  15


  書き込み後、パソコンにUSB経由で接続します。 
  この時、ボードマイコン(ここではBlue Pill)のBOOT1を1に設定してから、
  パソコンに接続します。  LEDが激しく点滅します。
  (この手順が分からす、なかなか書込み出来ませんでた。試行錯誤のため、
    手順としては間違っている可能性があります。)


  Dscn8725

  つなげると、パソコン(Windows 10)でSTM32F HID Bootlooader が認識されました。
  10

デバイスを調べてみると、次のような感じで登録されています。

11

試しに、Lチカスケッチを書き込んでみます。

17

問題無く書き込めました。
マイコンボードのBOOT1を0側にして、リセットボタンを押します。
これで、書き込んだスケッチが実行されます。

再度スケッチを書き込むには、 マイコンボードのUSB接続を抜き、
BOOT1を1にして、パソコンに接続します。
なぜか、USBの接続を一旦抜いてからでないとダメでした。
このあたりは、ちょっと面倒です。
もしたら、手順として間違っている可能性があるため、もう少し試してみます。

HIDブートローダのメリットとしては、
ブートローダが8Kバイトから4Kバイトに小さくなり、利用出来るフラッシュメモリの領域が
4kバイト増えた点と、ドライバーのインストールが不要な点です。

手順(もし、今回のやり方が正しいとすれば)的には、HIDブートローダ経由は、
BOOTピンの設定変更とボートの抜き差しがちょっと面倒です。

USBはCDC(シリアル通信)としても使うので、
HIDブートローダを有効にするために、BOOT1の設定が必要みたいです。

現時点では、HIDブートローダの書込みはWindowsしか対応していないようです。

関連記事
Arduino STM32のUSB HIDインタフェースの新しいブートローダー

より以前の記事一覧