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

表示器制御関連

2019年1月 7日 (月)

Aliexpressで入手した「タッチスイッチボタン」の動作確認

Aliexpressで面白そうなタッチスイッチボタンを見つけたので入手し、試してみました。

購入した商品のサイト

    Capacitive Touch Switch Button RGB LED Sensor Switch Module

    01_2

到着した製品
 
   とりあえず、4個 (青、緑、赤、黄)を購入しました。

   02

  裏側

   03_2

  作り具合は、意外と良さそうです。はんだ付けも問題なしです。


動作確認

  まずは、掲載されている商品情報にて仕様を確認します。   

     商品購入サイト掲載情報

  04_2

    完全に勘違いしていました。

    単なるタッチセンサー的に使うモジュールかと思いきや、
    3.3V定電圧レギュレータ搭載のようです。しかも500mA流せるようです。

    単体のみで独立したスイッチとして利用出来るようです。
    安価な3.3V電源レギュレータとしても利用出来ますね。

    確認として、このモジュールのVCCGNDにUSBケーブルにて5V電源を供給し、
    OUTピンでLEDの点灯制御を行ってみました。

  ブレットボードでの実装
 
   05_2

  動いている様子

   

  問題なく動作しました。
  タッチにて、OUTピンのオン・オフの制御を行うことが出来ました。

  タッチする度にOUTの状態が切り替わります。
  状態を保持するトグルスイッチ的な用途に使えそうです。
 
  ただし、機械的なスイッチと違ってオフの時もタッチセンサー部分の稼働のために
  電力を消費します。測定してみると、0.66mAでした。

  06_2

  次に、タッチパネル部の発光時に流れる電流を測定しました。
  (OUTピンのLEDは外しています)
  7.5mA(タッチセンサー分も含む)でした。

  07_2

  思っていたほど消費量は少ないですが、
  電池駆動でのスイッチとしての利用は避けた方が良さそうです。

2018年12月22日 (土)

Aliexpressの安価なキャラクタ液晶モジュールの動作確認

Aliexpressで安価なキャラクタ液晶モジュールを見つけ、購入しました。

1602 16x2 HD44780 for Arduino Character LCD /w IIC/I2C Serial Interface Adapter Module DIY KIT

01

16文字 x 2行 のパラレル接続の液晶モジュールと I2C変換モジュールがセットで$2.17です。

到着した製品

梱包も中身も特に問題なし。

Dscn9168

Dscn9169

基板の刻印や、乗っているICを調べてみると、それぞれのモジュールは、
・フィリップス社製PCF8574(8-bit I/O expander for I2C-bus)搭載モジュール
・1602A(16x2 コントローラHD44780)
のようです。

aitendoで販売されている、下記の製品とまったく同じもののようです。
液晶I/Fモジュール(I2C) [IFB-I2C-8574]   
STNキャラクタ液晶(16x2) [1602A-V2] の青色(1602A-V2-B)バージョン

説明書が無いのですが、裏側にはんだ付けするだけで良いようです。

Dscn9171

左側の4つの端子(I2C、GND、5V)だけで制御出来ます。
可変抵抗でLEDバックライトの調整が出来るようです。

早速、はんだ付けしてArduinoに接続して動作確認してみました。

Dscn9189

手持ちのデジカメでは、今一ちゃんと撮れていませんが、
見た目は写真よりも文字がくっきり表示出来き、視野角も広いです。

Dscn9185

動作確認には、下記のライブラリを利用しました。

利用ライブラリ
・LiquidCrystal_I2C
  https://github.com/johnrickman/LiquidCrystal_I2C

動作確認スケッチ

ライブラリに添付のサンプルプログラムのHelloWorldを少々修正しただけです。
(4行表示するメッセージを2行表示に修正)

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup() {
  lcd.init();                        // initialize the lcd 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print(" Hello, world!");
  lcd.setCursor(0,1);
  lcd.print(" LCD 1602A(I2C)");
}  


void loop() {

}

安くてお手軽に使えて良い製品です。
このモジュールは、MSX用のテープ・ドライバ CASDuinoを製作に使う予定です。

2018年11月20日 (火)

RobotDyn STM32 Miniボード(Blue Pill互換)でJPEG画像表示

RobotDyn STM32 Miniボード(Blue Pill互換)でJPEG画像の表示をやってみました。
(BluePillより面積が狭いので、ブレッドボードで多線が出来ます)

