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

2019年2月22日 (金)

MSXのジョイスティックポートを使ったシリアル通信 (1)

MSXでジョイスティックポートを使ったシリアル通信が出来るらしいので、
事例を少々調べてみました。

シリアル通信が使えると、パソコンとの通信やArduinoとの連携等が出来るので、
色々とと楽しいことが出来ます。

ジョイスティックポートを使ったシリアル通信の事例

・Joy232
  HAKADAY.IO Print using RS232 on the joystick port of MSX computers
  https://hackaday.io/project/18552-joy232

  github - Danjovic/Joy232
  https://github.com/Danjovic/Joy232

・Akio Hiramatsu's Home Page - MSXでH8内蔵EEPROMを焼く
・FSW倉庫(通信) - アクロバット232


まずは、一番簡単そうなJoy232を試してみました。


Joy232  Print using RS232 on the joystick port of MSX computers

01

joy232は、シリアル通信の出力のみ対応ですが、
BASICのLPRINTコマンドで出力することが出来るので、使い勝手が良いです。

早速試してみました。
ホームページの解説を参考にして、Dサブ9ピン コネクタで通信用コネクタを作りました。

Dscn9652 Dscn9653

USB-シリアル変換モジュールを使ってパソコンとの通信を試してみます。

Dscn9630

ホームページに公開されている、「STEP 1 Method 2」のBASICプログラムを、
MSX1(カシオ PV-7)で実行し、更にテスト用プログラム を実行してみました。

TeraTerm (通信速度 9600bps)にて、受信することが出来ました。

Term

MSXからの出力は、
  LPRINT "Hello,World"

みたいに、LPRINTコマンドで任意のデータを出力出来ます。

意外と簡単に出来ました。色々と遊べそうです。
Arduinoと通信を試そうと思い、
とりあえず、以前作成したLEDマトリックスを試してみました。

Dscn9658

シリアル通信でLEDマトリックスを制御できるモジュールです。
Arduino pro miniに8x8LEDマトリックスを直付けしただけです。
(LEDは定格許容範囲内の短いパルス出力では大きな電流を流せます)

Dscn9656

LPRINT "@?1234567890"
と実行すると、

Dscn9659

表示出来ました。

念のため、機種を切り替えてMSX2でも動作確認してみました。
結果は、...

動きません。MSX2が暴動しました。
調べてみると、マシン語プログラムの配置アドレスがまずいようです。
下記はプログラムの問題箇所の抜粋です。

60 EI=&HFAF5:SIZE=63
70 FOR A = EI TO EI+SIZE
80 READ B$: POKE A,VAL("&H"+B$)
90 NEXT A
100 REM
110 POKE &HFFB8,&HFA
120 POKE &HFFB7,&HF5
130 POKE &HFFB6,&HC3

LPRINTのフック(マシン語プログラム)の配置アドレス &hFAxxxx は
MSX2で新たにワーク領域と使われているようです。
基本的に &hF380H番地から&hFFFEH番地 はワーク領域なので使用禁止です。

プログラム自体はリロケータブルなようで、配置位置を&hF200 に変更したところ、
問題なく動作しました。

修正したプログラム(修正箇所のみ抜粋)

60 EI=&HF200:SIZE=63
70 FOR A = EI TO EI+SIZE
80 READ B$: POKE A,VAL("&H"+B$)
90 NEXT A
100 REM
110 POKE &HFFB8,&HF2
120 POKE &HFFB7,&H0
130 POKE &HFFB6,&HC3

Dscn9669

動いている様子



LEDマトリックスを制御しているMSX BASICプログラム
前半は1ドット単位の表示、後半はメッセージを1文字単位で
スクロール方向を変えて表示しています。

10 LPRINT "@?{}"
20 FOR Y=0 TO 7
30 FOR X=0 TO 7
40 LPRINT "@?{";CHR$(48+X);CHR$(48+Y);"1}"
50 NEXT X
60 NEXT Y
70 LPRINT "@?{}"
80 S$="Hello,Wrld.I love MSX!"
90 L=LEN(S$)
100 FOR I=1 TO L
110 R=INT(RND(1)*13)
120 LPRINT "@scrl ";R;",40"
130 LPRINT "@?";MID$(S$,I,1)
140 GOSUB 180
150 NEXT I
160 GOTO 100
170 END
180 TIME=0
190 IF TIME <20 GOTO 190
200 RETURN

上記のプログラムでは、シリアル通信の出力のみなので、
LEDマトリックスにコマンド送信した際の実行完了待ちが出来ないため
180行のサブルーチンで適当な時間待ちを行っています。

出力のみでも、十分遊べると思います。

2019年2月18日 (月)

入手したボード用 Arduino STM32用ブートローダの作成

AliexpressにてSTM32F103RCT6搭載miniボード(写真の上のボード)を
入手したのですが、Arduino STM32環境で使うためのブートローダが
用意されていないため、ソースからビルドして用意しました。

その時のまとめメモです。

ブートローダの作成はWindows 10環境にて行いました。

Dscn9600


ボードの調査


