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

2019年6月の6件の記事

2019年6月27日 (木)

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

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正中です。
前回から、さらにNeoPixcelを制御するコマンドを追加しました。

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

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

02_20190627200601

NeoPixel的には1個のLEDあたり、24ビット色なのですが、今回は、メモリ制約等を考慮して、8ビット色としました。
また制御できるLEDは最大で64個までとしました。

NeoPixelのリボン・スティック形状(ストレート)、リング形状、8x8ドットマトリックス形状に対応しました。

追加コマンド(×は未実装、いずれ対応する予定)
 補足: コマンドの更新flgは、デフォルト値が1、0を指定した場合はバッファへの書き込みのみで、表示に反映しません。
         NUPDATEで、バッファ内容を表示に反映出来ます。

■ 初期設定
   NINIT バッファアドレス,ピクセル数
   バッファアドレスには、仮想アドレスを指定します。1ピクセルあたり1バイト必要です。

■ 輝度設定
   NBRIGHT 輝度
   輝度は0(低)~5(高)の範囲で指定します。

■ 表示クリア
   NCLS [更新flg]

■ 指定LEDの色設定
   NSET 番号,色[,更新flg]
   番号はLEDのピクセル番号(0~)、色は0~255(RGB関数を使うと便利)

■ 8x8マトリックスの指定位置にピクセル設定
   NPSET X,Y,色[,更新flg]

■ 8x8マトリックスにメッセージ文表示
   NMSG 色,速度,メッセージ文
   速度はスクロール時のウェイト時間(ミリ秒単位)

■ 8x8マトリックスを指定方向に1ピクセルスクロール
   NSCROLL 方向[,更新flg]

■ 8x8マトリックス ライン描画
   NLINE X1,Y1,X2,Y2,色[,モード] [,更新flg]
   モードは、0:直線(デフォルト)、1:矩形、2:矩形塗りつぶし

■ バッファ表示反映
  NUPDATE

■ LEDの表示をシフト
   NSHIFT 方向[,更新flg]
   LEDの表示を1つずらします。
   先頭のLEDの色は最後尾のLEDに設定されます。ループとなります。

■ 8ビット色コード取得
  RGB(赤,青,緑)

■ 8x8マトリックス 指定座標色コード取得
  NPOINT(X,Y)

結線


NeoPixel


Arduino


1 VDD


5V


2 DOUT


(未接続)


3 VSS(GND)


GND


4 DIN


MOSI(11ピン)



NeoPixelを制御するプログラムの例

01_20190627201201

動いている様子

色々とメッセージを表示してみたのですが、
やはり、文字が足りません。漢字はもう少し選定を見直す必要があります。

まだまだ、色々とと見直し中です。
う~ん、メモリが足りず中々厄介です。


追記 2019/06/28

1メートル 30個LED搭載テープ(リボン)を制御してみました。

Dscn1862

プログラムで2点(赤と青)を往復運動させています。



プログラムはこんな感じです。


10 NINIT MEM,30
20 NBRIGHT 5
30 NCLS
40 NSET 0,RGB(0,0,3)
50 NSET 1,RGB(7,0,0)
60 N=0:D=0
70 NSHIFT D
80 N=N+1
90 IF N=28 N=0:IF D=0 D=1 ELSE D=0
100 WAIT 30
110 GOTO 70

10行で、NeoPixel用のメモリ領域として、仮想アドレスMEMから30個分30バイトを確保しています。
20行で、輝度を最大の5にしています。
30行で、念のためすべての表示をクリア
40行、50行で0番目、1番目のLEDに青、赤の色を設定して表示しています。
60行のNはNSHIFTコマンドの実行回数のカウント用、DはNSHIFTの方向引数です。
70行のNSHIFT Dは、LEDの表示を前または後ろに1つ分移動します。
80行で移動数をカウント、
90行で方向転換するための判定と、方向Dの値を逆方向に設定しています。
100行はウェイト
110行は70行にジャンプして繰り返し表示

プログラム次第で色々と面白い動き、表示が出来ると思います。

追記 2019/06/29 

1メートル 30個LED搭載テープ(リボン)制御のその2です。
全LEDを一括更新する例として、全LEDを0.5秒間隔で赤、緑、青と変化させています。

Dscn1864

動いている様子



プログラムはこんな感じです。


10 NINIT MEM,30:NBRIGHT 3
20 NCLS
30 @(0)=RGB(7,0,0),RGB(0,7,0),RGB(0,0,3)
40 C=0
50 FOR I=0 TO 29
60 NSET I,@(C),0
70 NEXT I
80 NUPDATE
90 C=C+1:IF C=3 C=0
100 WAIT 500
110 GOTO 50

