2012年11月01日

蛍光表示管(VFDパネル)をAndroidから制御するライブラリを作ってみました

電気街のパーツショップでも購入できるVFDパネルという表示装置があります。昔は小型ゲーム機の表示板や、電卓の数字表示に使用されていたようですし、現在でも(液晶が多くなってきたものの)ビデオデッキの前面パネル表示部や、お店のレジの値段表示、銀行等の為替レート表示、ATMなどいろいろな所で活躍している表示装置の一種です。ノリタケ伊勢電子と双葉電子工業というところの製品が多く出回っているようです。

参考 : 蛍光表示管(Wikipedia)
http://ja.wikipedia.org/wiki/%E8%9B%8D%E5%85%89%E8%A1%A8%E7%A4%BA%E7%AE%A1

たまたま、僕が持っているVFDパネル SCK256X64-3101 はUSBのインターフェースを搭載していて、PCからの制御が出来る仕様です。
http://www.noritake-itron.jp/kit/module/sck_3000/index.html
ノリタケ伊勢電子のサイトから個人でも簡単に買えます。確か日本橋の共立電子にもいろいろ置いてありました。

13516949198931.jpg

13516949494552.jpg

そこで、Androidアプリから簡単に任意の表示制御できるようなコントロールライブラリ VFD_Driver を作成してみました。
VFD_demo.jpg

VFD_DriverはAndroidのUSBホストポートを使用してVFDパネルと通信を行うVFD_Driverクラスと、その上でコマンドを構築して制御を行うVFD_Communicationクラスとで構成されています。VFD_Driverクラスは、@ksksue氏作 FTDriver の実装をいろいろいただき、その上で実装しています(Special thanks!!)。

VFD_CommunicationクラスのAPIはノリタケ伊勢電子のサポートページで公開されているC++のサンプルAPIをほぼ踏襲しています。

ソースはこちらです。
https://github.com/yishii/Android_VFD_Driver

ビルドしたアプリはPlayストアにも上げました。ノリタケ伊勢電子のUSB接続のパネルであれば、同一型番でなくても動くかも?しれません。(未確認です)
https://play.google.com/store/apps/details?id=jp.yishii.vfdrivertest

API一覧はREADME.mdに入れました。関数毎にコメントで軽く説明入れましたが、詳しくは上記のノリタケ伊勢電子のC++サンプルAPIの説明書と多くは一致するかと思います。あとはソフトウェア開発ガイドのpdf(ダウンロード時要ログイン)があれば詳細なコマンドの振る舞いもわかります。
●ノリタケ伊勢電子 サポートソフト GU-3000シリーズ向け C++サンプルプログラム
http://www.noritake-itron.jp/cs/supportsoft/index.xml#GU-3000シリーズ向け


使用しているところの動画を撮影してみました。
Nexus 7のUSBホストに繋いで、アプリから表示をコントロールしているものです。

動画では、3つの画面のデモを行なっています。
一つはVFD内フォントを使用した文字列描画、もう一つはライン命令を使用したドローイング、最後にAndroidのBitmapからVFDの画面を更新する内容になります。
Android端末に別な画面を繋いで手軽に表示を制御したい場合などございましたら、良かったらご利用下さいませー。







iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファロー (2011-11-01)
売り上げランキング: 114


基礎から学ぶ 組み込みAndroid
坂本 俊之 出村 成和 渡邊 昌之
シーアンドアール研究所
売り上げランキング: 135065


BeagleBoard-xM
BeagleBoard-xM
posted with amazlet at 12.11.01
Circuitco Electronics LLC.
売り上げランキング: 48592
posted by いしいっち at 00:36| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年10月14日

STM32F4-discoveryでuITRON最小セットカーネルのTOPPERS/SSPを試用してみたー

最近いろいろと遊ばせてもらってますSTM32F4-discoveryですが、今回はuITRONの最小セットOSである、TOPPERS/SSPを動作させてみることにしました。

IMG_20120831_062451.jpg

TOPPERSは、7年ほど前に趣味でVFDパネルを動かして遊ぶのにTOPPERS/JSPカーネルを秋月のH8/3069Fボードで使用したことはありましたがそれっきりいじっていませんでした。

今回はたまたま、CQ出版のInterface 2012年11月号で「リアルタイムOS「TOPPERS/SSP」誕生!」という記事がありまして、では僕もいじってみたいなーと思い、お試ししてみました。



TOPPERS/SSPは最小セットカーネルと呼ばれるだけあり、かなり小さいメモリーサイズで動作するカーネルだそうで、実際Cortex-M3の環境でROM 3kバイト、RAM 24バイトであるとの事でした。
今回は、STマイクロのCortex-M4FマイコンボードのSTM32F4-discoveryを持っているので、STM32F4用に移植して動作させてみることにします。

