Blogパソコン、携帯電話、PDAなど、デジタル機器について、個人的なメモもかねて書いていきます。電子手帳やポケコン、古い関数電卓などの記事もあります。最近はマイコンを用いた電子工作にハマっています。NanoでFONTX2形式のフォントを利用する12月半ばに腕を骨折してしまい、更新が滞っておりました。リハビリも進み、キーボードを打つのに支障がなくなってきたので、またぼちぼち書いていきたいと思います。NanoのLCD制御ライブラリを眺めていて、比較的簡単にオリジナルフォントの表示を行うことができそうに思えましたので、さっそく改造してみました。フォントデータとして、扱いやすく入手の容易なFONTX2形式に対応し、半角文字だけでなく漢字を含む全角文字の表示にも対応してみました。FONTX2のデータはサイズが大きいので、マイコンのフラッシュメモリではなくmicroSDカードに置きたいところですが、そのためにはFATファイルシステムへの対応が必要となります。幸いにもSipeed社のサンプルにはmicroSDカードから画像データを読み込んで表示するためにChaN様作のFatFsが組み込まれており、今回はこれを流用しました。関数)にバグがあり、そのままだとバッファオーバーランを起こして漢字フォントの表示に失敗するため、修正を行っています。最初はこの不具合に気づかず、自分の書いたコードを何度も見直して何日も無駄にしてしまいました...。今回は、日本語の文字列に対応するためUTF-8を利用できるようにしましましたが、みいちゃん様によるUTF8→UTF16の変換アルゴリズムと、FatFsに含まれるUTF16→JISへの変換関数(ffunicode.c)を改変して利用させていただきました。FONTX2データのアドレス計算を行う部分も、ChaN様のサイトで公開されているものを利用させていただきました。SDK)用のライブラリとサンプルプログラムのソースコードはGitHubにて公開しています。以下に、利用方法を書いておきます。microSDカードにFONTX2のフォントデータを保存します。編集し設定を行います。FONTX2関連(+α)の設定は以下の部分で行います。FONTX2を使用するかどうかを指定します。設定値は以下のとおりです。FONTX2フォントで文字列表示を行う場合の水平方向の文字間隔(右側のスペーシング)をドット数で指定できます。文字列表示の際の自動改行時の1行の高さを指定できます。JISへの変換テーブルが組み込まれるためコードサイズが大きくなります。定義するとオンボードLEDでステータス表示を行います。フォントデータの読み込みエラー時に赤、SDカードへのアクセス中は緑に点灯します(主にデバッグ用です)。Sipeed社提供のオリジナルライブラリと互換性のある関数名を使用する場合に定義します。そのままだとこれまで開発したプログラムが動作しなくなるため、この定数を定義することによって旧関数名でも利用できるようにしています。扱うフォントの1文字当たりのデータサイズを指定します。以上の手順でOKです。以下に簡単に関数のリファレンスを記しておきます。)LCDを初期化する。Color);LCDをクリアする(=Colorで指定した色で全面を塗りつぶす)。中でパターン定義されているもののみ)。color);点を打つ。color);大きな点を打つ(実際には3x3ピクセルの正方形を描く)。color);矩形領域を塗りつぶす。color);直線を描画する。color);矩形を描画する。color);文字列を表示する(必ず上書きモードとなる)。color);整数値を表示する。color);小数値を表示する。格納されたデータを表示する)。定義されたデータを表示する)。);FONTX2ライブラリを初期化する。);フォントファイルを開き、ヘッダを読み込む。);フォントファイルを閉じる。);フォントデータを取得する。読み込めたバイト数)最後に実行例の写真を載せておきます。Nanoで日本語の表示が可能になると、かなり実用的ですね。好みのフォントも使えますので、表現の幅も広がります。急ごしらえで作成したライブラリなので処理速度などの点で最適化することはまだまだできると思いますが、興味のある方は使用してみていただければと思います。Nanoでいろいろ遊んでいますが、どうしても原因のわからないバグに遭遇し、デバッガを使いたいと思うことがありました。Blasterが使えるとの記載がありますが、Intelの正規品はけっこういいお値段なので、Amazonなどで安価に売られている互換品をポチってみました。今回は“HuaChongChong”というセラーの物(Amazon発送)を購入しましたが、すでに扱いがなくなっているのか商品ページのリストからは消えていました。同じ商品に見えて、セラーごとに中身が微妙に違ったりする可能性があるのでわかりにくいですね。この手の製品は、一見同じように見えても中身は様々なようで、今回購入したものはPIC18F14K50を搭載していました。これはおそらくOJIKA様のサイトで公開されているものと同様なもの(パクった?)だと思われますが、OJIKA様の開発されたものはCQ社のMAX10のキットに含まれているMAX10-JBのベースにもなっており、信頼性が高いものであると考えられます。他のマイコンが搭載されているものあるようで、その中にはうまく動作しなかったという報告が見られるものもありました。(写真は今回購入したものの内部。右の石はレベルコンバータと思われる74LVC244Aです。Primeをダウンロード、インストールしてみました。接続してみると自動的にデバイスドライバが組み込まれ、プログラマからも認識されているので、特に問題はなさそうです。PlatformIOのデバッガはOpenOCDと呼ばれるものを使用していますが、Intelの標準ドライバではこちらから認識されないので、Zadigを使用してドライバをlibUSBに差し替える必要があります。これを行うと当然のことながらIntelのプログラマからは認識されなくなるため、CPLDやFPGAの書き込みに使いたい場合には後述の方法でドライバを元に戻す必要があります。次のように設定を行います。altera-usb-blasterこれで準備は完了です。デバッガを開いて(左端のツールバーから虫のアイコンをクリック)、メニューの「デバッグの開始」でデバッグが開始されます。他のデバッガと同様、ステップ実行、ブレークポイントの設定、式のウォッチ、レジスタ・IOの状態表示、メモリダンプなどが可能です。ステップ実行は1ステップ進むのにかなり時間がかかります。Blasterを持っていないので、この製品の処理速度が遅いせいなのか、もともとこんなものなのかはわかりませんが...。最後に、Intelのドライバへの戻し方を書いておきます。Blasterを選べばOKです。通常の開発作業を行う場合、画面表示やシリアルポートのモニタで何とかなる場合が多いと思いますし、そのほうが効率的な場合も多いかとも思います。他人の開発したプログラムの動作でわからないところがあるときなどにはこのようなJTAGデバッガも重宝する場合もあるかと思います。低コストでデバッグができるようになるので、必要な方は検討してみてはいかがでしょうか。左が私が購入した商品ページ。ある意味ガチャですね。MAX10-JBという互換基板が右側の書籍にふくまれていますが、こちらは別途部品購入と組み立てが必要です。Nanoの開発環境のセットアップについて書きました。NanoのLCDへの表示方法について書こうと思います。NanoのLCDは、データシートを見てもコントローラの種類やMCUのどのポートに接続されているのかなど、何も記載がありません。Webを検索してもあまりLCDに実際に表示を行っている例もなく途方に暮れていたのですが、Sipeedのオフィシャルサイトの製品ページにLCD表示サンプルプログラムへのリンクがあったので試してみることにしました。Demoをクリックすると参照することができます(あるいは、こちらからもダウンロードが可能です)。今回は、Arduinoではなくメーカー提供のSDKを用いてC言語で開発を行いますので、まずはPlatformIOのほうの準備を行います。SDK”を選択し、“Finish”でプロジェクトが作成されます。“platformio.ini”に追記を行います。dfu先ほどダウンロードしたサンプルプログラムの“include”フォルダの“lcd”フォルダと“systick.h”を、プロジェクトフォルダの“include”フォルダへコピー、“src”フォルダの“lcd”フォルダと“systick.c”も同様にコピーします。最後に、プロジェクトフォルダの“src”フォルダに“main.c”を作成します。これで準備は完了です。1ms単位でのウェイトを行う関数となっているようです。開き、以下のように入力します。);}ファイルを保存、コンパイルを行い、マイコンに書き込みます。今回はドライバのインストールが済んでいるので簡単です。BOOTボタンを押しながらUSB接続を行うか、BOOTボタンを押しながらリセットすると書き込みモードになります。書き込みツールを使用して書き込んでからRESETボタンを押すと、無事に表示されました(写真が汚くて申し訳ありません)。以下に、ライブラリの簡単な説明を載せておきます。すべてを試したわけではないので誤っている部分もあるかもしれませんが、その際は指摘してしていただければありがたいです。フォントやロゴの定義方法などはまた今後調べてみたいと思います。Lcd_Init(void);LCDを初期化する。Color);LCDをクリアする(=Colorで指定した色で全面を塗りつぶす)。中でパターン定義されているもののみ)。color);点を打つ。color);大きな点を打つ(実際には3x3ピクセルの正方形を描く)。color);矩形領域を塗りつぶす。color);直線を描画する。color);矩形を描画する。color);円を描画する。color);文字列を表示する(必ず上書きモードとなる)。color);整数値を表示する。color);小数値を表示する。格納されたデータを表示する)。定義されたデータを表示する)。最低限の機能ではありますが、ごれぐらいあれば困ることはほとんどないのではないでしょうか。参考としていただければ幸いです。Nanoの開発に参考となりそうなサイトへのリンクをいくつか載せておきます。Nanoが面白そうなので触ってみました。GD32VF103CBT6を搭載しており、32KBのSRAMと128KBのフラッシュメモリを内蔵、microSDカードスロット、160×80ドット、0.96インチのフルカラーIPS液晶も搭載しています。今回は秋月で購入しましたが、ボード本体とピンヘッダ、アクリルケースがセットになっていましたので、ピンヘッダをはんだ付けしてアクリルケースに収めてみました。加工精度が今一つなのか、コネクタ類が干渉してキレイに収めるのにはちょっと苦労しました。RESET)が押せなくて不便なので、3Dプリンタで簡単なパーツを作って対処しました(赤いボタンのように見えるもの)。※後になって、秋月のセットにはボタン用パーツが付属していることに気づきました。本日は、開発環境のセットアップとLチカを行うところまで手順を書いてみることにします。IDEというものを開発に利用します。Code)の拡張機能として組み込むことでIDEとして使用できるようになるもので、Arduinoをはじめとする様々なマイコンボードに対応しているものです。IDE”をインストールします。Home”が開きます。Terminal”をクリックしてターミナルを開きます。Nanoに対応しているSDKをインストールします。Blink”を選択して読み込みます。“platformio.ini”ファイルを開き、[env:gd32vf103v-eval]セクションを削除し[env:sipeed-longan-nano]セクションのみを残すようにします。Nano対応のプロジェクトであることを指定していることになるのだと思います。NanoはUSBを利用してプログラムを転送します。それに備えて次の内容を追記します。Build”を選択)。コンパイル済みのバイナリはプロジェクトフォルダ内の“.pio\build\sipeed-longan-nano”に、“firmware.bin”というファイル名で保存されます。Nanoを書き込みモードで起動します。Nanoを接続し、BOOTボタンを押してからRESETボタンを押します。Deviceとして認識されます)。PlatformIOから直接書き込むためには、書き込みに必要なWinUSBドライバをインストールします。これを行うにはZadigを用いるのが便利です。こちらからインストーラをダウンロードして実行します。Driver”をクリックすればOKです。Codeのステータスバー左のほうにある右向き矢印→のマークをクリックします。この方法を用いる場合には以下の(10)-(12)の手順は不要です。専用の書き込みツールを用いる場合には、こちらからダウンロードします。書き込み用USBドライバをインストールします。64bit→x64)選んでドライバのインストーラを「管理者として実行」します。書き込みツールを実行します。Tool”を起動します。書き込むbinファイルを選択してOKボタンをクリックすれば書き込まれます。NanoのRESETボタンを押すと実行されます。NanoでLチカ結構面倒くさく感じるかもしれませんが、上記の操作は最初の1回のみでOKです。NanoをPCに接続、BOOTボタンを離して(12)→(13)でできると思うので、結構簡単だと思います。ドキュメント類も少なくて苦労することもありますが、1個830円と安価なので、興味のある方は試してみてはいかがでしょうか。RISC-Vに興味のある方はこちら。XZに変更して2年が経ち、性能に若干不満を感じるようになってきました。ポケモンGOなどの3Dグラフィックスを多用するゲームアプリなとを連続使用していると発熱がひどくなり、動作速度がガタ落ちするのに耐えられなくなってきたのが大きいです。1(SO-03L)に落ち着きました。4K解像度(1644×3840)のOLEDを搭載しています。焦点の異なるトリプルカメラを搭載し、これまでのXperiaと比べてもカメラ性能に力を入れている感じがします。今回はオンラインショップにて購入。外箱はこんな感じで、最近の他のXperiaのものと似ていますね。「1」が強調されたデザイン。本体のほか、USB-イヤフォンジャックの変換アダプタが付属しています。このアダプタはワンセグ・フルセグTVのアンテナも兼ねています。今回、SIMカードを新しいものと交換可能だということだったのでしてみました。この水色のSIMは機能的にはピンクのものと変わらないとのこと。XZと並べてみました。1のほうがアイコンや文字が小さく、引き締まった印象を受けますね。ちなみに見ての通り、横幅はほぼ同じ、単純に縦に長くなったようなサイズです。