Sipeed Longan Nanoで文字を表示してみる

前回の記事で、Sipeed Longan Nanoの開発環境のセットアップについて書きました。本日は、Longan NanoLCDへの表示方法について書こうと思います。Longan NanoLCDは、データシートを見てもコントローラの種類やMCUのどのポートに接続されているのかなど、何も記載がありません。Webを検索してもあまりLCDに実際に表示を行っている例もなく途方に暮れていたのですが、Sipeedのオフィシャルサイトの製品ページLCD表示サンプルプログラムへのリンクがあったので試してみることにしました。製品情報のDocumentsタブにあるLCD Demoをクリックすると参照することができます(あるいは、こちらからもダウンロードが可能です)。

今回は、Arduinoではなくメーカー提供のSDKを用いてC言語で開発を行いますので、まずはPlatformIOのほうの準備を行います。PIO Homeを開き、“New Project”をクリックし、“Board”は“Sipeed Longan Nano”、“Framework”は“GigaDevice GD32V SDK”を選択し、“Finish”でプロジェクトが作成されます。
新規プロジェクト作成

“platformio.ini”に追記を行います。
upload_protocol = dfu

空のプロジェクト

先ほどダウンロードしたサンプルプログラムの“include”フォルダの“lcd”フォルダと“systick.h”を、プロジェクトフォルダの“include”フォルダへコピー、“src”フォルダの“lcd”フォルダと“systick.c”も同様にコピーします。最後に、プロジェクトフォルダの“src”フォルダに“main.c”を作成します。これで準備は完了です。
ちなみに、lcd.c/lcd.h がLCD制御ライブラリの本体、bmp.h がライブラリ内で使用するロゴデータのサンプル、oledfont.h が文字フォントデータ、systick.c/systick.h が1ms単位でのウェイトを行う関数となっているようです。

エディタで main.c を開き、以下のように入力します。
#include "lcd/lcd.h"

int main( void ) {
// LCD制御サンプルプログラム

Lcd_Init(); // lcdを初期化する
LCD_Clear( WHITE ); // lcdをクリアする
BACK_COLOR = CYAN; // 文字の背景色を指定
LCD_ShowString( 10, 4, "Longan Nano", MAGENTA );
LCD_ShowString( 10,24, "LCD Test", MAGENTA );

while( 1 );
}

作成したプロジェクト

ファイルを保存、コンパイルを行い、マイコンに書き込みます。今回はドライバのインストールが済んでいるので簡単です。BOOTボタンを押しながらUSB接続を行うか、BOOTボタンを押しながらリセットすると書き込みモードになります。書き込みツールを使用して書き込んでからRESETボタンを押すと、無事に表示されました(写真が汚くて申し訳ありません)。
実行中

以下に、ライブラリの簡単な説明を載せておきます。すべてを試したわけではないので誤っている部分もあるかもしれませんが、その際は指摘してしていただければありがたいです。また、フォントやロゴの定義方法などはまた今後調べてみたいと思います。

lcd.h 色指定用記号定数:
 WHITE :白
 BLACK :黒
 BLUE :青
 GBLUE :青緑
 RED :赤
 MAGENTA :マゼンタ
 GREEN :緑
 CYAN :シアン
 YELLOW :黄色
 BROWN :茶色
 BRRED :赤茶色
 GRAY :灰色
 (その他中間色が数種類定義されています)

lcd.c グローバル変数:
 unsinged int BACK_COLOR; :文字表示の際の背景色
 unsigned char image[12800]; :LCD_ShowPicture() で表示するイメージを格納する配列