TOPPERS/SSPに関しては以下のサイトを御覧ください。
http://www.toppers.jp/ssp-kernel.html

既にDesignWaveマガジン付属CQ_STARM用、R8C用、Interface付属RX62N用のツリーがアップされています。

今回はSTM32F4にポーティングする元となるツリーとして、CQ_STARM用をダウンロードしました。
CQ_STARMは、STマイクロのSTM32F103VBT6を使用したボートです。(多分このボード僕も持っていると思うのですが、積み基板ボックスを漁りましたが見つかりませんでした。変だなー・・・)
STM32F4-discovery(STM32F407VGT6)で動作させるには最も筋が良いでしょうね。

こんなのです。
http://www.cqpub.co.jp/dwm/Contents/0126/dwm012600520.pdf

TOPPERS/SSPはいくつかのディレクトリで構成されているのですが、アーキテクチャ別のディレクトリ(./arch)とターゲット別のディレクトリ(./target)があり、ポーティングは主にその中をいじれば良いようになっているようです。
今回はSTマイクロのCortex-M3用がベースなのでarch以下はいじらず、./target以下だけをいじっています。

主に周辺機能周りのレジスタとか、アドレスマッピング等はSTM32F1とSTM32F4とでは差分があり、STマイクロの仕様書を見ながら変更していきました。
それなりに試行錯誤もありまして、ソースがごちゃごちゃしたのでgithubに上げる際にソース整理しました。

STM32F4-discovery用TOPPERS/SSP(お試し)は以下のgithubのリポジトリで公開していますので、以下からダウンロード、ビルドしてお手持ちのSTM32F4-discoveryに焼き込めば動作するはずです。
https://github.com/yishii/toppers_ssp_stm32f4_discovery

電源投入すると、加速度センサー周辺の4 LEDは点灯状態になりますので動作したかわかりやすいかと思います。

具体的な改変内容はgithubのコミットログを御覧くださいませー。

なお、コンパイル方法ですが、Windows上で行います。
Cygwinを使用しています。また、Sourcery CodebenchのARMツールチェインをインストールしてパスを通しておきます。無償のLite editionのEABI ReleaseでOKです。
Cygwinは、DevelopmentのカテゴリをInstallにすれば必要な物は足りるはずです。

Cygwin : http://www.cygwin.com/
Sourcery Codebench : http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

あと、TeraTermのCygterm機能を使ってCygwinのシェルにアクセスしました(これは必須ではありません)。


実は当初、STM32F4の開発環境をUbuntu上に構築していたこともあり、TOPPERS/SSP関連の開発もUbuntuでやろうと思っていました。
ただ、提供されているTOPPERSのコンフィグレータ(CFG.EXE)はWindows用にビルドされていましたので、コンフィグレータのソースからビルドしてUbuntu上のビルドに組み込んでみたのですが、コンフィグレータ実行時にSIGSEGVが発生してしまいまして、落ちたタイミングでバックトレースするとBOOSTライブラリの奥深くで発生してるようで、コンフィグレータの仕様を理解して解析するのはめんどくさいのでWindowsに乗り換えました。^^;


まずは、githubからソース取得し、展開したらconfigureします。

./configure -T stm32f4_discovery_gcc

そしてmakeです。

make

ビルドに成功すると、「ssp.exe」というELF形式のバイナリを生成しますので、これをSTM32F4-discoveryにロードします。
OpenOCDを起動し、その後シェルから

arm-none-eabi-gdb ./ssp.exe
(gdb) tar extended-remote :3333
(gdb) load ssp.exe
(gdb) c

上記手順で実行開始します。
上記はsample1.cというサンプルコードが実行されます。

sample1.cの操作
シリアル入出力はRxD = PB7、TxD =PB6でボーレートは115200bpsになってます。UART-RS232(またはUSB)変換基板をそのポートに接続して使用して下さい。
マイコンボードの電源を入れると、TOPPERS/SSPのバナー(Copyright表示など)が出てきます。ここで、シリアルコンソールからのコマンド待受けしてますので、TeraTerm等からキーインします。

【タスク関連】--------------------------------
"1" : TASK1を選択
"2" : TASK2を選択
"3" : TASK3を選択
"a" : 選択したタスクを起床(act_tsk)
"e" : 選択したタスクの終了指示メッセージを投げる
"z" : 選択したタスクでCPU例外を発生させるメッセージ
【アラームハンドラ関連】----------------------
"b" : アラーム ALM1を設定(sta_alm)
"B" : アラーム ALM1を停止(stp_alm)
【サイクリックハンドラ関連】-------------------
"c" : サイクリックハンドラ CYC1を起動(sta_cyc)
"C" : サイクリックハンドラ CYC1を停止(stp_cyc)
【その他】-----------------------------------
"Q" : プログラム終了(ext_ker)
--------------------------------------------