ボート別にたくさんのブートローダが用意されていますが、基本的な相違は、
  1) ボード上のLEDの制御用ポート番号
  2) 永続モード設定用のボタン用のピート番号

です。この修正版を用意すれば良いわけです。

今回入手したボードは、2つのLEDがPC0、PC1に接続、1つのボタンがPC2に接続しています。

02

ボタンは、押すとLOWになるタイプです。

03

そこで、ブートローダで利用するLEDをPC0、ボタンをPC2として利用することにします。

ブートローダの作成には、下記の情報が大変参考になりました。

ただし、参考にした情報はLinux環境でのビルドのため若干方法が異なります。

参考サイト
   ・Visuariddim - STM32Duino Bootloaderの自前ビルドとか


ブートローダのビルドに必要なものの用意

1)Arduino STM32ブートローダのソースファイル

  STM32duino-bootloader
  https://github.com/rogerclarkmelbourne/STM32duino-bootloader

上記からダウンロードまたは、gitコマンドでcloneを作成します。
ここでは、解凍したフォルダを D:\work\STM32duino-bootloader とします。

2)makeコマンド

  Cygwinのmake.exeを利用しました。
  ※Cygwinのインストール時にmakeパッケージのインストール指定が必要です。   

04

インストールしたCygwin環境のコマンドパスを調べておきます。
ここでは、C:\cygwin64\bin とします。


3)arm-none-eabi-gcc 4.8.x

  Arduino IDEの環境のものを利用しました。   

  arm-none-eabi-gccの絶対パスの調査

05

Arduino IDEの環境設定画面下の赤枠部分のパスをクリックすると、
エクスプローラーが起動します。
そこから、フォルダpackagesに下記のパスがあることを確認します。
\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin\

エクスプローラーのアドレスバーの絶対パスをコピペして、
D:\work\STM32duino-bootloader\ の下に
環境設定用のバッチコマンド makeenv.bat をメモ帳で作成します。

makeコマンドへのパスが通っていない場合、
一緒にmakeコマンドのパスの設定します。

makeenv.bat の中身

PATH=%PATH%;C:\Users\Owner\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin;C:\cygwin64\bin; 

※ アップデート等により、4.8.x以降のパス名称は異なる可能性があります。

ファイルの修正

新しいボード用のブートローダ作成にために、
D:\work\STM32duino-bootloader\にあるMakefile、config.h を修正します。

追加は面倒なので、既存のgeneric-pg15 用の定義をgeneric-pc0に変更します。

1)Makefileの修正
  メモ帳で開いて、置換機能でpg15 ⇒ pc0、PG15 ⇒ PC0に置換して保存します。

06_2

07

2)config.hの修正

メモ帳でconfig.hを開き、PG15で検索して該当する定義を参照します。

08

次に、下記の修正をします。
ターゲット
  PG15 ⇒ PC0
LED
  GPIOG ⇒ GPIOC
  15 ⇒ 0
Button
  14 ⇒ 2
  1 ⇒ 0

この修正は、LEDがPC0(1でON)、ボタンにPC2(0でON)を割り当てるためです。

09

保存してメモ帳を閉じます。


ブートローダのビルド

コマンドプロンプトを起動し、 D:\work\STM32duino-bootloader  フォルダに移動し、
作成しておいた環境設定バッチコマンドを実行します。

さらに、makeコマンドを実行します。
ターゲットは generic-pc0 を指定します。

> make generic-pc0

12

ビルド処理が実行されて、程なく genenic_boot20_pc0.bin が
D:\work\STM32duino-bootloader\bootloader_only_binaries\ に
作成されます。

13


ボードへのブートローダの書き込み

ST-Linkを使って書き込みを行いました。

Dscn9661

ボードを接続し、STM32 ST-Link Utilityにて、genenic_boot20_pc0.bin を読み込んで
書き込みを行いました。

14

ブートローダの書き込み後は、USB経由でのスケッチ書き込みです。

ボードを永続モード(スケッチ書き込み待ち状態)にて、最初のスケッチを書き込ます。
永続モードの設定は、ユーザーボタンを押したまま、リセットボタンを押します。
LEDが点滅して永続モードの状態を示します。

16

スケッチも問題なく書き込めました。

Dscn9662

スケッチ書き込み後は、COMポートも認識出来ました。

以後、このボードはArduino IDE環境でUSB経由でスケッチが書き込めます。
ブートローダのコンパイルはLinux環境の方が楽ですね。




2019年2月15日 (金)

Arduino STM32のBluePill用ブートローダについて

Arduino STM32のBlue Pill用のブートローダ、
いつの間にか、いくつか修正があるようです。私も把握していませんでした。


Blue Pill用の3種類のブートローダ
1)bootloader_only_binaries/generic_boot20_pc13.bin
2)bootloader_only_binaries/generic_boot20_pc13_fastboot.bin
3)binaries/generic_boot20_pc13.bin

1)は従来のものですが、永続モードの設定ピンがPC14から、
PB2(=BOOT1のピン、ボードの黄色いピンです)に変更されています。

ここで、永続モードとはリセット直後にスケッチ書き込みを待ち続けるモードです。
初回のスケッチ書き込み時に利用します。