lcd.c 関数 (低レベルI/O関数は除く):
 void Lcd_Init(void);
  LCDを初期化する。
 void LCD_Clear(u16 Color);
  LCDをクリアする(=Colorで指定した色で全面を塗りつぶす)。
  Color = 背景色
 void LCD_ShowChinese(u16 x,u16 y,u8 index,u8 size,u16 color);
  漢字を表示する(別途 oeldfont.h の中でパターン定義されているもののみ)。
  x, y = 座標 index = 漢字のインデックス番号(定義されている順に0~)
  size = フォントサイズ(16/32) color = 描画色
 void LCD_DrawPoint(u16 x,u16 y,u16 color);
  点を打つ。
  x, y = 座標 color = 描画色
 void LCD_DrawPoint_big(u16 x,u16 y,u16 color);
  大きな点を打つ(実際には3x3ピクセルの正方形を描く)。
  x, y = 座標 color = 描画色
 void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);
  矩形領域を塗りつぶす。
  xsta, ysta = 左上座標 xend, yend = 右下座標 color = 描画色
 void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);
  直線を描画する。
  x1, y1 = 起点座標 x2, y2 = 終点座標 color = 描画色
 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);
  矩形を描画する。
  x1, y1 = 起点座標 x2, y2 = 終点座標 color = 描画色
 void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);
  円を描画する。
  x0, y0 = 中心 r = 半径 color = 描画色
 void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode,u16 color);
  文字を表示する
  x, y = 座標 num = 文字コード(ASCII) mode = モード color = 描画色
  ※mode = 1 のとき OR、 mode = 0 のとき 上書き(文字背景を BACK_COLOR で塗りつぶした上に描画)
 void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color);
  文字列を表示する(必ず上書きモードとなる)。
  x, y = 座標 p = ASCII文字列へのポインタ color = 描画色
 void LCD_ShowNum(u16 x,u16 y,u16 num,u8 len,u16 color);
  整数値を表示する。
  x, y = 座標 num = 数値 len = 表示桁数 color = 描画色
 void LCD_ShowNum1(u16 x,u16 y,float num,u8 len,u16 color);
  小数値を表示する。
  x, y = 座標 num = 数値 len = 表示桁数 color = 描画色
 void LCD_ShowPicture(u16 x1,u16 y1,u16 x2,u16 y2);
  イメージを表示する( image[] に格納されたデータを表示する)。
  x1, y1 = 左上座標 x2, y2 = 右下座標
 void LCD_ShowLogo(void);
  ロゴマークを表示する( bmp.h で定義されたデータを表示する)。

最低限の機能ではありますが、ごれぐらいあれば困ることはほとんどないのではないでしょうか。参考としていただければ幸いです。最後に、Longan Nanoの開発に参考となりそうなサイトへのリンクをいくつか載せておきます。

公式Wiki(英語)
公式GitHub
GD32V MCUのマニュアル類
その他ツール、ドキュメント、サンプルなどの公式ダウンロードサイト
スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

tag : Sipeed Longan Nano マイコン GD32V RISC-V LCD PlatformIO

Sipeed Longan Nanoを使ってみました

本日はXperia 1の記事の続きを書くつもりだったのですが、先日購入した安価なマイコンボード、Sipeed Longan Nanoが面白そうなので触ってみました。このボードはRISC-Vアーキテクチャの32bit MCUであるGigaDevice GD32VF103CBT6を搭載しており、32KBのSRAMと128KBのフラッシュメモリを内蔵、microSDカードスロット、160×80ドット、0.96インチのフルカラーIPS液晶も搭載しています。今回は秋月で購入しましたが、ボード本体とピンヘッダ、アクリルケースがセットになっていましたので、ピンヘッダをはんだ付けしてアクリルケースに収めてみました。加工精度が今一つなのか、コネクタ類が干渉してキレイに収めるのにはちょっと苦労しました。また、このままだとボード上のボタン類(BOOT, RESET)が押せなくて不便なので、3Dプリンタで簡単なパーツを作って対処しました(赤いボタンのように見えるもの)。
※後になって、秋月のセットにはボタン用パーツが付属していることに気づきました。
Sipeed Longan Nano (1)

本日は、開発環境のセットアップとLチカを行うところまで手順を書いてみることにします。Longan Nanoには専用のIDEというものはなく、PlatoformIO IDEというものを開発に利用します。これは、Visual Studio Code (VS Code)の拡張機能として組み込むことでIDEとして使用できるようになるもので、Arduinoをはじめとする様々なマイコンボードに対応しているものです。