グラフィック液晶モジュール は、
ILI9341搭載(SPI接続)+ SDカードスロット付きのものを利用しました。

Dscn9014

グラフィック液晶モジュールのスロットに刺したSDカードに
320x240ドット JPEG形式のフルカラー画像を配置し、それを表示しています。
開発環境はArduino STM32を利用しています。

JPEG表示は、Arduino UNOではSRAMの容量的に無理(バッファに2kバイト必要)ですが、

Blue Pillでは比較的簡単に表示出来ました。

動いている様子

これくらいの、速度で表示出来ればOKでしょう。

構成

03
※クリックすると拡大表示します

結線表
04
利用したテスト画像(test1.jpg)

Test1


スケッチは下記のサイトのESP8266用のJPEG画像表示スケッチを
参考にしました。

参考にしたサイト
・楽しくやろう。 ESP8266でJPEG画像をTFT LCDに表示する
   https://blog.boochow.com/article/427690966.html


利用ライブラリ

・JPEGデコーダーライブラリ
   MakotoKurauchi/JPEGDecoder
 https://github.com/MakotoKurauchi/JPEGDecoder
 
   ※fdfat対応にJPEGDecoder.cppの一部を修正しています。

   修正
    ・
#include <SD.h> を #include <SdFat.h> に変更
   
・ その下に
       extern SdFat SD;
      を追加

スケッチ
(こちらからも参照出来ます Tamakichi/stm32_jpeg_tft.ino)

//
// Arduino STM32 TFT(ILI9341) SPI接続 jpeg画像表示サンプル
//
// 参考にしたサイト
//  元にしたスケッチ
//  ・楽しくやろう。 ESP8266でJPEG画像をTFT LCDに表示する
//    https://blog.boochow.com/article/427690966.html
//  ライブラリ
//  ・MakotoKurauchi/JPEGDecoder
//    https://github.com/MakotoKurauchi/JPEGDecoder
//  Jpegに関する情報
//  ・JPEG/MCU
//    https://monobook.org/wiki/JPEG/MCU
//

#include <SPI.h>
#include <Adafruit_GFX_AS.h>
#include <Adafruit_ILI9341_STM.h>
#include <SdFat.h>
#include <JPEGDecoder.h>

// SDカード(SPI2利用)
#if ENABLE_EXTENDED_TRANSFER_CLASS == 1
  SdFatEX  SD(2);
#else
  SdFat  SD(2);  
#endif

#define SPI_SPEED SD_SCK_MHZ(36) // バスクロック
#define SD_CS PB0                // SDカード選択

// TFT制御用ピン (SPI1利用)
#define TFT_CS  PA0
#define TFT_RST PA1
#define TFT_DC  PA2

// TFT制御用オブジェクト
Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  Serial.begin(115200);
  delay(200);
  
  if (!SD.begin(SD_CS,SPI_SPEED)) {
    Serial.println("failed!");
  }
 
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLUE);
  Serial.println("OK!");

  jpegDraw("/test1.jpg"); // 320x240ドットフルカラー画像の表示
}

void jpegDraw(char* filename) {
 char str[100];
 uint8_t *pImg;
 int x,y,bx,by;
 
 // Decoding start
 JpegDec.decode(filename,0);
 uint16_t buf[JpegDec.MCUWidth*JpegDec.MCUHeight];
 uint16_t pos = 0;

 // Image Information
 Serial.print("Width     :");
 Serial.println(JpegDec.width);
 Serial.print("Height    :");
 Serial.println(JpegDec.height);
 Serial.print("Components:");
 Serial.println(JpegDec.comps);
 Serial.print("MCU / row :");
 Serial.println(JpegDec.MCUSPerRow);
 Serial.print("MCU / col :");
 Serial.println(JpegDec.MCUSPerCol);
 Serial.print("Scan type :");
 Serial.println(JpegDec.scanType);
 Serial.print("MCU width :");
 Serial.println(JpegDec.MCUWidth);
 Serial.print("MCU height:");
 Serial.println(JpegDec.MCUHeight);
 Serial.println("");
 
 sprintf(str,"#SIZE,%d,%d",JpegDec.width,JpegDec.height);
 Serial.println(str);

  // Raw Image Data
  while( JpegDec.read() ){    // MCU毎の描画処理
    pImg = JpegDec.pImage ;   // MCUブロックの先頭アドレス
    pos = 0;                   // バッファ位置初期化
    
    // MCUブロック描画ウィンドウの設定
    tft.setAddrWindow(JpegDec.MCUx * JpegDec.MCUWidth,
                      JpegDec.MCUy * JpegDec.MCUHeight,
                      JpegDec.MCUx * JpegDec.MCUWidth+JpegDec.MCUWidth-1,
                      JpegDec.MCUy * JpegDec.MCUHeight+JpegDec.MCUHeight-1);
 
    // ウィンドウ領域へのデータ転送
    for( by = 0; by < JpegDec.MCUHeight; by++)
      for( bx = 0; bx < JpegDec.MCUWidth; bx++, pImg += JpegDec.comps, pos++)
        buf[pos] = (JpegDec.comps == 1) ? 
         tft.color565(pImg[0], pImg[0], pImg[0]) : tft.color565(pImg[0], pImg[1], pImg[2]);
    tft.pushColors(buf, JpegDec.MCUWidth*JpegDec.MCUHeight, 0); 
  }
}
   