50行~70行で全LEDの色を設定しています。
60行のNSET I,@(C),0 で各LEDの色の設定をしているのですが、
3番目の引数の0を指定することで、バッファのみの書き込みとなります。
80行のNUPDATEで一括してバッファの内容をNeoPixelに反映させています。

60行は、次の処理と等価です。
 POKE MEM+I,@(C)
10行のNINITで指定したアドレスのデータに直接値を設定して、
NUPDATEで表示に反映させることも出来ます。


上記に、輝度制御を追加したバージョン



プログラムはこんな感じです。


10 NINIT MEM,30:NBRIGHT 0
20 NCLS
30 @(0)=RGB(7,0,0),RGB(0,7,0),RGB(0,0,3)
40 C=0
50 FOR I=0 TO 29
60 NSET I,@(C),0
70 NEXT I
80 NUPDATE
90 C=C+1:IF C=3 C=0
100 WAIT 200
110 FOR I=1 TO 5:NBRIGHT I:NUPDATE:WAIT 200:NEXT I
120 NBRIGHT 0:NUPDATE
130 GOTO 50

110行~120行で輝度を変化させる処理を行っています。
NBRIGHTコマンドで輝度を指定します。表示への反映はNUPDATEの実行します。

NBRIGHTコマンドはちょっと見直そうと思います。
 ・NUPDATEを呼び出さずに、表示に反映
 ・輝度を-3 ~ 5 として、マイナス値で減光出来るようにする

2019年6月24日 (月)

Casio MX-10を入手しました

ヤフオクでCasio MX-10を入手しました。
落札価格は、本体のみ 1,500円です。

Dscn1847

小さいと思っていた、PV-7よりも更に小さいです。軽いです。
MSXの中では、最小・最軽量のマシンではないでしょうか。

当初、キーボードは強く押さないと入力出来ない状態だったのですが、
分解して掃除したところ、問題無く利用できる状態になりました。
状態も良い方だと思います。

Dscn1849

PV-7と異なり、メインRAMは16kバイトあります。
「グラディウス2」もSCC音源が問題無く演奏できています。

Dscn1852

ゲームをプレイするには、もってこいのマシンですね。

電源は、PV-7用に入手したファミコン用DC 10Vを一時的に利用しました。
MX-10の仕様ではDC 7Vなのですが、中の三端子レギュレータとアルミ放熱版から
DC 10Vで、短い時間なら問題ないだろうと思い一時しのぎで使いました。
中身の三端子レギュレータは、スイッチング方式のものに置き換えようと思います。





2019年6月13日 (木)

Arduino Web Editorを試してみる

ブラウザ上でArduinoのスケッチの開発が出来る、「Arduino Web Editor」を試してみました。
クラウド形式の開発環境です。

以前よりもかなり使えるようになっていました。
Arduino.ccが適用している「Arduino Create」というサービスの中にあります。

利用には、アカウントの登録が必要ですが無料(100Mバイトまで)で利用出来ます。

01_11

エディタの使い勝手は、Arduino IDEとほぼ同じ感覚で利用出来ます。
ブラウザにプラグインをインストールすることで、Arduinoへのスケッチ書き込みも可能です。

試しに、やろうと思っていたNeopixelのライブラリ作成をブラウザ上でやってみました。

02_7

書き込みも問題なく出来ました。
中々使い勝手も良いです。

03_3

スケッチは、共有したりブログに埋め込むことができます。


このNeopixelのライブラリは、
豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)
に組み込む予定です。


2019年6月11日 (火)

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

先日の豊四季タイニー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


コマンドとしては、次の関数を追加しました。
 ・GETFONT(フォント格納アドレス、シフトJISコード)

次のような感じで、指定した文字のフォントデータを取得することが出来ます。

01_10

これで、LEDマトリックス等にメッセージ表示が出来ると思います。
ただし、Arduinoのフラッシュメモリ的に厳しくて、フォントデータは500文字分に絞っています。
(美咲フォントの組み込みは5kバイト程、フラッシュメモリを消費します)

500文字の内訳は非漢字が287文字、漢字213文字です。
500文字は次の通りです。

02_6   
 
漢字は、新聞などでの利用頻度の多い上位250字を見て文字を採用しましたが、
なんとなく偏っている気がします。漢字はもう少し調整しようと思います。

2019年6月 8日 (土)

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

豊四季タイニー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

主な修正点(予定含む)
・冗長部等の見直しによるプログラムサイズのダイエット(ほぼ済)
・MML処理の見直し、不具合対応(済)
・プログラムソースを機能別にファイル分割(済)
・NEXT文で変数名を省略可能にする(済)
・配列変数の領域増量(済)
・美咲フォント(400文字程度版)の組み込み(未)
・Neopixel対応(未)
・4連LEDマトリックス対応(未)
・HD44780コントローラ(互換品含む)キャラクタ液晶対応(未)
・イベント処理(タイマーイベント、外部割込み、エラー発生)(未)