(1) まずはVS Codeを起動し、拡張機能“PlatformIO IDE”をインストールします。
PlatformIO IDE 拡張機能

(2) PlatformIOのアイコンが左端のツールバーに追加されるので、そこをクリックすると“PIO Home”が開きます。左下の“QUICK ACCESS”から“New Terminal”をクリックしてターミナルを開きます。
PIO Home

(3) ターミナルのコマンドラインで次のように入力し、Longan Nanoに対応しているSDKをインストールします。
platformio platform install gd32v
platformio platform install https://github.com/sipeed/platform-gd32v

ターミナルを起動

(4) インストールが終了したら、PIO Homeの“Project Examples”をクリックして開き、“Arduino Blink”を選択して読み込みます。
Arduino Blinkを読み込む

(5) “platformio.ini”ファイルを開き、[env:gd32vf103v-eval]セクションを削除し[env:sipeed-longan-nano]セクションのみを残すようにします。このArduino用のLチカは様々なプラットフォームに対応しているわけですが、このファイルを編集することによってLongan Nano対応のプロジェクトであることを指定していることになるのだと思います。
platformio.ini

(6) Longan NanoはUSBを利用してプログラムを転送します。それに備えて次の内容を追記します。
upload_protocol = dfu

platformio.iniでdfu書き込みを指定

(7) ステータスバー左のほうにあるチェック☑のマークをクリックするとコンパイルされます(あるいは、[CTRL]+[SHIFT]+[B]を押して、表示されるメニューから“PlatformIO: Build”を選択)。コンパイル済みのバイナリはプロジェクトフォルダ内の“.pio\build\sipeed-longan-nano”に、“firmware.bin”というファイル名で保存されます。
コンパイル済みバイナリファイル

(8) 書き込み用のUSBドライバをインストールするため、Longan Nanoを書き込みモードで起動します。PCのUSBポートにLongan Nanoを接続し、BOOTボタンを押してからRESETボタンを押します。その後RESETボタンを離し、BOOTボタンを離すと書き込みモードで起動します(この時点ではデバイスマネージャではUnknown Deviceとして認識されます)。
Unknown Deviceとして認識

(9) PlatformIOから直接書き込むためには、書き込みに必要なWinUSBドライバをインストールします。これを行うにはZadigを用いるのが便利です。こちらからインストーラをダウンロードして実行します。“Unknown Device”が選択されているのを確認し“Install Driver”をクリックすればOKです。書き込むには、VS Codeのステータスバー左のほうにある右向き矢印→のマークをクリックします。この方法を用いる場合には以下の(10)-(12)の手順は不要です。
Zadigのlibusbインストーラ

(10) 専用の書き込みツールを用いる場合には、こちらからダウンロードします。

(11) 書き込み用USBドライバをインストールします。上記ファイルを解凍してできた“GD32 MCU Dfu Drivers_v1.0.1.2316”フォルダ内から(末尾の数字などはバージョンによって異なります)、OSに合わせて(32bit→x86, 64bit→x64)選んでドライバのインストーラを「管理者として実行」します。
USB DFUドライバのインストーラ

(12) 書き込みツールを実行します。“GD32 MCU Dfu Tool_v3.8.1.5784”フォルダ内の“GD32 MCU Dfu Tool”を起動します。書き込むbinファイルを選択してOKボタンをクリックすれば書き込まれます。
DFU書き込みツール

(13) Longan NanoのRESETボタンを押すと実行されます。


結構面倒くさく感じるかもしれませんが、上記の操作は最初の1回のみでOKです。その後はArduino言語での開発の場合には(4)~(7)でコンパイルを行ってから、BOOTボタンを押しながらLongan NanoをPCに接続、BOOTボタンを離して(12)→(13)でできると思うので、結構簡単だと思います。なかなかドキュメント類も少なくて苦労することもありますが、1個830円と安価なので、興味のある方は試してみてはいかがでしょうか。
Sipeed Longan Nano (2)

RISC-Vに興味のある方はこちら。