void loop() {
}

スケッチは高速化優先で、MCU内の端数画像には考慮していません。

SDカード利用のためのライブラリは、SdFatを利用しています。
SDカードアクセルのパフォーマンス改善のために、SdFatConfig.hの設定を修正しています。

変更
#define ENABLE_EXTENDED_TRANSFER_CLASS 1

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年9月25日 (火)

3Dプリンターでの試行錯誤 その2

3Dプリンタ利用の練習として、
以前製作した下の写真 「I2C接続 16x8ドット LEDマトリックス」のケースを製作してみました。

Dscn4264_2

Dscn4266_2

3D図形の作成はTinkercadにて行いました。
形状は単純なので、割と簡単に作成出来ました。

03

ここで、寸法は実際の寸法よりも、縦横0.4mmほど大きくしています。
試行錯誤の結果、ノズル幅分の約0.4mm小さくなることが分かり、その調整をしています。

データを、STL形式でエクスポートして3Dプリンタに読み込ませて出力開始、
1時間ほどで出力出来ました。

Dscn8857

寸法はドンピシャ、ジャストフィットで収まりました。
いい感じにできました。

Dscn8864

とりあえずIchigoJamで動作、問題無く動作しました。
基板剥き出しから一転して、ちょっとおしゃれな感じになりました。

Dscn8877

動作はこんな感じです。



3Dプリンタ、色々と活用出来そうです。

2018年8月 6日 (月)

アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (3)

前回のアクティブマトリクス蛍光表示管の実験用表示モジュールの改訂版、
MW25616L実験表示モジュールver.2の利用の続きです。

改訂版では、I2C接続用端子が新たに追加さました。

01 03

下からGNDVCCA4(SDA)A5(SCL)D2が割り付けられており、
付属のRTCモジュール(DS3231利用)が直接接続出来ます。

02

前回に引き続き、豊四季タイニーBASIC for Arduino機能拡張版(以降豊四季Tiny BASIC拡張版と略称)にて
動作確認をしてみます。

DATEコマンドで時刻を参照すると、当然正しく無いですが参照できました。

01_2

SETDATEコマンドで正しい時刻を設定します。

02_2


次に、下記のプログラムにてVFDに時刻を表示してみます。
10 VCLS:VBRIGHT 100
20 GETTIME H,M,S
30 VMSG 0,#-2;"現在の時刻は";H;"時";M;"分";S;"秒です"
40 WAIT 1000
50 VSCROLL 256,-1
60 GOTO 20

動かして見ると、表示内容を更新する毎にノイズが乗るような感じで乱れたりします。

04

05

旧バージョンでも試してみましたが、同様の現象が発生しました。
う~ん、BASICインタプリタのバグか?

雰囲気的に「データ転送時のデータ化け」っぽく、
調査していくと、VFDふぁんさんが公開しているサンプルソースのコメントに
ヒントがありました。

どうも、輝度設定(VBRIGHTコマンド)に影響するようです。
輝度を最大輝度の設定(VBRIGHT 255)にすると正常に表示出来ました。

VFDの輝度はディスプレイイネーブル(EN)をPWMを使ってオン・オフ(表示のオンオフ)して
調整しているのですが、これがスイッチングノイズを発生させて影響を及ぼすようです。