なお、ROM/RAMサイズは変更してませんのでSTM32F1のままです。リンカスクリプト(cq_starm_*.ld)を変更するだけで対応できると思います。

※デバッグ環境の、OpenOCDのWindows用については「ねむいさんのぶろぐ」のものをそのまま使用させていただいてます。ありがとうございます。

今回はSTM32F4のブート処理の初期設定をいろいろ調べながら実験していく過程で、いろいろ勉強させていただきました。PIC24に移植してみたいと思っているのですが、PICはソースの公開の制限が大きいので、解決してからにしたいと思います。

ところでどうやら、先日僕にも、Raspberry Piの発送しましたメールが届きまして、間もなく届くのだと思います。7/Eオーダーでしたので長かったー!!
ひとまずここでSTM32F4は区切ってRaspberry Piで遊んでみたいです!

ARMでOS超入門 (ARMマイコン)
桑野 雅彦 岡田 好一 共著
CQ出版
売り上げランキング: 101688


タグ:uITRON TOPPERS
posted by いしいっち at 02:23| Comment(2) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2012年10月06日

Nexus 7買ってみました!

話題の? Nexus 7という7インチのタブレット端末を買ってみました〜。
元々日本で発売前も海外の輸入して買うとかいろいろ方法はあったみたいで、欲しいとは思っていたんですが、スマートフォン持ってるし、自宅ではノートPC使うから、タブレットの出番あるだろうか?という思いがありましてずっと買えずにいました。だけど19800円っていう値段を見てしまったので、衝動買いしちゃいました! ^^;

P1120528.JPG

持ってみると、なかなか軽いしいいかも〜。ちなみにGalaxy Nexus(4.65インチ画面のスマホ)と比較すると、画面見やすい!

早速通勤電車で座った時に使ってみました。電車内で使う端末はスマホで充分と思ってたんですが、ことドキュメント閲覧に関して、A4のページに文字がずらっと並んでるようなpdfファイルを読む場合などは、文字が小さすぎて読みづらいと思っていたのですが、Nexus 7では、そのような事もなく、非常に快適に資料を読むのに使えました!
別な端末になりますが、AmazonのKindle touchのような800×600の画面では文字が潰れてしまうような資料でもそうはならず、実用的に使えています。(まだ見たことはありませんが、Kindle Paperwhiteは解像度上がってるらしいので資料読むのとかによさそうですね…。)

P1120529.JPG

さて、とりあえずUSBポートを使って見ることにしました。USBポートから映像を取り出すMHLインターフェースがついている場合、以下のようなケーブルを介することでHDMI端子から映像出力を得ることができます。

IMG_20121006_073748-1.jpg

結果はダメでしたー。対応してないのね、残念。ハード的にもダメなのかなー?

次はUSBホストです。
以下のiBuffaloのケーブルを使用しました。



USBマウスを繋いでみたのですが、試してみるとアッサリ繋がりました!

ただ、ストレージデバイス(USBメモリーとか、SDカードリーダーとか)はそのままでは認識してくれません。
今回は、100円ショップで買ったSDカードリーダを使ってデジカメ画像を見ようとしたんですが、確かにそのままでは認識しませんでした。

IMG_20121005_225215.jpg

Google PlayからNexus Photo Viewerという無料アプリをインストールする事で、サクッと読み込み出来ました。便利便利!
(Galaxy Nexusと同様ですね)

Google Play : Nexus Photo Viewer
https://play.google.com/store/apps/details?id=com.homeysoft.nexususb.viewer&hl=ja

こんな感じ。
アプリはUSB Host APIでマスストレージデバイスを認識し、アプリ内に持たせたファイルシステムからアクセスしているんかな?と理解してます。アプリ内でメディアからのデータを取り出したり出来る作りです。デジカメ画像のプレビュー機能もあり、サクサク動作してくれたので快適でした。動画や音楽の対応もあるみたいですが、まだ試していません。

IMG_20121005_225307.jpg

Eye-Fiも持ってますが、これでサクッと取り込んだほうが手っ取り早くていいかなと思っちゃいました。




iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファロー (2011-11-01)
売り上げランキング: 165


usb dac 内蔵小型 パソコンスピーカー(25W+25W) KS-1HQM
株式会社クリプトン
売り上げランキング: 7322



posted by いしいっち at 08:39| Comment(0) | TrackBack(0) | Android利用関係 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。