フラッシュメモリ、SRAMの容量的に用途によって機能を選択する形式でのサポートになります。

現時点で、コア部分(すべての追加機能をオフ)のスケッチが22628バイトです。
残りの10kバイトで美咲フォント+Neopixel or 4連LEDマトリックス で
メッセージ表示なんかをBASIC言語で制御できるのではないかと思い、調整中です。


2019年6月 1日 (土)

Arduino STM32でキャラクタ液晶ディスプレイを使う

現在ちびちびと Arduino STM32 リファレンス 日本語版 を整備しているにですが、
今回、標準ライブラリの LiquidCrystalライブラリの部分を追記しました。

このライブラリはHD44780コントローラ(互換品含む)を使った
キャラクタ液晶ディスプレイ用のライブラリです。

動作確認として、実際にBluePillボードで制御してみました。

02_5  

利用したキャラクタ液晶ディスプレイ
1602A-V2aitendoでも販売されています)
   表示文字数 16桁×2行 、バックライト付きSTN液晶ディスプレイ
   Aliexpressでは、2ドル以下で購入出来ます。

久しぶりに、パラレル接続のキャラクタ液晶ディスプレイを使いました。
色々と忘れていて、コントラスト調整に戸惑ってしまいました。

今回はとりあえず、4ビットモードで利用しました。
動作電源が5Vのため、BluePillボードの5Vで利用可能なピンを利用しました。
下記がその結線です。

結線表

1602A-V2端子 接続先 備考
VSS BluePill - GND  
VDD BluePill - 5V  
V0 20kΩ半固定抵抗(GND接続) コントラスト調整用
RS BluePill - PA8 5Vトレラントピン利用
RW BluePill - GND LOW(GND)でWモード固定
E BluePill - PA9 5Vトレラントピン利用
D0 (未接続)  
D1 (未接続)  
D2 (未接続)  
D3 (未接続)  
D4 BluePill - PB6 5Vトレラントピン利用
D5 BluePill - PB7 5Vトレラントピン利用
D6 BluePill - PB8 5Vトレラントピン利用
D7 BluePill - PB9 5Vトレラントピン利用
A BluePill - 5V バックライトLED用
K BluePill - GND バックライトLED用


動作確認に利用したスケッチ

#include <LiquidCrystal.h>
#define LCD_RS  PA8
#define LCD_E   PA9
#define LCD_D4  PB6
#define LCD_D5  PB7
#define LCD_D6  PB8
#define LCD_D7  PB9
uint8_t font[]= {
  0b00001010,
  0b00001110,
  0b00011111,
  0b00010101,
  0b00011111,
  0b00011111,
  0b00001110,
 0b00000000,
};
LiquidCrystal lcd(LCD_RS,LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
void setup() {
  lcd.begin(16, 2);
  lcd.createChar(1,font);
  lcd.clear();
  lcd.cursor();
  lcd.blink();
  lcd.setCursor(0, 0);
  lcd.print("Hello, world!");
  lcd.setCursor(0, 1);
  lcd.print("\xc8\xba\x20\xc6\x20\xba\xdd\xca\xde\xdd\xdc\x01");
}
void loop() { }

スケッチは、LiquidCrystalクラスのインスタンス lcd をピン割り付けを指定して生成し、
begin()にて利用開始します。

4ビットモードだと結線数も少なく、割と簡単に制御出来ます。

LiquidCrystalライブラリ は、Printクラスの派生クラスのため、
Serialオブジェクトのような感じで、print()関数が利用出来ます。
数値等の出力も簡単に出来ます。

写真の 「ネコ ニ ホンバンワ」の半角カタカナ表示の部分は、
Arduino IDE環境の文字コードUTF-8コードのため、文字列をそのまま記述することはできません。
UTF-8で半角カタカナ1文字は、3バイトに置き換えられてしまい文字化けします。
ですので、文字コードを16進数表記で記述しています。

また、猫っぽいアイコンは、CGRAM領域にフォントデータを登録して表示しています。
CGRAM領域には、最大8文字(5x8ドット)登録することが出来ます。
lcd.createChar(1,font)にてその登録を行っています。
登録した文字は文字コード0~7にて指定出来ます。
(ただし、文字コード0は文字列終端子と被るのでwrite()で書く必要あり)

登録するフォントデータは8バイトですが、横5ドットは下位5ビットにて定義します。
縦は実際は7ドットのため、最後の8列目は0を設定します。

参考文献
 ・Adafruit Explore & Learn - Wiring a Character LCD
 ・HD44780U (LCD-II)

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