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

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

コマンドとしては、次の関数を追加しました。
 ・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

主な修正点(予定含む)
・冗長部等の見直しによるプログラムサイズのダイエット(ほぼ済)
・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月29日 (水)

Arduino STM32のWS2812Bライブラリ(NeoPixel制御ライブラリ) その1

Arduino STM32には、WS2812Bライブラリ(NeoPixel制御ライブラリ)が、
標準で(最初から)用意されています。

このライブラリを使いたいと思い、ドキュメントが無いので
プログラムソースから日本語ドキュメントを作成しました。

Arduino STM32 リファレンス 日本語版
 ┗  WS2812Bライブラリ(NeoPixel制御ライブラリ)

ドキュメントを作成し、ライブラリの仕様を理解した上で
さっそく、BluePillボードで動作確認してみました。

ダメです。このライブラリ、まともに動作しません。
LEDが全く点灯出来ません。
色々とソースを修正して現時点で、やっとLED点灯するももの、
意図したとおりに制御出来ません。

01_8

このライブラリはSPIを使ってパルスを生成しています。
システムクロック72MHzを1/32に分周した2.25MHzのパルス幅 0.444μSを使っています。
  パルス幅 0.444μSは許容範囲、
  1ビットのデータは3パルス幅、
  1つのLEDのRGBデータが24ビット、
  1つのLEDは3×24=72パルス、
   SPIは8パルス(8ビット)なので9バイト分、

これなら1個のLED単位でなんとか制御出来そうなのですが、リセット信号のがマズいようです。
ソースを見た限り、リセット信号の送信がされていないみたいなのですが..

更新
1ビット分の3パルスが0.444μS×3= 1.332 μS、
1.25 μS を超えているのがマズいようです。仕様では±0.6μSは許容範囲なのですが駄目っぽい。
24ビット分のデータの前半と後半部分がちゃんと受信されていないようです。
データはGRB(緑、赤、青)の順番で送信するのですが、
1点ルーレット表示は赤しかちゃんと点灯しません。

現在、ライブラリ修正中です。

«ココログのリニューアル後の不具合、2ヶ月経っても改善されず...