テーマ : 電子工作
ジャンル : 趣味・実用

tag : マイコン Sipeed Longan Nano Arduino PlatformIO GD32 RISC-V

Xperia 1 SO-03Lを購入しました

メインのスマートフォンXperia Z3 CompactからXperia XZに変更して2年が経ち、性能に若干不満を感じるようになってきました。特に、ポケモンGOなどの3Dグラフィックスを多用するゲームアプリなとを連続使用していると発熱がひどくなり、動作速度がガタ落ちするのに耐えられなくなってきたのが大きいです。今回はiPhoneやPixelも含めて幅広く検討しましたが、結局Xperia 1(SO-03L)に落ち着きました。このスマートフォンはSoCとしてSnapdragon855を採用し、RAM 6GB, 内部ストレージ 64GBと申し分ないスペックで、ディスプレイは6.5インチ, 4K解像度(1644×3840)のOLEDを搭載しています。焦点の異なるトリプルカメラを搭載し、これまでのXperiaと比べてもカメラ性能に力を入れている感じがします。

今回はオンラインショップにて購入。
荷姿

外箱はこんな感じで、最近の他のXperiaのものと似ていますね。「1」が強調されたデザイン。
外箱

早速箱を開けてみます。
箱を開けたところ

本体のほか、USB-イヤフォンジャックの変換アダプタが付属しています。このアダプタはワンセグ・フルセグTVのアンテナも兼ねています。
箱の中身

今回、SIMカードを新しいものと交換可能だということだったのでしてみました。この水色のSIMは機能的にはピンクのものと変わらないとのこと。
SIMカード

Xperia XZと並べてみました。XZのほうは5.2インチFull HD(1080×1920)なので、ざっと概算するとXperia 1のほうが約1.5倍の解像度を持つという計算になりますが、そのためかXperia 1のほうがアイコンや文字が小さく、引き締まった印象を受けますね。ちなみに見ての通り、横幅はほぼ同じ、単純に縦に長くなったようなサイズです。
表側(vs Xperia XZ)

裏側。XZがマット仕上げになっているのに対し、Xperia 1は光沢があります。形状も、Xperia 1の方は局面を取り入れたデザインとなっています。
裏側(vs Xperia XZ)

下がwには、スピーカーとUSB Type-C端子があります。
下側(vs Xperia XZ)

重量はXZの161gに対してXperia 1は178gです。実際の重量の差に比べて持つとずっしり重く感じるのは、やはり縦に長いため重心が上のほうにずれているためなのでしょうか。
手に持ったところ

しばらく使用していますが、ポケモンGOを含めた処理速度、バッテリの持ち、画面表示品質などを含め、概ね満足しています。アクセサリの紹介や、カメラの撮影例などについてはまた次回以降にでも…。

Dual SIMの並行輸入品もあります。
(右側、技適マークはありません)






テーマ : スマートフォン
ジャンル : 携帯電話・PHS

tag : スマートフォン Android SONY docomo Xperia 1 SO-03L XZ SO-01J

AliExpressで購入したもの(6) - ミニデスクトップPC

近々3Dプリンターの購入を考えているのですが、設置予定の作業台の近くに小型のPCを置きたいと考えたので、AliExpressで注文してみました。購入したのは、Erin Computer Store(商品ページはこちら)というセラーから、Core i5-7200U, SSD 240GB, RAM 8GBのモデルで、価格は33,000程度、注文から約1週間で届きました。

本体はこんな感じで、アルミ合金製でしょうか。さほど安っぽい感じはしません。
本体上面

付属品。VESAマウントアダプタと、ドライブ増設用のSATAケーブル、WiFiアンテナなどが付属しています。
付属品

本体前面は電源ボタンとLED、USBポートが2つと、シンプルなデザインです。
本体前面

本体後面にはWiFiアンテナ端子、アナログオーディオ端子、HDMI、VGA、LANと、USBポートが4つついています。ちなみこのパソコンには技適マークはついていませんでしたので、今回は有線LANで使用することにしました。
本体後面

メモリスロットには8GBのDIMMが差さっています
メモリスロット