VFDの供給元のノリタケの技術サポート公開資料の
「アクティブマトリクス型CL-VFD アプリケーションノート - インターフェースインターフェースについて」

  スイッチングノイズによる誤動作(データ誤取込)を防止するため、
  データ書き込み中はENをH→L、あるいはL→Hに変えないでください。

との記載がありました。

ということで、データ転送中は輝度設定を255(最大輝度)にしなければならないことが
分かりました。利用の際の制約事項ですね。以後気を付けることにします。


問題解決後の実際の動作の様子




プログラムの自動起動の設定

利用の都度、プログラムをRUNコマンドで実行させるのはちょっと面倒です。
電源ON後、時刻表示プログラムをロードして実行するようにしたいですね。

豊四季Tiny BASIC拡張版には保存したプログラムを電源ON時に自動起動する機能があります。
デフォルトでは、自動起動判定用ピンD7HIGHの場合、内部EEPROMに保存されているプログラムを実行します。

RTCモジュール端子のD2RTCモジュールSQW(割り込み通知用の入力)用ですが、
この信号はアクティブLOWなので、RTCモジュールを接続した状態で起動すると
D2は常にHIGHとなります。これは利用出来ますね。

D2を、豊四季Tiny BASIC拡張版の自動起動判定用ピンに利用し、
RTCモジュールが接続されていれば、電源ON時はD2HIGHなので自動起動出来ます。

そこで、スケッチのttconfig.hAutoPinの設定を7から2に変更して書き込みます。

08

書き込み後、現在時刻表示プログラムをコピペしてSAVEコマンドで保存します。
VBRIGHT 255の修正は忘れずに)

09_2

ダイソーの300円 モバイルバッテリーをつなげて動かしてみました。

06

保存してプログラムが自動起動して、時刻を表示してくれました。
いい感じで動いてくれました。
単体で動作出来るのは良いですね。

07

折角ここまで来たので、何か実用的なものを作ってみましょう。
次に、I2C接続の湿度・温度センサーもつなげて時刻・湿度・温度を表示出来るように
したいと思います。


2018年8月 5日 (日)

Arduino STM32用のTV出力ライブラリを更新しました

Arduino STM32用のTV出力ライブラリを更新しました。

01

更新したライブラリ
  ・Arduino STM32 TVoutライブラリ
   https://github.com/Tamakichi/ArduinoSTM32_TVout

   修正内容
     ・横解像度448ドット指定時、ビット・バンディングを使ったドット描画位置がずれる
       不具合の対応を行いました。
       これによりdraw系の関数の描画不具合を解消しました。

      ・draw_rect()、draw_circle()の塗りつぶし指定時に塗りつぶし正しく行えない不具合
       の対応を行いました。

      ・adjust()関数に映像の横表示開始位置補正、縦表示開始位置補正を行うための
       引数を追加し、映像表示位置の調整を行えるようにしました。

  ・Arduino STM32 NTSCビデオ出力ラブラリ
   https://github.com/Tamakichi/ArduinoSTM32_TNTSC

   修正内容
      ・adjust()関数に映像の横表示開始位置補正、縦表示開始位置補正を行うための
       引数を追加し、映像位置の調整を行えるようにしました。

   ※ NTSCビデオ出力ラブラリは、TVoutライブラリの下位レイアのライブラリです。
       NTSCビデオ出力のみを行います。
       TVoutライブラリは、描画等のAPIを提供するライブラリです。

   
従来は利用するモニターによっては、表示する映像が上や左に寄り過ぎて欠けたり
した場合、どうすることも出来なかったのですが、今回の修正で補正を行えるようにしました。

こんな感じで、右側が欠けてしまった場合、

02

関数 adjust(0,8,0) にて、映像を左にずらすことが出来ます。

03

さて、Arduino STM32 TVoutライブラリは、ArduinoのTVoutの描画処理を
ベースにしているのですが、オリジナル版に不具合があり、意外とハマりました。

使い勝手も今一よろしく無いので、ライブラリを2つに分けていたり利点を生かし、
Adafruit_GFXを利用したバージョンを別途用意してそちらを利用しようと考えています。



2018年7月28日 (土)

アクティブマトリクス蛍光表示管の実験用表示モジュールver.2の動作確認

VFDふぁんさんより、アクティブマトリクス蛍光表示管の実験用表示モジュール
改訂版 MW25616L実験表示モジュールver.2(VF1711) を頂きました。

