昨年2013年の組込み総合技術展におけるプレゼンテーションの内容について「ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました」で簡単に触れました。今日は、この中でお話させて頂いたロジックアナライザを使ってジッタ計測を行ない、システムの安定性を検証する方法について述べたいと思います。現代の組み込みシステムでは、ソフトウェアがシステム制御の一部を担う事が非常に多くなりました。ソフトウェアで発生するジッタというのは、リアルタイムシステムを構築する上で必ず評価しなければならない項目です。現場でお仕事をしていると、意外にも「どうやって評価して良いのかわからない」、「機材がない」といった内容の話をよく聞きますが、ちょっとした工夫と道具で指標となるデータを簡単に得る事ができます。題材として用意したのは、7セグメントLEDが複数付いたデジタル時計です。このデジタル時計は、6桁の数値表示をソフトウェアで制御する設計になっています。シンクドライバは各桁共通になっており、ソースドライバを選択的に駆動しながら各桁の数値を順次表示する仕組みです。各桁の表示時間は、そのまま表示輝度に影響を与えますから、バラツキが大きすぎるのは問題です。それでは、このシステムをリアルタイム制御する場合について考えてみましょう。■計測システムの安定性を検証するにはデータが必要です。先ほどのシステムで、各桁の駆動時間間隔を調べることにします。Logicを愛用しています。先に述べたように、ソースドライバの駆動時間によって輝度にばらつきが出ることがわかっていますから、今回はソースドライバの各チャネルのタイミングを計測してリアルタイム性について確認を行います。以下に示すのが計測した結果です。言ってもこれではわかりませんよね。良さそうに見えますが、これで「良し」というわけにはいきません。先に示した膨大な量の計測結果に、処理遅延が発生していない事をこれらのデータで判別する事は出来ません。この計測結果からデータを整理抽出して欲しいデータを得るのがこれからの作業です。■整理それでは先ほど得た計測結果を整理して欲しい情報を抽出してみます。Logicのアプリケーションは、データをCSVにエクスポートする機能が付いています。この機能を使って計測データをCSVに変換します。変換するのかというと、後でシェルで自分の都合に合わせて加工するためです。エクスポートしたデータは、イベントが発生した時間と、その時の各チャネルの信号状態が記述された形式になっています。このまとまったデータから各チャネルのOnの状態だけを抽出してみましょう。以下のようなスクリプトを書けば、簡単にチャネル毎のデータに分割できます。先のデータを使ってチャネル0のOnの状態だけを抽出したファイルは以下のようになります。このデータは、まさにOnになった瞬間のリストで、後から述べる方法を使うことで、処理のバラツキを知ることができます。■工夫ここまでの作業で、各桁のピンの状態がOnになる瞬間の時刻の羅列を得ることができました。今回の題材では基準となるクロックが外部に存在しません。そこで、今回は処理のバラツキについて、前後のイベントの間隔で見ることにしました。計測したデータの分析にはScilabを用いると便利です。基本となる操作は、ファイルになったデータを読み込む事と、前後のイベントの間隔を抽出する事で、以下に示すたった二つの記述で実行できます。一行目でデータを読み込み、二行目で各値の差分を抽出します。この操作を行ったデータを可視化すると、以下のようなグラフが得られます。この可視化されたデータは、ドライバの特定ピンがOnになった瞬間のイベント間隔のバラツキを時間軸方向に見たものです。これでは望んでいるリアルタイム性が確保できているのか判断しづらいので、異なる表現のデータも得てみましょう。上記で示したScilab用の記述は、時間軸方向に並べられたイベント差分データを、単にヒストグラムに展開するものです。何か特別な加工をしているわけではありませんが、データの表現方法を変えるだけで、ずいぶんとわかりやすくなりました。求め、システムが十分に安定したリアルタイム性を有しているのかどうかを判定します。■まとめ今回使用したのは、安価なロジックアナライザとLinux環境のみです。高価な専用機器を購入しなくても、工夫次第で今まで見ることの出来なかったシステムの性能を計測し把握できます。いったちょっとした工夫で今までと違う結果を得られるのが、組み込みシステムの面白いところなのかもしれません。■玩具ちょっと楽しくしたい場合、いろんなシチュエーションのデータを使ってアニメーションgifなどにすると面白いです。組込み総合技術展のプレゼンテーションでお見せしたアニメーションは、まさに上記で示した作業を経て作りました。手間が・・・かかってないか。■ダウンロード今回の「ロジックアナライザを使ってジッタ計測を行ない、システムの安定性を検証する」を実際に体験してみたい方のために、データ一式をダウンロードできるようにしました。こちらからダウンロード無保証です。上記内容に関しての無断転載は御遠慮下さい。(Atom)自己紹介shinta基板が大好きな組み込み系エンジニア。電気図面を描いてPCB上に美しく配線できた時に何とも言えない快感を覚える。ソフトウェアとドライバが一式になったパッケージをダウンロードします。インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。勢いよく「改良しました!」と宣言したh8writeですが、やっぱり書き込みに失敗するという事がわかりました。そもそも真の原因を掴めないまま改良したと言っても、何を改良したのか意味がわかりません。自分でもそんな突っ込みを入れたくなるのですが、その日はグ...システムにおけるレイテンシーとスループットの話題レイテンシーとは、あるシステムに何らかの入力を与え、それに対応する何らかの出力が出てくるまでの時間(遅延量)を指します。ある処理の実行を指令してから実際の結果が得られるまでに250ミリ秒かかったとすると、それは250ミリ秒のレイテンシーを持つシステムという事になります。放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。アップデートしました。このアップデートにより、以下の動画で示すような長い曲でも難なく再生させる事ができるようになりました。mkIIは便利なのですがオンフィールドで書き換えるには不便ですし、ユーザに書き変えを頼むわけにもいきません。Atmelが公開しているアプリケーションノートAVR109に自己プログラミングがありましたので試してみました。LPC824を使ったサウンドモジュールMicroSoundModuleを開発していました。このサウンドモジュールは、コマンドを受け取って色々な再生を行うもので、当初はこのコマンド処理部分の実装にNT-Shellを用いる計画でした。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。猫も杓子もIoTと皆さんが仰るので、その声が大きくなればなるほど自分は遠ざかる方向で生きていたのですが、そうすると完全に煙に巻かれたお爺さんのようになりまして、今は世の中が進んでおるんじゃのぉと言うだけの人です。moduleにブートローダを載せる(AVR109対応)随分前に対応しようと思い立っていたAVR109にようやく対応させた。以前やった時にうまく書けなかったのはボードのクロック精度が原因。ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。エコーバックのテストでやたらと文字が化ける。