SSDはこのようにマザーボードのmSATAスロットに差さっていますが、その右に通常のSATAコネクタがついており、3.5インチのSSDまたはHDDを内部増設できるようになっています。
SSD

セラーのページには、「クラック版のWindows 10がインストールされている」との説明があり、実際に起動してみるとライセンス認証済みのWindows 10 (すでに日本語に設定されていました)が起動しましたが、どこにもMicrosoftのシールが見当たらず、やはり気持ち悪いので正規品を再インストールすることにしました。Windows 7からやり直すのが面倒くさかったので試しにWindows 8のアップグレード版をDVDから起動すると、アップグレードチェックをパスしてインストールを進めることができました。つまり、Windows 8のアップグレード版は、アップグレード元のOSとしてWindows 10も認識できるということなのでしょうね。
Windowsインストール画面

その後、MSのサイトからWindows 10の最新版をダウンロード、インストールすることで、無事に正規版のWindows 10になりました。特に追加のドライバをインストール必要もなく、快適に利用できています。
設置完了

残念ながら縦置きができないので設置面積を取ってしまいますが、そこを除けば特に不満はありません。3Dプリンターでの製作時、電子工作の際の調べもの、プログラミングなどに使用していきたいと思います。

テーマ : デスクトップパソコン
ジャンル : コンピュータ

tag : AliExpress パソコン Windows 10

CH552Gの開発環境構築ととLチカ

前回紹介したCH552Gの開発環境を整備したので、その方法を覚書として残しておきます。CH551/552について書かれた日本語の記事というと、前に紹介したはくら様のブログ以外にはCerevo TechBlog様ぐらいしか見当たりません。いずれもメーカー推奨のKeil C51を前提として書かれていますが、Keilの無料試用版はコードサイズが2KBに制限されている(正式版は20万円超です…)とのことで、CH552Gのプログラムメモリ(ブートローダを除いて14KB)をいっぱいに使うようなものは作れません。メーカーのサンプルプログラムがこちらで公開されており、こちらはKeil用に書かれているのでまずはKeilで試すのがお手軽だとは思いますが、今回はあえてフリーのCコンパイラSDCC(Small Device C Compiler)を用いることにしました。

まず、SDCCの公式サイトから最新版をダウンロード、インストールします。インストールの終盤でコンパイラのパスを環境変数PATHに追加するかどうか尋ねられすので、追加(チェックを入れる)しておきます。

SDCCは統合開発環境(IDE)ではなく、コマンドラインコンパイラなので、別途エディタを用意します。フリーのものだとおススメはやはりVisual Studio Code(VS Code)でしょうか。ダウンロード後、インストールしてください。その後、C/C++の拡張機能をインストールしておきます。
C/C++拡張機能

8051アセンブラやIntel Hexの拡張機能も入れておいてもよいかもしれません。
8051拡張機能

Intel HEX拡張機能

基本的にはVS Codeで書いて保存→コマンドラインから sdcc ソースファイル名 でよいのですが、使い勝手を良くするためにいくつか追加の設定を行っておきます。もっとスマートな方法もあるかもしれませんが、初心者ということでご容赦ください。まず、コンパイル用のバッチファイルを作ります。ファイル名は_sdcc.batとし、パスの通ったフォルダ(C:\Program Files\SDCC\bin など)にコピーしておきます。このバッチはSDCCが吐き出した.ihx形式のHexファイルを.hex形式に自動的に変換するために作成しました。
(3, 4行目は、それぞれCH552, 551のメモリサイズを指定して使用量をチェックする場合の記述方法です。)

次に、プロジェクトファイルを保存するフォルダを新規作成します。
プロジェクトのフォルダ(空)

VS Codeの「フォルダーを開く」で、作成したフォルダを選択します。
フォルダを開く

次に、Cコンパイラの起動指定を行います。「ターミナル」-「タスクの構成」-「テンプレートからtasks.jsonを生成」-「Others」を選択します。
「ターミナル」メニュー

「タスクの構成」メニュー