最近、電子工作のモチベーションが下降気味でしたが、一気にテンションが上がりました!
VFDふぁんさん、ありがとうございます。

こんな感じのモジュールです。

MW25616L_1

初版からは、いくつか改良が施されているようですが、
変更点については、おって確認したいと思います。

MW25616L_2

改訂版は基板の上下にアクリル版が標準装備になったみたいです。
これは有難いです。ショートの防止になります。

実は、初版の利用において、私の不注意で基板の裏に何かが接触してショートし、
破損させてしまいました(その後、VFDふぁんさんに修理して頂き、再稼働出来ました)。

早速、電源を入れてみるとデモスケッチが動きました。

MW25616L_3

コントラスト・輝度が強くで、私のデジカメでは絞らないと綺麗に撮影出来ませんでした。
表示は鮮明で読みやすいです。

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)を動かす

早速、「豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)」
動作確認をしてます。

折角なので、利用出来るまでの手順を復習がてらまとめてみました。

まずは、スケッチの書込みを行います。
プロジェクトの一式を、下記からダウンロードして解凍します。
   ・ttbasic_MW25616L-master.zip

解凍すると次のファイルが得られます。

02

次に、Arduino IDEを起動して上記のフォルダtbasic 内のttbasic.inoを開きます。

03

デフォルトの設定では、アクティブマトリクス蛍光表示管の利用が出来ません。

ttconfig.hの設定の一部を下記のように変更(赤字の項目)します。
// ** 機能利用オプション設定 *************************************************
#define USE_CMD_PLAY   1  // PLAYコマンドの利用(0:利用しない 1:利用する デフォルト:1)
#define USE_CMD_I2C    1  // I2Cコマンドの利用(0:利用しない 1:利用する デフォルト:1)
#define USE_CMD_VFD    1  // VFDモジュールコマンドの利用(0:利用しない 1:利用する デフォルト:0)
#define USE_RTC_DS3231 1  // I2C接続RTC DS3231の利用(0:利用しない 1:利用する デフォルト:1)
#define USE_I2CEEPROM  1  // I2C EEPROM対応(0:利用しない 1:利用する デフォルト:1)
#define USE_SYSINFO    0  // SYSINFOコマンド(0:利用しない 1:利用する デフォルト:0)
#define USE_GRADE      0  // GRADE関数(0:利用しない 1:利用する デフォルト:1)
#define USE_DMP        0  // DMP$関数(0:利用しない 1:利用する デフォルト:1)
#define USE_IR         0  // IR関数(0:利用しない 1:利用する デフォルト:1)
#define USE_ANADEF     1  // アナログピン定数A0~A7orA15(0:利用しない 1:利用する デフォルト:1)
#define USE_SO1602AWWB 0  // 有機ELキャラクタディスプレイ SO1602AWWB(0:利用しない 1:利用する デフォルト:0)

アクティブマトリクス蛍光表示管の利用にはフラッシュメモリ利用域を消費するため、
他の機能を無効にする必要があります。
今回は、利用頻度の少ない、GRADEコマンド、DMPコマンド、IR関数を無効にしました。

スケッチを書き込みます。

01


次にTeraTarmを起動して、MW25616L実験表示モジュールに接続します。

通信条件

   05

端末の設定

   改行コード、漢字-受信、漢字-送信を下記の設定にします。

   06

接続します。何も表示されない場合は、F5キーを押して再表示させてます。

    04

試しに次のプログラムをコピー&ペーストして実行してみます。
10 VCLS
20 VMSG 10,"CL-VFD実験用表示モジュールVer2登場!"
30 VSCROLL 256,5
40 WAIT 300
50 GOTO 20

07

問題なく動作しました。

Dscn8487

実際に動いている様子です。



問題無く動いているようです。
実際は、もっと鮮明で綺麗な表示なのですが、
私のデジカメの動画撮影機能では、綺麗に撮影出来ませんでした。

もうすこし、動作確認を続けてみます。

2018年7月25日 (水)

プロペラでVT100端末の実装

SNSにてシリアル・ターミナル コンソールをマイコンで実装する話題があり、
「そういえば、プロペラマイコンでVGA+PS/2キーボード構成が簡単に実装出来るなぁ」
と思い出し、やってみました。
久しぶりのプロペラマイコン利用です。

Dscn8443