2)は、リセット直後0.5秒間のスケッチ書き込み待ちを省略したバージョンのようです。
まだ試していないため、挙動は不明です。

3)は1)にLチカスケッチを結合したバージョンです。
スケッチが結合されているため、永続モードに設定して
最初のスケッチを書き込む作業が省略できます。

永続モードからみで少々考察し、まとめてみました。
もしかしたら正しくないかもしれません。

USB経由でのスケッチ書き込みについて
Arduino STM32では、
Arduino IDEからUSB経由(Upload methodにSTM32duino bootloader指定)での
スケッチの書き込みは、次の手順で行われます。

1)USBシリアルポート経由でBluePillボードをリセットさせる
2)リセット後、ブートローダが0.5秒間書き込み待ちを行い、スケッチを書き込む

02

この手順では、スケッチに組み込まれているUSBシリアル通信ドライバも必要です。
ですので、初回のスケッチ書き込みが重要となります。
スケッチが書き込まれていないと、自動でのスケッチ書き込みが出来ません。

ブートローダだけ書き込んだ際の状態は...
・ブートローダには、USBシリアル通信ドライバは組み込まれていません。
・DFUはリセット直後時のみ有効、パソコンに接続してもデバイス認識されません。
・BluePillをパソコンに接続しても、COMポートへの接続は見えません。
・BluePillにブートローダだけでは、Arduino IDEからはリセットがかけられません。


ですので、初回のスケッチ書き込みは重要です。

初回スケッチ書き込み対策
・書き込みのタイミングで、手動でリセットボタンを押す
・または、永続モードに設定してスケッチの書き込み待ちを行った上で、
  スケッチの書き込みを行い、その後、永続モードの設定を解除する。

Arduino IDEのシリアルポートの設定を行っていない場合や、
ことなるシリアルポートを設定している場合でも、リセットボタンを押す、
永続モードに設定することでスケッチの書き込みを行うことが出来ます。

また、スケッチプログラムが暴走している場合、シリアルポートを経由での
リセットが機能しない場合があります。この場合も、リセットボタンを押す、
永続モードに設定することでスケッチの書き込みを行うことが出来ます。


USB経由の書き込みはトラブルも多いので、
上手くいかない場合は、ST-LINNK経由での書き込みを推奨します。

関連記事
・FASTBOOT option has been added to the maple bootloader

・BluePill bootloader updated to use boot1 as the button

2019年2月13日 (水)

プログラマ XGecu TL866II Plus USB を入手しました

ROMライターが欲しいと思い、ネットで調べて評価の高い、
XGecu TL866II Plus USB High Performance Programmer (リンク先は公式サイトです)
を入手しました。購入はいつものAliexpressです。

海賊版が出回っているようですが、
とりあえず、「海口鑫工电子有限公司」製の純正品のようです。



Dscn9625

中身

Dscn9602

本体

Dscn9626

付属のCDのアプリは古いバージョンのようなので、公式サイトから
現時点での最新版V8.3をダウンロードしてインストールしました。

アプリの「Xgpro TL866II Plus」を起動時にファームウェアを更新するように促されたので
ファームウェアもアップデートしました。

03

とりあえず、セットアップ終了

02


このTL866シリーズ、購入には少々注意が必要です。
下位のTL866A、TL866CSが安く販売されているのですが、
公式サイトには次の警告があります
(※注意 グーグル日本語翻訳しています)

01

下位のTL866A、TL866CSは生産中止で、偽造品の恐れがあるようです。
ヒントをクリックすると、TL866A、TL866CSはかなり前から生産を中止していて
偽造品にはソフトウェアのアップグレードに制約があるみたいな記載があります。

私は当初、Aliexpressでの中華製品の購入にはブランド選択の意識は無く
安いTL866A、TL866CSを買おうと思ったのですが、
「待てよ、とりあえず、高機能!」とTL866II Plusを選択したのですが、正解でした。

2019年2月12日 (火)

MCUXpresso IDEのインストール

久々にLPC810を使いたいと思い、新しいパソコンに開発環境が入っていなかったため
LPCXpresso IDEをインストールしようと公式サイトを調べると、
以前あったダウンロードのリンクが見つかりません。

LPCの標準開発環境は、MCUXpresso IDEに変わったんですね。
知りませんでした。

ただし、探してみると現時点でもLPCXpresso IDEはダウンロード可能なようです。
ダウンロードのページ:LPCXPRESSO: LPCXpresso IDE v8.2.2

折角なので、MCUXpresso IDEをインストールしてみました。
インストールは、下記のサイトが大変参考になりました。

参考にしたサイト:
  MCU THINGS.com - 初めてのLPCマイコン、Lチカプログラミング〜第1回 環境構築編〜

LPCXpresso IDEで開発したプロジェクトをインポートしたところ、
コンパイルも出来ました。

LPC開発環境は久しぶりで、プロジェクトの設定方法などはすっかり忘れています。
雰囲気的には、LPCXpresso IDEと変わらないかも..

02

«Arduino Basicを改良してシリアルコンソール対応