「テンプレートから tasks.json を生成」メニュー

すると設定ファイルの編集画面が開くので、下記のように変更、保存してください。これで、[CTRL]+[SHIFT]+[B]でmain.c をメインプログラムとしたビルドタスクが走るようになります。main.c をほかのファイル名に変更したい場合には、"args" のところの "main" をほかの名前に変えてください。
tasks.json

下記のコードをコピペしてもOKです。

次に、エディタの使い勝手を向上させるため、インクルードファイルのパスの指定を行います。左下の設定アイコンから「コマンドパレット」-「C/C++:Edit Configurations (UI)」を選択して設定画面を開き、以下のように設定を行います。
・Compiler Path をsdcc.exeのパスに変更
・IntelliSense Mode をデフォルトに変更
・Include Path にSDCCのインクルードファイルが保存されているパスを追加
C/C++ Edit Configurations

Configuration設定画面

.vscodeフォルダ内にこのような c_cpp_properties.json ファイルが生成されておればOKです。以上の設定により、#include マクロで<>でかこったファイル名を指定しても警告表示が出なくなります。

以上の操作で.vscodeフォルダ内に2つのファイルが生成されましたが、これらのファイルはPC内のコンパイラのパスが変わらなければ使いまわしができますので、新たにプロジェクトを作成した際には.vscodeフォルダごとコピーしておけばこれまでの設定を省略できて便利です。

では試しにLチカのプログラムを入力してみましょう。以下のプログラムを入力し、main.c として保存してください。CH552特有のレジスタを使用しない限りは、8052用の定義ファイル(8052.h)が使用できます。また、stdint.h をインクルードしておくと、AVRGCCなどでもおなじみの uint8_t などの表現が使用できるようになるのでAVRからの移植にも便利かと思います。

入力後、[CTRL]+[SHIFT]+[B]でコンパイラが走り、main.hex が生成されているはずです。
プロジェクトのフォルダ

生成されたバイナリファイルの書き込みにはWCH社提供のWCHISPToolを使用します。ダウンロードページからダウンロード、インストールしてください。

準備ができたら、前回の記事で紹介したマイコンボードのPGM(プログラム)ボタンを押しながらPCのUSBポートに接続します。PGMボタンは1-2秒で離してください。これでブートローダが起動して、書き込めるようになります。起動に成功すればデバイスマネージャに"USB Module"というデバイスが現れているはずですが、うまくいかなければいったん接続を外してやり直してみてください。
デバイスマネージャ

この状態でWCHISPToolを起動し、「8 Bit CH55X series」タブを選択、「Chip model」で「CH552」を選択すると、画面下方のデバイスリストに接続したマイコンが認識されているはずです。ここで「User File」でコンパイラの出力したhexファイルを選択し、「Download」ボタンをクリックすれば書き込みが完了します。
WCHISPTool

この状態でリセットボタンを押せばP1.1に接続したLEDが点滅するはずです。

SDCCでの開発はあまり資料がないので難しいかと思いましたが、一度環境構築してしまうとさほど大変ではありませんでした。今後の予定としては、メーカー提供のCH552用のライブラリやインクルードファイルなどをSDCCで利用できるように移植作業などを進めていきたいと思います。

最後に、参考資料へのリンクを載せておきます。
技術者見習いのメモ書き-USB機能付き格安マイコンCH552Tの入手方法と回路について
Cerevo TechBlog-[21日目]激安中華USBマイコンは使えるのか
GitHub CH554 software development kit for SDCC:SDCC用のサンプル
ElectroDragon-WCH Wiki
Bitbucket-Electrodragon WCH:Keil C51用のサンプル
新世代8051系マイコン入門ハンドブック【PDF版】

テーマ : 電子工作
ジャンル : 趣味・実用

tag : マイコン MCS51 WCH CH552G USB 電子工作 Visual Studio Code SDCC

アクセスカウンタ
カレンダー
11 | 2019/12 | 01
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 - - - -
最新記事
最新コメント
リンク
カテゴリ
楽天お勧め商品
検索フォーム
FC2掲示板
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示