ゼロからの自作は無理なので、mikrocontroller.netVT100-Terminal (VGA+PS2)
にて紹介されている、「RETROCOMPUTING VT100 VIDEO TERMIAL」を
利用して実装しました。

ソースや回路図等は上記フォーラムに掲載されているリンク先から入手しました。
  ・https://www.mikrocontroller.net/svnbrowser/avr-cp-m/trunk/VT100/


回路図を見ると、キーボードやVGA周りの実装は、
プロペラのデータシートに掲載されているデモボードと同じようです。
比較的少ない部品で実装出来ました。

Dscn8440

一応、これで640x480ドット 80x25文字、 64色同時表示のVGA表示が出来ます。
キーボードはPS/2インタフェースとなります。
シリアル接続のターミナル コンソール VT100相当として利用出来ます。

動作確認に、Arduino Uno互換機にて「豊四季タイニーBASIC for Arduino機能拡張版」
動かしてみました。

本来はパソコン上でTeraTarmの利用を想定しているのですが、
果たして使い物になるでしょうか?


動作確認の様子


予想以上にまともに動作しました。
表示もNTSCとは異なり、非常に綺麗です。

カラー表示も出来ました。
意外と使えそうです。

他にもプロペラを使った類似のものが公開されているので、もう少し調べてみます。

2018/07/28 補足

開発環境はPropeller IDEを利用しています。
こんな感じのツールです。言語としてはSPINというインタプリタ言語が標準です。

Ide

出回っているプログラムは、旧開発環境のPropeller Toolを使っている場合があります。
その場合、Propeller IDEではコンパイルに失敗する場合があります。
Propeller Toolもインストールして、Propeller IDEのライブラリパスの設定にて、
Propeller Toolの付属ライブラリにパスを通す必要があります。


関連記事
Propeller始めました(8) スピーカーで音を出してみる (2015.11.30)
Propeller始めました(3) VGA出力を試してみる (2015.11.14)
Propeller始めました(2) TV出力を試してみる (2015.11.12)

2018年7月14日 (土)

Arduino用漢字フォントライブラリ SPI フラッシュメモリ版の更新

先日の「Arduino用漢字フォントライブラリ SDカード版のSdfat対応」繋がりで、
「Arduino用漢字フォントライブラリ SPI フラッシュメモリ版」を更新しました。
ベースとなっている「Arduino用 SPI接続フラッシュメモリW25Q64ライブラリ」も更新しました。

 

更新ライブラリ
    ・Arduino用漢字フォントライブラリ SPI フラッシュメモリ版
      https://github.com/Tamakichi/Arduino_exfonts

      修正点
          - SPIバスの共有対応
          - Arduino STM32環境での複数のSPIポート利用に対応
          - SPIクロック速度の任意設定対応

    ・Arduino用 SPI接続フラッシュメモリW25Q64ライブラリ
      https://github.com/Tamakichi/Arduino-W25Q64    
          - SPIバスの共有対応
          - Arduino STM32環境での複数のSPIポート利用に対応
          - SPIクロック速度の任意設定対応

    上記2つのライブラリはArduino(Atmega328)、Arduino STM32で利用可能です。

早速、先日の「吾輩は猫である」の漢字フォントを
SDカードからSPI接続フラッシュメモリ(W25Q64)に置き換えてみました。

置き換後の様子

 

スクロールが発生しない文字サイズでは、SDカード版よりもかなり早くなっています。
(表示速度の違いについては、追って追記します^^; )

今回の動作チェックでは、BluePillボードの代わりにRobotDyn製の互換ボードを利用しました。

Dscn8422

BluePillボード(右)と比べるとRobotDyn製互換ボードは、幅が狭いので、
ブレッドボードを有効活用出来ます。

SPIバスの共有動作チェックする際、BluePillボードでは片側が1列しか確保出来ないため、
仕方なく置き換えました。

Dscn8421

RobotDyn製互換ボードは、BluePillボードよりも品質が良く、
ブートローダ付きの製品もあります。
ただし、お値段がBluePillボードよりもちょっと高いです。
(単品購入だと、送料込みでBluePillボードの3倍!!)

STM32F103C8T6, STM32 bootloader compatible for Arduino IDE or STM firmware,
ARM Cortex-M3 Minimum System Development Board

02

送料がかかるので、RobotDyn製の他のパーツとセットで購入が良いと思います。

 

より以前の記事一覧